陳宇昊,宋印杰,祝亞楠,高云飛,李洪革
北京航空航天大學(xué) 電子信息工程學(xué)院,北京100191
目前,傳統(tǒng)的馮諾依曼架構(gòu)的中央處理器芯片占據(jù)著計(jì)算處理的核心。馮氏架構(gòu)通過(guò)存儲(chǔ)、計(jì)算和控制單元獨(dú)立運(yùn)行、分工配合完成運(yùn)算任務(wù),其特點(diǎn)是利用多比特位的二進(jìn)制數(shù)據(jù)/指令在存儲(chǔ)和計(jì)算單元中順序逐條執(zhí)行,以便完成設(shè)定的邏輯計(jì)算等功能[1]。目前通用CPU、GPU、TPU 芯片存在致命問(wèn)題:其一,大數(shù)據(jù)量的卷積計(jì)算造成傳統(tǒng)人工智能芯片功耗的激增,不利于人工智能的邊緣側(cè)部署,即“功耗墻”問(wèn)題;其二,由于深層網(wǎng)絡(luò)包含巨量權(quán)值參數(shù),對(duì)存儲(chǔ)帶寬、時(shí)延產(chǎn)生更高要求,造成整個(gè)系統(tǒng)的計(jì)算瓶頸,即“內(nèi)存墻”問(wèn)題[2]。
生物大腦的計(jì)算方法與馮諾依曼計(jì)算體系完全不同,生物神經(jīng)元利用基于時(shí)間/空間編碼的尖峰脈沖傳遞信息,而非二進(jìn)制編碼的數(shù)據(jù)。脈沖神經(jīng)網(wǎng)絡(luò)是一種模擬生物大腦的神經(jīng)網(wǎng)絡(luò)類(lèi)型,使用脈沖序列進(jìn)行信息傳遞與運(yùn)算,這與二進(jìn)制數(shù)計(jì)算的傳統(tǒng)神經(jīng)網(wǎng)絡(luò)完全不同,具有更低的計(jì)算資源需求。因此,探索基于脈沖運(yùn)算的深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)體系架構(gòu)是破解計(jì)算瓶頸的新的突破口,具有全新的研究?jī)r(jià)值。
概率計(jì)算是神經(jīng)網(wǎng)絡(luò)的重要實(shí)現(xiàn)方法之一[3-5],利用離散脈沖序列取代順序二進(jìn)制數(shù),實(shí)現(xiàn)更低的計(jì)算資源占用。然而其在計(jì)算時(shí)延(latency)或計(jì)算精度方面的犧牲也成為硬件設(shè)計(jì)的挑戰(zhàn)。針對(duì)上述問(wèn)題,部分研究者已經(jīng)進(jìn)行了一些初步的嘗試,Najafi、Sim 等課題組提出了改進(jìn)概率編碼的方法優(yōu)化上述問(wèn)題[6-7];Kim 和Liu 等人則采用改進(jìn)隨機(jī)數(shù)的方法提高其計(jì)算效率[8-9];Jenson 等人提出了確定性位流的概率計(jì)算方法,可達(dá)到更佳的計(jì)算精度[10];2020年,Huang 團(tuán)隊(duì)基于FinFET 技術(shù),研究了概率邏輯電路的可靠性,為新型納米器件的應(yīng)用提供了良好的前景[11]。然而,使用概率計(jì)算方法搭建神經(jīng)網(wǎng)絡(luò)計(jì)算架構(gòu)仍然是面臨的挑戰(zhàn)。
基于上述研究成果以及目前仍然存在的各種挑戰(zhàn),本文提出新的設(shè)計(jì)思想和方案,其主要貢獻(xiàn)如下:
(1)基于概率計(jì)算規(guī)則,對(duì)精確概率乘法的時(shí)延問(wèn)題進(jìn)行優(yōu)化,并設(shè)計(jì)了單路/多路概率計(jì)算電路;
(2)對(duì)比分析了概率計(jì)算乘加器與傳統(tǒng)布爾邏輯乘加器,并根據(jù)實(shí)驗(yàn)所得各項(xiàng)物理參數(shù)給出結(jié)論;
(3)設(shè)計(jì)了人工神經(jīng)元與脈沖神經(jīng)元的統(tǒng)一運(yùn)算電路,即雙神經(jīng)元形式的計(jì)算單元;
(4)搭建了可重構(gòu)神經(jīng)網(wǎng)絡(luò)計(jì)算架構(gòu),嘗試運(yùn)行多種網(wǎng)絡(luò)模型,實(shí)現(xiàn)毫瓦級(jí)的低功耗設(shè)計(jì)。
本文的組織結(jié)構(gòu)如下:首先,基于概率計(jì)算的基礎(chǔ)討論了概率計(jì)算乘法與誤差來(lái)源;其次,設(shè)計(jì)了低時(shí)延、高計(jì)算效率的概率計(jì)算電路;再次,基于概率計(jì)算,將人工神經(jīng)元向脈沖神經(jīng)元轉(zhuǎn)換,實(shí)現(xiàn)兩者運(yùn)算的統(tǒng)一;另外,基于FPGA 硬件電路設(shè)計(jì),驗(yàn)證與實(shí)現(xiàn)了概率計(jì)算乘加器,并與傳統(tǒng)陣列乘加器進(jìn)行對(duì)比分析;再者,搭建可重構(gòu)的脈沖神經(jīng)網(wǎng)絡(luò)計(jì)算架構(gòu),基于FPGA 設(shè)計(jì)套件得到資源、功耗數(shù)據(jù),并與相關(guān)設(shè)計(jì)進(jìn)行對(duì)比分析;最后,給出文章的結(jié)論。
基于順序二進(jìn)制數(shù)的布爾邏輯是計(jì)算機(jī)處理器和AI 加速器的計(jì)算基礎(chǔ),也是傳統(tǒng)數(shù)字邏輯運(yùn)算的基礎(chǔ)。而概率計(jì)算的機(jī)制與順序二進(jìn)制計(jì)算邏輯完全不同,這種離散數(shù)字脈沖式的計(jì)算方式在加法和乘法計(jì)算方面具有獨(dú)特的優(yōu)勢(shì),具體表現(xiàn)在資源、功耗與吞吐量等方面,在大數(shù)據(jù)量的并行計(jì)算中其優(yōu)勢(shì)也將更加明顯;此外,其脈沖流形式的數(shù)據(jù)表現(xiàn)方式更類(lèi)似于生物神經(jīng)細(xì)胞,而受到了廣泛的研究。本文首先闡述概率計(jì)算的基本概念和計(jì)算機(jī)制。
單極性概率脈沖編碼(或稱(chēng)為單極性概率計(jì)算),其脈沖碼流的取值是0 或1,概率脈沖編碼通常由輸入二進(jìn)制數(shù)、隨機(jī)數(shù)發(fā)生器(random number generator,RNG)通過(guò)比較器而獲得,本文的RNG 采用線性反饋移位寄存器(linear feedback shift register,LFSR)。LFSR 可以產(chǎn)生周期性的偽隨機(jī)序列,nbit LFSR 生成的隨機(jī)數(shù)的取值范圍是0~2n-1,概率脈沖編碼電路結(jié)構(gòu)如圖1 所示,LFSR 產(chǎn)生的隨機(jī)數(shù)和二進(jìn)制數(shù)輸入給比較器,當(dāng)二進(jìn)制數(shù)大于隨機(jī)數(shù)時(shí)輸出“1”脈沖,否則輸出“0”。
Fig.1 Conversion of binary number into stochastic pulse圖1 二進(jìn)制數(shù)向概率脈沖轉(zhuǎn)換的方法
若有兩個(gè)無(wú)符號(hào)二進(jìn)制數(shù)Ab(nbit)、Bb(mbit)分別與nbit 和mbit LFSR 比較得到概率脈沖序列As和Bs,那么在序列As和Bs中,出現(xiàn)脈沖“1”的概率分別為:
如果兩序列互不相關(guān),則As和Bs同時(shí)為“1”的概率P(AB)等于概率P(A)、P(B)乘積,即,當(dāng)使用概率脈沖表示數(shù)值時(shí),乘法運(yùn)算可以使用一個(gè)“與”邏輯門(mén)實(shí)現(xiàn):
式(2)中用“1”出現(xiàn)的頻率代替概率:P(AB)≈ADD/Np,Np是脈沖序列的長(zhǎng)度,ADD是乘積脈沖中“1”脈沖的累加數(shù),通常使用計(jì)數(shù)器進(jìn)行統(tǒng)計(jì)。
假設(shè)Np=2L,代入式(2)得:
若L∈N+,那么乘積Ab?Bb可由ADD移位n+m-L比特作為近似值,避免從乘積脈沖轉(zhuǎn)換到二進(jìn)制數(shù)值時(shí),產(chǎn)生額外的乘法或除法計(jì)算,減少硬件開(kāi)銷(xiāo)。當(dāng)L=n+m時(shí),可得Ab?Bb≈ADD,即“1”脈沖的累加數(shù)ADD可直接作為乘積的近似結(jié)果,不需要對(duì)ADD移位。
如1.1 節(jié)所述,在經(jīng)典概率計(jì)算的乘法中,為保證輸出脈沖的概率等于兩輸入脈沖的概率之積,要求兩個(gè)輸入脈沖彼此互不相關(guān),因此不同編碼電路中需要使用不同RNG 以產(chǎn)生互不相關(guān)的概率脈沖,導(dǎo)致轉(zhuǎn)換器產(chǎn)生較多的硬件資源占用;其次,采用LFSR 作為隨機(jī)數(shù)發(fā)生器,并非真隨機(jī)數(shù)發(fā)生器,難以保證兩脈沖間互不相關(guān),導(dǎo)致在計(jì)算中不可避免地產(chǎn)生誤差。
假設(shè),Ab(nbit) 為二進(jìn)制乘數(shù),使用在[0,2n-1]上均勻分布的隨機(jī)序列Rand與Ab進(jìn)行比較,脈沖“1”出現(xiàn)的概率為:
設(shè)脈沖長(zhǎng)度為Np,滿足Ab>Rand的隨機(jī)數(shù)個(gè)數(shù)的期望為:
本文采用被乘數(shù)調(diào)制乘數(shù)所產(chǎn)生脈沖串的乘法計(jì)算方法[12]。Bb(mbit)為被乘數(shù),對(duì)乘數(shù)的概率脈沖序列As(長(zhǎng)度Np)進(jìn)行調(diào)制,保留有效長(zhǎng)度(Nvalid=Np×Bb/2m) 內(nèi)的“1”脈沖;將舍棄部分的“1”脈沖清零。經(jīng)過(guò)上述調(diào)制后的脈沖序列作為Ab、Bb的乘積脈沖,乘積脈沖中“1”的概率將正比于Ab×Bb,如式(6)所示:
雖然由上述推理可知,乘積脈沖串的概率是正比于二進(jìn)制數(shù)的乘積,但實(shí)際計(jì)算時(shí),得到的結(jié)果往往帶有誤差,這通常是由以下原因引起的:
(1)樣本估計(jì)總體導(dǎo)致的誤差:由概率轉(zhuǎn)換為乘積二進(jìn)制數(shù)值時(shí),用脈沖“1”的頻率代替概率值是一種用樣本估計(jì)總體的統(tǒng)計(jì)思想,頻率是試驗(yàn)得到的統(tǒng)計(jì)量,概率是計(jì)算得到的理論值,隨著Np增大,可以使頻率在概率附近的波動(dòng)范圍減小,但無(wú)法保證頻率一定等于概率。
(2)隨機(jī)數(shù)非均勻分布導(dǎo)致的誤差:上述推理建立在隨機(jī)數(shù)發(fā)生器Rand為均勻分布序列這一條件之上,但實(shí)際計(jì)算時(shí),使用nbit LFSR 作為隨機(jī)數(shù)發(fā)生器,并非真隨機(jī)數(shù)發(fā)生器,僅在脈沖長(zhǎng)度Np=2n×L且L∈N+時(shí),才具備均勻分布隨機(jī)序列的特征,式(4)才成立。
(3)計(jì)算誤差:調(diào)制式的概率乘法計(jì)算,只有當(dāng)脈沖串的舍棄部分與有效部分中1 的占比相等時(shí),即Np=2n+m時(shí),乘法結(jié)果才準(zhǔn)確,否則存在計(jì)算誤差。
所使用的概率乘法計(jì)算,并非對(duì)兩乘數(shù)的概率脈沖進(jìn)行邏輯與操作實(shí)現(xiàn)乘法,而是使用調(diào)制式的乘法方式,因此也避免了兩乘數(shù)的脈沖序列互不相關(guān)的制約,可以多個(gè)計(jì)算單元共用同一個(gè)隨機(jī)數(shù)發(fā)生器,每個(gè)乘數(shù)僅需要一個(gè)比較器或計(jì)數(shù)器,有效降低了二進(jìn)制-概率脈沖轉(zhuǎn)換器的硬件資源開(kāi)銷(xiāo),且Np=2n+m時(shí)可達(dá)到與二進(jìn)制乘法器相同的計(jì)算精度[8]。
1.2 節(jié)所提出的概率脈沖調(diào)制乘法電路結(jié)構(gòu)如圖2 所示,電路包括LFSR、比較器、減法計(jì)數(shù)器和脈沖序列計(jì)數(shù)器。2n×Bb作為減法計(jì)數(shù)器的初始值,每個(gè)時(shí)鐘遞減1,當(dāng)計(jì)數(shù)到0 后,脈沖計(jì)數(shù)器的使能信號(hào)置零,完成一次乘法運(yùn)算。
Fig.2 Stochastic multiplication with pulse modulation圖2 概率脈沖調(diào)制乘法
脈沖長(zhǎng)度Np=2n+m是實(shí)現(xiàn)精確計(jì)算的必要條件,而圖2 電路結(jié)構(gòu)需經(jīng)過(guò)Nvalid=2n×Bb個(gè)時(shí)鐘周期才能得到乘積結(jié)果,產(chǎn)生較高的時(shí)間消耗。為了提高轉(zhuǎn)換效率,本文利用LFSR 產(chǎn)生的隨機(jī)數(shù)序列具有周期性這一特點(diǎn),實(shí)現(xiàn)了多路脈沖的并行發(fā)送與并行接收功能。
考慮nbit 的數(shù)Ab和mbit 的數(shù)Bb進(jìn)行無(wú)符號(hào)整數(shù)乘法,Ab與nbit LFSR 產(chǎn)生的隨機(jī)數(shù)比較得到概率脈沖序列As,脈沖序列的周期為2n,脈沖長(zhǎng)度Np=2n+m;如果將該脈沖按照周期(2n)分組,可分為2m組{As1As2…},各組脈沖序列是完全相同的且長(zhǎng)度為2n;若計(jì)數(shù)器并行接收兩組脈沖序列,那么每次接收“1”脈沖的個(gè)數(shù)只可能為2 或0,因此可將兩組脈沖合并為一組脈沖,每接收一個(gè)脈沖,計(jì)數(shù)器執(zhí)行加2操作;以此類(lèi)推,若將2L組脈沖序列合并,則每個(gè)脈沖會(huì)令計(jì)數(shù)器執(zhí)行加2L操作。
將合并后的脈沖稱(chēng)作幅度脈沖,長(zhǎng)度用Namplitude表示,不同合并數(shù)量得到的幅度脈沖,盡管電壓幅度相同,但實(shí)際包含了不同的累加幅度信息,在實(shí)際電路中,通過(guò)時(shí)間或者空間上的不同進(jìn)行區(qū)分,并且合并前后的脈沖長(zhǎng)度有下列關(guān)系:Np=2L×Namplitude,2L表示參與合并的脈沖組數(shù)。
Np=2n+m的脈沖串進(jìn)行乘法調(diào)制后,有效長(zhǎng)度為Nvalid=Np×Bb/2m=2n×Bb,利用上述分組合并的思想,長(zhǎng)為Nvalid的脈沖序列可以轉(zhuǎn)換為m組不同合并數(shù)量的脈沖序列。例如,Bb為7 bit 且Bb=63 時(shí),有效長(zhǎng)度包含63 個(gè)周期,基于二進(jìn)制數(shù)按位構(gòu)造的方式如63=0×26+1×25+1×24+1×23+1×22+1×21+1×20,即(63)10=(0111111)2,其中,Bb二進(jìn)制形式的第L位為1 時(shí),表示可以從有效脈沖序列中選取2L組進(jìn)行合并。
為了保證上述計(jì)算方式的計(jì)算效率,本文設(shè)計(jì)了新的幅度脈沖乘法器,如圖3 所示。乘數(shù)Bb的m位分別與Ab的概率脈沖串同時(shí)作為m個(gè)二輸入與門(mén)的輸入,實(shí)現(xiàn)了m組幅度脈沖的并行生成,其幅度值分別對(duì)應(yīng)±20~±2m-1。在脈沖串轉(zhuǎn)換為二進(jìn)制數(shù)的電路中,m組脈沖分別經(jīng)過(guò)m個(gè)全加器(FA0,FA1,…,FAm-1)累加構(gòu)成低mbit 二進(jìn)制數(shù),而高nbit由計(jì)數(shù)器累加構(gòu)成,最終拼接為完整的二進(jìn)制數(shù)存儲(chǔ)。
Fig.3 Pulse generator and binary conversion circuit圖3 脈沖發(fā)生器及二進(jìn)制轉(zhuǎn)換電路
該方案通過(guò)脈沖合并,m組并行發(fā)送的方式,大幅度降低了計(jì)算時(shí)延,由2n+m降至2n個(gè)時(shí)鐘周期,相比圖2 方案,僅增加少量硬件資源。使用m組并行的Namplitude=2n帶有幅度信息的脈沖代替了串行的Np=2n+m原始概率脈沖,這一方式實(shí)質(zhì)上是對(duì)原始的概率脈沖進(jìn)行了編碼轉(zhuǎn)換,并沒(méi)有改變精確概率乘法需要Np=2n+m的前提條件。
在保證計(jì)算精度的前提下,如繼續(xù)改善計(jì)算時(shí)延,還可將Namplitude=2n的單路m組脈沖串拆分為4路并行m組的脈沖串,則時(shí)延可降低為2n-2,其電路結(jié)構(gòu)如圖4 所示。
在圖3 方案中,nbit LFSR 的作用是產(chǎn)生[0,2n-1]的均勻分布序列,可以用4 個(gè)并行的(n-2) bit LFSR代替實(shí)現(xiàn)相同功能。(n-2) bit LFSR 產(chǎn)生的數(shù)值范圍是[0,2n-2-1],將4 個(gè)LFSR 的輸出數(shù)據(jù)編號(hào)為L(zhǎng)FSR1至LFSR4,將隨機(jī)數(shù)送入比較器之前先分別進(jìn)行下列運(yùn)算:Rand1=LFSR1,Rand2=LFSR2+2n-2,Rand3=LFSR3+2×2n-2,Rand4=LFSR4+3×2n-2,則Rand1至Rand4的取值范圍分別為[0,2n-2-1],[2n-2,2n-1-1],[2n-1,3×2n-2-1],[3×2n-2,2n-1],實(shí)現(xiàn)了在[0,2n-1]上均勻分布隨機(jī)序列的4 路并行輸出?;诖朔绞?,4 個(gè)(n-2) bit LFSR 與4 個(gè)比較器將并行產(chǎn)生4 路脈沖,每路包含m組脈沖序列,可將計(jì)算時(shí)延縮短為2n-2個(gè)時(shí)鐘周期。
Fig.4 Signed MAC with 4 channels based on stochastic computing圖4 帶符號(hào)數(shù)的4 路并行概率計(jì)算乘加器
圖4 的4 路并行脈沖發(fā)送具有如下特點(diǎn):4 路脈沖均使用同一個(gè)Bb作為脈沖的調(diào)制乘數(shù),對(duì)于二進(jìn)制轉(zhuǎn)換電路而言,即任意一路如果發(fā)送了“1”脈沖,對(duì)應(yīng)的累加值均等于Bb,否則為0;Rand1至Rand4的取值范圍依次增大,當(dāng)?shù)贚路發(fā)送“1”脈沖時(shí),第L路以下的也一定發(fā)送脈沖“1”,因此僅使用m個(gè)與門(mén)對(duì)Rand1產(chǎn)生的概率脈沖進(jìn)行調(diào)制,其余3 路發(fā)送“1”脈沖時(shí),可根據(jù)第一路m組脈沖確定累加值;在一個(gè)時(shí)鐘周期內(nèi),每有1 路發(fā)送了脈沖“1”,加法器就需要累加1 次Bb,即一個(gè)時(shí)鐘周期內(nèi),Bb的累加次數(shù)等于發(fā)送了脈沖“1”的通路數(shù)。
二進(jìn)制轉(zhuǎn)換電路設(shè)置移位補(bǔ)償模塊,其目的是將4 路脈沖通路在每個(gè)時(shí)鐘周期里產(chǎn)生的4 次累加運(yùn)算,并行地在一個(gè)時(shí)鐘周期內(nèi)完成。由于上述脈沖“1”的特殊發(fā)送規(guī)律,顯著簡(jiǎn)化了移位步長(zhǎng)模塊的電路結(jié)構(gòu),相比于圖3 方案,雖然該方案硬件資源增加約78%,但計(jì)算速度是原先的4 倍,因此,綜合計(jì)算效率比單通道又提高約1.25 倍。
由于實(shí)際計(jì)算往往是有符號(hào)數(shù)的乘累加運(yùn)算,圖4所示電路還包含原-補(bǔ)碼轉(zhuǎn)換模塊。對(duì)于Ab(nbit)、Bb(mbit)的有符號(hào)數(shù)運(yùn)算,Bb、Ab以原碼形式表示,最高位各有1 bit 符號(hào)位,累加值需要先進(jìn)行原補(bǔ)碼轉(zhuǎn)換,再完成累加,乘加運(yùn)算結(jié)果為補(bǔ)碼形式。
無(wú)論是傳統(tǒng)的人工神經(jīng)網(wǎng)絡(luò)還是卷積神經(jīng)網(wǎng)絡(luò)都是參考神經(jīng)元結(jié)構(gòu)和功能實(shí)現(xiàn)的數(shù)學(xué)模型,并以人工神經(jīng)元作為網(wǎng)絡(luò)的基本單元,其基本邏輯功能如圖5 所示,X=[x1,x2,…,xi]是神經(jīng)元的輸入信號(hào),W=[w1,w2,…,wi]是與神經(jīng)元相對(duì)應(yīng)的權(quán)值,i是表示神經(jīng)元個(gè)數(shù)的正整數(shù),每個(gè)神經(jīng)元對(duì)輸入和權(quán)值進(jìn)行加權(quán)求和得到膜電位。
Fig.5 Neuron model圖5 神經(jīng)元模型
而神經(jīng)元本身都存在偏置信號(hào)θ,在外界激勵(lì)的作用下,其結(jié)果經(jīng)過(guò)激活函數(shù)f后輸出,其完整表達(dá)如下:
不同于傳統(tǒng)人工神經(jīng)元,脈沖神經(jīng)元?jiǎng)t模擬了生物神經(jīng)元的運(yùn)行特點(diǎn)。神經(jīng)元接收脈沖信號(hào)P(t)=[p1(t),p2(t),…,pm(t)],根據(jù)連接權(quán)值增強(qiáng)或抑制膜電位;神經(jīng)元達(dá)到閾值電壓時(shí)會(huì)進(jìn)入激活狀態(tài),向下一層神經(jīng)元釋放脈沖并將膜電位快速拉低至靜息電位,也就是進(jìn)入不應(yīng)期。所對(duì)應(yīng)神經(jīng)元膜電位表達(dá)式:
式中,u、p、s、w分別為膜電位、神經(jīng)脈沖、激活狀態(tài)(未激活時(shí)s=1)和權(quán)值,g(t)為一個(gè)尖峰脈沖對(duì)膜電位所產(chǎn)生增量隨時(shí)間t的變化曲線。
為了以數(shù)字電路的形式實(shí)現(xiàn)運(yùn)算,需對(duì)時(shí)間域離散的脈沖神經(jīng)元重新建模,將尖峰脈沖替換為方波,設(shè)T為采樣間隔,則可以得到下述表達(dá)式:
將每?jī)蓚€(gè)采樣點(diǎn)之間的時(shí)間段劃分為一個(gè)活動(dòng)周期,同一個(gè)活動(dòng)周期內(nèi)的神經(jīng)元活動(dòng)(收發(fā)脈沖)視為同時(shí)進(jìn)行的,因此式(9)的計(jì)算需要記錄從上一個(gè)不應(yīng)期結(jié)束時(shí)刻(n0T)到當(dāng)前時(shí)刻的所有活動(dòng)周期的輸入脈沖數(shù)據(jù),計(jì)算量龐大,計(jì)算效率低,于是對(duì)膜電位變化曲線g(t)進(jìn)行改進(jìn),采用如圖6 的分段擬合方法實(shí)現(xiàn),即g(nT)=2-nT,用tn表示nT,且T=1,則式(10)可以簡(jiǎn)化為式(11):
Fig.6 Piecewise fitting membrane potential curve圖6 分段擬合的膜電位變化曲線
根據(jù)上式,神經(jīng)元在當(dāng)前活動(dòng)周期結(jié)束時(shí)的膜電位可由上一活動(dòng)周期結(jié)束時(shí)的膜電位uj(tn-1)、當(dāng)前活動(dòng)周期的接收脈沖pi(tn)以及自身狀態(tài)sj(tn)求得,避免了大量的運(yùn)算,且g(t)變化曲線系數(shù)取為1/2,也即上一活動(dòng)周期膜電位的衰減系數(shù),通過(guò)移位實(shí)現(xiàn),進(jìn)一步減小硬件資源開(kāi)銷(xiāo)。
基于脈沖神經(jīng)元膜電位表達(dá)式構(gòu)造脈沖神經(jīng)元模型,如圖7 所示。神經(jīng)元電路結(jié)構(gòu)包含:脈沖接收器、實(shí)現(xiàn)膜電位衰減的移位器、判斷激活條件的比較器、脈沖發(fā)生器等。
Fig.7 Spiking neuron circuit圖7 脈沖神經(jīng)元電路結(jié)構(gòu)
基于概率計(jì)算范式,可將人工神經(jīng)元轉(zhuǎn)換為脈沖神經(jīng)元完成對(duì)應(yīng)運(yùn)算。為了實(shí)現(xiàn)片上神經(jīng)網(wǎng)絡(luò)重構(gòu)系統(tǒng),本文提出了雙神經(jīng)元結(jié)構(gòu)作為基本計(jì)算單元(processing element,PE),模擬輸入神經(jīng)元到輸出神經(jīng)元的概率脈沖傳輸過(guò)程。輸入神經(jīng)元包括本地權(quán)值存儲(chǔ)單元、膜電位及其激活單元和概率脈沖調(diào)制乘法單元(包括比較器和LFSR 等);輸出神經(jīng)元包括脈沖接收模塊、膜電位移位寄存器。
對(duì)于單個(gè)神經(jīng)元結(jié)構(gòu)而言,其工作過(guò)程為:輸入數(shù)據(jù)經(jīng)過(guò)乘法、加法再經(jīng)過(guò)激活函數(shù),并根據(jù)權(quán)值發(fā)送脈沖編碼信號(hào)。而在雙神經(jīng)元結(jié)構(gòu)中,輸入數(shù)據(jù)位于輸入神經(jīng)元,先經(jīng)過(guò)激活函數(shù),再根據(jù)權(quán)重發(fā)送脈沖;輸出神經(jīng)元將接收到的脈沖累加至膜電位寄存器,并在切換活動(dòng)周期時(shí)衰減膜電位。
基于上述概率計(jì)算的雙神經(jīng)元,本文提出了基于概率計(jì)算的脈沖神經(jīng)元與傳統(tǒng)神經(jīng)元可重構(gòu)的設(shè)計(jì)方案。針對(duì)神經(jīng)元的乘加運(yùn)算(式(7))以及脈沖神經(jīng)元的條件加權(quán)的累加運(yùn)算(式(11)),均采用概率脈沖編碼的方式轉(zhuǎn)換為脈沖形式實(shí)現(xiàn)運(yùn)算,以實(shí)現(xiàn)在同一個(gè)電路架構(gòu)下,同時(shí)支持不同神經(jīng)元模型的計(jì)算功能:
式中,Cij(m)為基于概率計(jì)算得到的頻率編碼脈沖序列,對(duì)于脈沖神經(jīng)元的計(jì)算具有如下轉(zhuǎn)換關(guān)系,α與Cij的編碼長(zhǎng)度N相關(guān)。
對(duì)于傳統(tǒng)神經(jīng)元的計(jì)算具有如下轉(zhuǎn)換關(guān)系,α同樣與脈沖編碼長(zhǎng)度N相關(guān),且進(jìn)行人工神經(jīng)元計(jì)算時(shí),式(12)中上一活動(dòng)周期膜電位衰減uj(tn-1)/2 用偏置θ代替,sj、pi取值為1。
另外,由于卷積計(jì)算具有規(guī)則性和重復(fù)性,輸入特征圖的不同像素點(diǎn)將與同一個(gè)權(quán)重?cái)?shù)值進(jìn)行乘法運(yùn)算,即卷積計(jì)算的重要特點(diǎn)之一“權(quán)值共享”,如果將權(quán)值作為乘數(shù)的概率脈沖信號(hào),膜電位激活值作為被乘數(shù),也就是概率脈沖調(diào)制的使能信號(hào),那么可以將多個(gè)計(jì)算單元的比較電路進(jìn)行合并,如圖8 所示,共用一個(gè)權(quán)重?cái)?shù)值,并行進(jìn)行多個(gè)乘加運(yùn)算,比較器電路的資源平攤到各個(gè)計(jì)算單元中,每個(gè)計(jì)算單元的平均開(kāi)銷(xiāo)就能夠進(jìn)一步降低。
Fig.8 Double neuron computational unit with shared weight圖8 權(quán)值共享的雙神經(jīng)元計(jì)算單元
基于雙神經(jīng)元計(jì)算單元設(shè)計(jì)了可重構(gòu)神經(jīng)網(wǎng)絡(luò)運(yùn)算架構(gòu),用xm-ym,k符號(hào)表示一個(gè)雙神經(jīng)元計(jì)算單元,其中xm代表脈沖發(fā)生電路,連線代表權(quán)重,ym,k代表接收器且采用圖4 所示電路結(jié)構(gòu)。
基于雙神經(jīng)元概率計(jì)算的神經(jīng)網(wǎng)絡(luò)計(jì)算架構(gòu)如圖9 所示。其中,輸入膜電位ui,m(tn)存入xm,判斷激活情況并根據(jù)權(quán)重大小向ym,k發(fā)送概率脈沖;tn-1活動(dòng)周期膜電位uo,k(tn-1)衰減1/2 后從輸入端輸入,并依次經(jīng)過(guò)y1,k,y2,k,…,ym,k,接收各輸入神經(jīng)元發(fā)送的脈沖信號(hào),完成一系列累加運(yùn)算,從輸出端輸出tn活動(dòng)周期的膜電位數(shù)值uo,k(tn)。
Fig.9 Computing array based on double neuron圖9 雙神經(jīng)元計(jì)算陣列
上述運(yùn)算過(guò)程為脈沖神經(jīng)網(wǎng)絡(luò)的一層運(yùn)算,輸出的膜電位數(shù)值既被用于當(dāng)前層的下一活動(dòng)周期運(yùn)算,同時(shí)也是網(wǎng)絡(luò)下一層的輸入神經(jīng)元膜電位,參與下一層當(dāng)前活動(dòng)周期的運(yùn)算。當(dāng)網(wǎng)絡(luò)的所有層依次完成運(yùn)算后,則一個(gè)活動(dòng)周期計(jì)算完畢,進(jìn)入下一個(gè)活動(dòng)周期,并再次重復(fù)上述過(guò)程。
為了適配SNN(spiking neural network)和CNN(convolutional neural network)網(wǎng)絡(luò)可重構(gòu)結(jié)構(gòu),設(shè)計(jì)了控制與數(shù)據(jù)路由模塊,用于計(jì)算陣列的配置與復(fù)用,實(shí)現(xiàn)對(duì)計(jì)算資源的充分利用;一個(gè)陣列的尺寸設(shè)置為m=3,k=32,共96 個(gè)雙神經(jīng)元單元。兩者組成一個(gè)可以獨(dú)立完成網(wǎng)絡(luò)處理工作的計(jì)算核,可實(shí)現(xiàn)多種模態(tài)的神經(jīng)網(wǎng)絡(luò)運(yùn)算。
為了驗(yàn)證概率計(jì)算構(gòu)造的邏輯電路性能,概率計(jì)算乘加器與經(jīng)典的二進(jìn)制數(shù)陣列乘加器進(jìn)行了對(duì)比。使用包含相同16 個(gè)計(jì)算單元構(gòu)造的乘加器計(jì)算電路,從而并行執(zhí)行乘累加運(yùn)算。乘累加運(yùn)算uj=,其中,i=1,2,…,16。
本實(shí)驗(yàn)使用的FPGA 芯片是KINTEX-7,二進(jìn)制乘加器受限于關(guān)鍵路徑,插入一級(jí)流水后最高時(shí)鐘僅達(dá)200 MHz,而概率計(jì)算方法最高時(shí)鐘頻率可達(dá)700 MHz,即所采用FPGA 芯片的時(shí)鐘上限。因此,本實(shí)驗(yàn)對(duì)概率計(jì)算給出兩套時(shí)鐘頻率的實(shí)驗(yàn)結(jié)果,均基于FPGA 配套的設(shè)計(jì)套件得到硬件實(shí)現(xiàn)的各項(xiàng)報(bào)告,整理如表1 所示。
以O(shè)PS 為單位的能效數(shù)值存在一個(gè)取值范圍,與不同Tc取值一一對(duì)應(yīng),例如單路方案700 MHz 能效換算為:最高能效時(shí)Tc=1,243.5 GSOPS/W=487 GOPS/W;最高精度時(shí)Tc=128,243.5 GSOPS/W=3.8 GOPS/W。同理4 路方案700 MHz 能效換算為:最高能效時(shí)Tc=1,722.6 GSOPS/W=361.3 GOPS/W;最高精度時(shí)Tc=32,722.6 GSOPS/W=11.3 GOPS/W。
表1 中統(tǒng)計(jì)對(duì)象是16 個(gè)計(jì)算單元并行時(shí)的資源開(kāi)銷(xiāo),功耗是在同等條件下完成對(duì)數(shù)據(jù)輸入輸出獲得的結(jié)果。不同的乘法器電路對(duì)功耗的影響,也即計(jì)算邏輯電路產(chǎn)生的功耗,在FPGA 中主要體現(xiàn)在clocks、signal、logic 上,因此表1 列出的功耗僅為三者之和的動(dòng)態(tài)功耗。其余功耗如時(shí)鐘管理器(MMCM)功耗和靜態(tài)功耗主要由FPGA 本身以及I/O 決定,與所設(shè)計(jì)的計(jì)算邏輯電路無(wú)關(guān)。
Tabel 1 Performance comparison between traditional MAC and stochastic MAC表1 二進(jìn)制陣列乘加器與概率計(jì)算乘加器性能對(duì)比
由于使用概率計(jì)算實(shí)現(xiàn)乘累加運(yùn)算時(shí),計(jì)算時(shí)長(zhǎng)與計(jì)算精度有關(guān),難以直接用乘加操作作為衡量算力計(jì)量單位,引入另一種算力計(jì)量單位:概率計(jì)算中的計(jì)算操作稱(chēng)作突觸操作(synaptic operations),是一種條件加權(quán)的累加操作,最早由IBM 的True-North團(tuán)隊(duì)提出[2],對(duì)應(yīng)的算力單位為SOPS,表示每秒進(jìn)行的累加操作次數(shù)。
在KINTEX-7 上實(shí)例化了16 個(gè)3.3 節(jié)所述計(jì)算核并行運(yùn)行,時(shí)鐘頻率設(shè)置為350 MHz,基于FPGA配套設(shè)計(jì)套件得到各項(xiàng)報(bào)告,如圖10、圖11 所示,并完成了如下幾個(gè)常見(jiàn)SNN 或CNN 模型的運(yùn)行實(shí)驗(yàn),各網(wǎng)絡(luò)模型的權(quán)重?cái)?shù)據(jù)均采用8 bit 量化方案,且Tc設(shè)置為32,即精確乘加計(jì)算。
基于綜合報(bào)告,計(jì)算每個(gè)核的峰值算力為134.4 GSOPS;與表1 相同,功耗部分不計(jì)入與邏輯電路無(wú)關(guān)的時(shí)鐘管理模塊功耗、靜態(tài)功耗與I/O 功耗,平均單計(jì)算核功耗為227 mW,峰值能效為0.592 TSOPS/W。
Fig.10 FPGA synthesis report of single core(350 MHz)圖10 計(jì)算核FPGA 綜合報(bào)告(350 MHz)
Fig.11 FPGA synthesis report of 16 cores(350 MHz)圖11 16 核FPGA 綜合報(bào)告(350 MHz)
4.2.1 SNN 神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)
基于單層SNN 的監(jiān)督學(xué)習(xí)算法,對(duì)網(wǎng)絡(luò)進(jìn)行訓(xùn)練,使用MNIST 數(shù)據(jù)集,網(wǎng)絡(luò)結(jié)構(gòu)為一層全連接形式的SNN 網(wǎng)絡(luò),輸入神經(jīng)元784 個(gè),輸出神經(jīng)元10 個(gè),對(duì)應(yīng)手寫(xiě)數(shù)字0~9,共10 個(gè)類(lèi)別。
訓(xùn)練所得網(wǎng)絡(luò)測(cè)試集正確率為89.3%,8 bit 量化后正確率為89%,降低0.3 個(gè)百分點(diǎn)。由于MNIST 的圖像數(shù)據(jù)為二進(jìn)制數(shù)值,在進(jìn)行SNN 運(yùn)算前還需要將圖像編碼為脈沖序列。利用概率脈沖編碼,將28×28 個(gè)像素點(diǎn)的二進(jìn)制灰度值轉(zhuǎn)換為784個(gè)輸入神經(jīng)元(784=28×28)各自發(fā)送的Np=256 脈沖序列,也即256 個(gè)活動(dòng)周期。
雙神經(jīng)元PE 的計(jì)算順序?yàn)椋狠斎肷窠?jīng)元膜電位,經(jīng)過(guò)激活函數(shù)后產(chǎn)生脈沖;輸出神經(jīng)元接收脈沖,進(jìn)行累加運(yùn)算得到輸出膜電位。而單層SNN 計(jì)算順序?yàn)橄冗M(jìn)行累加運(yùn)算得到輸出膜電位,再經(jīng)過(guò)階躍形式的激活函數(shù)(閾值比較)得到輸出神經(jīng)元發(fā)送的脈沖,并根據(jù)產(chǎn)生脈沖的先后或者有無(wú),判斷分類(lèi)結(jié)果。因此陣列計(jì)算時(shí)需要設(shè)置為兩層以實(shí)現(xiàn)上述運(yùn)算。第一層負(fù)責(zé)膜電位計(jì)算的累加與衰減操作,第二層則僅負(fù)責(zé)激活判斷,不進(jìn)行計(jì)算操作。
搭建了相應(yīng)的顯示系統(tǒng),如圖12 所示,第1、3 行為隨機(jī)選取的數(shù)據(jù)集圖像,第2、4 行為相應(yīng)的識(shí)別結(jié)果。
Fig.12 MNIST dataset and SNN operation mode圖12 MNIST 數(shù)據(jù)集與SNN 運(yùn)行模式
4.2.2 Stochastic CNN 神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)
根據(jù)3.2 節(jié)的基于概率計(jì)算的神經(jīng)元轉(zhuǎn)換方法,對(duì)兩種常見(jiàn)CNN 模型進(jìn)行SNN 轉(zhuǎn)換,轉(zhuǎn)換后的網(wǎng)絡(luò)模型既不完全與SNN 一致,也不同于CNN,稱(chēng)其為SCNN(stochastic CNN),SCNN 的計(jì)算結(jié)果與Tc存在較大關(guān)系,采用4 路方案的概率計(jì)算時(shí),當(dāng)Tc=32時(shí),網(wǎng)絡(luò)運(yùn)行結(jié)果與原CNN 一致;Tc<32 時(shí),計(jì)算與原CNN 模型相比將產(chǎn)生誤差,實(shí)驗(yàn)中使用Tc=32 的精確計(jì)算模式。
使用前述計(jì)算核進(jìn)行硬件加速,各CNN 模型同樣采用8 bit 量化:首先,通過(guò)計(jì)算機(jī)軟件仿真對(duì)轉(zhuǎn)換后網(wǎng)絡(luò)模型的準(zhǔn)確率進(jìn)行了測(cè)試,由于采用Tc=32的精確計(jì)算模式,因此轉(zhuǎn)換前后的計(jì)算結(jié)果是一致的,準(zhǔn)確率并沒(méi)有損失;其次,對(duì)電路進(jìn)行功能仿真,得到詳細(xì)的電路運(yùn)算過(guò)程,并觀察運(yùn)行結(jié)果(膜電位變化以及神經(jīng)元激活情況等)與軟件仿真結(jié)果完全一致,同時(shí)根據(jù)仿真時(shí)間得到各模型的處理幀率,各項(xiàng)實(shí)驗(yàn)結(jié)果如表2 所示。
Table 2 Performance of common deep learning networks with single core表2 常見(jiàn)深度學(xué)習(xí)網(wǎng)絡(luò)的單核性能
在傳統(tǒng)的二進(jìn)制計(jì)算過(guò)程中,受到數(shù)據(jù)調(diào)度與計(jì)算時(shí)間不均衡的限制,無(wú)法時(shí)刻處于峰值計(jì)算狀態(tài),PE 利用率一般很低,如表3 所示,列出了幾款現(xiàn)有硬件加速器所能達(dá)到的PE 利用率。
Tabel 3 Comparison of PE utilization rate表3 PE 利用率比較
列舉的三款加速器采用ASIC 實(shí)現(xiàn),算力與能效的計(jì)量單位也非突觸操作,因此均值能效、峰值能效與本設(shè)計(jì)并不具有可比性,但PE 利用率與電路實(shí)現(xiàn)方式無(wú)關(guān),而與所采用的計(jì)算架構(gòu)有關(guān),因此是有對(duì)比意義的一項(xiàng)屬性。本文基于概率計(jì)算以脈沖神經(jīng)元的形式完成運(yùn)算操作,對(duì)數(shù)據(jù)讀寫(xiě)速度的需求大幅降低,更易實(shí)現(xiàn)數(shù)據(jù)調(diào)度與脈沖計(jì)算的同步進(jìn)行,保證了計(jì)算時(shí)間與調(diào)度時(shí)間的均衡,大幅度減少了計(jì)算單元等待數(shù)據(jù)調(diào)度的空閑時(shí)間,因此達(dá)到了極高的PE 利用率。
神經(jīng)網(wǎng)絡(luò)基礎(chǔ)計(jì)算單元直接影響其硬件加速器的計(jì)算能效。本文提出了基于低功耗、高計(jì)算效率的概率計(jì)算的基礎(chǔ)單元——乘加器?;诟怕视?jì)算單元構(gòu)造了脈沖神經(jīng)網(wǎng)絡(luò)和概率卷積神經(jīng)網(wǎng)絡(luò),并實(shí)現(xiàn)了支持SNN 與SCNN 運(yùn)算的可重構(gòu)計(jì)算核心:北航籌算(BUAA-ChouSuan)。
基于KINTEX-7 平臺(tái)對(duì)幾種乘加器方案進(jìn)行對(duì)比測(cè)試,相比于經(jīng)典的二進(jìn)制乘加器,概率計(jì)算模式的乘加器單元在面積與功耗方面具有明顯的優(yōu)勢(shì)。在200 MHz 時(shí)鐘頻率下,單路概率計(jì)算的邏輯資源開(kāi)銷(xiāo)(LUT)降低80%,功耗降低76%,最高能效比是二進(jìn)制乘累加器的8.82 倍。在SCNN 網(wǎng)絡(luò)計(jì)算中,測(cè)試了LeNet 與AlexNet,在時(shí)鐘頻率350 MHz,均值能效可達(dá)0.536 TSOPS/W,PE 利用率在90%以上。對(duì)MNIST 數(shù)據(jù)集,在8 bit 量化權(quán)重,Tc=32 條件下,識(shí)別精度可達(dá)97.87%與98.28%。