欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

支持離散數(shù)據(jù)表示的人工神經網絡反向訓練裝置和方法與流程

文檔序號:12306162閱讀:316來源:國知局
支持離散數(shù)據(jù)表示的人工神經網絡反向訓練裝置和方法與流程

本發(fā)明總體上涉及人工神經網絡,具體地涉及一種用于執(zhí)行人工神經網絡反向訓練的裝置和方法。本發(fā)明中的數(shù)據(jù)支持離散形式表示,并通過離散數(shù)據(jù)的位操作代替了連續(xù)數(shù)據(jù)的乘法等操作。



背景技術:

多層人工神經網絡被廣泛應用于模式識別、圖像處理、函數(shù)逼近和優(yōu)化計算等領域,多層人工網絡在近年來由于其較高的識別準確度和較好的可并行性,受到學術界和工業(yè)界越來越廣泛的關注。

一種支持多層人工神經網絡反向訓練的已知方法是使用通用處理器。該方法通過使用通用寄存器堆和通用功能部件執(zhí)行通用指令來支持上述算法。另一種支持多層人工神經網絡反向訓練的已知方法是使用圖形處理器(gpu)。該方法通過使用通用寄存器堆和通用流處理單元執(zhí)行通用simd指令來支持上述算法。

這兩種裝置在數(shù)據(jù)存儲和運算上都是使用的連續(xù)數(shù)據(jù)。連續(xù)數(shù)據(jù)的存儲需要較多的資源,例如一個32位的浮點數(shù)據(jù),就需要32個比特位來存儲該數(shù)據(jù)。在連續(xù)數(shù)據(jù)的運算上,所需要的加法器、乘法器等功能部件的實現(xiàn)也較為復雜。

離散數(shù)據(jù)表示指通過特定的數(shù)字來代替不連續(xù)的真實數(shù)據(jù)的存儲方式。例如,可以通過0、1、2、3四個數(shù)字分別代表真實數(shù)字-1、-1/8、1/8、1四個數(shù)字。通過這種類似于索引的表示方式,可以用形式上連續(xù)的數(shù)字代替不連續(xù)離散化的真實數(shù)據(jù)。目前的多層人工神經網絡在數(shù)據(jù)表示上的已知方法是用浮點數(shù)或者定點數(shù)這樣的連續(xù)數(shù)據(jù)表示。因為多層神經網絡權值的精度較高和數(shù)量較大,連續(xù)數(shù)據(jù)的表示方式帶來更大的存儲和功耗開銷。而通過離散數(shù)據(jù)表示的方式,可以通過 數(shù)據(jù)按位的異或、移位等運算代替連續(xù)數(shù)據(jù)的乘法運算。從而大大減少乘法器部件的數(shù)量。



技術實現(xiàn)要素:

本發(fā)明的一個方面提供了一種支持離散數(shù)據(jù)表示的用于執(zhí)行人工神經網絡反向訓練的裝置,包括指令緩存單元、控制器單元、數(shù)據(jù)訪問單元、互聯(lián)模塊、主運算模塊、多個從運算模塊,其中:

指令緩存單元用于緩存指令;

控制器單元用于從指令緩存單元讀取指令,并將該指令譯碼成控制互聯(lián)模塊、主運算模塊、以及從運算模塊行為的微指令;

數(shù)據(jù)訪問單元用于從內存向主運算模塊和各從運算模塊的相應數(shù)據(jù)緩存單元中寫離散表示或連續(xù)表示的數(shù)據(jù)或從所述數(shù)據(jù)緩存單元向內存讀離散表示或連續(xù)表示的數(shù)據(jù);

在每層神經網絡反向訓練開始計算的階段,主運算模塊通過互聯(lián)模塊向所有的從運算模塊傳輸本層的輸入梯度向量,在從運算模塊的計算過程完成后,互聯(lián)模塊逐級將各從運算模塊的輸出梯度向量部分和兩兩相加得到本層的輸出梯度向量;

主運算模塊用于在每一層的計算過程中,利用本層的輸出梯度向量完成后續(xù)計算,當輸入數(shù)據(jù)是離散數(shù)據(jù)與連續(xù)數(shù)據(jù)的混合數(shù)據(jù)時,從運算模塊針對不同離散數(shù)據(jù)采取預先設置的相應計算方式;以及

每個從運算模塊利用相同的輸入梯度向量和各自的離散或連續(xù)的權值數(shù)據(jù),并行地計算出相應的輸出梯度向量部分和,當輸入數(shù)據(jù)是離散數(shù)據(jù)與連續(xù)數(shù)據(jù)的混合數(shù)據(jù)時,從運算模塊針對不同離散數(shù)據(jù)采取預先設置的相應計算方式。

可選地,離散數(shù)據(jù)表示指用特定的離散數(shù)字代替真實的連續(xù)數(shù)據(jù)的表示方式。

可選地,多個從運算模塊利用相同的輸入梯度向量并行地計算出各自權值的梯度并使用計算得到的各自權值的梯度來更新各自的權值數(shù)據(jù)。

可選地,主運算模塊將每一層的輸出梯度向量與下一層的激活函數(shù)求導值對位相乘,作為下一層的輸入梯度向量。

可選地,互聯(lián)模塊構成主運算模塊和所述多個從運算模塊之間的連續(xù)或離散化的數(shù)據(jù)通路,可以實現(xiàn)成不同的互聯(lián)拓撲。在一種實施方式中,互聯(lián)模塊具有h樹型的結構,h樹是由多個節(jié)點構成的二叉樹通路,每個節(jié)點將上游的數(shù)據(jù)同樣地發(fā)給下游的兩個節(jié)點,將下游的兩個節(jié)點返回的連續(xù)或離散化的數(shù)據(jù)相加,并返回給上游的節(jié)點。

可選地,主運算模塊包括運算單元、數(shù)據(jù)依賴關系判斷單元和支持離散數(shù)據(jù)表示的神經元緩存單元,其中:

支持離散數(shù)據(jù)表示的神經元緩存單元用于緩存主運算模塊在計算過程中用到的離散或連續(xù)的輸入數(shù)據(jù)和輸出數(shù)據(jù);

運算單元完成主運算模塊的各種運算功能,當輸入數(shù)據(jù)是離散數(shù)據(jù)與連續(xù)數(shù)據(jù)的混合數(shù)據(jù)時,針對不同離散數(shù)據(jù)采取預先設置的相應計算方式;

數(shù)據(jù)依賴關系判斷單元是運算單元讀寫神經元緩存單元的端口,保證對神經元緩存單元中離散或連續(xù)的數(shù)據(jù)讀寫不存在一致性沖突,并且負責從神經元緩存單元讀取輸入梯度向量通過互聯(lián)模塊發(fā)送給從運算模塊;以及

來自互聯(lián)模塊的輸出梯度向量被發(fā)送到運算單元。

可選地,每個從運算模塊包括運算單元、數(shù)據(jù)依賴關系判定單元、支持離散數(shù)據(jù)表示的神經元緩存單元、支持離散數(shù)據(jù)表示的權值緩存單元和支持離散數(shù)據(jù)表示的權值梯度緩存單元,其中:

