摘 要: 從分析人工神經(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ì)方法。通過(guò)一個(gè)小規(guī)模前饋人工神經(jīng)網(wǎng)絡(luò)的設(shè)計(jì)實(shí)例,簡(jiǎn)要說(shuō)明了利用VHDL語(yǔ)言及編譯平臺(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)是一門(mén)起始于19世紀(jì)90年代,復(fù)興于20世紀(jì)80年代的綜合性學(xué)科,涉及生物、電子、計(jì)算機(jī)、物理等多種學(xué)科,有著非常廣泛的應(yīng)用前景。長(zhǎng)期以來(lái),人們都在想方設(shè)法了解人腦的功能,用物理可實(shí)現(xiàn)系統(tǒng)去模仿人腦的神經(jīng)網(wǎng)絡(luò)。其實(shí)現(xiàn)方法是多種多樣的,總的來(lái)說(shuō)可分為兩種:一種是利用現(xiàn)代高性能的計(jì)算機(jī)形成具有模擬能力的通用軟件來(lái)完成神經(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í)語(yǔ)言開(kāi)發(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)非線(xiàn)性運(yùn)算,但精度低、對(duì)噪音和溫度的變化非常敏感、設(shè)計(jì)復(fù)雜、突觸權(quán)值存儲(chǔ)困難;而硬件實(shí)現(xiàn)的數(shù)字VLSI,雖然免疫力強(qiáng)、速度快, 但是部件(如乘法器" title="乘法器">乘法器) 占芯片面積大[1]。不過(guò),隨著大規(guī)模集成電路和HDL語(yǔ)言的不斷發(fā)展,數(shù)字VLSI設(shè)計(jì)日益成熟,EDA設(shè)計(jì)工具的不斷更新?lián)Q代,使得全數(shù)字電路ANN的實(shí)現(xiàn)工藝難度越來(lái)越小,集成度和可靠性越來(lái)越高;同時(shí)FPGA的現(xiàn)場(chǎng)可編程特性,又使得ANN的調(diào)整更加方便快捷,因而數(shù)字VLSI逐步成為ANN實(shí)現(xiàn)的發(fā)展主流。本文通過(guò)一個(gè)小規(guī)模前饋ANN的設(shè)計(jì)實(shí)例,簡(jiǎn)要說(shuō)明利用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ī)地連接起來(lái)形成網(wǎng)絡(luò),進(jìn)行并行的工作;通過(guò)模擬生物神經(jīng)細(xì)胞發(fā)出信息脈沖,控制網(wǎng)絡(luò)的運(yùn)行。神經(jīng)細(xì)胞單元的信息是寬度和幅度都相同的脈沖串" title="脈沖串">脈沖串,而脈沖串的間隔則是隨機(jī)變化的。例如某個(gè)神經(jīng)細(xì)胞單元興奮,其軸突輸出的脈沖串的平均頻率就高;若細(xì)胞單元不興奮,則脈沖頻率就低甚至沒(méi)有脈沖。多個(gè)神經(jīng)細(xì)胞單元的軸突脈沖可以加權(quán),形成細(xì)胞單元的電位變化,電位變化累加超過(guò)一定閾值,就產(chǎn)生一個(gè)脈沖,通過(guò)控制閾值大小,就可以控制脈沖。人工神經(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è)最大值,不能無(wú)限上升的緣故。
總之,人工神經(jīng)網(wǎng)絡(luò)由很多幾乎相同的單元組成,這些神經(jīng)元的輸入與輸出的函數(shù)關(guān)系為單調(diào)上升的非線(xiàn)性關(guān)系,它們之間的連接采用權(quán)的辦法實(shí)現(xiàn),每個(gè)神經(jīng)元的輸入是其他神經(jīng)元輸出的加權(quán)和,因此在電路實(shí)現(xiàn)中需要完成:
(1)實(shí)現(xiàn)神經(jīng)元輸入與輸出的線(xiàn)性關(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ò)中,乘法是利用與門(mén)進(jìn)行的。如圖2所示,兩個(gè)脈沖序列通過(guò)“與”以后的輸出即為二者的乘積;兩個(gè)脈沖序列的占空比為1/2和1/3,相“與”后,脈沖序列的占空比為1/6,從而達(dá)到相乘的目的。
?
權(quán)存儲(chǔ)在寄存器中,寄存器可以與外界的計(jì)算機(jī)內(nèi)存或EPROM相聯(lián),因而權(quán)可從外面寫(xiě)入。這意味著權(quán)的存儲(chǔ)和權(quán)的改變沒(méi)有什么困難,可以設(shè)計(jì)出可重構(gòu)的人工神經(jīng)網(wǎng)絡(luò)模型。
累加器是用計(jì)數(shù)器完成的,從乘法器輸出的脈沖串經(jīng)過(guò)計(jì)數(shù)器實(shí)現(xiàn)累加,當(dāng)累加到達(dá)閾值時(shí)即作為神經(jīng)元的一個(gè)狀態(tài)輸出。
圖3給出了一個(gè)簡(jiǎn)單的前饋人工神經(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ù)(如線(xiàn)性閾值的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語(yǔ)言的編程實(shí)現(xiàn)
為了使設(shè)計(jì)具有通用性,按照?qǐng)D5的結(jié)構(gòu)用二維數(shù)組表示輸入和輸出,并自定義一個(gè)程序包,用來(lái)定義數(shù)組的數(shù)據(jù)類(lèi)型: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ù)放入類(lèi)屬說(shuō)明中,由設(shè)計(jì)實(shí)體即設(shè)計(jì)電路外部提供,因而設(shè)計(jì)者可以根據(jù)需要方便地調(diào)整網(wǎng)絡(luò)的結(jié)構(gòu)和規(guī)模。
具體程序如下:
ENTITY dann IS
generic(n: integer :=3;——加入類(lèi)屬說(shuō)明,可從外部通過(guò)類(lèi)屬參量重新設(shè)定電路規(guī)模
m: integer :=3;
b: integer :=3);
編寫(xiě)完的程序經(jīng)過(guò)編譯綜合,便可得到如圖6所示的門(mén)電路。
4 仿真分析
經(jīng)過(guò)QuartusII對(duì)程序綜合編譯之后,還需要對(duì)電路進(jìn)行波形仿真,以檢驗(yàn)設(shè)計(jì)的正確性和程序的實(shí)用性。波形仿真如圖7所示。
為了觀測(cè)方便,在仿真時(shí)把輸入信號(hào)固定為x1=1,x2=2,x3=3,時(shí)鐘周期為10MHz。程序中共有九個(gè)權(quán)值,需要九個(gè)時(shí)鐘周期來(lái)移入。因此到第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。
?
通過(guò)上面的設(shè)計(jì),不難發(fā)現(xiàn),數(shù)字電路在權(quán)值累加和非線(xiàn)性函數(shù)的計(jì)算上比較麻煩,綜合編譯的時(shí)候,數(shù)字乘法器占用的資源巨大,尤其是隨著神經(jīng)元和輸入位數(shù)的增加,成平方倍增長(zhǎng)。但是,以一套較好的EDA工具為平臺(tái),使用VHDL語(yǔ)言從頂至下設(shè)計(jì)全數(shù)字電路的人工神經(jīng)網(wǎng)絡(luò),不僅能夠避開(kāi)電路搭配的繁瑣,縮短設(shè)計(jì)周期,提高設(shè)計(jì)效率,而且由于FPGA器件的現(xiàn)場(chǎng)可編程特性,可以靈活控制網(wǎng)絡(luò)的規(guī)模和結(jié)構(gòu),設(shè)計(jì)出可通用的網(wǎng)絡(luò)模型,大大節(jié)省了開(kāi)發(fā)周期,延長(zhǎng)了設(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