胡 飛 尤志強 劉 鵬 鄺繼順
(嵌入式與網(wǎng)絡(luò)計算省重點實驗室(湖南大學(xué)) 長沙 410082) (湖南大學(xué)信息科學(xué)與工程學(xué)院 長沙 410082) (hu_qingfeng@126.com)
近年來,深度神經(jīng)網(wǎng)絡(luò)(deep neural network, DNN)在很多領(lǐng)域展現(xiàn)了獨特的優(yōu)勢,比如計算機視覺、智能醫(yī)療、大數(shù)據(jù)處理、模式識別等.在2016年的“人機大戰(zhàn)”中,由谷歌公司開發(fā)的基于深度學(xué)習(xí)工作原理的“阿爾法圍棋”(AlphaGo)[1]以4∶1戰(zhàn)勝韓國圍棋高手,轟動一時.許多學(xué)者和百度、微軟等高端互聯(lián)網(wǎng)公司的研究表明深度學(xué)習(xí)在圖像感知等方面的處理水平已經(jīng)達到甚至超過了人類.
卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural network, CNN)是目前研究最多、應(yīng)用最為成功的一種多階段全局可訓(xùn)練DNN模型,可以從經(jīng)過簡單預(yù)處理的數(shù)據(jù)甚至原始數(shù)據(jù)中學(xué)習(xí)到高階的、抽象的、更接近本質(zhì)的特征.CNN的提出在人工神經(jīng)網(wǎng)絡(luò)方向具有重要的里程碑意義,并且已經(jīng)在人臉識別、車牌檢測、目標跟蹤和手寫體識別等方面得到了廣泛的應(yīng)用.
DNN雖然可以取得很高的識別準確率,但網(wǎng)絡(luò)復(fù)雜,需要大量的運算,消耗大量的能量與硬件資源.例如AlphaGo下圍棋時,同時使用了上千個通用處理器和數(shù)百個圖形處理器,每局棋耗電約3 000美元,這對大部分智能設(shè)備來說無法承受[2].目前,深度學(xué)習(xí)算法多在馮·諾依曼結(jié)構(gòu)計算機上實現(xiàn).馮·諾依曼機的基本特征為計算單元與存儲單元分離,存儲單元的低訪問速度成為了如今計算性能提高的瓶頸.許多研究工作致力于給流行的機器學(xué)習(xí)算法設(shè)計加速器[3-4].
近幾年,一種新型的器件——憶阻器引起了國內(nèi)外學(xué)者的高度關(guān)注,被稱為第4類基本電子元件,用來描述電荷與磁通量之間的關(guān)系[5-6].憶阻器可以根據(jù)流經(jīng)自身的電荷量來改變阻值,具有存儲[7]、邏輯運算[8-10]和模擬運算[11]等功能.
憶阻器可以實現(xiàn)學(xué)習(xí)與記憶功能,這種特性與神經(jīng)網(wǎng)絡(luò)中的突觸有極大的相似性.憶阻器交叉陣列結(jié)構(gòu)用于模擬量點積運算的想法引起了有關(guān)學(xué)者廣泛的關(guān)注.研究表明采用模擬信號形式的交叉陣列結(jié)構(gòu)比使用傳統(tǒng)的高性能計算系統(tǒng)的計算性能更優(yōu)[12].這使得憶阻器在神經(jīng)網(wǎng)絡(luò)計算方面具有獨特的優(yōu)勢,為制造更快更節(jié)能且具有生物智能的模擬計算機帶來了希望.
數(shù)字與模擬信號混合的憶阻器電路已經(jīng)被廣泛用于加速神經(jīng)網(wǎng)絡(luò)[13].2015年,一個可以實現(xiàn)準確點積運算的憶阻器交叉陣列結(jié)構(gòu)與相應(yīng)的編碼方案被提出[14].2016年同一團隊以實現(xiàn)1個卷積神經(jīng)網(wǎng)絡(luò)為目的,給出了更為詳盡的設(shè)計方案[15].但是經(jīng)過分析,該方案中的憶阻器交叉陣列并不能準確地存儲偏置,然而偏置對神經(jīng)網(wǎng)絡(luò)識別效果作用很大.PRIME[16]是一個基于阻變式存儲器(resistive random access memory, RRAM)的存內(nèi)計算(processing-in-memory, PIM)結(jié)構(gòu),通過設(shè)計精細的外圍電路來實現(xiàn)存儲器的復(fù)用使得它可以高速地運行深度神經(jīng)網(wǎng)絡(luò),其權(quán)值采用2個憶阻器單元分別存儲正負權(quán)值[11].ISAAC(in-situ analog arithmetic in crossbar)[17]與PRIME都是以運行深度神經(jīng)網(wǎng)絡(luò)為目的,但是它們的數(shù)據(jù)編碼與流水線設(shè)計完全不同.ISAAC把1個多位存儲的數(shù)字拆分開來,用多個周期來進行不同位的運算,然后進行移位相加,同時憶阻權(quán)重的編碼采用補碼形式,避免了用2個陣列存儲正負權(quán)重的方式.這種設(shè)計與軟件實現(xiàn)具有相同的精確度,但是該設(shè)計并沒有充分利用到憶阻器模擬元件的特性.并且此設(shè)計數(shù)模信號轉(zhuǎn)換和模數(shù)信號轉(zhuǎn)換頻繁,數(shù)模轉(zhuǎn)換器(digital-to-analog converter, DAC)和模數(shù)轉(zhuǎn)換器(analog-to-digital converter, ADC)的面積開銷較大.為了解決上述問題,本文主要有2個方面的貢獻:
1) 提出1個改進的憶阻器交叉陣列結(jié)構(gòu),可以準確地存儲權(quán)重與偏置.在末端連接1個反向放大器,結(jié)合相應(yīng)的存儲與編碼方案,可以準確地實現(xiàn)神經(jīng)網(wǎng)絡(luò)中權(quán)重與偏置應(yīng)有的作用.
2) 結(jié)合改進的憶阻器交叉陣列和CNN本身擁有的高容錯性,設(shè)計了1個完整的CNN電路.其中,池化層的操作采用采樣保持模塊(sample and hold, SH)來暫存上層卷積操作的輸出,然后直接進行池化操作,減少了1次數(shù)模-模數(shù)轉(zhuǎn)換過程,減少了面積和識別時間.
本文基于憶阻器來研究并設(shè)計CNN電路,改變了傳統(tǒng)的存儲單元與運算單元分離的設(shè)計,實現(xiàn)了一部分數(shù)據(jù)存儲與計算存在于1個單元,存在較大的理論與應(yīng)用意義.本文的設(shè)計非常適合應(yīng)用于DNN加速器,對將來人工智能技術(shù)產(chǎn)品化具有現(xiàn)實指導(dǎo)意義.
本節(jié)首先對CNN模型進行簡要的描述,然后簡單介紹憶阻器應(yīng)用于神經(jīng)網(wǎng)絡(luò)電路中的優(yōu)勢和憶阻神經(jīng)網(wǎng)絡(luò).
CNN屬于人工神經(jīng)網(wǎng)絡(luò)的一種,其隱藏層特殊的組織方式使得其在圖像識別領(lǐng)域表現(xiàn)出優(yōu)異的性能.受到生物視覺系統(tǒng)中局部敏感的啟發(fā)[18],CNN的設(shè)計引入了局部接受域,采用了接受矩陣數(shù)據(jù)作為輸入的網(wǎng)絡(luò)結(jié)構(gòu),并引入共享權(quán)重和池化(pooling)的想法來保證整個模型的性能[19].
如圖1所示,一般CNN模型包括2個部分:特征提取部分和分類器部分.特征提取部分負責提取信息的特征;分類器部分負責對提取得到的特征進行識別,可以用貝葉斯網(wǎng)絡(luò)等普通的神經(jīng)網(wǎng)絡(luò)模型來實現(xiàn).下面主要介紹特征提取部分.

