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