運算單元接收控制器單元發(fā)出的微指令并進行算數(shù)邏輯運算,當輸入數(shù)據(jù)是離散數(shù)據(jù)與連續(xù)數(shù)據(jù)的混合數(shù)據(jù)時,針對不同離散數(shù)據(jù)采取預先設置的相應計算方式;

數(shù)據(jù)依賴關系判斷單元負責計算過程中對支持離散數(shù)據(jù)表示的神經元緩存單元、支持離散數(shù)據(jù)表示的權值緩存單元和支持離散數(shù)據(jù)表示的權值梯度緩存單元的讀寫操作,保證對支持離散數(shù)據(jù)表示的神經元緩存單元、支持離散數(shù)據(jù)表示的權值緩存單元和支持離散數(shù)據(jù)表示 的權值梯度緩存單元的讀寫不存在一致性沖突;

支持離散數(shù)據(jù)表示的神經元緩存單元緩存輸入支持離散表示的梯度向量數(shù)據(jù)中與該從運算模塊相對應的標量數(shù)據(jù)以及該從運算模塊計算得到的輸出梯度向量部分和;

支持離散數(shù)據(jù)表示的權值緩存單元緩存該從運算模塊在計算過程中需要的離散或連續(xù)表示的權值數(shù)據(jù),對于每一個從運算模塊,都只存儲權值矩陣中與該從運算模塊所存儲的標量數(shù)據(jù)相對應的列;以及

支持離散數(shù)據(jù)表示的權值梯度緩存單元緩存相應從運算模塊在更新權值過程中需要的權值梯度數(shù)據(jù),每個從運算模塊存儲的權值梯度數(shù)據(jù)與其存儲的離散或連續(xù)表示的權值數(shù)據(jù)相對應。

可選地,通過以下方式保證讀寫不存在一致性沖突:判斷尚未執(zhí)行的微指令與正在執(zhí)行過程中的微指令的數(shù)據(jù)之間是否存在依賴關系,如果不存在,允許該條微指令立即發(fā)射,否則需要等到該條微指令所依賴的所有微指令全部執(zhí)行完成后該條微指令才允許被發(fā)射。

可選地,運算單元包括運算決定單元和混合數(shù)據(jù)運算單元,當輸入數(shù)據(jù)是混合數(shù)據(jù)時,運算決定單元根據(jù)其中的離散數(shù)據(jù)決定應對該混合數(shù)據(jù)執(zhí)行何種操作,然后,混合數(shù)據(jù)運算單元根據(jù)運算決定單元的決定結果,執(zhí)行相應操作。

可選地,運算單元還包括離散數(shù)據(jù)運算單元和連續(xù)數(shù)據(jù)運算單元中的至少一個,以及數(shù)據(jù)類型判斷單元,當輸入數(shù)據(jù)全是離散數(shù)據(jù)時,由離散數(shù)據(jù)運算單元根據(jù)輸入的離散數(shù)據(jù)通過查表執(zhí)行相應操作,當輸入數(shù)據(jù)全是連續(xù)數(shù)據(jù)時,由連續(xù)數(shù)據(jù)運算單元執(zhí)行相應操作。

可選地,該裝置還包括連續(xù)離散轉換單元,連續(xù)離散轉換單元包括預處理模塊、距離計算模塊、和判斷模塊,假設使用m(m=2m,m≥1)個離散數(shù)據(jù),令這些離散數(shù)據(jù)分別對應于預定區(qū)間[-zone,zone]內的m個數(shù)值,其中:

預處理模塊對于輸入的連續(xù)數(shù)據(jù)x使用clip(-zone,zone)運算進行預處理,得到區(qū)間[-zone,zone]內的預處理數(shù)據(jù)y,其中,如果x≤-zone則y=-zone,如果x≥zone則y=zone,如果-zone<x<zone,則預處 理數(shù)據(jù)y=x;

距離計算模塊計算預處理數(shù)據(jù)y與上述各數(shù)值之間的距離;以及

判斷模塊82基于該距離計算并輸出離散數(shù)據(jù)。

可選地,預定區(qū)間[-zone,zone]是[-1,1]或[-2,2];并且/或者m個數(shù)值的絕對值是2的冪的倒數(shù);并且/或者判斷模塊執(zhí)行:并且/或者輸出與該預處理數(shù)據(jù)y距離最近的數(shù)值所對應的離散數(shù)據(jù),如果有兩個數(shù)值與該預處理數(shù)據(jù)距離相等,則輸出二者中任一個所對應的離散數(shù)據(jù);并且/或者計算預處理數(shù)據(jù)y分別到距離最近的兩個數(shù)值中任一個的歸一化概率,將這兩個數(shù)值中任一個所對應的歸一化概率與隨機數(shù)生成模塊生成的(0,1)之間的隨機數(shù)z比較,如果該z小于該概率則輸出該離散數(shù)據(jù),否則輸出另一離散數(shù)據(jù)。

本發(fā)明的另一個方面提供了一種使用上述裝置執(zhí)行單層人工神經網絡反向訓練的方法。通過提供的指令集,控制器控制讀入運算時的輸入神經元和激活函數(shù)導數(shù)值以及輸入梯度,之后讀入權值數(shù)據(jù)和權值梯度數(shù)據(jù),之后讀入神經網絡訓練精度、學習率等常數(shù)。這些數(shù)據(jù)可以采用離散數(shù)據(jù)表示或不采用。之后主從運算模塊以及互聯(lián)模塊完成權值更新操作。特別對于離散數(shù)據(jù)表示的數(shù)據(jù),在進行乘法操作時,根據(jù)離散數(shù)據(jù)的數(shù)值,通過對相關數(shù)據(jù)的位操作代替了乘法運算。例如權值數(shù)據(jù)用1比特的離散數(shù)據(jù)表示,0代表+1,1代表-1,通過對與權值相乘數(shù)據(jù)的符號位異或,實現(xiàn)了對權值的乘法運算。

本發(fā)明的另一個方面提供了一種使用上述裝置支持人工神經網絡批歸一化運算(batchnormalization)的方法。通過提供的指令集,控制器控制數(shù)據(jù)訪問單元讀入輸入的數(shù)據(jù),之后控制主從運算模塊根據(jù)batch大小求出各自位置的均值以及方差或使用設定好的均值方差。之后控制器控制對應位置的輸入數(shù)據(jù)減去均值除以方差。最后控制器控制用處理后的數(shù)據(jù)與學習參數(shù)相乘后加上另一個學習參數(shù)。

本發(fā)明的另一方面提供了一種使用上述裝置執(zhí)行多層人工神經網絡反向訓練的方法。其實現(xiàn)過程與單層神經網絡類似,當上一層人工神經網絡執(zhí)行完畢后,下一層的運算指令會將主運算模塊中計算出的 輸出梯度向量作為下一層訓練的輸入梯度向量進行如上的計算過程,指令中的權值地址和權值梯度地址也會變更至本層對應的地址。

附圖說明

