基于FPGA的人工神經(jīng)網(wǎng)絡(luò)實現(xiàn)方法的研究
引言
人工神經(jīng)網(wǎng)絡(luò)(ArtificialNeuralNetwork,ANN)是一種類似生物神經(jīng)網(wǎng)絡(luò)的信息處理結(jié)構(gòu),它的提出是為了解決一些非線性,非平穩(wěn),復(fù)雜的實際問題。目前實現(xiàn)ANN還主要依靠軟件程序.但是依靠程序很難達到實時性的要求。
神經(jīng)網(wǎng)絡(luò)在FPGA上實現(xiàn)是獨立于馮·諾依曼架構(gòu),利用FPGA的并行性,在一些實時性要求很強的領(lǐng)域應(yīng)用。通用計算機雖然編程容易,但是很多時間浪費在分析指令,讀出寫入數(shù)據(jù)等。于是人們想利用ASIC(專用計算芯片)完成神經(jīng)網(wǎng)絡(luò)的計算任務(wù),但是由于資源有限,這種芯片只限于實現(xiàn)特定的算法結(jié)構(gòu)和小規(guī)模網(wǎng)絡(luò),而且專用芯片的制作成本很高,只適合大批量生產(chǎn)。
可編程邏輯器件FPGA的出現(xiàn)給IC設(shè)計行業(yè)一個很強的工具,它可以小成本的開發(fā)一些專用芯片,如果開發(fā)是成功的可以考慮流片生產(chǎn)。用FPGA實現(xiàn)神經(jīng)網(wǎng)絡(luò)比ASIC神經(jīng)計算單元更容易實現(xiàn),利用可編程邏輯,F(xiàn)PGA可以實現(xiàn)像軟件一樣的設(shè)計靈活性,特別是對于復(fù)雜網(wǎng)絡(luò),設(shè)計周期大大縮短,其內(nèi)部的重構(gòu)邏輯模塊(ConfigurableLogicBlocks,CLBs)包含若干邏輯單元,利用固有的可重構(gòu)路徑結(jié)構(gòu)可以實現(xiàn)高效率的連接。此外,現(xiàn)在正在開發(fā)中的一種神經(jīng)計算芯片為神經(jīng)網(wǎng)絡(luò)的實現(xiàn)提出了一種新的有效方法。
1FPGA實現(xiàn)神經(jīng)網(wǎng)絡(luò)關(guān)鍵問題分析
(1)選擇合適的神經(jīng)網(wǎng)絡(luò)及其拓?fù)浣Y(jié)構(gòu)
不同的神經(jīng)網(wǎng)絡(luò)有不同的應(yīng)用,而且不同的網(wǎng)絡(luò)完成知識表達的機理是不同的,某一個神經(jīng)網(wǎng)絡(luò)不是萬能的.對于實際問題,首先要做的就是選擇針對性的神經(jīng)網(wǎng)絡(luò),如線性分類問題可以用簡單的感知器,對于復(fù)雜的分類問題,函數(shù)逼近問題可以使用BP網(wǎng)絡(luò),對于一些聚類問題可以使用徑向基(RBF)網(wǎng)絡(luò)等。以BP網(wǎng)絡(luò)結(jié)構(gòu)為例,這種被廣泛采用的架構(gòu)由具有錯誤反向傳播算法的多層感知器構(gòu)成(MultilayerPerceptronsu-singBack-Propagation,MLP-BP),訓(xùn)練一個BP網(wǎng)絡(luò)主要的問題就在于:訓(xùn)練開始之前,對于網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)缺乏一種明確的確定方法。而進行各種拓?fù)浣Y(jié)構(gòu)的實驗并不那么容易,因為對于每一個訓(xùn)練周期都要消耗很長的時間,特別是復(fù)雜的網(wǎng)絡(luò),更是如此;其次,對于硬件而言,最合適的網(wǎng)絡(luò)運算法則不僅在于它達到收斂有多么快,還要考慮是否容易在硬件上實現(xiàn)且這種實現(xiàn)代價和性能如何;另外,對于同一種NN(NeuralNet-work)。其拓?fù)浣Y(jié)構(gòu)對網(wǎng)絡(luò)的收斂特性以及知識表達特性都有影響,一般增加網(wǎng)絡(luò)的神經(jīng)元或者神經(jīng)元的層數(shù),是可以增加網(wǎng)絡(luò)的逼近能力,但是可能會影響網(wǎng)絡(luò)的學(xué)習(xí)收斂情況,而且還可能會因為過適應(yīng)(Overfit)而失去泛化能力。
(2)正確選擇數(shù)值表達形式
精度的選擇對處理密度(與耗費的硬件資源成反比)有直接影響。其中浮點數(shù)可以在計算機中表達實數(shù),它有相對高的精度和大的動態(tài)范圍,使用浮點數(shù)使得計算更為精確,但是在FPGA上實現(xiàn)浮點數(shù)運算是一個很大的挑戰(zhàn),而且會耗費很多硬件資源。盡管如此,加拿大研究人員MedhatMoussaandShawkiArei-bi仍然實現(xiàn)了浮點數(shù)的運算,并進行了詳細(xì)的對比分析。
對于MLP-BP而言,HoltandBaker憑借仿真和理論分析指出16為定點(1位標(biāo)志位,3位整數(shù)位和12位小數(shù)位)是最小可允許的精度表示(指可以達到收斂)。以邏輯XOR問題為例,文獻[1]中表格2.5(見表1)表明與基于FPGA的MLP-BP浮點法實現(xiàn)相比,定點法實現(xiàn)在速度上高出12倍,面積上是浮點實現(xiàn)的1/13,而且有更高的處理密度。
同時數(shù)據(jù)也說明基于FPGA的16位定點MLP-BP實現(xiàn)在處理密度上高于基于軟件方法的MLP-BP實現(xiàn),這最好地證明可重構(gòu)計算方法的處理密度優(yōu)勢。應(yīng)該說,在這種應(yīng)用中浮點數(shù)遠不如定點數(shù)合適。但是定點數(shù)表示的缺點在于有限精度,盡管如此,對于不同的應(yīng)用選擇合適的字長精度,仍然可以得到收斂。因此,目前基于FPGA的ANN大多數(shù)是使用定點數(shù)進行計算的。
(3)門限非線性激活函數(shù)(Non-linearactivationFunction)的實現(xiàn)
ANN的知識表達特性與非線性逼近能力,有很大部分源自門限函數(shù)。在MLP網(wǎng)絡(luò)中,門限函數(shù)大部分是非線性函數(shù)(少數(shù)是線性函數(shù),如輸出層的門限函數(shù)),但是非線性傳遞函數(shù)的直接硬件實現(xiàn)太昂貴,目前實現(xiàn)門限函數(shù)的方法主要有:查表法(look-upta-ble)、分段線性逼近、多項式近似法、有理近似法以及協(xié)調(diào)旋轉(zhuǎn)數(shù)字計算機(CoordinatedRotationDigitalCom-puter,CORDIC)法則,CORDIC法則實現(xiàn)函數(shù)的優(yōu)點在于同一硬件資源能被若干個函數(shù)使用,但是性能相當(dāng)差,因此較少使用。而高次多項式近似法盡管可以實現(xiàn)低誤差近似,但是實現(xiàn)需要耗費較高硬件資源。相對而言,查找表法和分段線性逼近法(注意:查找表不易太大,否則速度會慢且代價也大)更適合FPGA技術(shù)實現(xiàn)。其中分段線性近似法以y=c1+c2x的形式描述一種線性連接組合(如圖1所示),如果線性函數(shù)的系數(shù)值為2的冪次,則激活函數(shù)可以由一系列移位和加法操作實現(xiàn),許多神經(jīng)元的傳遞函數(shù)就是這樣實現(xiàn)的,而查找表法則是將事先計算的數(shù)值依次存儲在需要查詢的存儲器中來實現(xiàn)。
(4)面積節(jié)省及相關(guān)問題
為了最小化神經(jīng)元實現(xiàn)的面積,組成每個神經(jīng)元的各個HDL算法模塊的面積也應(yīng)該最小。乘法器以及基本的傳遞函數(shù)(例如,sigmoid激活函數(shù)tanh)是最占用面積的,這類問題非常依賴于所要求的精度,盡管神經(jīng)網(wǎng)絡(luò)常并不要求很精確的計算,但是不同的應(yīng)用所要求的精度不同。一般來講,浮點運算要比定點運算需要更大的面積,比如浮點運算中的并行加法器本質(zhì)上是定點運算超前加法器加上必要的邏輯塊,減法器、乘法器也類似如此,這在激活函數(shù)實現(xiàn)方面更加突出,文獻[1]中面積優(yōu)化對比顯示,32位浮點運算要比16位定點運算大250倍。另外,對于小型網(wǎng)絡(luò),分布式存儲器很適合權(quán)值存放,但是對于大型網(wǎng)絡(luò),權(quán)值存儲器不應(yīng)該被放置在FPGA中,因此當(dāng)ANN得到有效實現(xiàn)的時候,就要認(rèn)真考慮存儲器的存取問題。其次,神經(jīng)網(wǎng)絡(luò)應(yīng)用有一個顯著的缺陷:在神經(jīng)計算方面,不同運算的計算時間和實現(xiàn)面積并不平衡。在許多標(biāo)準(zhǔn)神經(jīng)模式中,計算時間的大部分用在需要乘法器和加法器的矩陣向量運算中,而很多耗費面積的運算如激活函數(shù),又必須被實現(xiàn)(它們占用很少的運算時間),而FPGA的面積是嚴(yán)格一定的,因此可將面積的相當(dāng)一部分用來實現(xiàn)這些運算,以至于FPGA僅剩的一小部分卻實現(xiàn)幾乎所有的運算時間。
(5)資源和計算速度的平衡(Trade-off)
對于FPGA,科學(xué)的設(shè)計目標(biāo)應(yīng)該是在滿足設(shè)計時序要求(包括對設(shè)計最高頻率的要求)的前提下,占用最少的芯片資源,或者在所規(guī)定的占用資源下,使設(shè)計的時序余量更大,頻率更高。這兩種目標(biāo)充分體現(xiàn)了資源和速度的平衡思想。作為矛盾的兩個組成部分,資源和速度的地位是不一樣的。相比之下,滿足時序、工作頻率的要求更重要一些,當(dāng)兩者沖突時,采用速度優(yōu)先的準(zhǔn)則。
例如,ANN的FPGA實現(xiàn)需要各種字長的乘法器,如果可以提出一種新的運算法則,從而用FPGA實現(xiàn)變字長的乘法器,則可以根據(jù)需要調(diào)整字長,從而提高運算速度的可能性,其中,基于BoothEncodedopti-mizedwallencetree架構(gòu)(見圖2)就可以得到快速高效的乘法器,這種方式實現(xiàn)的乘法器比現(xiàn)在所用的基于FPGA的乘法器的處理速度快20%)。
(6)亟待解決的問題
FPGA憑借其如同軟件實現(xiàn)一樣的靈活性,集合了硬件實現(xiàn)高效和并行性的優(yōu)點,好像非常適合神經(jīng)實現(xiàn)的正常需要,但是,F(xiàn)PGA的二維拓?fù)浣Y(jié)構(gòu)不能處理標(biāo)準(zhǔn)神經(jīng)網(wǎng)絡(luò)規(guī)則但復(fù)雜的連線問題,而且FPGA仍然實現(xiàn)很有限的邏輯門數(shù)目,相反,神經(jīng)計算則需要相當(dāng)耗費資源的模塊(激活函數(shù),乘法器)。這樣對于FP-GA,可用的CLBs中部分將被用來增加路徑容量(連線),導(dǎo)致計算資源的丟失。一般的方法只能實現(xiàn)很小的低精度神經(jīng)網(wǎng)絡(luò),連線問題不能依靠幾個具有比特序列算法的可重構(gòu)FPGA以及小面積模塊(隨機比特流或者頻率)解決。
2基于FPGA的ANN實現(xiàn)方法
經(jīng)典實現(xiàn)方法有:
(1)可重構(gòu)的RNN結(jié)構(gòu)(ReconfigurableNeuraINetwork)
可重構(gòu)計算是一種增加處理密度(每單元硅片面積的性能)的有效方法,且處理密度遠大于用于通用計算方法,F(xiàn)PGA作為可重構(gòu)計算的平臺,可以提供如同軟件一樣的設(shè)計靈活性。該方法基于可擴展的脈動陣列結(jié)構(gòu)、可重用的IP(IntellectualProperties)核及FPGA器件,即將要實現(xiàn)的神經(jīng)網(wǎng)絡(luò)算法分為幾種基本運算,這些基本運算由可重構(gòu)單元(ReconfigurableCell,RC)完成,RC間以規(guī)則的方式相互連接,當(dāng)神經(jīng)網(wǎng)絡(luò)變化時,只要增減Rc的數(shù)量或替換不同功能的RC就可重構(gòu)成新的神經(jīng)網(wǎng)絡(luò)硬件;文獻[8]中同時指出,考慮到硬件實現(xiàn)要以最少的硬件資源滿足特定應(yīng)用的性能需求,一般用神經(jīng)元并行作為可重構(gòu)部件的基本模式,即神經(jīng)網(wǎng)絡(luò)的各層計算可復(fù)用相同的陣列結(jié)構(gòu)。
(2)RENCO結(jié)構(gòu)
可重構(gòu)網(wǎng)絡(luò)計算機(ReconfigurableNetworkComputer,RENCO)是一種用于邏輯設(shè)計原型或可重構(gòu)系統(tǒng)的平臺,所設(shè)計的可重構(gòu)系統(tǒng)對于工作在比特級的算法實現(xiàn)特別有效,比如模式匹配。RENCO的基本架構(gòu)包括處理器、可重構(gòu)部分(多為FPGA)以及存儲器和總線部分,Altera公司提供的最新的RENCO在可重構(gòu)部分包括近100萬邏輯門,足夠?qū)崿F(xiàn)高復(fù)雜度的處理器。具體參見文獻[9]。盡管如此,得到的可重構(gòu)系統(tǒng)并非對所有的硬件實現(xiàn)都是優(yōu)化的方法,比如不適合于浮點運算。
(3)隨機比特流方法
隨機比特流(StochasticBitStrearns)的方法是使用串行隨機的方法實現(xiàn)一些運算操作,目的是為了節(jié)約資源和充分利用神經(jīng)網(wǎng)絡(luò)的實時性。隨機算法的提出源于它的簡易性,基本原理即首先將所有的輸入轉(zhuǎn)換成二進制隨機比特流,就是任意化;然后,由數(shù)字電路組成的隨機算法實現(xiàn)取代正常的算法;最后,隨機比特流轉(zhuǎn)回到正常的數(shù)值(文獻[10]中有詳細(xì)總結(jié))。隨機算法提供一種方法,用簡單的硬件實現(xiàn)復(fù)雜的計算,同時又不失靈活性,而且隨機實現(xiàn)又與現(xiàn)代VLSI設(shè)計和生產(chǎn)技術(shù)兼容。
FPNA實現(xiàn)方法:
憑借著簡化的拓?fù)浣Y(jié)構(gòu)和獨特的數(shù)據(jù)交換流圖,F(xiàn)PNA(FieldProgrammableNeuralArrays)成功地解決了以簡單的硬件拓?fù)浣Y(jié)構(gòu)有效地實現(xiàn)復(fù)雜的神經(jīng)架構(gòu)問題,是一種特別適合FPGA直接實現(xiàn)的神經(jīng)計算范例。FPNA基于一種類似FPGA的結(jié)構(gòu):它包含一系列可以自由配置的資源,這些神經(jīng)資源被定義用來實現(xiàn)標(biāo)準(zhǔn)神經(jīng)元的計算功能,但是它們是一種自主的方式,這樣通過有限的連接可以創(chuàng)造出許多虛擬的連線。利用這種新的神經(jīng)計算理念,一個標(biāo)準(zhǔn)的但結(jié)構(gòu)復(fù)雜的神經(jīng)網(wǎng)絡(luò)可以由一個簡化的神經(jīng)網(wǎng)絡(luò)替代(文獻[11]給出了詳細(xì)的數(shù)學(xué)表示和說明)。
為了有個直觀的理解,圖3(a)表示一個簡單的MLP結(jié)構(gòu);圖3(b)說明通過節(jié)點間的直接連接建立虛擬連接。
?
文獻[11]中的例證表明FPNA計算范例確實允許一系列給定的神經(jīng)資源代替具有不同架構(gòu)的標(biāo)準(zhǔn)神經(jīng)網(wǎng)絡(luò)。然而,從圖4中可能并非如此,MLP架構(gòu)并沒有得到簡化,原因在于如此簡單的MLP完全沒有必要,也不可能再簡化。文獻[12]描述了大型神經(jīng)網(wǎng)絡(luò)得到明顯簡化的實例。需要注意的是,F(xiàn)PNA是一個適應(yīng)神經(jīng)計算的硬件框架,而不是一種處理簡化神經(jīng)計算的實現(xiàn)方法(FieldProgrammableNeuralNetwork,F(xiàn)PNN)。要設(shè)計一個FPNA,首先要選擇一個針對應(yīng)用的合適的標(biāo)準(zhǔn)神經(jīng)架構(gòu),然后決定一個既適合于實現(xiàn)又在功能上等價于所選擇神經(jīng)網(wǎng)絡(luò)的可配置FPNA,F(xiàn)PNA獨特的計算方案在于在復(fù)雜神經(jīng)網(wǎng)絡(luò)和可用的硬件資源之間創(chuàng)造了一座橋梁,它適用于許多實現(xiàn)選擇;最后,得到的FP-NA直接映射到硬件設(shè)備上,這將得益于完整的模塊式實現(xiàn),即對于每個神經(jīng)資源,預(yù)先給定可配置模塊,然后依照。FPNA硬件友好的架構(gòu)進行組合。
3基于FPGA的神經(jīng)網(wǎng)絡(luò)的性能評估及局限性
對于FPGA實現(xiàn)的ANN,最普遍的性能評估方法是每秒神經(jīng)元乘累加的次數(shù)(Connections-Per-Sec-ond,CPS)和即每秒權(quán)值更新的次數(shù)(Connections-Updates-Per-Second,CPUS)。但是CPS和CPUS并不是適于所有的網(wǎng)絡(luò),如RBF徑向基網(wǎng)絡(luò),另外,更大的CPS和CPUS值并不一定意味著更好的性能。因此,最好的性能測量方法是實際執(zhí)行時間,但是仍有些問題要討論。FPGA實現(xiàn)神經(jīng)網(wǎng)絡(luò)存在的一些缺點(相對于計算機軟件而言):
(1)FPGA上實現(xiàn)的神經(jīng)網(wǎng)絡(luò)大多數(shù)是計算結(jié)構(gòu),而不是認(rèn)知結(jié)構(gòu)(雖然現(xiàn)在有些人試圖在FPGA上實現(xiàn)BP算法。但是整個的結(jié)構(gòu)和時序控制變得很復(fù)雜,并且無法達到計算機軟件那樣的計算精度);
(2)在FPGA上實現(xiàn)的神經(jīng)網(wǎng)絡(luò)通用性差。目前FPGA的使用者大多數(shù)都是在RTL級(寄存器傳輸級)編寫VHDL/VerilogHDL實現(xiàn)數(shù)字系統(tǒng),而正在興起的Handel-C&SystemC,可以使硬件編程者站在算法級角度,可能對以后的基于FPGA的神經(jīng)網(wǎng)絡(luò)的性能有所改善。
4基于FPGA實現(xiàn)神經(jīng)網(wǎng)絡(luò)的發(fā)展方向
(1)一種基于REMAP-β實現(xiàn)神經(jīng)網(wǎng)絡(luò)汁算機的方法。REMAP-β可重構(gòu)架構(gòu)基于FPGA技術(shù),RE-MAP-β并行計算機應(yīng)用在嵌入式實時系統(tǒng)中,以有效提高ANN算法實現(xiàn)的效率,目前它的進一步發(fā)展RE-MAP-r正在探討中。
(2)另一種基于FPGA實現(xiàn)神經(jīng)網(wǎng)絡(luò)的發(fā)展方向——系統(tǒng)C語言,直接在可編程硬件平臺支持C/C++,使得編程更加容易。但是這個轉(zhuǎn)換并不容易,因為:FPGA不是程序,而是電路。
5結(jié)語
詳細(xì)總結(jié)了FPGA實現(xiàn)神經(jīng)網(wǎng)絡(luò)的方法及相關(guān)問題,這里要注意,基于FPGA實現(xiàn)神經(jīng)網(wǎng)絡(luò),并不是要與基于計算機軟件實現(xiàn)一比高低,相反,在很多情況下,采用計算機軟件測試神經(jīng)網(wǎng)絡(luò)的收斂情況,計算出收斂時的權(quán)值,然后通過數(shù)據(jù)口線與FPGA模塊通信,把權(quán)值交給FPGA中的神經(jīng)網(wǎng)絡(luò),使用FPGA完成現(xiàn)實的工作。直到現(xiàn)在,軟件方法仍然是實現(xiàn)神經(jīng)網(wǎng)絡(luò)的首選。另外,對于硬件設(shè)計者(指利用FPGA或者全定制、半定制ASIC實現(xiàn)設(shè)計)而言,maskASICs提供首選的方法以得到大規(guī)模、快速和完全的神經(jīng)網(wǎng)絡(luò)?,F(xiàn)在它已經(jīng)開發(fā)出了所有的新型可編程器件的嵌入式資源,以得到可以實時訓(xùn)練的更有用的神經(jīng)網(wǎng)絡(luò)。
評論
查看更多