Fig. 1 Architecture of a CNN used for images recognition圖1 用于圖像識別的1個CNN結(jié)構(gòu)

Fig. 2 Diagram of a convolution operation圖2 卷積操作示意圖
特征提取部分的基礎(chǔ)結(jié)構(gòu)包括2種隱藏層,即卷積層和池化層.卷積層可以被上層特征映射(feature map)的數(shù)量和尺寸、卷積核的尺寸和數(shù)量、跳躍因子、連接表等參數(shù)準確定義.如圖1所示,第1個卷積層的輸入是1張經(jīng)過預(yù)處理后尺寸為28×28的圖片,卷積核尺寸是5×5,向右和向下的跳躍因子都為1,提取出特征映射的尺寸是24×24.用6個卷積核分別對圖片進行卷積,得到6張?zhí)卣饔成洌喈斢谔崛?種不同的特征.這里輸入僅有1張圖,輸出有6張?zhí)卣饔成洌赃B接表是1個1×6的全‘1’矩陣.
如圖2所示,當執(zhí)行卷積操作時,1個卷積核W在特征映射左上方根據(jù)跳躍因子參數(shù)的設(shè)定從左到右、從上到下進行移動.每次移動卷積核都對應(yīng)特征映射上1個相同尺寸的局部接受域L′,L′與W相應(yīng)位置上的數(shù)值進行乘法運算,再求和,加上偏置,最后通過激活函數(shù)得到1個新提取的特征值,存入下1層的特征映射中.
(1)

