朱承
(重慶電子工程職業(yè)學(xué)院,重慶401331)
?
基于FPGA的誤差校正神經(jīng)網(wǎng)絡(luò)算法設(shè)計(jì)與實(shí)現(xiàn)
朱承*
(重慶電子工程職業(yè)學(xué)院,重慶401331)
摘要:為了能夠在真實(shí)硬件平臺(tái)上進(jìn)行實(shí)現(xiàn),對(duì)原有的誤差校正構(gòu)造性神經(jīng)網(wǎng)絡(luò)算法進(jìn)行了優(yōu)化,并對(duì)優(yōu)化后的誤差修正算法進(jìn)行了FPGA設(shè)計(jì)與實(shí)現(xiàn)。提出算法通過(guò)在自動(dòng)生成一個(gè)合適的神經(jīng)架構(gòu)的同時(shí)對(duì)二個(gè)參數(shù)進(jìn)行設(shè)置來(lái)提高算法性能。對(duì)這種算法實(shí)現(xiàn)的所有步驟進(jìn)行了全面的描述并利用兩種基準(zhǔn)問(wèn)題對(duì)結(jié)果進(jìn)行了深入分析。結(jié)果顯示,與標(biāo)準(zhǔn)的基于個(gè)人計(jì)算機(jī)(PC)的實(shí)現(xiàn)相比,提出的神經(jīng)網(wǎng)絡(luò)算法FPGA實(shí)現(xiàn)在計(jì)算速度方面有著明顯的提高,由此證明了FPGA在誤差校正算法神經(jīng)計(jì)算任務(wù)中的實(shí)用性及適用性。
關(guān)鍵詞:FPGA;構(gòu)造型神經(jīng)網(wǎng)絡(luò)(CoNN);誤差校正;閾值網(wǎng)絡(luò)
人工神經(jīng)網(wǎng)絡(luò)(ANN)是受大腦功能啟發(fā)而得到的能夠應(yīng)用在聚類和分類問(wèn)題上的數(shù)學(xué)模型,這種數(shù)學(xué)模型已在不少領(lǐng)域獲得了成功應(yīng)用,包括模式識(shí)別、股市預(yù)測(cè)、控制任務(wù)、醫(yī)學(xué)診斷及預(yù)報(bào)。盡管已在ANN領(lǐng)域進(jìn)行了多年研究,但為給定的問(wèn)題選擇一個(gè)合適的架構(gòu)仍是一個(gè)艱巨的任務(wù)[1-2]。
在解決或緩解這一問(wèn)題的幾種策略中,隨著對(duì)輸入數(shù)據(jù)進(jìn)行分析,構(gòu)造型神經(jīng)網(wǎng)絡(luò)(CoNN)使網(wǎng)絡(luò)的生成成為可能。由此這些網(wǎng)絡(luò)能夠與這組數(shù)據(jù)的復(fù)雜性相匹配。此外,對(duì)于CoNN中的訓(xùn)練程序在標(biāo)準(zhǔn)前饋神經(jīng)網(wǎng)絡(luò)中需要很大計(jì)算量的問(wèn)題,可通過(guò)增加并行計(jì)算速度來(lái)解決。誤差校正訓(xùn)練競(jìng)爭(zhēng)型網(wǎng)絡(luò)是最近提出[3]的一種CoNN算法,由于這種算法和大多數(shù)的CoNN的一樣未凍結(jié)先前合并的神經(jīng)元的突觸權(quán)值,且包含有一個(gè)內(nèi)置的用于避免過(guò)擬合問(wèn)題的過(guò)濾方案,因此該算法能夠允許神經(jīng)元在整個(gè)訓(xùn)練過(guò)程中進(jìn)行學(xué)習(xí),從而實(shí)現(xiàn)競(jìng)爭(zhēng)。該算法的這兩個(gè)特點(diǎn)可使其生成具有良好泛化能力的緊奏型神經(jīng)架構(gòu),從而更適合于應(yīng)用在有限資源的設(shè)備上,如微控制器、嵌入式系統(tǒng)、傳感器網(wǎng)絡(luò)和FPGA[4]。
近幾年,由于科技的進(jìn)步,人們已構(gòu)造出具有巨大的處理能力和記憶存儲(chǔ)能力的FPGA,且這些FPGA已在一些領(lǐng)域(通信、機(jī)器人學(xué)、模式識(shí)別任務(wù)、架構(gòu)監(jiān)控等)得到應(yīng)用[5-6]。由于FPGA屬于內(nèi)在并行設(shè)備且能夠在神經(jīng)網(wǎng)絡(luò)模型中處理信息,因此更適用于神經(jīng)網(wǎng)絡(luò)的實(shí)現(xiàn)。一些研究已經(jīng)分析了在FPGA中的神經(jīng)網(wǎng)絡(luò)模型的實(shí)現(xiàn)[7],根據(jù)FPGA是否包括片上學(xué)習(xí)過(guò)程,可完成對(duì)FPGA的粗分類[8]。片上學(xué)習(xí)實(shí)現(xiàn)中,神經(jīng)網(wǎng)絡(luò)模型的訓(xùn)練通常可在個(gè)人計(jì)算機(jī)(PC)上進(jìn)行且只將突觸權(quán)值傳輸?shù)阶鳛橛布铀倨鳎?]的FPGA上。與此相反的是,片上學(xué)習(xí)實(shí)現(xiàn)[10]可使PC自主獨(dú)立地訓(xùn)練模型,但這種方式在提供更強(qiáng)的靈活性和更高效率的同時(shí)將會(huì)消耗更多的FPGA資源。
因此本文對(duì)對(duì)原有的誤差校正構(gòu)造性神經(jīng)網(wǎng)絡(luò)算法進(jìn)行了優(yōu)化,并對(duì)優(yōu)化后的誤差修正算法進(jìn)行了FPGA模塊設(shè)計(jì),最后在Virtex-5 FPGA平臺(tái)進(jìn)行了算法運(yùn)行效果測(cè)試。本文的貢獻(xiàn)主要有2點(diǎn),首先對(duì)通過(guò)FPGA并行處理誤差校正神經(jīng)網(wǎng)絡(luò)算法,可實(shí)現(xiàn)的速度優(yōu)勢(shì)進(jìn)行了分析,其次是根據(jù)能夠存儲(chǔ)的最大模式數(shù)量對(duì)利用FPGA的實(shí)際局限、數(shù)據(jù)集的尺寸和使用定點(diǎn)表示法的區(qū)別等等進(jìn)行了分析,特別是對(duì)實(shí)現(xiàn)一個(gè)真實(shí)硬件時(shí)的分析。最終證明了運(yùn)用FPGA實(shí)現(xiàn)的誤差修正神經(jīng)網(wǎng)絡(luò)算法應(yīng)用,能夠有效解決現(xiàn)實(shí)工業(yè)生產(chǎn)的問(wèn)題。
1.1構(gòu)造神經(jīng)網(wǎng)絡(luò)算法原理
誤差修正神經(jīng)網(wǎng)絡(luò)是一種新穎的神經(jīng)網(wǎng)絡(luò)構(gòu)造型算法,這種算法利用神經(jīng)元和修改的感知器學(xué)習(xí)規(guī)則之間的競(jìng)爭(zhēng),來(lái)構(gòu)造對(duì)監(jiān)督分類問(wèn)題具有良好預(yù)測(cè)能力的單隱層緊湊架構(gòu)。作為CoNN算法,誤差修正神經(jīng)網(wǎng)絡(luò)能夠在學(xué)習(xí)階段在線生成網(wǎng)絡(luò)拓?fù)?,從而避免有關(guān)選擇合適神經(jīng)架構(gòu)方面復(fù)雜問(wèn)題的出現(xiàn)。與先前提出的構(gòu)造型算法相比,誤差修正神經(jīng)網(wǎng)絡(luò)的新穎之處在于位于單隱層中的神經(jīng)元能夠?yàn)閷W(xué)習(xí)輸入數(shù)據(jù)而競(jìng)爭(zhēng),這一過(guò)程可允許緊奏型神經(jīng)架構(gòu)的創(chuàng)建。在單隱層中的神經(jīng)元的二進(jìn)制激活狀態(tài)(S)取決于N輸入信號(hào)ψi及N突觸權(quán)值(wi)和偏差(b)的實(shí)際值,如下:
式中,h代表神經(jīng)元的突觸電位,可定義為
在熱感知器規(guī)則中,根據(jù)下列的方程式可在線完成(在顯示單輸入模式后)對(duì)突觸權(quán)值Δwi的修改,
根據(jù)(5)可知,T值會(huì)隨著學(xué)習(xí)過(guò)程的進(jìn)展而減小。
式中,I代表界定誤差修正神經(jīng)網(wǎng)絡(luò)算法在一個(gè)學(xué)習(xí)周期中迭代的循環(huán)計(jì)數(shù),Imax代表允許迭代的最高次數(shù)。這種算法的一個(gè)學(xué)習(xí)周期指的是一個(gè)過(guò)程,這一過(guò)程從網(wǎng)絡(luò)上顯示出已選擇的模式開(kāi)始并在檢查所有的神經(jīng)元對(duì)輸入做出正確回應(yīng)后或在神經(jīng)元的突觸權(quán)值選擇學(xué)習(xí)的實(shí)際模式后(無(wú)論是現(xiàn)有的還是新的神經(jīng)元修改自身的突觸權(quán)值)結(jié)束。
1.2優(yōu)化參數(shù)設(shè)置
為了能夠在真實(shí)硬件平臺(tái)上進(jìn)行實(shí)現(xiàn),并提高算法的魯棒性,以便在廣泛的參數(shù)值范圍內(nèi)運(yùn)行情況相當(dāng)良好,需要對(duì)原有誤差修正神經(jīng)網(wǎng)絡(luò)算法的2個(gè)參數(shù)進(jìn)行設(shè)置。提出的算法優(yōu)化的2個(gè)參數(shù)如下:
(1)gfac確定何時(shí)終止學(xué)習(xí)周期及向隱層中引進(jìn)一個(gè)新神經(jīng)元的增長(zhǎng)因數(shù)。
(2)φ確定在何種情況下可認(rèn)為輸入實(shí)例是一種噪聲并根據(jù)以下條件將其從訓(xùn)練數(shù)據(jù)集中移除。
式中,xi代表一種輸入模式,N代表在該數(shù)據(jù)集中模式總數(shù),NLT代表模式xi在當(dāng)前學(xué)習(xí)周期中顯示在網(wǎng)絡(luò)上的次數(shù),μ和σ分別相當(dāng)于該算法在一個(gè)學(xué)習(xí)周期中試圖學(xué)習(xí)每種模式的分布平均值和方差。該學(xué)習(xí)過(guò)程開(kāi)始于一個(gè)單隱層中的神經(jīng)元及一個(gè)能夠計(jì)算隱藏神經(jīng)元響應(yīng)的輸出神經(jīng)元。通過(guò)在網(wǎng)絡(luò)中顯示輸入模式,可使該學(xué)習(xí)過(guò)程繼續(xù),如果誤分類輸入模式,在滿足一些條件的情況下,當(dāng)前的一個(gè)神經(jīng)元(其輸出與目標(biāo)模式值不相匹配)則會(huì)進(jìn)行學(xué)習(xí)過(guò)程,否則一個(gè)新的神經(jīng)元將會(huì)進(jìn)入該架構(gòu)進(jìn)行學(xué)習(xí)過(guò)程。在所有誤分類輸入模式的神經(jīng)元中,只有當(dāng)Tfac值大于該算法的gfac參數(shù)時(shí),具有最大Tfac的神經(jīng)元才能開(kāi)始該學(xué)習(xí)過(guò)程,所包含的一個(gè)條件用于預(yù)防忘記學(xué)習(xí)先前存儲(chǔ)的信息。如果未找到可滿足這些條件的感知器,網(wǎng)絡(luò)中將會(huì)增加一個(gè)新神經(jīng)元并開(kāi)始新的學(xué)習(xí)周期(該周期所有神經(jīng)元的溫度值均復(fù)位到T0),并在該新的學(xué)習(xí)周期結(jié)束時(shí)使
式中,t代表顯示輸入的目標(biāo)值;ψ代表通過(guò)權(quán)值wi連接到輸出的輸入單元i的數(shù)值。與標(biāo)準(zhǔn)感知學(xué)習(xí)規(guī)則的區(qū)別在于熱感器器包含有Tfac因數(shù)。該Tfac因數(shù)取決于突觸電位的數(shù)值和人工引入的溫度值(T),計(jì)算出的Tfac因數(shù)值在式(4)中顯示。用噪聲模式過(guò)濾程序式(6)。通過(guò)重復(fù)先前的步驟可使該算法繼續(xù)進(jìn)行迭代運(yùn)算,直到網(wǎng)絡(luò)完成對(duì)訓(xùn)練集中所有模式的正確分類。
FPGA屬于利用預(yù)制的邏輯塊和程式化互聯(lián)資源可重復(fù)進(jìn)行編程的硅芯片。人們可對(duì)其進(jìn)行配置使其實(shí)現(xiàn)自定義的硬件功能,在這種意義上,F(xiàn)PGA通過(guò)重新編譯一個(gè)新的電路配置FPGA幾乎可以實(shí)現(xiàn)對(duì)自身行為的實(shí)時(shí)改變。通過(guò)將FPGA資源分成3個(gè)主要部分可在Virtex 5 FPGA中實(shí)現(xiàn)誤差修正神經(jīng)網(wǎng)絡(luò)算法。圖1顯示的是完成運(yùn)算所必需的控制模塊、模式模塊和神經(jīng)元模塊及它們之間的結(jié)構(gòu)圖。我們?cè)谙旅鎸?duì)3種塊的組織進(jìn)行了描述并在分段中對(duì)具體實(shí)現(xiàn)細(xì)節(jié)進(jìn)行了評(píng)論。
圖1 FPGA設(shè)計(jì)的方案
2.1模式模塊
模式模塊可對(duì)培訓(xùn)模式進(jìn)行管理。通過(guò)串行端口模式可接收到來(lái)自PC的突觸權(quán)值并可將其存儲(chǔ)在FPGA的分布式RAM塊中。通過(guò)利用2n byte及n值可顯示出模式。需注意的是每一種模式類(目標(biāo)輸出)均有一個(gè)備用的額外位。
在接收到來(lái)自控制模塊的信號(hào)后再進(jìn)行運(yùn)算的期間,模式模塊將會(huì)向所有的神經(jīng)元發(fā)送一個(gè)隨機(jī)選擇的模式。為避免重復(fù)訓(xùn)練已給定的模式,可將最后一個(gè)發(fā)送模式的記憶位置切換至一個(gè)對(duì)應(yīng)的最終符合條件的記憶位置,因此符合條件的記憶位置數(shù)量將會(huì)減少一個(gè)。由于這種情況牽涉到修改突觸權(quán)值及開(kāi)始新的學(xué)習(xí)周期,因此系統(tǒng)將會(huì)一直重復(fù)這種動(dòng)作直至找到一種網(wǎng)絡(luò)輸出不同于其目標(biāo)值的模式。
2.2神經(jīng)元模塊
每個(gè)神經(jīng)元均由一組查找表(LUT)構(gòu)成,該查找表包含有用于計(jì)算其輸出(S)和Tfac值及修改其突觸權(quán)值的所有信息。神經(jīng)元接收來(lái)自模式模塊與輸入模式相關(guān)的信息并對(duì)其突觸電位值h進(jìn)行計(jì)算,以便于通過(guò)以下方程式獲得神經(jīng)元的輸出:
需注意的是該方程式與原誤差修正神經(jīng)網(wǎng)絡(luò)方程式(1)相類似,但當(dāng)前的這一方程式根據(jù)h值對(duì)是否激活神經(jīng)元的的不平等條件進(jìn)行了修改,因此現(xiàn)在僅當(dāng)h>0時(shí)神經(jīng)元才可處于激活狀態(tài),而在h=0時(shí)神經(jīng)元將處于未激活狀態(tài)。這種改變可以借助于一種更快的方法(見(jiàn)控制模塊部分)對(duì)所有神經(jīng)元(網(wǎng)絡(luò)輸出)的函數(shù)進(jìn)行計(jì)算。通過(guò)神經(jīng)元模塊將所有隱藏神經(jīng)元的S值發(fā)送到控制模塊可計(jì)算出整個(gè)網(wǎng)絡(luò)的輸出值,這一輸出值是返回到神經(jīng)元中用于決定是否計(jì)算該數(shù)值(在網(wǎng)絡(luò)輸出與模式目標(biāo)值不相匹配的情況下),或是否等待下一個(gè)輸入模式(如果網(wǎng)絡(luò)輸出與模式目標(biāo)值相匹配),以便于重新開(kāi)始整個(gè)過(guò)程。在網(wǎng)絡(luò)輸出與當(dāng)前模式的目標(biāo)值不相匹配的情況下,每個(gè)神經(jīng)元將計(jì)算各自的Tfac值式(4),并將該值發(fā)送到控制模塊,控制模塊則會(huì)返回有關(guān)具有最大Tfac值的神經(jīng)元的信息,因此該神經(jīng)元?jiǎng)t會(huì)在其Tfac值大于gfac參數(shù)值的情況下修改自身的突觸權(quán)值。代替使用RAM塊,將突觸權(quán)值存儲(chǔ)在FPGA的寄存器中(這種方式可使突觸權(quán)值接近于神經(jīng)元)可減少有關(guān)設(shè)置方面問(wèn)題的出現(xiàn)。
2.3控制模塊
控制模塊通過(guò)發(fā)送并處理來(lái)自神經(jīng)元模塊和模式模塊的信息來(lái)組織整個(gè)信息過(guò)程。一旦將模式加載到模式模塊中,控制模塊將會(huì)接收到信號(hào)以便于開(kāi)始執(zhí)行算法。通過(guò)向模式模塊發(fā)送信號(hào)指示其向神經(jīng)元發(fā)送隨機(jī)選擇的模式可啟動(dòng)該算法過(guò)程。
誤差修正神經(jīng)網(wǎng)絡(luò)是一種構(gòu)造型ANN模型,其架構(gòu)隨著訓(xùn)練過(guò)程的進(jìn)展而形成,而FPGA在進(jìn)行編程前需要對(duì)所有的元件進(jìn)行指定,在控制模塊控制一個(gè)標(biāo)示時(shí),系統(tǒng)就已創(chuàng)造出在架構(gòu)中神經(jīng)元可能的最大數(shù)量,其數(shù)量決定了神經(jīng)元是處于激活狀態(tài)(包含在真實(shí)架構(gòu)中)或處于未激活狀態(tài)(等待潛在的包含)。在學(xué)習(xí)過(guò)程開(kāi)始時(shí),所有的突觸權(quán)值設(shè)定為零且控制單元僅可以激活一個(gè)神經(jīng)元。
當(dāng)將隨機(jī)選擇的模式發(fā)送到神經(jīng)元時(shí),系統(tǒng)則會(huì)計(jì)算出它們的輸出(S)且控制模塊將會(huì)計(jì)算這些信號(hào)(整個(gè)網(wǎng)絡(luò)輸出對(duì)先前輸入的響應(yīng))的函數(shù),然后將輸出值與目標(biāo)值相比較,如果它們互相匹配,控制模塊則會(huì)發(fā)送信號(hào)使其釋放一個(gè)新模式;如果它們不相匹配,每個(gè)神經(jīng)元將會(huì)得到一個(gè)Tfac值,以便于選擇出最大的Tfac值,并且當(dāng)Tfac值大于gfac參數(shù)值時(shí),神經(jīng)元?jiǎng)t可以開(kāi)始修改其突觸權(quán)值,控制單元將會(huì)從神經(jīng)元處接收到的Tfac值中選出錯(cuò)誤的Tfac值及具有最大Tfac值的神經(jīng)元。此時(shí),控制模塊將向已選出的神經(jīng)元發(fā)送信號(hào),這樣該單元就能夠?qū)ζ渫挥|權(quán)值進(jìn)行修改。按照這一過(guò)程可連續(xù)完成對(duì)權(quán)值的修改并依照式(3),可對(duì)每個(gè)突觸進(jìn)行更新。
控制模塊包括兩個(gè)模塊:Tfac模塊和S(輸出)模塊。Tfac模塊用于計(jì)算一組神經(jīng)元的最大Tfac,然而S模塊則用于計(jì)算S的函數(shù)。在以下部分中對(duì)這兩種模塊進(jìn)行了詳細(xì)的說(shuō)明。
(1)S模塊該模塊用于計(jì)算隱藏神經(jīng)元輸出(S)的函數(shù)。圖2顯示的是有關(guān)該模塊操作的示意圖。首先添加隱藏神經(jīng)元輸出(Si)的然后該值將會(huì)與由步驟2劃分的活躍神經(jīng)元的數(shù)量相比較,由此可計(jì)算出函數(shù)。當(dāng)激活的神經(jīng)元的數(shù)量大于未激活的神經(jīng)元的數(shù)量時(shí),該模塊的輸出為“1”,否則該模塊的輸出則為“0”。對(duì)于該電路的邏輯運(yùn)算,將正確的邏輯移位運(yùn)算應(yīng)用在活躍神經(jīng)元上可獲得一半數(shù)量的活躍神經(jīng)元。由于在該控制模塊上的計(jì)算不是同步的,因此僅在一個(gè)時(shí)鐘周期內(nèi)即可完成該模塊的運(yùn)算。
圖2 用于計(jì)算隱藏神經(jīng)元輸出的函數(shù)的S模塊功能圖
(2)Tfac模塊該模塊負(fù)責(zé)計(jì)算出在當(dāng)前模式下(“錯(cuò)誤”神經(jīng)元)輸出與目標(biāo)值不相匹配的所有神經(jīng)元中最大的Tfac值。由于該模塊能夠更有效地計(jì)算出所有神經(jīng)元的Tfac值,因此我們將“正確”神經(jīng)元的Tfac值設(shè)定為0,以便于在所有神經(jīng)元中獲得最大的Tfac值(將不活躍的神經(jīng)元的Tfac值也設(shè)定為0)。由于不需要使用最大的Tfac值來(lái)減少系統(tǒng)的運(yùn)算頻率,因此可在16個(gè)神經(jīng)元模塊中計(jì)算出最大的Tfac值。如果活躍神經(jīng)元的數(shù)量超過(guò)16,系統(tǒng)將存儲(chǔ)第1塊獲得的最大Tfac值并將其與第2塊獲得的最大Tfac值進(jìn)行比較,然后存儲(chǔ)目前得到的最大Tfac值。利用這種處理方式獲得最大Tfac值直到分析完所有的活躍神經(jīng)元。圖3顯示的是有關(guān)在誤分類輸入模式的神經(jīng)元中尋找具有最大Tfac值的神經(jīng)元的過(guò)程示意圖。該圖的左下方顯示的是同步模塊運(yùn)算的時(shí)鐘信號(hào),該圖的上方顯示的是集合在被反復(fù)發(fā)送到邏輯電路中的16個(gè)神經(jīng)元模塊的Tfac值,利用邏輯電路可計(jì)算出該塊最大的神經(jīng)元數(shù)量,計(jì)算時(shí)需將目前得到的最大Tfac值考慮進(jìn)去。分析完所有塊后,Tfac模塊將輸出找到的最大值(最大Tfac值)和一個(gè)用于指示具有最大Tfac值的神經(jīng)元的數(shù)值(索引)。
圖3 用于計(jì)算活躍神經(jīng)元中的最大Tfac值及獲得該值的神經(jīng)元的索引的模塊功能圖
(3)產(chǎn)品實(shí)現(xiàn)完成該算法需對(duì)幾個(gè)產(chǎn)品進(jìn)行計(jì)算,例如計(jì)算Tfac值,獲得突觸權(quán)值及神經(jīng)元電位(h)。特別是計(jì)算Tfac值時(shí)需進(jìn)行3個(gè)乘法運(yùn)算:第1個(gè)與計(jì)算T有關(guān),第2個(gè)與指數(shù)函數(shù)的插值有關(guān),第3個(gè)則用于獲得最終的Tfac值。每個(gè)神經(jīng)元僅有一個(gè)能夠用在時(shí)分復(fù)用方案中用于降低使用LUT次數(shù)的乘法器塊。代替使用Xilinx特定的乘法器核心,我們使用了可輸出的代碼,以便于發(fā)揮其在其他FPGA上的潛在應(yīng)用能力。本方案要求的LUT的數(shù)量與輸入數(shù)據(jù)的位的大小成比例,例如對(duì)于兩個(gè)分別具有Na和Nb個(gè)位的長(zhǎng)度的矢量來(lái)說(shuō),其產(chǎn)品需要Na×Nb個(gè)LUT,因此其輸出具有Na+Nb個(gè)位的大小。
(4)突觸權(quán)值精度考慮到獲取相對(duì)高的精度可能需要相對(duì)大的表達(dá),突觸權(quán)值的表達(dá)可以根據(jù)可利用的資源來(lái)選擇,這將意味著每個(gè)神經(jīng)元的LUT數(shù)目的增加(結(jié)果是可利用神經(jīng)元數(shù)目的減少)與最大運(yùn)算頻率的降低。突觸權(quán)值的精度非常重要,因此其結(jié)果值類似于通過(guò)使用浮點(diǎn)表示法(在基于PC代碼中使用的)獲得的數(shù)值。利用長(zhǎng)度N1與N2帶有整數(shù)和小數(shù)部分的位數(shù)組可表示出突觸權(quán)值。N1用于確定-2(N1-1)到2(N1-1)可獲得的最小值與最大值,而N2則用于確定精度2-N2。表達(dá)一定正值范圍內(nèi)所有可能的離散值所需的位數(shù)取決于間隔最大值與最小值的差異,根據(jù)下列方程式可獲取所需的位數(shù)。
表1顯示的是按照表達(dá)突觸權(quán)值N1+N2所使用的位數(shù)(N1與N2分別表示該表達(dá)的整數(shù)與小數(shù)部分),需要的LUT數(shù)量、最大運(yùn)算頻率、可利用神經(jīng)元的數(shù)量及精度。
表1 N1和N2變化時(shí)LUT的數(shù)量、最大運(yùn)算頻率和可利用神經(jīng)元的數(shù)量與精度
N1與N2分別表示整數(shù)與小數(shù)部分。
(5)輸入數(shù)目誤差修正神經(jīng)網(wǎng)絡(luò)網(wǎng)絡(luò)中的輸入數(shù)量是由訓(xùn)練模式的大小所決定。當(dāng)輸入大小從本質(zhì)上修改每個(gè)神經(jīng)元的LUT數(shù)量與能夠被儲(chǔ)存在記憶板中的訓(xùn)練模式的最大數(shù)量時(shí),輸入尺寸將極大影響整個(gè)FPGA的實(shí)現(xiàn)。而且,改變輸入的數(shù)量還包括對(duì)程序代碼的完全修改,從這層意義上而言,我們的方法是根據(jù)所需輸入的最大數(shù)量來(lái)研發(fā)不同的代碼。當(dāng)然,非最佳選擇就是在所有情況下均選擇最大的輸入代碼,這無(wú)疑會(huì)降低板的其他能力。表2顯示的是每個(gè)神經(jīng)元的LUT數(shù)量、每1 024個(gè)模式所使用的隨機(jī)存取存儲(chǔ)(RAM)塊的數(shù)量、可被儲(chǔ)存的模式的最大數(shù)量(1 024×RAM塊)及模式模塊的LUT和寄存器的數(shù)量,這些均需以輸入的數(shù)量為基礎(chǔ)。由于剩余的輸入用作輸出分類,因此表中所示的輸入大小與2的冪次方減1相對(duì)應(yīng)。
表2 每個(gè)神經(jīng)元的各項(xiàng)參數(shù)值
(6)Imax對(duì)于原始的誤差修正神經(jīng)網(wǎng)絡(luò)代碼而言,對(duì)決定一個(gè)神經(jīng)元在一個(gè)學(xué)習(xí)周期內(nèi)所能經(jīng)受的最多的學(xué)習(xí)修改次數(shù)的數(shù)值Imax進(jìn)行了修改。若通過(guò)具有相關(guān)高計(jì)算費(fèi)用的除法運(yùn)算來(lái)利用該數(shù)值計(jì)算溫度(T)值,則Imax就是數(shù)值2的有限冪次方,這將允許除法運(yùn)算在正確邏輯移位上的轉(zhuǎn)變。Imax的最大允許數(shù)值是217=131 072。
目前實(shí)現(xiàn)所使用的開(kāi)發(fā)板屬于Virtex-5 FPGA評(píng)估平臺(tái)。這種設(shè)備包括Xilinx Virtex-5 XC5VLX110T FPGA,它能夠提供不同連接器裝置:2個(gè)USB(主機(jī)和外圍設(shè)備)端口、2個(gè)PS/2(鍵盤和鼠標(biāo))端口、RJ-45 (10/100/1000網(wǎng)絡(luò))和RS-232(male串行端口)連接器、2個(gè)聲頻輸入(線路和微音器)、2個(gè)聲頻輸出(線路、放大器和SPDIF)、視頻輸入、視頻輸出(DVI/VGA)及單端型和差分I/O擴(kuò)展。表3顯示的是Virtex-5 XC5VLX110T FPGA的一些特征,由此表明其具有的主要邏輯資源。圖4顯示的是Virtex-5 XC5VLX110T FPGA的圖片。
表3 VIRTEX-5 XC5VLX110T FPGA的主要規(guī)格參數(shù)
圖4 用于實(shí)現(xiàn)誤差修正神經(jīng)網(wǎng)絡(luò)算法的Virtex-5 FPGA平臺(tái)
在Xilinx ISE設(shè)計(jì)套件12.4環(huán)境下,采用硬件描述語(yǔ)言(VHDL)可對(duì)FPGA進(jìn)行編程。我們的設(shè)計(jì)策略是避免使用特定的Xilinx核心,以便于從其他制造商處獲得能夠應(yīng)用在FPGA上的總體設(shè)計(jì)。
我們已對(duì)選擇的FPGA在VHDL中的實(shí)現(xiàn)與誤差修正神經(jīng)網(wǎng)絡(luò)算法在C語(yǔ)言編程[11-12]中的實(shí)現(xiàn)進(jìn)行了不同形式的比較,值得注意的是,在PC可用語(yǔ)言中,VHDL這種語(yǔ)言是最快的語(yǔ)言之一。運(yùn)行C代碼的CPU是英特爾(R)酷睿(TM)CPU四核Q6600@2.4 GHz。
使用一組16個(gè)單輸出布爾函數(shù)來(lái)測(cè)試誤差修正神經(jīng)網(wǎng)絡(luò)算法生成的速度與架構(gòu)。測(cè)試所使用的函數(shù)包括兩組算術(shù)邏輯單元(ALU)函數(shù)[13],即10個(gè)輸入6 Alu2的函數(shù)與14個(gè)輸入8 Alu4的函數(shù)。這兩組函數(shù)都是從參照[14]的基準(zhǔn)得來(lái)的,一并得到的還有輸入2且3的互斥分離函數(shù)(XOR)。誤差修正神經(jīng)網(wǎng)絡(luò)算法可在以下參數(shù)值下運(yùn)行:gfac= 0.01與Imax=16 384(在以下情況下無(wú)需使用無(wú)噪音消除步驟,例如=∞)。此外,還可以使用一個(gè)鎖相環(huán)塊(PLL)將所有測(cè)試系統(tǒng)的頻率設(shè)置為72.72 MHz。誤差修正神經(jīng)網(wǎng)絡(luò)算法VHDL-FPGA與C-PC實(shí)現(xiàn)一組16個(gè)布爾函數(shù)學(xué)習(xí)時(shí)間的平均值與標(biāo)準(zhǔn)偏差,由圖5中以對(duì)數(shù)函數(shù)y軸的形式可以顯示出來(lái)。?
圖5 誤差修正神經(jīng)網(wǎng)絡(luò)算法VHDL-FPGA 與C-PC的平均值與標(biāo)準(zhǔn)偏差
我們進(jìn)一步計(jì)算了隨著建設(shè)性網(wǎng)絡(luò)發(fā)展,新神經(jīng)元加入有關(guān)的執(zhí)行時(shí)間。通過(guò)輸入10的函數(shù)Alu21比較FPGA所需的實(shí)現(xiàn)時(shí)間與基于PC的實(shí)現(xiàn)時(shí)間(重復(fù)30次以獲取平均值)。圖6(a)顯示了實(shí)現(xiàn)FPGA與PC所需的時(shí)間,而圖6(b)顯示了兩個(gè)平臺(tái)之間的相對(duì)增長(zhǎng)速度。圖6(b)中的兩條曲線與算法達(dá)到所示的神經(jīng)元數(shù)目(累積)所需的相對(duì)時(shí)間一致。然而,當(dāng)通過(guò)固定數(shù)量的神經(jīng)元執(zhí)行算法時(shí),上方的曲線(每個(gè)神經(jīng)元)就與對(duì)比相吻合。累積對(duì)比清楚地顯示了FPGA的相對(duì)性能(與PC的實(shí)現(xiàn)相比)隨著架構(gòu)中神經(jīng)元數(shù)目的增加而幾乎呈現(xiàn)出線性增加。
圖6 計(jì)算alu21函數(shù)
在另一個(gè)實(shí)驗(yàn)中,我們使用一組8個(gè)二進(jìn)制輸出基準(zhǔn)問(wèn)題分析了現(xiàn)實(shí)函數(shù)的實(shí)現(xiàn)。表4顯示了誤差修正算法FPGA與PC的實(shí)現(xiàn)結(jié)果。表格的前兩列顯示了所使用基準(zhǔn)問(wèn)題的輸入名稱與數(shù)目。第3與第4列顯示了實(shí)現(xiàn)FPGA與PC所獲得的神經(jīng)元數(shù)目,最后兩列顯示了FPGA與PC兩種途徑的泛化能力。利用10倍的訓(xùn)練/測(cè)試方案及下面的有關(guān)誤差校正算法的參數(shù)(gfac= 0.1,Imax= 65 536,= 2)可計(jì)算出泛化能力。
表4 8個(gè)基準(zhǔn)問(wèn)題在誤差校正算法的FPGA版本中的實(shí)現(xiàn)結(jié)果
前兩列顯示函數(shù)輸入的名稱與數(shù)目,其余的幾列顯示了神經(jīng)元的數(shù)目與使用兩個(gè)平臺(tái)所獲得的泛化能力。
在本文,我們已經(jīng)分析并優(yōu)化了原有的誤差修正神經(jīng)網(wǎng)絡(luò),并設(shè)計(jì)了相應(yīng)的FPGA模塊來(lái)實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)構(gòu)造型算法的片上學(xué)習(xí)。在眾所周知的基準(zhǔn)數(shù)據(jù)集(如表4)進(jìn)行的一些測(cè)試顯示,由于幾乎難以對(duì)生成的架構(gòu)的大小與該算法的泛化能力進(jìn)行辨別,因此在大多數(shù)情況下,使用固定精度表達(dá)(16位定點(diǎn))足以可得到與該算法的浮點(diǎn)原始基于PC實(shí)現(xiàn)的對(duì)比結(jié)果。
代替使用標(biāo)準(zhǔn)C語(yǔ)言的軟件,該算法使用FPGA版本的優(yōu)勢(shì)在于:我們已觀測(cè)到計(jì)算速度的顯著提高。值得注意的是,隨著問(wèn)題復(fù)雜性的增加,該速度大致呈現(xiàn)出線性增長(zhǎng),因此在分析最復(fù)雜的函數(shù)的情況下(圖5中Alu4r函數(shù))即可獲得增長(zhǎng)高達(dá)47倍的因子。
根據(jù)觀察到的結(jié)果,我們可以得出結(jié)論:測(cè)試結(jié)果證明了運(yùn)用FPGA實(shí)現(xiàn)的誤差修正神經(jīng)網(wǎng)絡(luò)算法應(yīng)用,能夠有效解決現(xiàn)實(shí)工業(yè)生產(chǎn)的問(wèn)題,例如工業(yè)電機(jī)控制[15]、機(jī)器視覺(jué)[16]、工業(yè)控制網(wǎng)絡(luò)、機(jī)器人學(xué)等。此外,實(shí)驗(yàn)證明了FPGA在已給定內(nèi)在并行性處理的神經(jīng)計(jì)算任務(wù)方面具有巨大的潛力。
參考文獻(xiàn):
[1]Monmasson E,Idkhajine L,Cirstea M,et al.FPGAs in Industrial Control Applications[J].IEEE Trans Ind Informat,2011,7(2):224-243.
[2]李利歌,閻保定,侯忠,等.基于FPGA的神經(jīng)網(wǎng)絡(luò)硬件可重構(gòu)實(shí)現(xiàn)[J].河南科技大學(xué)學(xué)報(bào):自然科學(xué)版,2009,30(1):37-40.
[3]Subirats J,F(xiàn)ranco L,Jerez J.C-Mantec:A Novel Constructive Neural Etwork Algorithm Incorporating Competition between Neurons[J]Neural Netw,2012,(26)3:130-140.
[4]張榮華,王江.FPGA在生物神經(jīng)系統(tǒng)模型仿真中的應(yīng)用[J].計(jì)算機(jī)應(yīng)用研究,2011,28(8):2949-2953.
[5]Hunter D,Yu H,Pukish M SⅢ,et al.Selection of Proper Neural Network Sizes and Architectures—A Comparative Study[J].IEEE Trans on Industrial Informatics,2012,8(2):228-240.
[6]張海燕,李欣.智能神經(jīng)元網(wǎng)絡(luò)前向傳播過(guò)程的硬件實(shí)現(xiàn)[J].哈爾濱工程大學(xué)學(xué)報(bào),2006,27(z1):40-45.
[7]汪光森,伍行鍵,李譽(yù),等.基于FPGA的神經(jīng)網(wǎng)絡(luò)的硬件實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用,1999,25(12):23-25.
[8]楊銀濤,汪海波,張志,等.基于FPGA的人工神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)方法的研究[J].現(xiàn)代電子技術(shù),2009,32(18):170-174.
[9]王炳健,劉上乾,汪大寶,等.基于FPGA的IRFPA非均勻性自適應(yīng)校正算法實(shí)時(shí)實(shí)現(xiàn)[J].半導(dǎo)體光電,2008,29(4):583-585,589.
[10]李宏偉,吳慶祥.脈沖神經(jīng)網(wǎng)絡(luò)中神經(jīng)元突觸的硬件實(shí)現(xiàn)方案[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2014,23(2):17-21.
[11]王建輝,崔維嘉,胡捍英,等.基于神經(jīng)網(wǎng)絡(luò)的魯棒NLOS誤差抑制算法[J].計(jì)算機(jī)工程,2011,37(24):7-9.
[12]劉新平,唐磊,金有海,等.擴(kuò)展隱層的誤差反傳網(wǎng)絡(luò)訓(xùn)練算法研究[J].計(jì)算機(jī)集成制造系統(tǒng),2008,14(11):2284-2288.
[13]王正群,陳世福,陳兆乾,等.一種主動(dòng)學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)集成方法[J].計(jì)算機(jī)研究與發(fā)展,2005,42(3):375-380.
[14]齊明,鄒繼斌,胡建輝,等.神經(jīng)網(wǎng)絡(luò)在感應(yīng)同步器零位誤差補(bǔ)償中的應(yīng)用[J].中國(guó)電機(jī)工程學(xué)報(bào),2008,28(9):105-110.
[15]胡煜.基于FPGA實(shí)現(xiàn)改進(jìn)CORDIC算法研究[J].電子器件,2014(2):358-360.
[16]吳健,張志杰,王文廉,等.傳感器動(dòng)態(tài)誤差高速并行修正方法及其FPGA實(shí)現(xiàn)[J].傳感技術(shù)學(xué)報(bào),2012,25(1):67-71.
朱 承(1974-),男,重慶人,碩士研究生,副教授。主要研究方向?yàn)殡娮有畔⒓夹g(shù),zczczc023@163.com。
The Design of FAT16 File System Based on MSP430F5529 and SD Card
XIA Lan1*,JIA Xiaodong1,QU Wenbo2
(1.School of Biological Sciences and Medical Engineering,Southeast University,Nanjing 210096,China;
2.Shanghai Rays Electronics Science and Technology Co.,Ltd.,Shanghai 201202,China)
Abstract:Aiming at the problem of the mass data produced by monitoring for a long time that cannot be stored,a FAT16 file system is designsed and developed based on low-power MSP430 MCU and SD card.Making use of SPI buses to communicate with the SD card,a FAT16 file system creats in the SD card,and samples and records the data in file.The data file can be recognized by Windows operating system and convenient for post data processing,this system has broad application prospects on the aspects of large-capacity data on site collection,memory and so on.The design can be used in protable ECG System,it has a high application value.
Key words:MSP430F5529; SD card; FAT16 file system; SPI; USB
doi:EEACC:1265P10.3969/j.issn.1005-9490.2015.04.045
收稿日期:2014-12-02修改日期:2014-01-05
中圖分類號(hào):TP391
文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1005-9490(2015)04-0939-07