為了更完整地理解本發(fā)明及其優(yōu)勢,現(xiàn)在將參考結合附圖的以下描述,其中:

圖1示出了根據(jù)本發(fā)明實施例的用于執(zhí)行支持離散數(shù)據(jù)表示的人工神經網絡反向訓練的裝置的整體結構的示例框圖。

圖2示意性示出了根據(jù)本發(fā)明實施例的用于執(zhí)行支持離散數(shù)據(jù)表示的人工神經網絡反向訓練的裝置中h樹模塊(互聯(lián)模塊的一種實施方式)的結構。

圖3示出了根據(jù)本發(fā)明實施例的用于執(zhí)行支持離散數(shù)據(jù)表示的人工神經網絡反向訓練的裝置中主運算模塊結構的示例框圖。

圖4示出了根據(jù)本發(fā)明實施例的用于執(zhí)行支持離散數(shù)據(jù)表示的人工神經網絡反向訓練的裝置中從運算模塊結構的示例框圖。

圖5示出了根據(jù)本發(fā)明實施例的神經網絡反向訓練過程的示例框圖。

圖6示出了根據(jù)本發(fā)明實施例的離散數(shù)據(jù)表示的神經網絡反向訓練過程的示例框圖

圖7示出了根據(jù)本發(fā)明實施例的單層人工神經網絡運算的流程圖。

圖8示出了針對離散數(shù)據(jù)的運算單元示例結構。

圖9示出了連續(xù)數(shù)據(jù)和離散數(shù)據(jù)轉化的連續(xù)離散轉化模塊的示例結構。

在所有附圖中,相同的裝置、部件、單元等使用相同的附圖標記來表示。

具體實施方式

根據(jù)結合附圖對本發(fā)明示例性實施例的以下詳細描述,本發(fā)明的 其它方面、優(yōu)勢和突出特征對于本領域技術人員將變得顯而易見。

在本發(fā)明中,術語“包括”和“含有”及其派生詞意為包括而非限制;術語“或”是包含性的,意為和/或。

在本說明書中,下述用于描述本發(fā)明原理的各種實施例只是說明,不應該以任何方式解釋為限制發(fā)明的范圍。參照附圖的下述描述用于幫助全面理解由權利要求及其等同物限定的本發(fā)明的示例性實施例。下述描述包括多種具體細節(jié)來幫助理解,但這些細節(jié)應認為僅僅是示例性的。因此,本領域普通技術人員應認識到,在不背離本發(fā)明的范圍和精神的情況下,可以對本文中描述的實施例進行多種改變和修改。此外,為了清楚和簡潔起見,省略了公知功能和結構的描述。此外,貫穿附圖,相同參考數(shù)字用于相似功能和操作。

根據(jù)本發(fā)明實施例的支持離散數(shù)據(jù)表示的多層人工神經網絡的反向訓練,包括兩層或者兩層以上的多個神經元。對于每一層來說,首先對輸入梯度向量進行加權求和計算出本層的輸出梯度向量。該輸出梯度向量乘以下一層在正向運算時的激活函數(shù)的導數(shù)值可以得到下一層的輸入梯度向量。將輸入梯度向量與正向運算時的輸入神經元對位相乘得到本層權值的梯度,然后可以根據(jù)所得到的本層權值的梯度來更新本層的權值。此過程中的數(shù)據(jù)可以采用離散表示的數(shù)據(jù)也可以采用連續(xù)數(shù)據(jù)。

對于離散數(shù)據(jù)表示的輸入神經元向量或離散數(shù)據(jù)表示的權值向量的點積運算,本裝置支持將點積運算轉換為數(shù)據(jù)的移位、取非、異或等位運算。對于數(shù)據(jù)的表示方式,本裝置支持數(shù)據(jù)離散表示或連續(xù)表示,用戶可以自定義哪一個層的哪些數(shù)據(jù)采用離散表示形式或連續(xù)表示,并且可以根據(jù)具體需要自定義離散數(shù)據(jù)的位數(shù),從而代替表示的連續(xù)數(shù)據(jù)的個數(shù),例如設定為1比特、2比特、3比特等位數(shù)的離散數(shù)據(jù),分別可以表示2個、4個、8個連續(xù)數(shù)據(jù)。

圖1示出了根據(jù)本發(fā)明實施例的用于執(zhí)行支持離散數(shù)據(jù)表示的人工神經網絡反向訓練的裝置的整體結構的示例框圖。如圖1所示,該裝置包括指令緩存單元1、控制器單元2、數(shù)據(jù)訪問單元3、互聯(lián)模塊 4、主運算模塊5、多個從運算模塊6。根據(jù)本發(fā)明的實施例,該裝置還可以包括連續(xù)離散轉換模塊7。指令緩存單元1、控制器單元2、數(shù)據(jù)訪問單元3、h樹模塊4、主運算模塊5和從運算模塊6、連續(xù)離散轉換模塊7均可以通過硬件電路(包括但不限于fpga、cgra、專用集成電路asic、模擬電路和憶阻器等)實現(xiàn)。本裝置支持將連續(xù)數(shù)據(jù)轉換為離散數(shù)據(jù)以及離散數(shù)據(jù)的存儲和運算。

指令緩存單元1通過數(shù)據(jù)訪問單元3讀入指令并緩存讀入的指令。

控制器單元2從指令緩存單元1中讀取指令,將指令譯成控制其他模塊行為的微指令并發(fā)送給其他模塊如數(shù)據(jù)訪問單元3、主運算模塊5和從運算模塊6等。

數(shù)據(jù)訪問單元3能夠訪存外部地址空間(例如內存或其他存儲設備),直接向裝置內部的各個緩存單元讀寫數(shù)據(jù),完成數(shù)據(jù)的加載和存儲。該數(shù)據(jù)是離散表示的或非離散表示的。該單元用來設計可以讀取離散表示的數(shù)據(jù)

互聯(lián)模塊4用于連接主運算模塊和從運算模塊,可以實現(xiàn)成不同的互聯(lián)拓撲(如樹狀結構、環(huán)狀結構、網格狀結構、分級互聯(lián)、總線結構等)。

圖2示意性示出了互聯(lián)模塊4的一種實施方式:h樹結構。h樹模塊4構成主運算模塊5和多個從運算模塊6之間的數(shù)據(jù)通路,并具有h樹型的結構。h樹是由多個節(jié)點構成的二叉樹通路,每個節(jié)點將上游的數(shù)據(jù)同樣地發(fā)給下游的兩個節(jié)點,將下游的兩個節(jié)點返回的數(shù)據(jù)進行合并,并返回給上游的節(jié)點。例如,在神經網絡反向運算過程中,下游兩個節(jié)點返回的向量會在當前節(jié)點相加成一個向量并返回給上游節(jié)點。在每層人工神經網絡開始計算的階段,主運算模塊5內的輸入梯度通過h樹模塊4發(fā)送給各個從運算模塊6;當從運算模塊6的計算過程完成后,每個從運算模塊6輸出的輸出梯度向量部分和會在h樹模塊4中逐級兩兩相加,即對所有輸出梯度向量部分和求和,作為最終的輸出梯度向量。