(2)
式(1)描述了圖2這一時刻的計算過程.lp+i,q+j為局部接受域中的值,wi j為卷積核中相應(yīng)的值,b′為偏置,y為提取的特征值,f( )為激活函數(shù),一般取sigmoid函數(shù),如式(2)所示.
池化層的目的是為了避免過擬合,一般取最大池化或平均池化.如圖1第1個池化層操作過程為1張?zhí)卣饔成鋸淖笊戏介_始,從左向右、從上到下依次取相鄰不重疊的2×2的局部接受域,最大池化即取這4個數(shù)的最大值,平均池化取這4個數(shù)的平均值,作為下1層的特征值.
在生物和人工神經(jīng)網(wǎng)絡(luò)中,突觸都是計算和信息存儲的基本要素.1個人工神經(jīng)突觸需要記憶它的動態(tài)歷史,通過前后神經(jīng)元的神經(jīng)活動來決定其存儲的狀態(tài).圖3描述了1個由憶阻器單元模擬生物神經(jīng)元突觸[20].憶阻器可以根據(jù)前后神經(jīng)元的不同激活狀態(tài)來自我調(diào)整憶阻器的阻值,這和生物神經(jīng)突觸的行為極為相似.

Fig. 3 Schematic illustration of using memristors as synapses圖3 憶阻器突觸的示意圖
用憶阻器來實現(xiàn)突觸主要有4個方面優(yōu)勢:
1) 憶阻器是無源器件,在斷電后仍可以保持權(quán)值.
2) 憶阻器是模擬元件,其阻值存在最大值(稱為Roff)和最小值(稱為Ron),且憶阻值可以在它們之間連續(xù)變化.這種特性更加符合生物突觸狀態(tài)的改變,并且具有更加強大的存儲和計算功能.
3) 在傳統(tǒng)的互補金屬氧化物半導(dǎo)體(compl-ementary metal-oxide-semiconductor, CMOS)神經(jīng)形態(tài)電路中,存儲器與處理器之間的通信需要消耗時間與能量.憶阻器可以同時做存儲與計算,縮短了響應(yīng)時間.
4) 憶阻器可以與CMOS電路集成,CMOS構(gòu)建神經(jīng)元,憶阻器充當神經(jīng)突觸使得神經(jīng)網(wǎng)絡(luò)電路設(shè)計更加優(yōu)越.
圖4[21]是1個基于憶阻器交叉陣列的神經(jīng)網(wǎng)絡(luò)突觸結(jié)構(gòu),模擬了4個前神經(jīng)元與4個后神經(jīng)元連接的中間突觸,共包括16個突觸,每個前神經(jīng)元都和每個后神經(jīng)元相連.輸入信號以電壓形式輸入,突觸權(quán)值以電導(dǎo)形式存儲,根據(jù)歐姆定律可以實現(xiàn)輸入電壓Vin與憶阻器電導(dǎo)值G的乘法運算,又由于在電路中電流可以相加,則可以實現(xiàn)多個輸入與多個權(quán)值的點積運算,再利用敏感電阻Rs讀出電壓,計算結(jié)果為
Vout=VinGRs.
(3)

Fig. 4 Schematic of neuromorphic with memristor synapses in a crossbar configuration圖4 交叉結(jié)構(gòu)中的憶阻器突觸的神經(jīng)形態(tài)原理圖
本文將使用憶阻器交叉陣列來存儲卷積核和分類器的權(quán)重和偏置,并通過憶阻器的電路特性來實現(xiàn)原位的點積計算.
使用憶阻器設(shè)計神經(jīng)形態(tài)電路,主要用憶阻器替代神經(jīng)突觸,利用憶阻器的計算與存儲特性,實現(xiàn)神經(jīng)形態(tài)計算.本節(jié)提出了1個改進的憶阻器交叉陣列結(jié)構(gòu),通過增加3行憶阻器,可以更為準確地實現(xiàn)神經(jīng)網(wǎng)絡(luò)中普遍存在的點積運算.我們在電路中集成1個近似激活函數(shù)的器件可以實現(xiàn)神經(jīng)元的功能.本節(jié)還改進了憶阻器的編碼方案,進而設(shè)計了1個可用于卷積操作的憶阻器交叉陣列電路.
在神經(jīng)元模型中,1個神經(jīng)元同時接收多個前神經(jīng)元發(fā)出的信號,進行相應(yīng)的加權(quán)處理后,對神經(jīng)元產(chǎn)生相應(yīng)的刺激.圖5展示了改進憶阻交叉陣列中1列(第j列)的詳細設(shè)計,即網(wǎng)絡(luò)中第j個后神經(jīng)元與對其產(chǎn)生刺激的突觸. 如圖5所示,第j個后神經(jīng)元與n個前神經(jīng)元連接.神經(jīng)元與神經(jīng)元之間有刺激作用亦有抑制作用,映射到人工神經(jīng)網(wǎng)絡(luò)模型當中,突觸權(quán)值有正值亦有負值.但是憶阻器的憶阻值只能為正,所以此設(shè)計同樣使用前人2個憶阻值來存儲1個權(quán)值的思路,這樣設(shè)計可以實現(xiàn)與人工神經(jīng)網(wǎng)絡(luò)模型中相同的功能.將神經(jīng)網(wǎng)絡(luò)中權(quán)值矩陣W分為2個矩陣,分別將W中的正值的絕對值存儲為W+,負值的絕對值存儲為W-,W+與W-中其他的位置填充為0,既有:
W=W+-W-.
(4)

