基于FPGA的人工神經(jīng)網(wǎng)絡(luò )系統的實(shí)現方法
圖1中,黑圓表示輸入為固定值1的神經(jīng)元,用它與隱層神經(jīng)元的連接權w011~w01n來(lái)表示隱層神經(jīng)元的閾值,它與輸出層神經(jīng)元的連接權w02來(lái)表示輸 出層神經(jīng)元的閾值,w1I~w1n為輸入層到隱層之間的連接權值,w21~w2n為隱層到輸出層之間的連接權值。描述一個(gè)如圖1所示網(wǎng)絡(luò )的BP算法,它主 要包括2個(gè)階段:
1)正向傳播階段 從樣本集中取出一個(gè)樣本(x,d),計算隱層各個(gè)節點(diǎn)(神經(jīng)元)輸出yI(i)=f(wl(i)x-w01(i))和輸出層節點(diǎn)輸出

2)反向傳播階段 按下式反向計算各層節點(diǎn)的局部梯度δ和權值修正量

若激勵函數f選用單極性Sigmoid函數,則:


式中,x是輸入,d是期望輸出,f為激勵函數,η為學(xué)習率,δ(o)為輸出層節點(diǎn)的梯度,δi為隱層節點(diǎn)i的梯度。
3 BP神經(jīng)網(wǎng)絡(luò )的VHDL設計
3.1 選擇系統處理數據字長(cháng)
在運算中,涉及大量乘累加操作,本應采用浮點(diǎn)運算,但是占用的硬件資源和速度都將會(huì )不理想;如果采用定點(diǎn)運算,運算中帶來(lái)的“位增長(cháng)”率將使每一級運算的 最大值可能會(huì )逐級加倍,因此如果不精心地規劃設計,這些值就會(huì )溢出,結果會(huì )因為精度不夠而無(wú)法使用。因此采用自定義的定點(diǎn)數進(jìn)行基本的運算單元設計。本系 統采用不削弱神經(jīng)網(wǎng)絡(luò )能力的最小要求16位(1,5,lO)帶符號定點(diǎn)數表示,最高位為符號位,低10位為小數位,其余為整數位。
例如:將1.5用16位(1,5,1O)帶符號定點(diǎn)數可表示為:0000011000000000,將-2.3用16位(1,5,10)帶符號定點(diǎn)數可表示為:10001 00100110011。
3.2 BP神經(jīng)網(wǎng)絡(luò )模塊庫的建立
根據文件復用性的要求,建立基于VHDL語(yǔ)言的BP神經(jīng)網(wǎng)絡(luò )元件庫,根據層次設計的要求,BP神經(jīng)網(wǎng)絡(luò )結構的描述分為3層:第1層是前向 傳輸模塊的描述,包括輸入信號加權求和,權值的存儲和非線(xiàn)性激勵函數的實(shí)現;第2層是反向傳輸模塊的描述;第3層是系統控制模塊的描述。下面用VHDL語(yǔ) 言對這3層結構分別進(jìn)行設計。
3. 2.1 前向傳輸模塊的設計
圖2為前向傳輸模塊的VHDL程序設計流程。計算時(shí)x和w都是16位有符號數。相乘后為3l位數(最高位為符號位(兩輸入數符號位相異 或),低20位為小數位,其余10位為整數位),為了節省硬件資源四舍五入,舍去低10位小數位,為了防止后面相加是溢出,再擴展4位整數位,所以乘累加 后輸出為25位。本文引用地址:http://dyxdggzs.com/article/191453.htm
函數變換部分:對于FPGA硬件來(lái)說(shuō),其可實(shí)現的運算極為有限,而B(niǎo)P網(wǎng)絡(luò )中的作用函數sigmoid函數是非線(xiàn)性的,是硬件實(shí)現的一個(gè)難點(diǎn),常用的實(shí)現 方法是查表法,這種方法比較簡(jiǎn)單,但需要占用較多資源,當需要實(shí)現的網(wǎng)絡(luò )規模較大且精度要求較高時(shí),查表法的實(shí)現有很大障礙;還有一個(gè)方法就是多項式逼近 法。本系統使用了查表和多項式逼近2種方法。
評論