圖3示出了根據(jù)本發(fā)明實施例的用于執(zhí)行人工神經網絡反向訓練 的裝置中主運算模塊5的結構的示例框圖。如圖3所示,主運算模塊5包括運算單元51、數(shù)據(jù)依賴關系判斷單元52和支持離散數(shù)據(jù)表示的神經元緩存單元53。

支持離散數(shù)據(jù)表示的神經元緩存單元53用于緩存主運算模塊5在計算過程中用到的輸入數(shù)據(jù)和輸出數(shù)據(jù)。

運算單元51完成主運算模塊的各種運算功能。對于運算因子全是離散數(shù)據(jù)的情況,可以通過查表實現(xiàn)離散數(shù)據(jù)與離散數(shù)據(jù)的加減乘除運算。例如2位的離散數(shù)據(jù),可以表示4個連續(xù)數(shù)據(jù)值。對于4個連續(xù)數(shù)據(jù)共有4*4=16種組合。對于每種加減乘除運算的操作,可以制作并維護該4*4的索引表,通過索引表找到對應的計算值。4種運算共需要4張4*4的索引表。

對于運算因子包含離散數(shù)據(jù)和連續(xù)數(shù)據(jù)的情況,可以針對不同離散數(shù)據(jù),為加、減、乘、除運算預先設定相應的位操作。例如,可以采取按位異或后乘2的相應位次冪之后累加求和的方式代替離散數(shù)據(jù)與連續(xù)數(shù)據(jù)的點積運算。例如,對于乘法操作,乘法因子數(shù)據(jù)如果存在離散表示的,可以通過離散數(shù)據(jù)索引相應的操作(例如,對相應數(shù)據(jù)的按位異或、取非、移位等操作)代替和該離散數(shù)據(jù)表示的連續(xù)數(shù)據(jù)的乘法操作,從而減少了乘法器部件數(shù)量。例如對于連續(xù)數(shù)據(jù)與離散數(shù)據(jù)的乘法操作,-1/2乘以16。傳統(tǒng)的乘法器部件會將-1/2與16直接做乘法。在運算單元51中,由于離散數(shù)據(jù)的可能性較少,可以通過查找索引這樣一種開關判斷的方法代替了運算單元的功能。例如,可以規(guī)定-1/2的離散數(shù)據(jù)表示方法為01。如果一個運算因子是-1/2,則運算單元51接收到的離散數(shù)據(jù)為01。運算單元51便采用離散數(shù)據(jù)01對應的操作。通過對于16的8位定點數(shù)表示00010000符號位取反,向右移1位得到10001000,十進制表示為-8。對于除法操作,16除以-2。其中16是連續(xù)數(shù)據(jù),-2是離散數(shù)據(jù)。如果規(guī)定離散數(shù)據(jù)-2二進制表示為10。運算單元便采用離散數(shù)據(jù)10對應的除法操作。通過對16的8位定點數(shù)表示0001000右移1位之后符號位取反得到10001000,十進制表示為-8得到結果。加法和減法操作與上述過程類似。根據(jù)離 散數(shù)據(jù)的二進制作為一個索引,索引到按位左移、右移、異或等操作。經過該操作后實現(xiàn)了與離散數(shù)據(jù)表示的真實數(shù)據(jù)的相加或者相減操作。

數(shù)據(jù)依賴關系判斷單元52是運算單元51讀寫神經元緩存單元53的端口,同時能夠保證對神經元緩存單元53中數(shù)據(jù)的讀寫不存在一致性沖突。具體地,數(shù)據(jù)依賴關系判斷單元52判斷尚未執(zhí)行的微指令與正在執(zhí)行過程中的微指令的數(shù)據(jù)之間是否存在依賴關系,如果不存在,允許該條微指令立即發(fā)射,否則需要等到該條微指令所依賴的所有微指令全部執(zhí)行完成后該條微指令才允許被發(fā)射。例如,所有發(fā)往數(shù)據(jù)依賴關系單元52的微指令都會被存入數(shù)據(jù)依賴關系單元52內部的指令隊列里,在該隊列中,讀指令的讀取數(shù)據(jù)的范圍如果與隊列位置靠前的寫指令寫數(shù)據(jù)的范圍發(fā)生沖突,則該指令必須等到所依賴的寫指令被執(zhí)行后才能夠執(zhí)行。同時,數(shù)據(jù)依賴關系判斷單元52也負責從神經元緩存單元53讀取輸入梯度向量通過互聯(lián)模塊4發(fā)送給從運算模塊6,而從運算模塊6的輸出數(shù)據(jù)通過互聯(lián)模塊4直接發(fā)送給運算單元51??刂破鲉卧?輸出的指令發(fā)送給運算單元51和依賴關系判斷單元52,來控制其行為。

圖4示出了根據(jù)本發(fā)明實施例的用于執(zhí)行支持離散數(shù)據(jù)表示的人工神經網絡反向訓練的裝置中從運算模塊6的結構的示例框圖。如圖4所示,每個從運算模塊6包括運算單元61、數(shù)據(jù)依賴關系判定單元62、支持離散數(shù)據(jù)表示的神經元緩存單元63、支持離散數(shù)據(jù)表示的權值緩存單元64和支持離散數(shù)據(jù)表示的權值梯度緩存單元65。

運算單元61接收控制器單元2發(fā)出的微指令并進行算數(shù)邏輯運算。對于運算因子全是離散數(shù)據(jù)的情況,可以通過查表實現(xiàn)離散數(shù)據(jù)與離散數(shù)據(jù)的加減乘除運算。例如2位的離散數(shù)據(jù),可以表示4個連續(xù)數(shù)據(jù)值。對于4個連續(xù)數(shù)據(jù)共有4*4=16種組合。對于每種加減乘除運算的操作,可以制作并維護該4*4的索引表,通過索引表找到對應的計算值。4種運算共需要4張4*4的索引表。

對于運算因子包含離散數(shù)據(jù)和連續(xù)數(shù)據(jù)的情況,可以針對不同離 散數(shù)據(jù),為加、減、乘、除運算預先設定相應的位操作。例如,可以采取按位異或后乘2的相應位次冪之后累加求和的方式代替離散數(shù)據(jù)與連續(xù)數(shù)據(jù)的點積運算。例如,對于乘法操作,乘法因子數(shù)據(jù)如果存在離散表示的,可以通過離散數(shù)據(jù)索引相應的操作(例如,對相應數(shù)據(jù)的按位異或、取非、移位等操作)代替和該離散數(shù)據(jù)表示的連續(xù)數(shù)據(jù)的乘法操作,從而減少了乘法器部件數(shù)量。例如對于連續(xù)數(shù)據(jù)與離散數(shù)據(jù)的乘法操作,-1/2乘以16。傳統(tǒng)的乘法器部件會將-1/2與16直接做乘法。在運算單元51中,由于離散數(shù)據(jù)的可能性較少,可以通過查找索引這樣一種開關判斷的方法代替了運算單元的功能。例如,可以規(guī)定-1/2的離散數(shù)據(jù)表示方法為01。如果一個運算因子是-1/2,則運算單元51接收到的離散數(shù)據(jù)為01。運算單元51便采用離散數(shù)據(jù)01對應的操作。通過對于16的8位定點數(shù)表示00010000符號位取反,向右移1位得到10001000,十進制表示為-8。對于除法操作,16除以-2。其中16是連續(xù)數(shù)據(jù),-2是離散數(shù)據(jù)。如果規(guī)定離散數(shù)據(jù)-2二進制表示為10。運算單元便采用離散數(shù)據(jù)10對應的除法操作。通過對16的8位定點數(shù)表示0001000右移1位之后符號位取反得到10001000,十進制表示為-8得到結果。加法和減法操作與上述過程類似。根據(jù)離散數(shù)據(jù)的二進制作為一個索引,索引到按位左移、右移、異或等操作。經過該操作后實現(xiàn)了與離散數(shù)據(jù)表示的真實數(shù)據(jù)的相加或者相減操作。