Fig. 5 Memristor crossbar column circuit圖5 憶阻器交叉陣列中列電路突觸電路示意圖

如圖5所示為神經(jīng)網(wǎng)絡(luò)中第j個后神經(jīng)元對應(yīng)的等效電路.因為反向放大器會使計算結(jié)果取反,本文中將負的權(quán)重矩陣W-存儲進上半部分,上半部分對應(yīng)的輸入是原始信號,將W+存儲進下半部分,下半部分的輸入是取反后的原始信號,這樣布局與之前學(xué)者的工作恰相反,可以得到1個正向的結(jié)果.
憶阻器的憶阻值并不能表示任意范圍的實數(shù),所以圖5所示電路必須配合相應(yīng)的編碼方案才能發(fā)揮較好的作用.
理想狀態(tài)下,憶阻器的憶阻值可以在最大值Roff和最小值Ron之間連續(xù)變化.本文根據(jù)2.1節(jié)提出的電路,對憶阻突觸與偏置采用編碼方案:

(5)

(6)

(7)

(8)
其中,σw和σb分別為存儲權(quán)值和偏置的憶阻器編碼后的電導(dǎo)值矩陣;σmax和σmin分別為憶阻器的最大電導(dǎo)值1Ron與最小電導(dǎo)值1Roff.分母為權(quán)值矩陣與偏置中絕對值最大的數(shù)的絕對值.⊕表示給矩陣中每一個元素加上一個常數(shù).式(5)~(8)表示的編碼方案可以表示任意權(quán)值和偏置.理想情況下這種編碼方案可以實現(xiàn)準確的點積運算.
人工神經(jīng)網(wǎng)絡(luò)中,神經(jīng)元的功能為接收前神經(jīng)元輸出的信號,進行處理,再發(fā)出信號.接收的信號為其所有前神經(jīng)元的輸出信號與相應(yīng)權(quán)重的點積結(jié)果,處理為給點積結(jié)果加偏置,再將其輸入激活函數(shù),激活函數(shù)輸出值即神經(jīng)元的輸出信號.
第2.1節(jié)中描述了點積與加偏置的過程.激活函數(shù)通常使用sigmoid函數(shù),如式(2)所示.本文采用文獻[15]中的方案,使用1個分段線性函數(shù)來代替sigmoid函數(shù),分段函數(shù)為

(9)
其中,c為點積結(jié)果,b′為偏置,二者之和為激活函數(shù)的輸入值,1t為斜率,t的選取與實驗中特征值的數(shù)據(jù)有關(guān).當設(shè)t=10時,分段函數(shù)與sigmoid函數(shù)的比較如圖6所示.圖5中最后1行憶阻器與反向放大器部分可以實現(xiàn)此功能.

Fig. 6 Comparison of sigmoid function and linear function圖6 sigmoid函數(shù)與分段線性函數(shù)的比較圖
對反向放大器部分的憶阻器Ms進行編碼:

(10)
經(jīng)過計算可以得到:
(11)

(12)
經(jīng)過上述設(shè)計,圖5所示電路在理想狀態(tài)下可以實現(xiàn)人工神經(jīng)元模型的功能,即:

(13)
后續(xù)電路中設(shè)置最大電壓為1V,最小電壓為0V即可實現(xiàn)分段函數(shù)的功能.
CNN中的突觸是卷積核,由于CNN引入局部接受域結(jié)構(gòu),使得信號輸入和神經(jīng)元處理與上述情況略有不同.如圖2所示,在CNN結(jié)構(gòu)中,每個神經(jīng)元的輸入信號是1個方陣而不是1個向量.因此,我們需要把方陣拉直成向量形式來進行處理,如式(14)為起點位置p,q的3×3局部接受域的拉直處理:

(14)
CNN中卷積核結(jié)構(gòu)設(shè)計如圖7所示,其中局部接受域與卷積核的尺寸為n×n,卷積核同樣需要拉直成1個向量,卷積核中的權(quán)值與卷積核對應(yīng)的偏置值有正值也有負值,處理方法與圖5相同.當1個局部接受域與卷積核是1個三維矩陣時,其操作與二維矩陣類似,最終都需要拉直成1個向量.然后把卷積核向量分成正值與負值2個向量,分別進行編碼與寫入.在電路運行過程中需要對輸入信號進行取反,由于輸入信號為模擬量,本文使用1個反向放大器來實現(xiàn)此功能,如圖7所示,設(shè)置圖中電阻R1與R2為相同值即可.在CNN中,每個卷積層包括多個卷積核,圖7每列實現(xiàn)1個卷積核的功能,圖7中共有k個卷積核.

