摘 要: 從分析人工神經(jīng)網(wǎng)絡(luò)" title="人工神經(jīng)網(wǎng)絡(luò)">人工神經(jīng)網(wǎng)絡(luò)的設(shè)計原理入手,,闡述了全數(shù)字" title="全數(shù)字">全數(shù)字電路人工神經(jīng)網(wǎng)絡(luò)的設(shè)計方法,。通過一個小規(guī)模前饋人工神經(jīng)網(wǎng)絡(luò)的設(shè)計實例,,簡要說明了利用VHDL語言及編譯平臺,完成一種可調(diào)整權(quán)值" title="權(quán)值">權(quán)值的通用人工神經(jīng)網(wǎng)絡(luò)的設(shè)計算法和流程,。
關(guān)鍵詞: 人工神經(jīng)網(wǎng)絡(luò) VHDL 數(shù)字電路
人工神經(jīng)網(wǎng)絡(luò)(ANN)是一門起始于19世紀(jì)90年代,復(fù)興于20世紀(jì)80年代的綜合性學(xué)科,,涉及生物,、電子、計算機,、物理等多種學(xué)科,,有著非常廣泛的應(yīng)用前景。長期以來,,人們都在想方設(shè)法了解人腦的功能,,用物理可實現(xiàn)系統(tǒng)去模仿人腦的神經(jīng)網(wǎng)絡(luò),。其實現(xiàn)方法是多種多樣的,總的來說可分為兩種:一種是利用現(xiàn)代高性能的計算機形成具有模擬能力的通用軟件來完成神經(jīng)網(wǎng)絡(luò)的預(yù)期功能,;另一種是利用硬件直接實現(xiàn)神經(jīng)網(wǎng)絡(luò),,如模擬VLSI 實現(xiàn)、數(shù)字VLSI 實現(xiàn),、模數(shù)混合VLSI 實現(xiàn),。
迄今為止,人們利用C,、Basic等高級語言開發(fā)了很多神經(jīng)網(wǎng)絡(luò)軟件包,,實現(xiàn)了許多算法和模型,但是用軟件模擬的神經(jīng)網(wǎng)絡(luò)并不能達到真正的并行處理,,且對計算機性能要求很高,;硬件實現(xiàn)中的模擬VLSI,雖然速度快和集成度高,、便于實現(xiàn)非線性運算,,但精度低、對噪音和溫度的變化非常敏感,、設(shè)計復(fù)雜,、突觸權(quán)值存儲困難;而硬件實現(xiàn)的數(shù)字VLSI,,雖然免疫力強,、速度快, 但是部件(如乘法器" title="乘法器">乘法器) 占芯片面積大[1]。不過,,隨著大規(guī)模集成電路和HDL語言的不斷發(fā)展,,數(shù)字VLSI設(shè)計日益成熟,EDA設(shè)計工具的不斷更新?lián)Q代,,使得全數(shù)字電路ANN的實現(xiàn)工藝難度越來越小,,集成度和可靠性越來越高;同時FPGA的現(xiàn)場可編程特性,,又使得ANN的調(diào)整更加方便快捷,,因而數(shù)字VLSI逐步成為ANN實現(xiàn)的發(fā)展主流。本文通過一個小規(guī)模前饋ANN的設(shè)計實例,,簡要說明利用VHDL以及QuartusII編譯平臺完成一種可調(diào)整權(quán)值的通用ANN的設(shè)計算法和流程,。
1 人工神經(jīng)網(wǎng)絡(luò)的實現(xiàn)原理
人工神經(jīng)網(wǎng)絡(luò)就是采用物理可實現(xiàn)系統(tǒng)模仿人腦神經(jīng)細(xì)胞的結(jié)構(gòu)和功能的系統(tǒng)[2]。它把很多處理單元有機地連接起來形成網(wǎng)絡(luò),,進行并行的工作,;通過模擬生物神經(jīng)細(xì)胞發(fā)出信息脈沖,控制網(wǎng)絡(luò)的運行。神經(jīng)細(xì)胞單元的信息是寬度和幅度都相同的脈沖串" title="脈沖串">脈沖串,,而脈沖串的間隔則是隨機變化的,。例如某個神經(jīng)細(xì)胞單元興奮,其軸突輸出的脈沖串的平均頻率就高,;若細(xì)胞單元不興奮,,則脈沖頻率就低甚至沒有脈沖。多個神經(jīng)細(xì)胞單元的軸突脈沖可以加權(quán),,形成細(xì)胞單元的電位變化,,電位變化累加超過一定閾值,就產(chǎn)生一個脈沖,,通過控制閾值大小,,就可以控制脈沖。人工神經(jīng)元的示意圖如圖1所示,。
圖中,x1…xn表示其他神經(jīng)元的軸突輸出脈沖,,ω1…ωn為其他神經(jīng)元與第i個神經(jīng)元的突觸連接,ωi可正可負(fù),,分別表示興奮和抑制,,則:
在式(1.1)中,,si表示神經(jīng)元i突觸后的累加值,,θi為閾值。在式(1.3)中,,vi為神經(jīng)元i的狀態(tài),,yi為神經(jīng)元i的輸出,它是一個單調(diào)上升的函數(shù),,且為有限值,,這是由于生物體中神經(jīng)元脈沖發(fā)放率有一個最大值,不能無限上升的緣故,。
總之,,人工神經(jīng)網(wǎng)絡(luò)由很多幾乎相同的單元組成,這些神經(jīng)元的輸入與輸出的函數(shù)關(guān)系為單調(diào)上升的非線性關(guān)系,,它們之間的連接采用權(quán)的辦法實現(xiàn),,每個神經(jīng)元的輸入是其他神經(jīng)元輸出的加權(quán)和,因此在電路實現(xiàn)中需要完成:
(1)實現(xiàn)神經(jīng)元輸入與輸出的線性關(guān)系,。
(2)實現(xiàn)兩個信號的相乘,。在神經(jīng)網(wǎng)絡(luò)中權(quán)的數(shù)量很多,加權(quán)的計算都用乘法完成,,因此對應(yīng)于兩個信號相乘的電路必不可少,。
(3)實現(xiàn)加權(quán)后脈沖累加。
2 一種前饋人工神經(jīng)網(wǎng)絡(luò)的全數(shù)字電路模型
在全數(shù)字電路組成的人工神經(jīng)網(wǎng)絡(luò)中,乘法是利用與門進行的,。如圖2所示,,兩個脈沖序列通過“與”以后的輸出即為二者的乘積;兩個脈沖序列的占空比為1/2和1/3,,相“與”后,,脈沖序列的占空比為1/6,從而達到相乘的目的,。
?
權(quán)存儲在寄存器中,,寄存器可以與外界的計算機內(nèi)存或EPROM相聯(lián),因而權(quán)可從外面寫入,。這意味著權(quán)的存儲和權(quán)的改變沒有什么困難,,可以設(shè)計出可重構(gòu)的人工神經(jīng)網(wǎng)絡(luò)模型。
累加器是用計數(shù)器完成的,,從乘法器輸出的脈沖串經(jīng)過計數(shù)器實現(xiàn)累加,,當(dāng)累加到達閾值時即作為神經(jīng)元的一個狀態(tài)輸出。
圖3給出了一個簡單的前饋人工神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)示意圖[3],。圖中,,xi代表第i個輸入,wij代表輸入i與神經(jīng)元j之間的權(quán)值,,yj是第j個神經(jīng)元的輸出,。則:
式中, f( )是激化函數(shù)(如線性閾值的sigmoid的函數(shù)),。
根據(jù)ANN的設(shè)計實現(xiàn)原理,,可以把圖3所示的網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計成如圖4所示的數(shù)字電路結(jié)構(gòu)。
?
圖4中,,每個矩形框內(nèi)部的電路構(gòu)成一個神經(jīng)元,,在垂直方向上有幾組移位寄存器,在水平方向上有個大的環(huán)形結(jié)構(gòu),。垂直的環(huán)形移位寄存器存儲著前面所有的權(quán)值,,水平環(huán)行移位寄存器中裝載的是輸入信號。每個權(quán)值在自己的移位寄存器中的相對位置必須和輸入值匹配,。在每個垂直的環(huán)形移位存儲器輸出端有一個乘法器/累加器電路,,用于對權(quán)值和輸入信號進行乘-累加運算。運算的結(jié)果送給查找表(LUT),,用于實現(xiàn)激化函數(shù),,得到輸出yi。
這個電路只用到了三個乘法器,,有效地節(jié)省了資源,。但是各個權(quán)值單獨輸入,,不便于外部調(diào)整,不適于通用人工神經(jīng)網(wǎng)絡(luò)的編程,。為此,,設(shè)計如圖5所示電路。圖中,,只使用一個輸入端口加載所有的權(quán)值,,權(quán)值按照順序移位,直到每個寄存器都存儲相應(yīng)的權(quán)值,,然后權(quán)值與輸入相乘并累加,,最終得到期望的輸出結(jié)果。
3 VHDL語言的編程實現(xiàn)
為了使設(shè)計具有通用性,,按照圖5的結(jié)構(gòu)用二維數(shù)組表示輸入和輸出,,并自定義一個程序包,用來定義數(shù)組的數(shù)據(jù)類型:verctor_array_in和vector_array_out,。由于程序包中的參數(shù)是通用的,,可被多個實體即電路塊調(diào)用,因而大大地提高了設(shè)計效率,。
人工神經(jīng)網(wǎng)絡(luò)設(shè)計權(quán)值通用程序包如下:
LIBRARY IEEE,;
USE IEEE.std_logic_1164.ALL;
use ieee.std_logic_arith.all;
package currency_data_type is
constant b:integer:=3;——輸入位數(shù)或者權(quán)重,改變b的值,,可以調(diào)整網(wǎng)絡(luò)的規(guī)模和大小
type vector_array_in is array(natural range〈〉) of signed (b-1 downto 0);
type vector_array_out is array(natural range〈〉) of signed (2*b-1 downto 0);
end currency_data_type;
同時,,將輸入位數(shù)、神經(jīng)元的數(shù)目以及每個神經(jīng)元的權(quán)重等參數(shù)放入類屬說明中,,由設(shè)計實體即設(shè)計電路外部提供,,因而設(shè)計者可以根據(jù)需要方便地調(diào)整網(wǎng)絡(luò)的結(jié)構(gòu)和規(guī)模,。
具體程序如下:
ENTITY dann IS
generic(n: integer :=3;——加入類屬說明,,可從外部通過類屬參量重新設(shè)定電路規(guī)模
m: integer :=3;
b: integer :=3);
編寫完的程序經(jīng)過編譯綜合,便可得到如圖6所示的門電路,。
4 仿真分析
經(jīng)過QuartusII對程序綜合編譯之后,,還需要對電路進行波形仿真,以檢驗設(shè)計的正確性和程序的實用性,。波形仿真如圖7所示,。
為了觀測方便,在仿真時把輸入信號固定為x1=1,,x2=2,,x3=3,時鐘周期為10MHz,。程序中共有九個權(quán)值,,需要九個時鐘周期來移入。因此到第9個周期的時候,由圖7可知,,權(quán)值weight[1..9]分別為[0,-1,-2,-3,-4,3,2,1,0],則輸出為:
由于選用的FPGA器件不同,芯片內(nèi)部產(chǎn)生延遲,,導(dǎo)致波形中毛刺出現(xiàn),但相對于模擬電路,,精度和穩(wěn)定性仍有很大的提高,。在實際的系統(tǒng)設(shè)計中,可以根據(jù)需要并結(jié)合成本考慮選擇恰當(dāng)?shù)男酒螺d,。
?
通過上面的設(shè)計,,不難發(fā)現(xiàn),數(shù)字電路在權(quán)值累加和非線性函數(shù)的計算上比較麻煩,,綜合編譯的時候,,數(shù)字乘法器占用的資源巨大,尤其是隨著神經(jīng)元和輸入位數(shù)的增加,,成平方倍增長,。但是,以一套較好的EDA工具為平臺,,使用VHDL語言從頂至下設(shè)計全數(shù)字電路的人工神經(jīng)網(wǎng)絡(luò),,不僅能夠避開電路搭配的繁瑣,縮短設(shè)計周期,,提高設(shè)計效率,,而且由于FPGA器件的現(xiàn)場可編程特性,可以靈活控制網(wǎng)絡(luò)的規(guī)模和結(jié)構(gòu),,設(shè)計出可通用的網(wǎng)絡(luò)模型,,大大節(jié)省了開發(fā)周期,延長了設(shè)計壽命,。
參考文獻
1 Keulan E et al. Neural network hardware performance criteria.In:Proc of the IEEE Conf on Neural Networks,Vol. Florida,1994. 1885~1888
2 張立明. 人工神經(jīng)網(wǎng)絡(luò)的模型及其應(yīng)用.上海:復(fù)旦大學(xué)出版社, 1993:3~4
3 喬廬峰(譯).VHDL數(shù)字電路設(shè)計教程.北京:電子工業(yè)出版社, 2005:243~250
4 潘 松.VHDL實用教程.成都:電子科技大學(xué)出版社,2000
5 羅 莉. 數(shù)字神經(jīng)元芯片的設(shè)計與應(yīng)用.計算機研究與發(fā)展, 1998:798~802