本發(fā)明總體上涉及人工神經(jīng)網(wǎng)絡(luò),具體地涉及一種用于執(zhí)行人工神經(jīng)網(wǎng)絡(luò)全連接層的反向訓(xùn)練的裝置和方法。
背景技術(shù):
人工神經(jīng)網(wǎng)絡(luò)被廣泛應(yīng)用于模式識別,圖像處理,函數(shù)逼近和優(yōu)化計算等領(lǐng)域,人工網(wǎng)絡(luò)在近年來由于其較高的識別準確度和較好的可并行性,受到學(xué)術(shù)界和工業(yè)界越來越廣泛的關(guān)注。
人工神經(jīng)網(wǎng)絡(luò)全連接層是一種常見的人工神經(jīng)網(wǎng)絡(luò)類型,就像大腦里的神經(jīng)網(wǎng)絡(luò)一樣,人工神經(jīng)網(wǎng)絡(luò)全連接層由一些互相連接的節(jié)點組成,如圖1所示,每個圓圈表示一個神經(jīng)元,每個箭頭表示兩個神經(jīng)元之間的連接又被稱為權(quán)值,所有的輸入與輸出之間互相都有連接。
神經(jīng)元的計算公式可以簡單的描述成:
一種支持人工神經(jīng)網(wǎng)絡(luò)全連接層反向訓(xùn)練的已知方法是使用通用處理器。該方法通過使用通用寄存器堆和通用功能部件執(zhí)行通用指令來支持上述算法。該方法的缺點之一是單個通用處理器的運算性能較低,無法滿足通常的人工神經(jīng)網(wǎng)絡(luò)全連接層反向訓(xùn)練的性能需求。而多個通用處理器并行執(zhí)行時,通用處理器之間相互通信又成為了性能瓶頸。另外,通用處理器需要把人工神經(jīng)網(wǎng)絡(luò)全連接層反向運算譯碼成一長列運算及訪存指令序列,處理器前端譯碼帶來了較大的功耗開銷。
另一種支持人工神經(jīng)網(wǎng)絡(luò)全連接層反向訓(xùn)練的已知方法是使用圖形處理器(gpu)。該方法通過使用通用寄存器堆和通用流處理單元執(zhí)行通用simd指令來支持上述算法。由于gpu是專門用來執(zhí)行圖形圖像運算以及科學(xué)計算的設(shè)備,沒有對人工神經(jīng)網(wǎng)絡(luò)全連接層反向訓(xùn)練的專門支持,仍然需要大量的前端譯碼工作才能執(zhí)行人工神經(jīng)網(wǎng)絡(luò)全連接層的運算,帶來了大量的額外開銷。另外gpu只有較小的片上存儲,人工神經(jīng)網(wǎng)絡(luò)全連接層的模型數(shù)據(jù)(權(quán)值)需要反復(fù)從片外讀取,片外帶寬成為了主要性能瓶頸。另外,gpu只有較小的片上存儲,人工神經(jīng)網(wǎng)絡(luò)全連接層的模型數(shù)據(jù)(權(quán)值)需要反復(fù)從片外讀取,片外帶寬成為了主要性能瓶頸,同時帶來了巨大的功耗開銷。
技術(shù)實現(xiàn)要素:
本發(fā)明的一個方面提供了一種用于執(zhí)行人工神經(jīng)網(wǎng)絡(luò)全連接層反向訓(xùn)練的裝置,包括指令存儲單元、控制器單元、數(shù)據(jù)訪問單元、互連模塊、主運算模塊、多個從運算模塊,其中:
指令存儲單元用于存儲指令;
控制器單元用于從指令存儲單元讀取指令,并將該指令譯碼成控制互連模塊、主運算模塊、以及所述多個從運算模塊行為的控制信號;
數(shù)據(jù)訪問單元執(zhí)行外部地址空間與所述裝置之間的數(shù)據(jù)或指令讀寫操作;
在每層人工神經(jīng)網(wǎng)絡(luò)反向訓(xùn)練開始計算的階段,主運算模塊通過互連模塊向所有的從運算模塊傳輸本層的輸入梯度向量;
每個從運算模塊計算輸入梯度向量中相應(yīng)的部分標量元素與權(quán)值矩陣的對應(yīng)列的乘積,得到輸出梯度向量部分和;
在從運算模塊的計算過程完成后,互連模塊逐級將各從運算模塊的輸出梯度向量部分和拼接得到本層的輸出梯度向量;
主運算模塊在每一層的計算過程中,利用本層的輸出梯度向量完成后續(xù)計算。
本發(fā)明的另一個方面提供了一種使用上述裝置執(zhí)行單層人工神經(jīng) 網(wǎng)絡(luò)全連接層反向訓(xùn)練的方法。
本發(fā)明的另一方面提供了一種使用上述裝置執(zhí)行多層人工神經(jīng)網(wǎng)絡(luò)全連接層反向訓(xùn)練的方法。
本發(fā)明可以應(yīng)用于以下(包括但不限于)場景中:數(shù)據(jù)處理、機器人、電腦、打印機、掃描儀、電話、平板電腦、智能終端、手機、行車記錄儀、導(dǎo)航儀、傳感器、攝像頭、云端服務(wù)器、相機、攝像機、投影儀、手表、耳機、移動存儲、可穿戴設(shè)備等各類電子產(chǎn)品;飛機、輪船、車輛等各類交通工具;電視、空調(diào)、微波爐、冰箱、電飯煲、加濕器、洗衣機、電燈、燃氣灶、油煙機等各類家用電器;以及包括核磁共振儀、b超、心電圖儀等各類醫(yī)療設(shè)備。
附圖說明
為了更完整地理解本發(fā)明及其優(yōu)勢,現(xiàn)在將參考結(jié)合附圖的以下描述,其中:
圖1示出了人工神經(jīng)網(wǎng)絡(luò)全連接層的結(jié)構(gòu)圖。
圖2示出了根據(jù)本發(fā)明實施例的用于執(zhí)行人工神經(jīng)網(wǎng)絡(luò)全連接層反向訓(xùn)練的裝置的整體結(jié)構(gòu)的示例框圖。
圖3示意性示出了根據(jù)本發(fā)明實施例的用于執(zhí)行人工神經(jīng)網(wǎng)絡(luò)全連接層反向訓(xùn)練的裝置中h樹模塊(互連模塊的一種實施方式)的結(jié)構(gòu)。
圖4示出了根據(jù)本發(fā)明實施例的用于執(zhí)行人工神經(jīng)網(wǎng)絡(luò)全連接層反向訓(xùn)練的裝置中主運算模塊結(jié)構(gòu)的示例框圖。
圖5示出了根據(jù)本發(fā)明實施例的用于執(zhí)行人工神經(jīng)網(wǎng)絡(luò)全連接層反向訓(xùn)練的裝置中從運算模塊結(jié)構(gòu)的示例框圖。
圖6示出了根據(jù)本發(fā)明實施例的人工神經(jīng)網(wǎng)絡(luò)全連接層反向訓(xùn)練過程的示例框圖。
圖7示出了根據(jù)本發(fā)明實施例的單層人工神經(jīng)網(wǎng)絡(luò)全連接層反向訓(xùn)練的流程圖。
在所有附圖中,相同的裝置、部件、單元等使用相同的附圖標記 來表示。
具體實施方式
根據(jù)結(jié)合附圖對本發(fā)明示例性實施例的以下詳細描述,本發(fā)明的其它方面、優(yōu)勢和突出特征對于本領(lǐng)域技術(shù)人員將變得顯而易見。
在本發(fā)明中,術(shù)語“包括”和“含有”及其派生詞意為包括而非限制;術(shù)語“或”是包含性的,意為和/或。
在本說明書中,下述用于描述本發(fā)明原理的各種實施例只是說明,不應(yīng)該以任何方式解釋為限制發(fā)明的范圍。參照附圖的下述描述用于幫助全面理解由權(quán)利要求及其等同物限定的本發(fā)明的示例性實施例。下述描述包括多種具體細節(jié)來幫助理解,但這些細節(jié)應(yīng)認為僅僅是示例性的。因此,本領(lǐng)域普通技術(shù)人員應(yīng)認識到,在不背離本發(fā)明的范圍和精神的情況下,可以對本文中描述的實施例進行多種改變和修改。此外,為了清楚和簡潔起見,省略了公知功能和結(jié)構(gòu)的描述。此外,貫穿附圖,相同參考數(shù)字用于相似功能和操作。
根據(jù)本發(fā)明實施例的人工神經(jīng)網(wǎng)絡(luò)全連接層的反向訓(xùn)練,對于每一層來說,首先對輸入梯度向量進行加權(quán)求和計算出本層的輸出梯度向量。該輸出梯度向量乘以下一層在正向運算時的激活函數(shù)的導(dǎo)數(shù)值可以得到下一層的輸入梯度向量。將輸入梯度向量與正向運算時的輸入神經(jīng)元對位相乘得到本層權(quán)值的梯度,然后可以根據(jù)所得到的本層權(quán)值的梯度來更新本層的權(quán)值。
圖2示出了根據(jù)本發(fā)明實施例的用于執(zhí)行人工神經(jīng)網(wǎng)絡(luò)全連接層反向訓(xùn)練的裝置的整體結(jié)構(gòu)的示例框圖。如圖2所示,該裝置包括指令存儲單元1、控制器單元2、數(shù)據(jù)訪問單元3、互連模塊4、主運算模塊5和多個從運算模塊6。指令存儲單元1、控制器單元2、數(shù)據(jù)訪問單元3、互連模塊4、主運算模塊5和從運算模塊6均可以通過硬件電路(例如包括但不限于fpga、cgra、專用集成電路asic、模擬電路和憶阻器等)實現(xiàn)。
指令存儲單元1通過數(shù)據(jù)訪問單元3讀入指令并存儲讀入的指令。
控制器單元2從指令存儲單元1中讀取指令,將指令譯成控制其他模塊行為的控制信號并發(fā)送給其他模塊如數(shù)據(jù)訪問單元3、主運算模塊5和從運算模塊6等。
數(shù)據(jù)訪問單元3能夠訪問外部地址空間,直接向裝置內(nèi)部的各個存儲單元讀寫數(shù)據(jù),完成數(shù)據(jù)的加載和存儲。
互連模塊4用于連接主運算模塊和從運算模塊,可以實現(xiàn)成不同的互連拓撲(如樹狀結(jié)構(gòu)、環(huán)狀結(jié)構(gòu)、網(wǎng)格狀結(jié)構(gòu)、分級互連,總線結(jié)構(gòu)等)。
圖3示意性示出了互連模塊4的一種實施方式:h樹結(jié)構(gòu)?;ミB模塊4構(gòu)成主運算模塊5和多個從運算模塊6之間的數(shù)據(jù)通路,并具有h樹型的結(jié)構(gòu)。h樹是由多個節(jié)點構(gòu)成的二叉樹通路,每個節(jié)點將上游的數(shù)據(jù)同樣地發(fā)給下游的兩個節(jié)點,將下游的兩個節(jié)點返回的數(shù)據(jù)進行合并,并返回給上游的節(jié)點。例如,在人工神經(jīng)網(wǎng)絡(luò)全連接層反向運算過程中,下游兩個節(jié)點返回的向量會在當前節(jié)點相加成一個向量并返回給上游節(jié)點。在每層人工神經(jīng)網(wǎng)絡(luò)全連接層開始計算的階段,主運算模塊5內(nèi)的輸入梯度通過互連模塊4發(fā)送給各個從運算模塊6;當從運算模塊6的計算過程完成后,每個從運算模塊6輸出的輸出梯度向量部分和會在互連模塊4中逐級兩兩相加,即對所有輸出梯度向量部分和求和,作為最終的輸出梯度向量。
圖4示出了根據(jù)本發(fā)明實施例的用于執(zhí)行人工神經(jīng)網(wǎng)絡(luò)全連接層反向訓(xùn)練的裝置中主運算模塊5的結(jié)構(gòu)的示例框圖。如圖4所示,主運算模塊5包括第一運算單元51、第一數(shù)據(jù)依賴關(guān)系判斷單元52和第一神經(jīng)元存儲單元53。
第一神經(jīng)元存儲單元53用于存儲主運算模塊5在計算過程中用到的輸入數(shù)據(jù)和輸出數(shù)據(jù)。第一運算單元51完成主運算模塊的各種運算功能,包括人工神經(jīng)網(wǎng)絡(luò)全連接層反向訓(xùn)練中的權(quán)值更新梯度求和以及求導(dǎo)數(shù)等運算。第一數(shù)據(jù)依賴關(guān)系判斷單元52是第一運算單元51讀寫第一神經(jīng)元存儲單元53的端口,同時能夠保證對神經(jīng)元存儲單元53中數(shù)據(jù)的讀寫不存在一致性沖突。具體地,數(shù)據(jù)依賴關(guān)系判斷單元 52判斷尚未執(zhí)行的控制信號與正在執(zhí)行過程中的控制信號的數(shù)據(jù)之間是否存在依賴關(guān)系,如果不存在,允許該控制信號立即發(fā)射,否則需要等到該控制信號所依賴的所有控制信號全部執(zhí)行完成后該控制信號才允許被發(fā)射。例如,所有發(fā)往第一數(shù)據(jù)依賴關(guān)系單元52的控制信號都會被存入第一數(shù)據(jù)依賴關(guān)系單元52內(nèi)部的控制信號隊列里,在該隊列中,讀控制信號的讀取數(shù)據(jù)的范圍如果與隊列位置靠前的寫控制信號寫數(shù)據(jù)的范圍發(fā)生沖突,則該控制信號必須等到所依賴的寫控制信號被執(zhí)行后才能夠執(zhí)行。同時,第一數(shù)據(jù)依賴關(guān)系判斷單元52也負責(zé)將從第一神經(jīng)元存儲單元53讀取的輸入梯度向量通過互連模塊4發(fā)送給從運算模塊6,而從運算模塊6的輸出數(shù)據(jù)通過互連模塊4直接發(fā)送給運算單元51??刂破鲉卧?輸出的指令發(fā)送給第一運算單元51和第一依賴關(guān)系判斷單元52,來控制其行為。
圖5示出了根據(jù)本發(fā)明實施例的用于執(zhí)行人工神經(jīng)網(wǎng)絡(luò)全連接層反向訓(xùn)練的裝置中從運算模塊6的結(jié)構(gòu)的示例框圖。如圖5所示,每個從運算模塊6包括第二運算單元61、第二數(shù)據(jù)依賴關(guān)系判斷單元62、第二神經(jīng)元存儲單元63、權(quán)值存儲單元64和權(quán)值更新梯度存儲單元65。
第二運算單元61接收控制器單元2發(fā)出的控制信號并進行算數(shù)邏輯運算。
第二數(shù)據(jù)依賴關(guān)系判斷單元62負責(zé)計算過程中對第二神經(jīng)元存儲單元63的讀寫操作。第二數(shù)據(jù)依賴關(guān)系判斷單元62保證對第二神經(jīng)元存儲單元的讀寫不存在一致性沖突。具體地,第二數(shù)據(jù)依賴關(guān)系判斷單元62判斷尚未執(zhí)行的控制信號與正在執(zhí)行過程中的控制信號的數(shù)據(jù)之間是否存在依賴關(guān)系,如果不存在,允許該控制信號立即發(fā)射,否則需要等到該控制信號所依賴的所有控制信號全部執(zhí)行完成后該控制信號才允許被發(fā)射。例如,所有發(fā)往第二數(shù)據(jù)依賴關(guān)系單元62的控制信號都會被存入第二數(shù)據(jù)依賴關(guān)系單元62內(nèi)部的控制信號隊列里,在該隊列中,讀控制信號的讀取數(shù)據(jù)的范圍如果與隊列位置靠前的寫控制信號寫數(shù)據(jù)的范圍發(fā)生沖突,則該控制信號必須等到所依 賴的寫控制信號被執(zhí)行后才能夠執(zhí)行。
第二神經(jīng)元存儲單元63存儲輸入梯度向量數(shù)據(jù)中與該從運算模塊6相對應(yīng)的標量數(shù)據(jù)以及該從運算模塊6計算得到的輸出梯度向量部分和。
權(quán)值存儲單元64存儲該從運算模塊6在計算過程中需要的權(quán)值數(shù)據(jù)。每一個從運算模塊存儲權(quán)值矩陣中與該從運算模塊6所存儲的標量數(shù)據(jù)相對應(yīng)的列。
權(quán)值更新梯度存儲單元65存儲相應(yīng)從運算模塊在更新權(quán)值過程中需要的權(quán)值更新梯度數(shù)據(jù)。每一個從運算模塊6存儲的權(quán)值更新梯度數(shù)據(jù)與其存儲的權(quán)值數(shù)據(jù)相對應(yīng)。
從運算模塊6實現(xiàn)人工神經(jīng)網(wǎng)絡(luò)全連接層反向訓(xùn)練計算輸出梯度向量的過程中可以并行的前半部分以及權(quán)值的更新。反向訓(xùn)練計算輸出梯度向量的主要過程可以描述為out_gradient=w*in_gradient,其中權(quán)值矩陣w和輸入梯度向量in_gradient的乘法可以劃分為不相關(guān)的并行計算子任務(wù),out_gradient與in_gradient是列向量,每個從運算模塊計算in_gradient中相應(yīng)的部分標量元素與權(quán)值矩陣w對應(yīng)的列的乘積,得到的每個輸出向量都是最終結(jié)果的一個待累加的部分和,這些部分和在互連模塊4中拼接得到最后的結(jié)果。所以計算過程變成了并行的計算部分和后面拼接的過程。每個從運算模塊6計算出輸出梯度向量的部分和,所有的部分和在互連模塊4中完成拼接操作得到最后的輸出梯度向量。每個從運算模塊6還根據(jù)每層的輸出神經(jīng)元和輸出梯度計算權(quán)值梯度,以更新本從運算模塊6存儲的權(quán)值。正向運算和反向訓(xùn)練是人工神經(jīng)網(wǎng)絡(luò)算法的兩個主要過程,人工神經(jīng)網(wǎng)絡(luò)要訓(xùn)練(更新)網(wǎng)絡(luò)中的權(quán)值,首先需要計算輸入向量在當前權(quán)值構(gòu)成的網(wǎng)絡(luò)中的正向輸出,這是正向過程,然后根據(jù)輸出值與輸入向量本身的標注值之間的差值,反向逐層訓(xùn)練(更新)每層的權(quán)值。在正向計算過程中會保存每一層的輸出向量以及激活函數(shù)的導(dǎo)數(shù)值,這些數(shù)據(jù)是反向訓(xùn)練過程所需要的,所以在反向訓(xùn)練開始時,這些數(shù)據(jù)已經(jīng)保證存在。正向運算中每層的輸出值是反向運算開始時已有的數(shù)據(jù),可以 通過數(shù)據(jù)訪問單元3存儲在主運算模塊中并通過互連模塊發(fā)送給從運算模塊。主運算模塊5基于輸出梯度向量進行后續(xù)計算,例如將輸出梯度向量乘以正向運算時的激活函數(shù)的導(dǎo)數(shù)得到下一層的輸入梯度值。正向運算時的激活函數(shù)的導(dǎo)數(shù)是在反向運算開始時已有的數(shù)據(jù),可以通過數(shù)據(jù)訪存單元存儲在主運算模塊中。
根據(jù)本發(fā)明實施例,還提供了在前述裝置上執(zhí)行人工神經(jīng)網(wǎng)絡(luò)全連接層反向訓(xùn)練的指令集。指令集中包括config指令、compute指令、io指令、nop指令、jump指令和move指令,其中:
config指令在每層人工神經(jīng)網(wǎng)絡(luò)全連接層計算開始前配置當前層計算需要的各種常數(shù);
compute指令完成每層人工神經(jīng)網(wǎng)絡(luò)全連接層的算術(shù)邏輯計算;
io指令實現(xiàn)從外部地址空間讀入計算需要的輸入數(shù)據(jù)以及在計算完成后將數(shù)據(jù)存回至外部空間;
nop指令負責(zé)清空當前裝置內(nèi)部所有控制信號隊列中的控制信號,保證nop指令之前的所有控制信號執(zhí)行完畢。nop指令本身不包含任何操作;
jump指令負責(zé)控制器將要從指令存儲單元讀取的下一條指令地址的跳轉(zhuǎn),用來實現(xiàn)控制流的跳轉(zhuǎn);
move指令負責(zé)將裝置內(nèi)部地址空間某一地址的數(shù)據(jù)復(fù)制至裝置內(nèi)部地址空間的另一地址,該過程獨立于運算單元,在執(zhí)行過程中不占用運算單元的資源。
圖6示出了根據(jù)本發(fā)明實施例的人工神經(jīng)網(wǎng)絡(luò)全連接層反向訓(xùn)練過程的示例框圖。計算輸出梯度向量的過程為out_gradient=w*in_gradient,其中權(quán)值矩陣w和輸入梯度向量in_gradient的矩陣向量乘法可以劃分為不相關(guān)的并行計算子任務(wù),每個從運算模塊6計算出輸出梯度向量的部分和,所有的部分和在互連模塊4中完成拼接得到最后的輸出梯度向量。圖6中上一層的輸出梯度向量inputgradient[inputgradient0,inputgradient1,inputgradient2,inputgradient3]乘 以對應(yīng)的激活函數(shù)導(dǎo)數(shù)[f’(out0),f’(out1),f’(out2),f’(out3)]得到本層的輸入梯度向量in_gradient,再與權(quán)值矩陣w[w00,w10,w20,w30]相乘得到輸出梯度向量outputgradient[outputgradient0,outputgradient1,outputgradient2,outputgradient3]。
具體地,參考圖6所示,inputgradient(圖6中的[inputgradient0,…,inputgradient3])是第n+1層的輸出梯度向量,該向量首先要與正向運算過程中第n層的導(dǎo)數(shù)值(圖6中的[f’(out0),…,f’(out3)])相乘,得到第n層的輸入梯度向量,該過程在主運算模塊5中完成,由互連模塊4發(fā)往從運算模塊6,暫存在從運算模塊6的神經(jīng)元存儲單元63中。然后,輸入梯度向量與權(quán)值矩陣相乘得到第n層的輸出梯度向量。在這個過程中,第i個從運算模塊計算輸入梯度向量中第i個標量和權(quán)值矩陣中列向量[w_i0,…,w_in]的乘積,得到的輸出向量在互連模塊4中進行拼接操作得到最后的輸出梯度向量outputgradient(圖6中的[outputgradient0,…,outputgradient3])。
計算權(quán)值更新梯度的過程如下。設(shè)x是第n層的輸出神經(jīng)元向量,主模塊5將該輸出神經(jīng)元通過互連模塊4傳送給各個從運算模塊。主運算模塊5還將第n+1層的輸出梯度向量in_gradient通過互連模塊4傳送到各個從運算模塊6。每個從運算模塊6將輸出梯度向量in_gradient中與該從運算模塊6相對應(yīng)的標量數(shù)據(jù)與輸出神經(jīng)元向量x相乘,得到本從運算模塊的第n層的原始權(quán)值更新梯度向量dw_original。在算出所有層的原始權(quán)值更新梯度向量之后,為了限制權(quán)值的梯度范圍,主運算模塊可以對原始權(quán)值更新梯度進行處理。首先設(shè)定一個正的常數(shù)clip_gradient;然后計算所有層的原始權(quán)值更新梯度的平方和sumsq_diff,然后對sumsq_diff進行開方得到l2norm_diff。如果l2norm_diff大于clip_gradient,則得到一個縮放因子scale_factor=clip_gradient/l2norm_diff。所有的原始權(quán)值更新梯度dw_original都分別乘以這個縮放因子seale_factor,得到權(quán)值更新梯度dw。
在得到scale_dw后,使用w、dw和上一次更新權(quán)值時使用的權(quán)值更 新梯度dw’根據(jù)指令設(shè)置的學(xué)習(xí)率α,動量m和權(quán)重衰減系數(shù)η更新權(quán)值w。一種典型的更新權(quán)值的方式是:w=η*w+α*(dw+m*dw’)。另一種典型的更新權(quán)值的方式是:w=w+α*dw。
根據(jù)本發(fā)明的實施例,每個從運算模塊存儲w、dw和dw’中與該從運算模塊相對應(yīng)的列向量。
圖7是示出根據(jù)一個實施例的單層的人工神經(jīng)網(wǎng)絡(luò)全連接層反向訓(xùn)練流程圖。該流程圖描述利用本發(fā)明的裝置和指令集實現(xiàn)圖6所示的一種單層人工神經(jīng)網(wǎng)絡(luò)全連接層反向訓(xùn)練的過程。
在步驟s1,在指令存儲單元1的首地址處預(yù)先存入一條io指令。
在步驟s2,運算開始,控制器單元2從指令存儲單元1的首地址讀取該條io指令,根據(jù)譯出的控制信號,數(shù)據(jù)訪問單元3從外部地址空間讀取與該單層人工神經(jīng)網(wǎng)絡(luò)全連接層反向訓(xùn)練有關(guān)的所有指令,并將其存儲在指令存儲單元1中。
在步驟s3,控制器單元2接著從指令存儲單元讀入下一條io指令,根據(jù)譯出的控制信號,數(shù)據(jù)訪問單元3從外部地址空間讀取主運算模塊5需要的所有數(shù)據(jù)至主運算模塊5的第一神經(jīng)元存儲單元53,所述數(shù)據(jù)包括之前正向運算時的輸入神經(jīng)元和激活函數(shù)導(dǎo)數(shù)值以及輸入梯度向量。
在步驟s4,控制器單元2接著從指令存儲單元讀入下一條io指令,根據(jù)譯出的控制信號,數(shù)據(jù)訪問單元3從外部地址空間讀取從運算模塊6需要的所有權(quán)值數(shù)據(jù)和權(quán)值更新梯度數(shù)據(jù),并分別存儲到相應(yīng)的從運算模塊6的權(quán)值存儲單元64和權(quán)值更新梯度存儲單元65。
在步驟s5,控制器單元2接著從指令存儲單元讀入下一條config指令,第一和第二運算單元根據(jù)譯出的控制信號配置運算單元內(nèi)部寄存器的值,包括該層人工神經(jīng)網(wǎng)絡(luò)計算需要的各種常數(shù),本層計算的精度設(shè)置、更新權(quán)值時的學(xué)習(xí)率等。
在步驟s6,控制器單元2接著從指令存儲單元讀入下一條compute指令,根據(jù)譯出的控制信號,主運算模塊5通過互連模塊4將輸入梯度向量和正向運算時的輸入神經(jīng)元發(fā)給各從運算模塊6,所述輸入梯度向 量和正向運算時的輸入神經(jīng)元存至從運算模塊6的第二神經(jīng)元存儲單元63。
在步驟s7,根據(jù)compute指令譯出的控制信號,從運算模塊6的第二運算單元61從權(quán)值存儲單元64讀取權(quán)值向量(即該從運算模塊存儲的權(quán)值矩陣的部分列),完成權(quán)值向量和輸入梯度向量的向量乘標量運算,將輸出向量部分和通過互連模塊4返回;同時從運算模塊6將輸入梯度向量與輸入神經(jīng)元相乘,得到權(quán)值更新梯度存至權(quán)值更新梯度存儲單元65。
在步驟s8,在互連模塊4中,各從運算模塊6返回的輸出梯度部分和通過互連模塊的拼接操作得到完整的輸出梯度向量。
在步驟s9,主運算模塊5得到互連模塊4的返回值,根據(jù)compute指令譯出的控制信號,從第一神經(jīng)元存儲單元53讀取正向運算時的激活函數(shù)導(dǎo)數(shù)值,將導(dǎo)數(shù)值乘以返回的輸出向量,得到下一層反向訓(xùn)練的輸入梯度向量,將其寫回至第一神經(jīng)元存儲單元53。
在步驟s10,控制器單元2接著從指令存儲單元讀入下一條compute指令,根據(jù)譯出的控制信號,從運算模塊6從權(quán)值存儲單元64讀取權(quán)值w,從權(quán)值更新梯度存儲單元讀取本次的權(quán)值更新梯度dw和上一次更新權(quán)值使用的權(quán)值更新梯度dw’,根據(jù)指令設(shè)置的學(xué)習(xí)率α,動量m和權(quán)重衰減系數(shù)η更新權(quán)值w。
在步驟s11,控制器單元接著從指令存儲單元讀入下一條io指令,根據(jù)譯出的控制信號,數(shù)據(jù)訪問單元3將第一神經(jīng)元存儲單元53中的輸出梯度向量存至外部地址空間指定地址,運算結(jié)束。
對于多層的人工神經(jīng)網(wǎng)絡(luò)全連接層,其實現(xiàn)過程與單層人工神經(jīng)網(wǎng)絡(luò)全連接層類似,當上一層人工神經(jīng)網(wǎng)絡(luò)執(zhí)行完畢后,下一層的運算指令會將主運算模塊中計算出的輸出梯度向量作為下一層訓(xùn)練的輸入梯度向量進行如上的計算過程,指令中的權(quán)值地址和權(quán)值更新梯度地址也會變更至本層對應(yīng)的地址。
通過采用用于執(zhí)行人工神經(jīng)網(wǎng)絡(luò)全連接層反向訓(xùn)練的裝置和指令集,解決了cpu和gpu運算性能不足,前端譯碼開銷大的問題。有效提 高了對多層人工神經(jīng)網(wǎng)絡(luò)全連接層反向訓(xùn)練的支持。
通過采用針對多層人工神經(jīng)網(wǎng)絡(luò)全連接層反向訓(xùn)練的專用片上存儲,充分挖掘了輸入神經(jīng)元和權(quán)值數(shù)據(jù)的重用性,避免了反復(fù)向內(nèi)存讀取這些數(shù)據(jù),降低了內(nèi)存訪問帶寬,避免了內(nèi)存帶寬成為多層人工神經(jīng)網(wǎng)絡(luò)全連接層反向訓(xùn)練性能瓶頸的問題。
前面的附圖中所描繪的進程或方法可通過包括硬件(例如,電路、專用邏輯等)、固件、軟件(例如,被具體化在非瞬態(tài)計算機可讀介質(zhì)上的軟件),或兩者的組合的處理邏輯來執(zhí)行。雖然上文按照某些順序操作描述了進程或方法,但是,應(yīng)該理解,所描述的某些操作能以不同順序來執(zhí)行。此外,可并行地而非順序地執(zhí)行一些操作。
在前述的說明書中,參考其特定示例性實施例描述了本發(fā)明的各實施例。顯然,可對各實施例做出各種修改,而不背離所附權(quán)利要求所述的本發(fā)明的更廣泛的精神和范圍。相應(yīng)地,說明書和附圖應(yīng)當被認為是說明性的,而不是限制性的。