Fig. 7 Diagram displaying the memristor crossbar design for convolution operation圖7 處理卷積操作的憶阻器交叉陣列設(shè)計的示意圖
經(jīng)過這一部分詳細的設(shè)計,圖7所示的電路可以較為準確地實現(xiàn)1個局部接受域和卷積核尺寸為n×n,卷積核數(shù)量為k的卷積層的操作.基于此電路實現(xiàn)的卷積操作,具有高并行性.
本節(jié)將根據(jù)第2節(jié)中提出的憶阻器交叉陣列結(jié)構(gòu)和編碼方案,設(shè)計一個CNN電路結(jié)構(gòu),并且引入流水線技術(shù)來進一步提高所設(shè)計結(jié)構(gòu)的性能.
圖8為設(shè)計的CNN電路整體結(jié)構(gòu).為了更加靈活地運行CNN算法,在1個加速芯片上設(shè)計了2種不同的計算單元C與C′,其中C是用來計算特征提取部分,C′是用來計算分類器部分.
如圖8所示,每個計算單元C由1個靜態(tài)隨機存儲器(static random access memory, SRAM)緩存、2個憶阻器交叉陣列結(jié)構(gòu)(MC1與MC2)和2個池化存儲(pooling and store, PS)模塊組成.其中SRAM用于存儲需要識別的信息(即CNN的輸入);MC1與MC2分別用于存儲CNN第1個卷積層與第2個卷積層的卷積核,并實現(xiàn)卷積操作.

Fig. 8 CNN architecture hierarchy圖8 CNN整體電路結(jié)構(gòu)層次圖
當運行CNN時,從SRAM中將所需數(shù)據(jù)經(jīng)過DAC傳輸給MC1,計算得到的模擬信號傳送給PS. PS用來運行池化層的操作,并存儲計算結(jié)果,這里是計算平均池化.如圖8所示,PS結(jié)構(gòu)由諸多小塊組成,其數(shù)量與前面相連的憶阻器交叉陣列的列數(shù)相同(即卷積核的數(shù)量).每個小塊由緩存、SH[22]、ADC和MC4這4個模塊組成.由于CNN獨特的網(wǎng)絡(luò)結(jié)構(gòu),在網(wǎng)絡(luò)正常運行時會生成大量的中間量,這些中間量存儲在PS中的緩存中.
在卷積層與池化層之間,我們采用SH電路暫存卷積操作得到模擬信號,而不使用ADC變換后再存儲.SH可以抓取MC1傳送來的模擬信號并且保持,圖8中MC4用于求尺寸為2×2的局部接受域特征值的平均值,所以每個SH模塊有4個獨立電路,分別抓取4個周期的輸出結(jié)果,詳細設(shè)計如圖9所示.每個MC4都只由1列憶阻器組成,其中每1個輸入線路都與1個獨立的SH模塊相連,每個交叉點采用1個憶阻器進行相連.取反部分和卷積核電路設(shè)計相同.

Fig. 9 Memristor crossbar used to compute ave-pooling圖9 用于計算平均池化的憶阻器crossbar結(jié)構(gòu)
卷積層每進行1次卷積操作會生成與卷積核數(shù)量相同的模擬信號,我們首先將其存入相應(yīng)的SH模塊中,等待滿足要求再對其進行池化操作,這樣和前人工作相比可以節(jié)省1組數(shù)模-模數(shù)轉(zhuǎn)換過程.
求4個特征值的平均值可以看作2×2的局部接受域與大小為2×2元素都為1/4的矩陣做點積運算.因此,根據(jù)2.2節(jié)中的編碼方案,對圖9中各憶阻器編碼:

(15)

(16)
圖9中,同樣對信號進行取反,還有4個憶阻器都設(shè)為高阻態(tài)Roff,這樣可以輸出池化的結(jié)果,得到輸出:

(17)
將輸出信號進行模數(shù)轉(zhuǎn)換存入緩存,等待進行第2層卷積操作.第2層卷積操作過程與第1次類似,只不過是在第1個PS模塊所有的SRAM緩存中同時取相應(yīng)的值輸入MC2相應(yīng)的DAC中.
C′模塊用來完成分類器部分的計算,C部分提取的最終特征值都要傳輸給C′,由C′運行分類器部分的運算過程,得到最終結(jié)果.分類器部分采用普通的全連接網(wǎng)絡(luò).圖8中C′部分由緩存、DAC,ADC和MC3組成.由路由裝置將數(shù)據(jù)送入緩存,等待所需數(shù)據(jù)傳輸完畢,進行數(shù)模轉(zhuǎn)換用MC3進行點積運算,再由模數(shù)轉(zhuǎn)換成數(shù)字信號,經(jīng)路由傳送給外界,即運行完整個神經(jīng)網(wǎng)絡(luò)算法.
圖8中1個路由同時連接3個C和1個C′,連接方式為硬連接,傳輸方向為從C到C′.由于在C′中只計算分類器部分,其運行周期數(shù)比C中特征提取部分的周期數(shù)少很多,所以在電路設(shè)計時可以給多個C匹配1個C′.
根據(jù)圖1中描述的網(wǎng)絡(luò)結(jié)構(gòu),以1張大小為28×28的圖像為例,分析CNN的數(shù)據(jù)流動過程.在進行第1個卷積層的操作時,特征映射圖中的特征值逐漸生成,如圖10所示,左邊特征映射中特征值1~26已經(jīng)計算得到.此時雖然第1個卷積層的所有操作沒有完成,但已經(jīng)具備進行后面池化層的所有條件.在此時開始運行池化層的操作,既可以降低整個CNN算法運行的時間,又可以減少必要的緩存空間.