數(shù)據(jù)依賴關系判斷單元62負責計算過程中對緩存單元的讀寫操作。數(shù)據(jù)依賴關系判斷單元62保證對緩存單元的讀寫不存在一致性沖突。具體地,數(shù)據(jù)依賴關系判斷單元62判斷尚未執(zhí)行的微指令與正在執(zhí)行過程中的微指令的數(shù)據(jù)之間是否存在依賴關系,如果不存在,允許該條微指令立即發(fā)射,否則需要等到該條微指令所依賴的所有微指令全部執(zhí)行完成后該條微指令才允許被發(fā)射。例如,所有發(fā)往數(shù)據(jù)依賴關系單元62的微指令都會被存入數(shù)據(jù)依賴關系單元62內部的指令隊列里,在該隊列中,讀指令的讀取數(shù)據(jù)的范圍如果與隊列位置靠前的寫指令寫數(shù)據(jù)的范圍發(fā)生沖突,則該指令必須等到所依賴的寫指令 被執(zhí)行后才能夠執(zhí)行。

支持離散數(shù)據(jù)表示的神經元緩存單元63緩存輸入梯度向量數(shù)據(jù)中與該從運算模塊6相對應的標量數(shù)據(jù)以及該從運算模塊6計算得到的輸出梯度向量部分和。

支持離散數(shù)據(jù)表示的權值緩存單元64緩存該從運算模塊6在計算過程中需要的權值數(shù)據(jù)。該數(shù)據(jù)根據(jù)用戶定義可以是離散數(shù)據(jù)或離散數(shù)據(jù)。對于每一個從運算模塊,都只會存儲權值矩陣中與該從運算模塊6所存儲的標量數(shù)據(jù)相對應的列。

權值梯度緩存單元65緩存相應從運算模塊在更新權值過程中需要的權值梯度數(shù)據(jù)。每一個從運算模塊6存儲的權值梯度數(shù)據(jù)與其存儲的權值數(shù)據(jù)相對應。

從運算模塊6實現(xiàn)每層人工神經網絡反向訓練計算輸出梯度向量的過程中可以并行的前半部分以及權值的更新。以人工神經網絡全連接層(mlp)為例,過程為out_gradient=w*in_gradient,其中以離散數(shù)據(jù)表示的權值矩陣w和輸入梯度向量in_gradient的乘法可以劃分為不相關的并行計算子任務,out_gradient與in_gradient是列向量,每個從運算模塊只計算in_gradient中相應的部分標量元素與權值矩陣w對應的列的乘積,得到的每個輸出向量都是最終結果的一個待累加的部分和,這些部分和在互聯(lián)模塊中逐級兩兩相加得到最后的結果。所以計算過程變成了并行的計算部分和的過程和后面的累加的過程。每個從運算模塊6計算出輸出梯度向量的部分和,所有的部分和在互聯(lián)模塊4中完成求和運算得到最后的輸出梯度向量。每個從運算模塊6同時將輸入梯度向量和正向運算時每層的輸出值相乘,計算出權值的梯度,以更新本從運算模塊6存儲的權值。正向運算和反向訓練是神經網絡算法的兩個主要過程,神經網絡要訓練(更新)網絡中的權值,首先需要計算輸入向量在當前權值構成的網絡中的正向輸出,這是正向過程,然后根據(jù)輸出值與輸入向量本身的標注值之間的差值,反向逐層訓練(更新)每層的權值。在正向計算過程中會保存每一層的輸出向量以及激活函數(shù)的導數(shù)值,這些數(shù)據(jù)是反向訓練過程所需要的, 所以在反向訓練開始時,這些數(shù)據(jù)已經保證存在。正向運算中每層的輸出值是反向運算開始時已有的數(shù)據(jù),可以通過數(shù)據(jù)訪問單元緩存在主運算模塊中并通過互聯(lián)模塊發(fā)送給從運算模塊。主運算模塊5基于輸出梯度向量進行后續(xù)計算,例如將輸出梯度向量乘以正向運算時的激活函數(shù)的導數(shù)得到下一層的輸入梯度值。正向運算時的激活函數(shù)的導數(shù)是在反向運算開始時已有的數(shù)據(jù),可以通過數(shù)據(jù)訪問單元緩存在主運算模塊中。

圖8示出了運算單元的結構框圖,其可用于主運算模塊中的運算單元51或從運算模塊中的運算單元61。運算過程中輸入數(shù)據(jù)可以是離散數(shù)據(jù)或連續(xù)數(shù)據(jù)。數(shù)據(jù)類型判斷單元71判斷輸入數(shù)據(jù)全是連續(xù)數(shù)據(jù)、全是離散數(shù)據(jù)或是既包含連續(xù)數(shù)據(jù)又包含離散數(shù)據(jù)的混合數(shù)據(jù)。當輸入數(shù)據(jù)全是連續(xù)數(shù)據(jù)時,連續(xù)數(shù)據(jù)運算單元72執(zhí)行相應運算。

當輸入數(shù)據(jù)全是離散數(shù)據(jù)時,離散數(shù)據(jù)運算單元73執(zhí)行相應運算。對于運算因子全是離散數(shù)據(jù)的情況,可以通過查表實現(xiàn)離散數(shù)據(jù)與離散數(shù)據(jù)的加減乘除運算。例如2位的離散數(shù)據(jù),可以表示4個連續(xù)數(shù)據(jù)值。對于4個連續(xù)數(shù)據(jù)共有4*4=16種組合。對于每種加減乘除運算的操作,我們制作并維護該4*4的索引表,通過索引表找到對應的計算值。4種運算共需要4張4*4的索引表。

