本發(fā)明涉及人工神經(jīng)網(wǎng)絡(luò)處理技術(shù)領(lǐng)域,更具體地涉及一種人工神經(jīng)網(wǎng)絡(luò)壓縮編碼裝置和方法,尤其是涉及執(zhí)行人工神經(jīng)網(wǎng)絡(luò)算法方法的執(zhí)行單元或包含這些執(zhí)行單元的設(shè)備,以及多層人工神經(jīng)網(wǎng)絡(luò)運(yùn)算、反向傳播訓(xùn)練算法及其壓縮編碼的裝置和方法的執(zhí)行單元或包括這些執(zhí)行單元的設(shè)備。
背景技術(shù):
多層人工神經(jīng)網(wǎng)絡(luò)被廣泛應(yīng)用于模式識(shí)別、圖像處理、函數(shù)逼近和優(yōu)化計(jì)算等領(lǐng)域。特別是近年來(lái)由于反向傳播訓(xùn)練算法,以及預(yù)訓(xùn)練算法的研究不斷深入,多層人工神經(jīng)網(wǎng)絡(luò)由于其較高的識(shí)別準(zhǔn)確度和較好的可并行性,受到學(xué)術(shù)界和工業(yè)界越來(lái)越廣泛的關(guān)注。
隨著人工神經(jīng)網(wǎng)絡(luò)計(jì)算量和訪存量的急劇增大,現(xiàn)有技術(shù)中通常采用通用處理器來(lái)對(duì)多層人工神經(jīng)網(wǎng)絡(luò)運(yùn)算、訓(xùn)練算法及其壓縮編碼進(jìn)行處理,通過(guò)使用通用寄存器堆和通用功能部件執(zhí)行通用指令來(lái)支持上述算法。采用通用處理器的缺點(diǎn)之一是單個(gè)通用處理器的運(yùn)算性能較低,無(wú)法滿足通常的多層人工神經(jīng)網(wǎng)絡(luò)運(yùn)算的性能需求。而多個(gè)通用處理器并行執(zhí)行時(shí),通用處理器之間相互通訊又成為了性能瓶頸;此外,通用處理器需要把多層人工神經(jīng)網(wǎng)絡(luò)運(yùn)算譯碼成一長(zhǎng)列運(yùn)算及訪存指令序列,處理器前端譯碼帶來(lái)了較大的功耗開(kāi)銷(xiāo)。另一種支持多層人工神經(jīng)網(wǎng)絡(luò)運(yùn)算、訓(xùn)練算法及其壓縮編碼的已知方法是使用圖形處理器(gpu)。該方法通過(guò)使用通用寄存器堆和通用流處理單元執(zhí)行通用simd指令來(lái)支持上述算法。由于gpu是專門(mén)用來(lái)執(zhí)行圖形圖像運(yùn)算以及科學(xué)計(jì)算的設(shè)備,沒(méi)有對(duì)多層人工神經(jīng)網(wǎng)絡(luò)運(yùn)算的專門(mén)支持,仍然需要大量的前端譯碼工作才能執(zhí)行多層人工神經(jīng)網(wǎng)絡(luò)運(yùn)算,帶來(lái)了大量的額外開(kāi)銷(xiāo)。另外gpu只有較小的片上緩 存,多層人工神經(jīng)網(wǎng)絡(luò)的模型數(shù)據(jù)(權(quán)值)需要反復(fù)從片外搬運(yùn),片外帶寬成為了主要性能瓶頸,同時(shí)帶來(lái)了巨大的功耗開(kāi)銷(xiāo)。
技術(shù)實(shí)現(xiàn)要素:
針對(duì)上述現(xiàn)有技術(shù)的不足,本發(fā)明的目的在于提供一種人工神經(jīng)網(wǎng)絡(luò)壓縮編碼裝置和方法。
為了實(shí)現(xiàn)上述目的,作為本發(fā)明的一個(gè)方面,本發(fā)明提出了一種人工神經(jīng)網(wǎng)絡(luò)壓縮編碼裝置,包括:
內(nèi)存接口單元,用于輸入數(shù)據(jù)和指令;
指令緩存,用于對(duì)指令進(jìn)行緩存;
控制器單元,用于從所述指令緩存中讀取指令,并將其譯碼成運(yùn)算單元的指令;以及
運(yùn)算單元,用于根據(jù)所述控制器單元的指令對(duì)來(lái)自所述內(nèi)存接口單元的數(shù)據(jù)執(zhí)行相應(yīng)的運(yùn)算;所述運(yùn)算單元主要執(zhí)行三步運(yùn)算,第一步是將輸入的神經(jīng)元和權(quán)值數(shù)據(jù)相乘;第二步執(zhí)行加法樹(shù)運(yùn)算,用于將第一步處理后的加權(quán)輸出神經(jīng)元通過(guò)加法樹(shù)逐級(jí)相加,或者將輸出神經(jīng)元通過(guò)和偏置相加得到加偏置輸出神經(jīng)元;第三步執(zhí)行激活函數(shù)運(yùn)算,得到最終輸出神經(jīng)元。
其中,所述運(yùn)算單元中對(duì)于輸入的權(quán)值數(shù)據(jù)表示如下:
若是正向運(yùn)算過(guò)程,則所述權(quán)值數(shù)據(jù)w1由k比特?cái)?shù)據(jù)表示,其中包括1比特符號(hào)位、m比特控制位以及n比特?cái)?shù)據(jù)位,即k=1+m+n;其中k、m、n均為自然數(shù);
若是反向運(yùn)算過(guò)程,則所述權(quán)值數(shù)據(jù)w2使用浮點(diǎn)數(shù)表示。
其中,所述w1是從w2轉(zhuǎn)換而來(lái),其中反向運(yùn)算過(guò)程的權(quán)值數(shù)據(jù)w2具有l(wèi)en位有效數(shù)字,正向運(yùn)算過(guò)程的權(quán)值數(shù)據(jù)w1中的n表示w1中的有效數(shù)字位數(shù),n≤len;控制位m用于指定w1的有效數(shù)字在原權(quán)值數(shù)據(jù)中的起始位置。
作為本發(fā)明的另一個(gè)方面,本發(fā)明還提出了一種采用如上所述的用于壓縮編碼的人工神經(jīng)網(wǎng)絡(luò)計(jì)算裝置進(jìn)行的人工神經(jīng)網(wǎng)絡(luò)壓縮編碼方法,包括以下步驟;
步驟1:控制器單元從指令緩存中讀取一條多層人工神經(jīng)網(wǎng)絡(luò)運(yùn)算simd指令;
步驟2:所述控制器單元將所述指令譯碼成各個(gè)功能部件的微指令,包括輸入神經(jīng)元緩存是否讀寫(xiě)以及讀寫(xiě)次數(shù)、輸出神經(jīng)元緩存是否讀寫(xiě)以及讀寫(xiě)次數(shù)、權(quán)值神經(jīng)元緩存是否讀寫(xiě)以及讀寫(xiě)次數(shù)、運(yùn)算單元各個(gè)階段執(zhí)行何種操作;
步驟3:運(yùn)算單元得到從輸入神經(jīng)元緩存和權(quán)值緩存的輸入向量,根據(jù)階段一的操作碼,決定是否執(zhí)行向量乘法運(yùn)算,如果執(zhí)行就將結(jié)果發(fā)送到下一階段,否則直接將輸入發(fā)送到下一階段;
步驟4:所述運(yùn)算單元根據(jù)階段二的操作碼,決定是否進(jìn)行加法樹(shù)運(yùn)算,如果執(zhí)行就將結(jié)果發(fā)送到下一階段,否則直接將輸入發(fā)送到下一階段;
步驟5:所述運(yùn)算單元根據(jù)階段三的操作碼,決定是否進(jìn)行激活函數(shù)的運(yùn)算,如果執(zhí)行就將結(jié)果發(fā)送給輸出神經(jīng)元緩存。
作為本發(fā)明的再一個(gè)方面,本發(fā)明還提出了一種采用如上所述的用于壓縮編碼的人工神經(jīng)網(wǎng)絡(luò)計(jì)算裝置進(jìn)行的人工神經(jīng)網(wǎng)絡(luò)反向傳播訓(xùn)練的方法,包括以下步驟;
步驟1:控制器單元從指令緩存中讀取一條多層人工神經(jīng)網(wǎng)絡(luò)訓(xùn)練算法simd指令;
步驟2:所述控制器單元將所述指令譯碼成各個(gè)運(yùn)算單元的微指令,包括輸入神經(jīng)元緩存是否讀寫(xiě)以及讀寫(xiě)次數(shù)、輸出神經(jīng)元緩存是否讀寫(xiě)以及讀寫(xiě)次數(shù)、權(quán)值神經(jīng)元緩存是否讀寫(xiě)以及讀寫(xiě)次數(shù)、運(yùn)算單元各個(gè)階段執(zhí)行何種操作;
步驟3:運(yùn)算單元得到從輸入神經(jīng)元緩存和權(quán)值緩存的輸入向量,根據(jù)階段一的操作碼,決定是否執(zhí)行向量乘法運(yùn)算,如果執(zhí)行就將結(jié)果發(fā)送到下一階段,否則直接將輸入發(fā)送到下一階段;
步驟4:所述運(yùn)算單元根據(jù)階段二的操作碼,決定是否進(jìn)行加法樹(shù)運(yùn)算、向量加法運(yùn)算或權(quán)值更新運(yùn)算。
作為本發(fā)明的還一個(gè)方面,本發(fā)明還提出了一種采用如上所述的用于壓縮編碼的人工神經(jīng)網(wǎng)絡(luò)計(jì)算裝置進(jìn)行的人工神經(jīng)網(wǎng)絡(luò)計(jì)算方法,包括以下步驟:
步驟1:將存儲(chǔ)的浮點(diǎn)權(quán)值w1轉(zhuǎn)換成位數(shù)較少的表示w2;
步驟2:使用w2進(jìn)行正向運(yùn)算;
步驟3:根據(jù)正向運(yùn)算得到的誤差結(jié)果進(jìn)行反向運(yùn)算更新w1;
步驟4:迭代執(zhí)行上述三個(gè)步驟,直到得到所需要的模型。
基于上述技術(shù)方案可知,本發(fā)明提供了一種用于執(zhí)行多層人工神經(jīng)網(wǎng)絡(luò)運(yùn)算、反向傳播訓(xùn)練算法及其壓縮編碼的裝置和方法,提高了對(duì)于多層人工神經(jīng)網(wǎng)絡(luò)運(yùn)算及其反向傳播訓(xùn)練算法的性能,同時(shí)降低了權(quán)值數(shù)據(jù)表示的位數(shù),以達(dá)到壓縮編碼的目的。本發(fā)明不僅能有效減小人工神經(jīng)網(wǎng)絡(luò)的模型大小,提高人工神經(jīng)網(wǎng)絡(luò)的數(shù)據(jù)處理速度,而且能有效降低功耗,提高資源利用率;相對(duì)于現(xiàn)有的技術(shù),具有顯著的性能和功耗改善,并能大幅壓縮權(quán)值數(shù)據(jù)。
附圖說(shuō)明
圖1是根據(jù)本發(fā)明一實(shí)施例的神經(jīng)網(wǎng)絡(luò)正向運(yùn)算的示例框圖;
圖2是根據(jù)本發(fā)明一實(shí)施例的神經(jīng)網(wǎng)絡(luò)反向訓(xùn)練算法的示例框圖;
圖3是根據(jù)本發(fā)明一實(shí)施例的總體結(jié)構(gòu)的示例框圖;
圖4是根據(jù)本發(fā)明一實(shí)施例的加速器芯片結(jié)構(gòu)的示例框圖;
圖5是根據(jù)本發(fā)明一實(shí)施例的多層人工神經(jīng)網(wǎng)絡(luò)的運(yùn)算流程圖;
圖6是根據(jù)本發(fā)明一實(shí)施例的多層人工神經(jīng)網(wǎng)絡(luò)反向傳播訓(xùn)練算法的流程圖;
圖7是根據(jù)本發(fā)明一實(shí)施例的多層人工神經(jīng)網(wǎng)絡(luò)壓縮編碼算法的流程圖。
具體實(shí)施方式
將參考以下所討論的細(xì)節(jié)來(lái)描述本發(fā)明的各實(shí)施例和方面,并且所附附圖將說(shuō)明各實(shí)施例。下列描述和附圖是用于說(shuō)明本發(fā)明的,并且不應(yīng)當(dāng)被解釋為限制本發(fā)明。描述許多具體的細(xì)節(jié)以提供對(duì)本發(fā)明的各實(shí)施例的透徹理解。然而,在某些實(shí)例中,不描述公知的或?qū)こ5募?xì)節(jié),以便提供本發(fā)明的實(shí)施例的簡(jiǎn)潔的討論。
說(shuō)明書(shū)中提到的“一個(gè)實(shí)施例”或“一實(shí)施例”意思是結(jié)合實(shí)施例所描述的特定的特征、結(jié)構(gòu)或特性能夠被包括在本發(fā)明的至少一個(gè)實(shí)施例中。在本說(shuō)明書(shū)的多處出現(xiàn)的短語(yǔ)“在一個(gè)實(shí)施例中”不一定全部都指同一個(gè)實(shí)施例。
本發(fā)明涉及的多層人工神經(jīng)網(wǎng)絡(luò)運(yùn)算及其壓縮編碼,包括兩層或者兩層以上的多個(gè)神經(jīng)元。對(duì)于每一層來(lái)說(shuō),輸入神經(jīng)元向量首先和權(quán)值向量進(jìn)行點(diǎn)積運(yùn)算,結(jié)果經(jīng)過(guò)激活函數(shù)得到輸出神經(jīng)元。其中激活函數(shù)可以是sigmoid函數(shù)、tanh函數(shù)、relu函數(shù)和softmax函數(shù)等。此外,多層人工神經(jīng)網(wǎng)絡(luò)的訓(xùn)練算法包括正向傳播、反向傳播和權(quán)值更新等步驟。
在正向運(yùn)算過(guò)程中,神經(jīng)網(wǎng)絡(luò)權(quán)值w1由k比特?cái)?shù)據(jù)表示,其中包括1比特符號(hào)位、m比特控制位以及n比特?cái)?shù)據(jù)位(k=1+m+n)。
反向運(yùn)算過(guò)程中的權(quán)值w2使用浮點(diǎn)數(shù)表示。
正向運(yùn)算過(guò)程中使用的權(quán)值數(shù)據(jù)表示方法,從反向運(yùn)算過(guò)程使用的浮點(diǎn)權(quán)值表示(len位有效數(shù)字)轉(zhuǎn)換而來(lái),數(shù)據(jù)位存儲(chǔ)原權(quán)值數(shù)據(jù)中的n位有效數(shù)字,n小于等于len??刂莆挥糜谥付〝?shù)據(jù)位在原有效數(shù)字中的起始位置;由于正向運(yùn)算過(guò)程中使用的權(quán)值數(shù)據(jù)表示方法所使用的總數(shù)據(jù)位數(shù)少于反向訓(xùn)練運(yùn)算過(guò)程中使用的權(quán)值表示的總數(shù)據(jù)位數(shù),從而可以達(dá)到壓縮編碼的作用。
本發(fā)明的用于執(zhí)行人工神經(jīng)網(wǎng)絡(luò)運(yùn)算、反向傳播訓(xùn)練算法及其壓縮編碼的人工神經(jīng)網(wǎng)絡(luò)壓縮編碼裝置,包括指令緩存單元、輸入神經(jīng)元緩存單元、權(quán)值緩存單元、控制單元、運(yùn)算單元、輸出神經(jīng)元緩存單元、內(nèi)存接口單元和直接內(nèi)存訪問(wèn)通道單元;
其中,指令緩存單元用于緩存指令;
輸入神經(jīng)元緩存單元用于緩存輸入神經(jīng)元數(shù)據(jù);
權(quán)值緩存單元用于緩存權(quán)值;
控制單元用于從指令緩存中讀取專用指令,并將其譯碼成微指令;
運(yùn)算單元用于接受從控制器單元發(fā)出的微指令并進(jìn)行算術(shù)邏輯運(yùn)算;
輸出神經(jīng)元緩存單元用于緩存輸出神經(jīng)元數(shù)據(jù);
內(nèi)存接口單元用于數(shù)據(jù)讀寫(xiě)通道;
直接內(nèi)存訪問(wèn)通道單元用于從內(nèi)存向各緩存中讀寫(xiě)數(shù)據(jù)。
上述指令緩存單元、輸入神經(jīng)元緩存單元、權(quán)值緩存單元和輸出神經(jīng)元緩存單元等中使用的緩存可以為ram。
在上述運(yùn)算單元中主要執(zhí)行三步運(yùn)算,第一步是將輸入的神經(jīng)元和權(quán)值數(shù)據(jù)相乘,表示如下:
將輸入神經(jīng)元(in)通過(guò)運(yùn)算(f)得到輸出神經(jīng)元(out),過(guò)程為:out=f(in)2
將輸入神經(jīng)元(in)通過(guò)和權(quán)值(w)相乘得到加權(quán)輸出神經(jīng)元(out),過(guò)程為:out=w*in;
第二步執(zhí)行加法樹(shù)運(yùn)算,用于將第一步處理后的加權(quán)輸出神經(jīng)元通過(guò)加法樹(shù)逐級(jí)相加,或者將輸出神經(jīng)元通過(guò)和偏置相加得到加偏置輸出神經(jīng)元,表示如下:
將輸出神經(jīng)元(in)通過(guò)和偏置(b)相加得到加偏置輸出神經(jīng)元(out),過(guò)程為:out=in+b;
第三步執(zhí)行激活函數(shù)運(yùn)算,得到最終輸出神經(jīng)元,表示如下:
將輸出神經(jīng)元(in)通過(guò)激活函數(shù)(active)運(yùn)算得到激活輸出神經(jīng)元(out),過(guò)程為:out=active(in),激活函數(shù)active可以是sigmoid函數(shù)、tanh函數(shù)、relu函數(shù)或softmax函數(shù)等;
將加權(quán)輸出神經(jīng)元(in)通過(guò)激活函數(shù)(active)運(yùn)算得到激活輸出神經(jīng)元(out),過(guò)程為:out=active(in);
將加偏置輸出神經(jīng)元(in)通過(guò)激活函數(shù)(active)運(yùn)算得到激活輸出神經(jīng)元(out),過(guò)程為:out=active(in)。
在執(zhí)行人工神經(jīng)網(wǎng)絡(luò)反向訓(xùn)練運(yùn)算時(shí),運(yùn)算過(guò)程表示如下:
將輸入梯度(g)通過(guò)加權(quán)運(yùn)算(f)得到輸出梯度(g’),過(guò)程為:g’=f(g);
將輸入梯度(g)通過(guò)更新運(yùn)算(update)得到權(quán)值改變(deltaw),過(guò)程為:deltaw=update(g);
將輸入權(quán)值(w)和權(quán)值改變(deltaw)相加得到輸出權(quán)值(w’),過(guò)程為:w’=w+deltaw;
將輸入梯度(g)通過(guò)更新運(yùn)算(update)得到偏置改變(deltab),過(guò)程為:deltab=update(g);
將輸入偏置(b)和偏置改變(deltab)相加得到輸出偏置(b’),過(guò)程為:b’=b+deltab;
其中,在執(zhí)行人工神經(jīng)網(wǎng)絡(luò)反向訓(xùn)練運(yùn)算時(shí),所有數(shù)據(jù)使用浮點(diǎn)數(shù)表示。
上述人工神經(jīng)網(wǎng)絡(luò)壓縮編碼裝置,包括可執(zhí)行卷積人工神經(jīng)網(wǎng)絡(luò)運(yùn)算的裝置、可執(zhí)行池化人工神經(jīng)網(wǎng)絡(luò)運(yùn)算的裝置、可執(zhí)行l(wèi)rn人工神經(jīng)網(wǎng)絡(luò)運(yùn)算的裝置及可執(zhí)行全連接人工神經(jīng)網(wǎng)絡(luò)運(yùn)算的裝置。
下面結(jié)合附圖和具體實(shí)施例對(duì)本發(fā)明的技術(shù)方案進(jìn)行進(jìn)一步的闡釋說(shuō)明。
圖3示出了根據(jù)本發(fā)明一實(shí)施例的總體結(jié)構(gòu)的示意性框圖。
i/o接口(1),用于i/o數(shù)據(jù)需要經(jīng)過(guò)cpu(3)發(fā)給加速器芯片,然后由加速器芯片(4)寫(xiě)入內(nèi)存,加速器芯片(4)需要的專用程序也是由cpu(3)傳輸?shù)郊铀倨餍酒?/p>
內(nèi)存(2),用于暫存多層人工神經(jīng)網(wǎng)絡(luò)模型和神經(jīng)元數(shù)據(jù),特別是當(dāng)全部模型無(wú)法在加速器片上緩存中放下時(shí)。
中央處理器cpu(3),用于進(jìn)行數(shù)據(jù)搬運(yùn)以及加速器芯片(4)啟動(dòng)停止等基本控制,作為加速器芯片(4)與外部控制的接口。
加速器芯片(4),用于執(zhí)行多層人工神經(jīng)網(wǎng)絡(luò)運(yùn)算及其反向傳播訓(xùn)練算法模塊,接受來(lái)自cpu(3)的數(shù)據(jù)和程序,執(zhí)行上述多層人工神經(jīng)網(wǎng)絡(luò)運(yùn)算及其反向傳播訓(xùn)練算法,加速器芯片(4)執(zhí)行結(jié)果將傳輸回cpu(3)。
通用系統(tǒng)架構(gòu)。將加速器作為cpu或者gpu的協(xié)處理器來(lái)執(zhí)行多層人工神經(jīng)網(wǎng)絡(luò)運(yùn)算及其反向傳播訓(xùn)練算法。
多加速器互聯(lián)的系統(tǒng)結(jié)構(gòu)。多個(gè)加速器可以通過(guò)pcie總線互聯(lián),以支持更大規(guī)模的多層人工神經(jīng)網(wǎng)絡(luò)運(yùn)算,可以共用同一個(gè)宿主cpu或者分別有自己的宿主cpu,可以共享內(nèi)存也可以每個(gè)加速器有各自的內(nèi)存。此外其互聯(lián)方式可以是任意互聯(lián)拓?fù)洹?/p>
圖4示出了根據(jù)本發(fā)明一實(shí)施例的加速器芯片結(jié)構(gòu)的示意性框圖。
其中輸入神經(jīng)元緩存(2)存儲(chǔ)一層運(yùn)算的輸入神經(jīng)元。
其中輸出神經(jīng)元緩存(5)存儲(chǔ)一層運(yùn)算的輸出神經(jīng)元。
權(quán)值緩存(8)存儲(chǔ)模型(權(quán)值)數(shù)據(jù)。
直接內(nèi)存訪問(wèn)通道(7)用于從內(nèi)存(6)向各ram中讀寫(xiě)數(shù)據(jù)。
指令緩存(1)用于儲(chǔ)存專用指令。
控制器單元(3)從指令緩存中讀取專用指令,并將其譯碼成各運(yùn)算單元的微指令。
運(yùn)算單元(4)用于執(zhí)行具體運(yùn)算。運(yùn)算單元主要被分為三個(gè)階段,第一階段執(zhí)行乘法運(yùn)算,用于將輸入的神經(jīng)元和權(quán)值數(shù)據(jù)相乘。第二階段執(zhí)行加法樹(shù)運(yùn)算,第一、二兩階段合起來(lái)完成了向量?jī)?nèi)積運(yùn)算。第三階段執(zhí)行激活函數(shù)運(yùn)算,激活函數(shù)可以是sigmoid函數(shù)、tanh函數(shù)等。第三階段得到輸出神經(jīng)元,寫(xiě)回輸出神經(jīng)元緩存。
圖5繪示出根據(jù)本發(fā)明一實(shí)施例的多層人工神經(jīng)網(wǎng)絡(luò)的運(yùn)算流程圖,圖1為所執(zhí)行運(yùn)算的一個(gè)示例。
步驟1:控制器從指令緩存中讀取一條多層人工神經(jīng)網(wǎng)絡(luò)運(yùn)算simd指令,例如多層感知機(jī)(mlp)指令、卷積指令、池化(pooling)指令等執(zhí)行專門(mén)神經(jīng)網(wǎng)絡(luò)算法的指令,或者矩陣乘指令、向量加指令、向量激活函數(shù)指令等用于執(zhí)行神經(jīng)網(wǎng)絡(luò)運(yùn)算的通用向量/矩陣指令。
步驟2:控制器將該指令譯碼成各個(gè)功能部件的微指令,包括輸入神經(jīng)元緩存是否讀寫(xiě)以及讀寫(xiě)次數(shù),輸出神經(jīng)元緩存是否讀寫(xiě)以及讀寫(xiě)次數(shù),權(quán)值神經(jīng)元緩存是否讀寫(xiě)以及讀寫(xiě)次數(shù),運(yùn)算單元各個(gè)階段執(zhí)行何種操作。
步驟3:運(yùn)算單元得到從輸入神經(jīng)元緩存和權(quán)值緩存的輸入向量,根據(jù)階段一的操作碼,決定是否執(zhí)行向量乘法運(yùn)算,并將結(jié)果發(fā)送到下一階段(如不進(jìn)行乘法運(yùn)算則直接將輸入發(fā)到下一階段)。
步驟4:運(yùn)算單元得到階段一的輸出,根據(jù)階段二的操作碼,決定是否進(jìn)行加法樹(shù)運(yùn)算,并將結(jié)果發(fā)送到下一階段(如不進(jìn)行加法樹(shù)操作,則直接將輸入發(fā)送到下一階段)。
步驟5:運(yùn)算單元得到階段二的輸出,根據(jù)階段三的操作碼,決定是否進(jìn)行激活函數(shù)的運(yùn)算,并將結(jié)果發(fā)送給輸出神經(jīng)元緩存。
圖6繪示出根據(jù)本發(fā)明一實(shí)施例的多層人工神經(jīng)網(wǎng)絡(luò)反向傳播訓(xùn)練算法的流程圖,圖2為所執(zhí)行運(yùn)算的一個(gè)示例。
步驟1:控制器從指令緩存中讀取一條多層人工神經(jīng)網(wǎng)絡(luò)訓(xùn)練算法simd指令。
步驟2:控制器將該指令譯碼成各個(gè)運(yùn)算單元的微指令,包括輸入神經(jīng)元緩存是否讀寫(xiě)以及讀寫(xiě)次數(shù),輸出神經(jīng)元緩存是否讀寫(xiě)以及讀寫(xiě)次數(shù),權(quán)值神經(jīng)元緩存是否讀寫(xiě)以及讀寫(xiě)次數(shù),運(yùn)算單元各個(gè)階段執(zhí)行何種操作。
步驟3:運(yùn)算單元得到從輸入神經(jīng)元緩存和權(quán)值緩存的輸入向量,根據(jù)階段一的操作碼,決定是否執(zhí)行向量乘法運(yùn)算,并將結(jié)果發(fā)送到下一階段(如不進(jìn)行乘法運(yùn)算則直接將輸入發(fā)到下一階段)。
步驟4:運(yùn)算單元得到階段一的輸出,根據(jù)階段二的操作碼,決定是否進(jìn)行加法樹(shù),向量加法或權(quán)值更新運(yùn)算。
圖7繪示出根據(jù)本發(fā)明一實(shí)施例的多層人工神經(jīng)網(wǎng)絡(luò)權(quán)值壓縮算法的流程圖。
步驟1:將存儲(chǔ)的浮點(diǎn)權(quán)值w1轉(zhuǎn)換成位數(shù)較少的表示w2。
步驟2:使用w2進(jìn)行正向運(yùn)算。
步驟3:根據(jù)正向運(yùn)算得到的誤差結(jié)果進(jìn)行反向運(yùn)算更新w1。
迭代執(zhí)行上述三個(gè)步驟,直到得到所需要的模型。
前面的附圖中所描繪的進(jìn)程或方法可通過(guò)包括硬件(例如,電路、專用邏輯等)、固件、軟件(例如,被具體化在非瞬態(tài)計(jì)算機(jī)可讀介質(zhì)上的軟件),或兩者的組合的處理邏輯來(lái)執(zhí)行。雖然上文按照某些順序操作描述了進(jìn)程或方法,但是,應(yīng)該理解,所描述的某些操作能以不同順序來(lái)執(zhí)行。此外,可并行地而非順序地執(zhí)行一些操作。
以上所述的具體實(shí)施例,對(duì)本發(fā)明的目的、技術(shù)方案和有益效果進(jìn)行了進(jìn)一步詳細(xì)說(shuō)明,應(yīng)理解的是,以上所述僅為本發(fā)明的具體實(shí)施例而已,并不用于限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。