Fig. 10 Diagram displaying the pipe-line of feature values圖10 特征值流水線示意圖
上述流水線技術(shù)還可以改進,本文采用以池化部分的局部接受域為跳躍生成目標來進行卷積操作.如圖10所示,即原始CNN卷積層的卷積過程都為從左至右、從上至下,本工作采用從左到右先生成1~2,然后再下跳生成25~26,這樣可以符合SH的電路要求,也可以降低3~24部分的存儲空間需求.
實驗采用如圖1所示的CNN結(jié)構(gòu).參數(shù)設(shè)置如下:輸入為28×28的灰度圖片,第1層卷積層有6個5×5的卷積核,卷積操作中卷積核向右與向下移動,跳躍因子為1,2個池化層都是無交叉的2×2的局部接受域求平均的操作;第2個卷積層有12個5×5×6的卷積核;最后的分類器采用無隱藏層的簡單全連接神經(jīng)網(wǎng)絡(luò).
本實驗采用MNIST數(shù)據(jù)集,包含70 000張手寫體數(shù)字圖片.實驗中將其分為2部分,將其中60 000張作為訓(xùn)練集來訓(xùn)練CNN,其他10 000張作為測試集來測試訓(xùn)練結(jié)果以驗證我們設(shè)計電路結(jié)構(gòu)的有效性.
訓(xùn)練過程中以50張圖片為單位,對訓(xùn)練集進行100次迭代訓(xùn)練,對權(quán)重及偏置進行更新,得到權(quán)重與偏置中的最大絕對值分別為4.927 9與4.719 3.如果我們將權(quán)重的最大絕對值設(shè)為大于4.927 9的任一個數(shù),理論上可以使用本文設(shè)計的電路結(jié)構(gòu)和編碼方案來準確實現(xiàn)測試過程,但是對憶阻器進行寫操作時本就存在誤差.由圖11可以看到權(quán)值與其對應(yīng)編碼的阻值對應(yīng)是非線性關(guān)系,當最大絕對值是5時權(quán)值絕對值范圍0~2.5由憶阻器超過99%的電阻范圍來表示,根據(jù)圖12權(quán)值分布有98%的權(quán)重在0~2.5之間,這樣的分布可以使我們較為準確地對憶阻器進行寫操作.我們也可以通過調(diào)整最大絕對值來更好地利用憶阻器電阻范圍.

Fig. 11 Weights and memristance after encoding圖11 權(quán)值與編碼后對應(yīng)的憶阻值

Fig. 12 Diagram displaying of weight distribution圖12 權(quán)值分布圖
實驗中采用了1個簡單線性的憶阻器模型[23]:

(18)
其中,δr代表憶阻器阻值的最大值Roff與最小值Ron的差值,δt代表時間最小步,Vm為施加在憶阻器上的電壓值,Vth,pos是憶阻器的正向電壓閾值,Vth,neg是憶阻器的負向電壓閾值,tneg是憶阻器的阻值從Ron增加到Roff所需要的轉(zhuǎn)換時間,tpos是阻值從Roff到Ron所需要的時間.參數(shù)設(shè)置如表1所示.寫操作采用文獻[15]中的寫電路,考慮到憶阻器制作工藝不成熟,在本文的仿真實驗中加入1 b寫隨機噪聲,使得憶阻器的表示精度降低1 b.

Table 1 Memristor Parameters表1 憶阻器參數(shù)