當輸入數(shù)據(jù)是混合數(shù)據(jù)時,運算決定單元74根據(jù)其中的離散數(shù)據(jù)決定應對其執(zhí)行何種操作??梢葬槍Σ煌碾x散數(shù)據(jù)分別預先設置相應操作。然后,混合數(shù)據(jù)運算單元75根據(jù)運算決定單元74的決定結果,執(zhí)行相應操作。對于運算因子包含離散數(shù)據(jù)和連續(xù)數(shù)據(jù)的情況,可以針對不同離散數(shù)據(jù),為加、減、乘、除運算預先設定相應的位操作。例如,可以采取按位異或后乘2的相應位次冪之后累加求和的方式代替離散數(shù)據(jù)與連續(xù)數(shù)據(jù)的點積運算。例如,對于乘法操作,乘法因子數(shù)據(jù)如果存在離散表示的,可以通過離散數(shù)據(jù)索引相應的操作(例如,對相應數(shù)據(jù)的按位異或、取非、移位等操作)代替和該離散數(shù)據(jù)表示的連續(xù)數(shù)據(jù)的乘法操作,從而減少了乘法器部件數(shù)量。例如對于連續(xù)數(shù)據(jù)與離散數(shù)據(jù)的乘法操作,-1/2乘以16。傳統(tǒng)的乘法器部件會 將-1/2與16直接做乘法。在運算單元51中,由于離散數(shù)據(jù)的可能性較少,可以通過查找索引這樣一種開關判斷的方法代替了運算單元的功能。例如,可以規(guī)定-1/2的離散數(shù)據(jù)表示方法為01。如果一個運算因子是-1/2,則運算單元51接收到的離散數(shù)據(jù)為01。運算單元51便采用離散數(shù)據(jù)01對應的操作。通過對于16的8位定點數(shù)表示00010000符號位取反,向右移1位得到10001000,十進制表示為-8。對于除法操作,16除以-2。其中16是連續(xù)數(shù)據(jù),-2是離散數(shù)據(jù)。如果規(guī)定離散數(shù)據(jù)-2二進制表示為10。運算單元便采用離散數(shù)據(jù)10對應的除法操作。通過對16的8位定點數(shù)表示0001000右移1位之后符號位取反得到10001000,十進制表示為-8得到結果。加法和減法操作與上述過程類似。根據(jù)離散數(shù)據(jù)的二進制作為一個索引,索引到按位左移、右移、異或等操作。經過該操作后實現(xiàn)了與離散數(shù)據(jù)表示的真實數(shù)據(jù)的相加或者相減操作。

圖9示出了連續(xù)離散轉換模塊7的結構示意圖。用戶可以定義采用該模塊將連續(xù)數(shù)據(jù)轉換為離散數(shù)據(jù)或不采用。將連續(xù)數(shù)據(jù)輸入連續(xù)離散轉換模塊7,輸出離散數(shù)據(jù)。該連續(xù)離散轉換模塊7包括預處理模塊81、距離計算模塊82、和判斷模塊82。假設使用m(m=2m,m≥1)個離散數(shù)據(jù),令這些離散數(shù)據(jù)分別對應于預定區(qū)間內的m個數(shù)值。根據(jù)本發(fā)明的實施例,該區(qū)間可以是關于零對稱的區(qū)間[-zone,zone],例如[-1,1]或[-2,2]。根據(jù)本發(fā)明的實施例,該m個數(shù)值的絕對值可以是2的冪的倒數(shù)。以預處理模塊81對于輸入的連續(xù)數(shù)據(jù)x使用clip(-zone,zone)運算進行預處理,得到區(qū)間[-zone,zone]內的預處理數(shù)據(jù)y。其中,如果x≤-zone則y=-zone,如果x≥zone則y=zone,如果-zone<x<zone,則預處理數(shù)據(jù)y=x。距離計算模塊82計算預處理數(shù)據(jù)y與上述各數(shù)值之間的距離。判斷模塊82基于該距離計算并輸出離散數(shù)據(jù)。例如,判斷模塊82可以輸出與該預處理數(shù)據(jù)距離最近的數(shù)值所對應的離散數(shù)據(jù)。如果有兩個數(shù)值與該預處理數(shù)據(jù)y距離相等,則輸出二者中任一個所對應的離散數(shù)據(jù)?;蛘?,判斷模塊82可以計算預處理數(shù)據(jù)y分別到距離最近的兩個數(shù)值中任一個的歸一化概率,將 這兩個數(shù)值中任一個所對應的歸一化概率與隨機數(shù)生成模塊82生成的(0,1)之間的隨機數(shù)z比較,如果該z小于該概率則輸出該離散數(shù)據(jù),否則輸出另一離散數(shù)據(jù)。例如,用戶定義產生二元離散數(shù)據(jù),則m=2。預處理模塊81對于輸入的任意連續(xù)數(shù)據(jù)x執(zhí)行運算clip(-1,1)得到預處理數(shù)據(jù)y。然后,距離計算模塊82計算預處理數(shù)據(jù)y與數(shù)值-1、1之間的距離d1、d2,假設d1>d2。判斷模塊83可以輸出d1對應的離散數(shù)據(jù)-1?;蛘?,判斷模塊83可以計算y分別到距離最近的兩個數(shù)值(由于本例中僅有兩個數(shù)值,所以距離最近的兩個數(shù)值即為-1和1)中任一個的歸一化概率,其中y到-1的概率為p1=d2/(d1+d2),y到-2的概率為p2=d1/(d1+d2),將歸一化概率p1與隨機數(shù)生成模塊82生成的(0,1)之間的隨機數(shù)z比較,如果z小于概率p1,則輸出離散數(shù)據(jù)-1,否則輸出另一離散數(shù)據(jù)1?;蛘?,將歸一化概率p2與隨機數(shù)z比較,如果z小于概率p2,則輸出離散數(shù)據(jù)1,否則輸出另一離散數(shù)據(jù)-1。根據(jù)本發(fā)明的實施例,判斷模塊以二進制數(shù)據(jù)的形式輸出離散數(shù)據(jù),離散數(shù)據(jù)與二進制數(shù)據(jù)之間的關系可預先設定,例如通過查找表設定。例如,可以用0代表1,1代表-1。將得到的離散數(shù)據(jù)存儲回內存中。等待主從運算模塊中的運算單元使用,產生相應的操作。

反向訓練過程中的權值數(shù)據(jù)可以用離散數(shù)據(jù)表示的,上述過程中對于權值的乘法運算根據(jù)離散數(shù)據(jù)的存儲方式采用異或、取非、位移等方式代替。例如對于1比特的離散數(shù)據(jù)表示,0代表+1,1代表-1,通過對與權值相乘數(shù)據(jù)的符號位異或,實現(xiàn)了對權值的乘法運算。

根據(jù)本發(fā)明實施例,還提供了在前述裝置上執(zhí)行人工神經網絡反向運算的指令集。指令集中包括config指令、compute指令、io指令、nop指令、jump指令和move指令等,其中:

config指令在每層人工神經網絡計算開始前配置當前層計算需要的各種常數(shù);

compute指令完成每層人工神經網絡的算術邏輯計算;

io指令實現(xiàn)從外部地址空間讀入計算需要的輸入數(shù)據(jù)以及在計 算完成后將數(shù)據(jù)存回至外部空間該數(shù)據(jù)支持離散化表示的;

nop指令負責清空當前裝置內部所有微指令緩存隊列中的微指令,保證nop指令之前的所有指令全部指令完畢。nop指令本身不包含任何操作;