Fig. 13 Comparison chart of recognition error rate for different numbers of bit memristor圖13 不同存儲位數(shù)憶阻器的識別誤差比較圖
對實際的憶阻器物理器件,編碼后進行寫操作并不能準確地實現(xiàn)理想的狀態(tài)調(diào)整,會存在讀寫噪聲.實驗中分別對憶阻器存儲大小為4 b,6 b,8 b[16]信息的情況進行了仿真實驗,并在實驗中加入了隨機噪聲因素來比較各自的誤差率,如圖13所示.軟件環(huán)境下測試集的誤差率為1.08%,根據(jù)圖13所示,隨著迭代次數(shù)的增加,3個實驗的誤差率總趨勢都越來越低.其中單個憶阻器能表示的信息越多,電路運行結(jié)果與軟件結(jié)果越接近.由實驗結(jié)果得出單個憶阻器存儲6 b與8 b的電路實驗結(jié)果中的誤差率與軟件實驗結(jié)果中誤差率的平均差距分別增加了0.039%與0.012%,可以得出與軟件實驗極其相似的結(jié)果.這也體現(xiàn)了CNN具有極好的容錯性,在電路設(shè)計中憶阻器存儲值存在微小的偏差不會對識別結(jié)果產(chǎn)生較大影響.
在只考慮流水線的情況下,使用ISAAC[17]結(jié)構(gòu)運行如圖1所示的CNN.每次卷積操作需要22個周期完成,每個池化操作需要5個周期,完成圖1所示的算法需要11 001個周期.文獻[17]設(shè)置的周期為100 ns,即時鐘頻率為10 MHz.本文為了實驗的可比較性,同樣采用10 MHz的頻率.采用本文設(shè)計的電路結(jié)構(gòu),使用1個C計算單元來計算特征提取部分,然后使用C′來識別,只需1 162個周期.
在考慮分布式的情況下,在GPU上實現(xiàn)ISAAC可以將1個卷積層的操作分布到不同的憶阻器交叉陣列結(jié)構(gòu)中進行運算.ISAAC中1個tile可以同時運行48個圖1所示同參數(shù)的CNN.1個tile的面積為0.372 mm2,1個芯片一共集成了168個tile,總面積為88 mm2.
為了比較上的公平,本文與ISAAC一樣,使用CACTI 6.5在32 nm工藝下模擬各個buffer的面積,片外連接采用與ISAAC相同的方式.ISAAC沒有給出憶阻器面積的估算方式,文獻[24]給出在CMOS 65 nm工藝下,憶阻器面積可達10 nm×10 nm.考慮到金屬線之間的間隔,本文對單個憶阻器的面積用20 nm×20 nm進行估算.注意到,相對于CMOS器件,憶阻器的面積很小,憶阻器交叉陣列的面積在整個電路中所占比例很小,對芯片面積的影響幾乎可以忽略.各個部件參數(shù)及面積如表2所示,芯片總面積如表3所示.我們集成1 500個C與100個C′,總面積為62.37 mm2,加上片外面積共85.25 mm2.可并行運算1 500個整套圖1中的CNN.
表4顯示分別用軟件,ISAAC和本文設(shè)計結(jié)構(gòu)測試10 000條手寫體數(shù)字的識別時間.其中使用軟件運行時,我們在TensorFlow和CUDA的環(huán)境下采用python語言來編寫程序.硬件配置為Intel CoreTMi7-6700K CPU@4.00 GHz×8,GPU 為 GeForce GTX 980,系統(tǒng)字長為64位.由表3和表4可以得出,本文設(shè)計的結(jié)構(gòu)在相同面積的基礎(chǔ)上運算速度是ISAAC的7.7倍.在1個不到1 cm2的芯片面積上,本文提出電路結(jié)構(gòu)的運算速度比如上配置的單機快1 770倍.

Table 2 Structure Parameters表2 結(jié)構(gòu)參數(shù)

Table 3 Chip Parameters表3 芯片參數(shù)

Table 4 Recognition Time Comparison表4 識別時間比較 s
本文采用數(shù)字-模擬混合信號的形式,利用憶阻器與傳統(tǒng)CMOS器件結(jié)合設(shè)計出了1個可以實現(xiàn)完整CNN的電路結(jié)構(gòu).本文首先提出了1個改進的可以實現(xiàn)神經(jīng)網(wǎng)絡(luò)算法中普遍存在的點積運算的憶阻器交叉陣列電路.然后將此電路分別用于CNN中的卷積核、池化與分類器部分,設(shè)計出了1個可以完成具有2個卷積層和池化層的CNN電路.實驗結(jié)果表明設(shè)計的結(jié)構(gòu)大大降低了算法運行時間與硬件開銷,僅存在微小的識別誤差開銷.
憶阻器作為1個新興的器件,在納米級工藝下與傳統(tǒng)器件相結(jié)合設(shè)計電路時,受到了現(xiàn)有技術(shù)與傳統(tǒng)器件的制約,其電路設(shè)計潛力尚未完全展示.下一步我們將開展用憶阻器來設(shè)計實現(xiàn)性能更高的CNN加速器,并實現(xiàn)原位訓(xùn)練.
[1]Silver D, Huang A, Maddison C J, et al. Mastering the game of go with deep neural networks and tree search[J]. Nature, 2016, 529(7587): 484-489
[2]Tao Jianhua, Chen Yunji. Current status and consideration on brain-like computing chip and brain-like intelligent robot[J]. Bulletin of Chinese Academy of Sciences, 2016, 31(7): 803-811 (in Chinese)
(陶建華, 陳云霽. 類腦計算芯片與類腦智能機器人發(fā)展現(xiàn)狀與思考[J]. 中國科學(xué)院院刊, 2016, 31(7): 803-811)
[3]Wang Ying, Xu Jie, Han Yinhe, et al. Deepburning: Automatic generation of fpga-based learning accelerators for the neural network family[C] //Proc of the 53rd Design Automation Conf (DAC’16 ). Piscataway, NJ: ACM, 2016: Article No.110
[4]Wang Ying, Li Huawei, Li Xiaowei. Re-architecting the on-chip memory sub-system of machine-learning accelerator for embedded devices[C] //Proc of the 35th Int Conf on Computer-Aided Design. New York: ACM, 2016: Article No.13
[5]Chua L. Memristor-the missing circuit element[J]. IEEE Trans on Circuit Theory, 1971, 18(5): 507-519
[6]Strukov D B, Snider G S, Stewart D R, et al. The missing memristor found[J]. Nature, 2008, 453(7191): 80-83
[7]You Zhiqiang, Hu Fei, Huang Liming, et al. A long lifetime, low error rate RRAM design with self-repair module[J]. Journal of Semiconductors, 2016, 37(11): 94-98
[8]Wang Ying, Han Yinhe, Zhang Lei, et al. ProPRAM: Exploiting the transparent logic resources in non-volatile memory for near data computing[C] //Proc of the 52nd Annual Design Automation Conf. New York: ACM, 2015: Article No.47
[9]Borghetti J, Snider G S, Kuekes P J, et al. ‘Memristive’ switches enable ‘stateful’ logic operations via material implication[J]. Nature, 2010, 464(7290): 873-876
[10]Liu Bosheng, You Zhiqiang, Li Xiangrao, et al. Comparator and half adder design using complementary resistive switches crossbar[J]. IEICE Electronics Express, 2013, 10(13): Article No.20130369
[11]Li Boxun, Yi Shan, Hu Miao, et al. Memristor-based approximated computation[C] //Proc of the 2013 Int Symp on Low Power Electronics and Design. Piscataway, NJ: IEEE, 2013: 242-247
[12]Taha T M, Hasan R, Yakopcic C, et al. Exploring the design space of specialized multicore neural processors[C] //Proc of the 2013 Int Joint Conf on Neural Networks. Piscataway, NJ: IEEE, 2013: 1-8
[13]Prezioso M, Merrikh-Bayat F, Hoskins B D, et al. Training and operation of an integrated neuromorphic network based on metal-oxide memristors[J]. Nature, 2015, 521(7550): 61-64
[14]Yakopcic C, Hasan R, Taha T M. Memristor based neuromorphic circuit for ex-situ training of multi-layer neural network algorithms[C] //Proc of the 2015 Int Joint Conf on Neural Networks. Piscataway, NJ: IEEE, 2015: 1-7
[15]Yakopcic C, Alom M Z, Taha T M. Memristor crossbar deep network implementation based on a convolutional neural network[C] //Proc of the 2016 Int Joint Conf on Neural Networks. Piscataway, NJ: IEEE, 2016: 963-970
[16]Chi Ping, Li Shuangchen, Xu Cong, et al. PRIME: A novel processing-in-memory architecture for neural network computation in reram-based main memory[C] //Proc of the 43rd Int Symp on Computer Architecture. Piscataway, NJ: IEEE, 2016: 27-39
[17]Shafiee A, Nag A, Muralimanohar N, et al. ISAAC: A convolutional neural network accelerator with in-situ analog arithmetic in crossbars[C] //Proc of the 43rd Int Symp on Computer Architecture. Piscataway, NJ: IEEE, 2016: 14-26
[18]Hubel D H, Wiesel T N. Receptive fields, binocular interaction and functional architecture in the cat’s visual cortex[J]. The Journal of physiology, 1962, 160(1): 106-154
[19]LeCun Y, Bottou L, Bengio Y, et al. Gradient-based learning applied to document recognition[J]. Proceedings of the IEEE, 1998, 86(11): 2278-2324
[20]Jo S H, Chang Ting, Ebong I, et al. Nanoscale memristor device as synapse in neuromorphic systems[J]. Nano Letters, 2010, 10(4): 1297-1301
[21]Hu Miao, Strachan J P, Li Zhiyong, et al. Dot-product engine for neuromorphic computing: Programming 1T1M crossbar to accelerate matrix-vector multiplication[C] //Proc of the 53rd Design Automation Conf (DAC’16 ). Piscataway, NJ: ACM, 2016: Article No.19
[22]O’Halloran M, Sarpeshkar R. A 10-nW 12-bit accurate analog storage cell with 10-aA leakage[J]. IEEE Journal of Solid-State Circuits, 2004, 39(11): 1985-1996
[23]Wang Weiwei, You Zhiqiang, Liu Peng, et al. An adaptive neural network A/D converter based on CMOS/memristor hybrid design[J]. IEICE Electronics Express, 2014, 11(24): Article No.20141012
[24]Govoreanu B, Kar G S, Chen Y Y, et al. 10×10nm2Hf/HfOxcrossbar resistive RAM with excellent performance, reliability and low-energy operation[C] //Proc of the 2011 IEEE Int Electron Devices Meeting. Piscataway, NJ: IEEE, 2011: 729-732