jump指令負責控制器將要從指令緩存單元讀取的下一條指令地址的跳轉,用來實現(xiàn)控制流的跳轉;

move指令負責將裝置內部地址空間某一地址的數(shù)據(jù)搬運至裝置內部地址空間的另一地址,該過程獨立于運算單元,在執(zhí)行過程中不占用運算單元的資源。

圖5示出了根據(jù)本發(fā)明實施例的神經網絡反向訓練過程的示例框圖。計算輸出梯度向量的過程為out_gradient=w*in_gradient,其中權值矩陣w和輸入梯度向量in_gradient的矩陣向量乘法可以劃分為不相關的并行計算子任務,每個從運算模塊6計算出輸出梯度向量的部分和,所有的部分和在互聯(lián)模塊4中完成求和運算得到最后的輸出梯度向量。圖5中上一層的輸出梯度向量inputgradient乘以對應的激活函數(shù)導數(shù)得到本層的輸入數(shù)據(jù),再與權值矩陣相乘得到輸出梯度向量。計算權值更新梯度的過程為dw=x*in_gradient,其中每個從運算模塊6計算本模塊對應部分的權值的更新梯度。從運算模塊6將輸入梯度和正向運算時的輸入神經元相乘計算出權值更新梯度dw,然后使用w、dw和上一次更新權值時使用的權值更新梯度dw’根據(jù)指令設置的學習率更新權值w。

參考圖5所示,inputgradient(圖5中的[inputgradient0,...,inputgradient3])是第n+1層的輸出梯度向量,該向量首先要與正向運算過程中第n層的導數(shù)值(圖5中的[f’(out0),...,f’(out3)])相乘,得到第n層的輸入梯度向量,該過程在主運算模塊5中完成,由互聯(lián)模塊4發(fā)往從運算模塊6,暫存在從運算模塊6的神經元緩存單元63中。然后,輸入梯度向量與權值矩陣相乘得到第n層的輸出梯度向量。在這個過程中,第i個從運算模塊計算輸入梯度向量中第i個標量和權值矩陣中列向量[w_i0,...,w_in]的乘積,得到的輸出向量在互聯(lián)模塊4 中逐級兩兩相加得到最后的輸出梯度向量outputgradient(圖5中的[outputgradient0,...,outputgradient3])。

同時,從運算模塊6還需要更新本模塊中存儲的權值,計算權值更新梯度的過程為dw_ij=x_j*in_gradient_i,其中x_j是正向運算時第n層的輸入(即第n-1層的輸出)向量的第j個元素,in_gradient_i是反向運算第n層的輸入梯度向量(即圖5中inputgradient與導數(shù)f’的乘積)的第i個元素。正向運算時第n層的輸入是在反向訓練開始時就存在的數(shù)據(jù),通過互聯(lián)模塊4送往從運算模塊6并暫存在神經元緩存單元63中。則,在從運算模塊6中,在完成輸出梯度向量部分和的計算后,將輸入梯度向量第i個標量和正向運算第n層的輸入向量相乘,得到更新權值的梯度向量dw并據(jù)此更新權值。

圖6是示出根據(jù)一個實施例的單層支持離散數(shù)據(jù)表示的人工神經網絡反向訓練的一種實施方法。該流程圖描述利用本發(fā)明的裝置和指令集實現(xiàn)圖5所示的一種單層離散數(shù)據(jù)表示的人工神經網絡反向訓練過程。

步驟s1.1,將初始指令存放到指令存儲單元1中;

步驟s1.2,從指令存儲單元1中讀取一條指令;

步驟s1.3,對上述指令進行譯碼;

步驟s1.4,根據(jù)譯碼得到的控制信號,進行相應操作;

步驟s1.5,將操作結果寫回到相應存儲中。

在步驟s1.1中,可以存入初始化io指令,用于搬運后續(xù)指令。

在步驟s1.2中,可讀取的指令包括但不限于config指令、compute指令、io指令、nop指令、jump指令和move指令等。

在步驟s1.3中,根據(jù)指令的操作類型(config,compute,io,nop,jump,move等)譯碼得到相應模塊的控制信號。對于config指令,譯碼得到配置其余模塊的配置信息。對于compute指令,譯碼得到主從運算模塊的控制信號,控制不同離散數(shù)據(jù)采取的對應操作。對于io指令,譯碼得到數(shù)據(jù)訪問模塊的控制信號。對于nop指令,不產生實際控制信號,只用于清空當前裝置內部所有控制信號緩存隊列 中的控制信號,保證nop指令之前的所有指令全部執(zhí)行完畢。對于jump指令,得到跳轉指令流的控制信號。對于move指令,得到在裝置內部搬運數(shù)據(jù)的控制信號。

在步驟s1.4中,上述模塊2-6根據(jù)控制信號執(zhí)行相應操作。以執(zhí)行支持離散數(shù)據(jù)表示的神經網絡反向的compute指令為例,互連互聯(lián)模塊將輸入梯度向量[in0,…,inn]發(fā)送給所有的從運算模塊,暫存在支持離散數(shù)據(jù)表示的神經元緩存單元中。對于第i個從運算模塊,根據(jù)離散數(shù)據(jù)的二進制采取相應的操作計算相應相應的權值向量[w_i0,…,w_in]與梯度向量的點積。得到的結果與權值和激活函數(shù)的導數(shù)相乘,得到最后的輸出梯度向量[out0,out1,out2,…,outn]。用中間結果的權值梯度向量更新權值、偏置等數(shù)據(jù)。

在步驟s1.5中,各個模塊將操作結果寫回到相應緩存中。以執(zhí)行離散數(shù)據(jù)表示的神經網絡反向的運算為例,主運算模塊得到的輸出梯度向量被寫回到存儲單元。更新后的權值、偏置等數(shù)據(jù)也被寫回到存儲單元。

圖7是示出根據(jù)一個實施例的單層人工神經網絡反向訓練的另一種更詳細的實施方法。該流程圖描述利用本發(fā)明的裝置和指令集實現(xiàn)圖5所示的一種單層神經網絡反向訓練的過程。

在步驟s1,在指令緩存單元1的首地址處預先存入一條io指令。

在步驟s2,運算開始,控制器單元2從指令緩存單元1的首地址讀取該條io指令,根據(jù)譯出的微指令,數(shù)據(jù)訪問單元3從外部地址空間讀取與該單層人工神經網絡反向訓練有關的所有指令,并將其緩存在指令緩存單元1中。

在步驟s3,控制器單元2接著從指令緩存單元讀入下一條io指令,根據(jù)譯出的微指令,數(shù)據(jù)訪問單元3從外部地址空間讀取主運算模塊5需要的所有數(shù)據(jù)至主運算模塊5的神經元緩存單元53,所述數(shù)據(jù)包括之前正向運算時的輸入神經元和激活函數(shù)導數(shù)值以及輸入梯度向量。該數(shù)據(jù)支持離散表示,可以是全部離散或部分離散。

在步驟s4,控制器單元2接著從指令緩存單元讀入下一條io指令, 根據(jù)譯出的微指令,數(shù)據(jù)訪問單元3從外部地址空間讀取從運算模塊6需要的所有權值數(shù)據(jù)和權值梯度數(shù)據(jù),并分別存儲到相應的從運算模塊6的權值緩存單元64和權值梯度緩存單元65。該數(shù)據(jù)支持離散表示,可以是全部離散或部分離散。

在步驟s5,控制器單元2接著從指令緩存單元讀入下一條config指令,運算單元根據(jù)譯出的微指令里的參數(shù)配置運算單元內部寄存器的值,包括該層神經網絡計算需要的各種常數(shù),本層計算的精度設置、更新權值時的學習率等。

在步驟s6,控制器單元2接著從指令緩存單元讀入下一條compute指令,根據(jù)譯出的微指令,主運算模塊5通過互聯(lián)模塊4將輸入梯度向量和正向運算時的輸入神經元發(fā)給各從運算模塊6,所述輸入梯度向量和正向運算時的輸入神經元存至從運算模塊6的神經元緩存單元63。

在步驟s7,根據(jù)compute指令譯出的微指令,從運算模塊6的運算單元61從權值緩存單元64讀取權值向量(即該從運算模塊存儲的權值矩陣的部分列),完成權值向量和輸入梯度向量的向量乘標量運算,將輸出向量部分和通過互聯(lián)返回;同時從運算模塊6將輸入梯度向量與輸入神經元相乘,得到權值梯度存至權值梯度緩存單元65。對于離散數(shù)據(jù)表示的,自定義采用異或等位運算代替點積運算或不采用。例如對于1比特的離散數(shù)據(jù)表示,0代表+1,1代表-1,通過對與權值相乘數(shù)據(jù)的符號位異或,實現(xiàn)了對權值的乘法運算。

在步驟s8,在互聯(lián)模塊4中,各從運算模塊6返回的輸出梯度部分和被逐級兩兩相加得到完整的輸出梯度向量。

在步驟s9,主運算模塊5得到互聯(lián)模塊4的返回值,根據(jù)compute指令譯出的微指令,從神經元緩存單元53讀取正向運算時的激活函數(shù)導數(shù)值,將導數(shù)值乘以返回的輸出向量,得到下一層反向訓練的輸入梯度向量,將其寫回至神經元緩存單元53。該過程的數(shù)據(jù)可以自定義采用離散化表示數(shù)據(jù)或不采用。

在步驟s10,控制器單元2接著從指令緩存單元讀入下一條 compute指令,根據(jù)譯出的微指令,從運算模塊6從權值緩存單元64讀取權值w,從權值梯度緩存單元讀取本次的權值梯度dw和上一次更新權值使用的權值梯度dw’,更新權值w。

在步驟s11,控制器單元接著從指令緩存單元讀入下一條io指令,根據(jù)譯出的微指令,數(shù)據(jù)訪問單元3將神經元緩存單元53中的輸出梯度向量存至外部地址空間指定地址,運算結束。

對于人工神經網絡批歸一化運算(batchnormalization)運算步驟與上述過程相仿。通過提供的指令集,控制器完成以下過程??刂破骺刂茢?shù)據(jù)訪問單元3讀入輸入的梯度數(shù)據(jù),之后控制主從運算模塊根據(jù)batch大小求出各自位置的梯度均值以及梯度方差或使用設定好的均值方差。之后控制器控制對應位置的梯度數(shù)據(jù)減去梯度均值除以梯度方差。最后控制器控制用處理后的數(shù)據(jù)與學習參數(shù)相乘后加上另一個學習參數(shù)。

對于多層人工神經網絡,其實現(xiàn)過程與單層神經網絡類似,當上一層人工神經網絡執(zhí)行完畢后,下一層的運算指令會將主運算模塊中計算出的輸出梯度向量作為下一層訓練的輸入梯度向量進行如上的計算過程,指令中的權值地址和權值梯度地址也會變更至本層對應的地址。

通過采用用于執(zhí)行人工神經網絡反向訓練的裝置和指令集,解決了cpu和gpu運算性能不足,前端譯碼開銷大的問題。有效提高了對多層人工神經網絡正向運算的支持。

通過采用針對多層人工神經網絡反向訓練的專用片上緩存,充分挖掘了輸入神經元和權值數(shù)據(jù)的重用性,避免了反復向內存讀取這些數(shù)據(jù),降低了內存訪問帶寬,避免了內存帶寬成為多層人工神經網絡正向運算性能瓶頸的問題。

通過采用離散數(shù)據(jù)表示的方法,相較于浮點數(shù)、定點數(shù)等連續(xù)數(shù)據(jù)表示方法,大大較少了裝置的存儲能耗等開銷、以及乘法器部件數(shù)量??梢栽谟邢薜拿娣e上優(yōu)化結構布局,提高運算速度或性能能耗比等指標。

該發(fā)明可以應用于以下(包括但不限于)場景中:數(shù)據(jù)處理、機器人、電腦、打印機、掃描儀、電話、平板電腦、智能終端、手機、行車記錄儀、導航儀、傳感器、攝像頭、云端服務器、相機、攝像機、投影儀、手表、耳機、移動存儲、可穿戴設備等各類電子產品;飛機、輪船、車輛等各類交通工具;電視、空調、微波爐、冰箱、電飯煲、加濕器、洗衣機、電燈、燃氣灶、油煙機等各類家用電器;以及包括核磁共振儀、b超、心電圖儀等各類醫(yī)療設備。

前面的附圖中所描繪的進程或方法可通過包括硬件(例如,電路、專用邏輯等)、固件、軟件(例如,被具體化在非瞬態(tài)計算機可讀介質上的軟件),或兩者的組合的處理邏輯來執(zhí)行。雖然上文按照某些順序操作描述了進程或方法,但是,應該理解,所描述的某些操作能以不同順序來執(zhí)行。此外,可并行地而非順序地執(zhí)行一些操作。并且對于離散數(shù)據(jù)的表示問題,應該理解可以選擇哪些數(shù)據(jù)離散化表示、哪些不離散表示。數(shù)據(jù)是否離散表示的精神貫穿于整個運算過程中。

在前述的說明書中,參考其特定示例性實施例描述了本發(fā)明的各實施例。顯然,可對各實施例做出各種修改,而不背離所附權利要求所述的本發(fā)明的更廣泛的精神和范圍。相應地,說明書和附圖應當被認為是說明性的,而不是限制性的。

當前第1頁1 2 
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
榆社县| 静海县| 德化县| 太仆寺旗| 靖西县| 冀州市| 阳谷县| 榆树市| 公安县| 潢川县| 拜城县| 额敏县| 巴林右旗| 天气| 成武县| 万源市| 潼关县| 五原县| 兰考县| 武陟县| 鄯善县| 饶平县| 朔州市| 克什克腾旗| 淳安县| 乾安县| 同德县| 林周县| 老河口市| 固镇县| 墨玉县| 大城县| 富阳市| 高唐县| 海丰县| 竹溪县| 菏泽市| 土默特右旗| 宜春市| 凤阳县| 松潘县|