專利名稱:基于fpga的rbf函數(shù)計(jì)算模塊的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種機(jī)器學(xué)習(xí)方法中的算法,具體涉及到一種算法的硬件實(shí)現(xiàn)方法。 RBF函數(shù)是在機(jī)器學(xué)習(xí)算法(例如最小二乘支持向量機(jī),回聲狀態(tài)網(wǎng)絡(luò)等)中廣泛 應(yīng)用的一種核函數(shù),其本質(zhì)是一個(gè)非線性函數(shù)。在上述機(jī)器學(xué)習(xí)算法基于FPGA的可重構(gòu)計(jì) 算實(shí)現(xiàn)過程中,因非線性函數(shù)不能被直接計(jì)算而難以FPGA實(shí)現(xiàn),而傳統(tǒng)的查找表方法又存 在資源占用率高的缺點(diǎn)。為了解決現(xiàn)有采用查表法實(shí)現(xiàn)RBF函數(shù)的方法存在的硬件資源占用率高的缺點(diǎn), 本發(fā)明提出一種采用分段線性逼近的方法實(shí)現(xiàn)RBF函數(shù)的方法,獲得一種基于FPGA的RBF 函數(shù)計(jì)算模塊。所述基于FPGA的RBF函數(shù)計(jì)算模包括兩個(gè)隨機(jī)存儲(chǔ)器RAMI、RAM2、二范數(shù)計(jì)算模 塊和指數(shù)函數(shù)計(jì)算模塊,所述兩個(gè)隨機(jī)存儲(chǔ)器RAMI和RAM2分別用于存儲(chǔ)1維向量Xi及\ ;
范數(shù)計(jì)算模塊用于實(shí)現(xiàn)兩個(gè)向量的二范數(shù)計(jì)算Ix^l ;所述指數(shù)函數(shù)計(jì)算模塊用于實(shí)
現(xiàn)指數(shù)函數(shù)e_x的計(jì)算,并獲得RBF函數(shù)的最終計(jì)算結(jié)果;二范數(shù)計(jì)算模塊分別從兩個(gè)隨機(jī) 存儲(chǔ)器RAMI和RAM2中讀取向量Xi及\進(jìn)行二范數(shù)計(jì)算,并將計(jì)算結(jié)果輸出給指數(shù)函數(shù)計(jì) 算模塊,所述指數(shù)函數(shù)計(jì)算模塊的計(jì)算結(jié)果為RBF函數(shù)的計(jì)算結(jié)果。RBF函數(shù)的基本原理為RBF函數(shù)表達(dá)式其中σ為訓(xùn)練前確定的超參數(shù),即一個(gè)固定值,為進(jìn)行了歸一化處理之后的 1維向量。RBF函數(shù)是典型的非線性函數(shù),其不能夠直接在FPGA實(shí)現(xiàn)計(jì)算。傳統(tǒng)的實(shí)現(xiàn)方法 為查找表法即將特定輸入范圍數(shù)據(jù)對應(yīng)的計(jì)算結(jié)果存儲(chǔ)于MM中,將輸入數(shù)據(jù)作為RAM的 地址輸入,則RAM中對應(yīng)的存儲(chǔ)數(shù)據(jù)即為結(jié)果。該方法簡單易實(shí)現(xiàn),但對RAM資源數(shù)量的要 求高,高精度的實(shí)現(xiàn)往往需要大量的RAM資源。本發(fā)明采用先進(jìn)的分段線性插值方法,分段線性插值方法的原理是將要求實(shí)現(xiàn)的 函數(shù)輸入范圍進(jìn)行分段,在每個(gè)分段內(nèi)采用線性擬合方法擬合非線性輸出。本發(fā)明將函數(shù) 的求值區(qū)間劃分成了多個(gè)劃分區(qū)域,然后針對每個(gè)劃分區(qū)域采用線性逼近方法獲得近似非 線性函數(shù),獲得每個(gè)分段的線性擬合值k和b存儲(chǔ)于RAM中。在實(shí)際應(yīng)用時(shí),以實(shí)際輸入數(shù) 據(jù)作為RAM地址,查找具體的k和b,然后經(jīng)過計(jì)算獲得輸出值。采用分段線性插值方法后, 不但降低了 RAM資源需求、還提高了計(jì)算精度。在Xinlinx Virtex XC5VFX130T型號FPGA 上的具體試驗(yàn)結(jié)果表明,在單精度條件下,相對于PC平臺(tái)(Pentium Dual core 2. 60GHzCPU
背景技術(shù):
發(fā)明內(nèi)容和2G DDR2內(nèi)存,Matlab 7.5.0.開發(fā)環(huán)境效率)的64位雙精度計(jì)算結(jié)果,本方法的最大 絕對誤差小于10_5,且能夠?qū)崿F(xiàn)180倍的效率提升。
圖1是本發(fā)明所述的RBF函數(shù)的計(jì)算模塊的原理框圖。
具體實(shí)施例方式本實(shí)施方式所述的RBF函數(shù)的計(jì)算模塊包括兩個(gè)隨機(jī)存儲(chǔ)器RAMI、RAM2、二范數(shù) 計(jì)算模塊1和指數(shù)函數(shù)計(jì)算模塊2,所述兩個(gè)隨機(jī)存儲(chǔ)器RAMI和RAM2分別用于存儲(chǔ)1維向
量Xi及~ ;二范數(shù)計(jì)算模塊ι用于實(shí)現(xiàn)兩個(gè)向量的二范數(shù)計(jì)算所述指數(shù)函數(shù)計(jì)
算模塊2用于實(shí)現(xiàn)指數(shù)函數(shù)e_x的計(jì)算,并獲得RBF函數(shù)的最終計(jì)算結(jié)果;二范數(shù)計(jì)算模塊 1分別從兩個(gè)隨機(jī)存儲(chǔ)器RAMI和RAM2中讀取向量Xi及\進(jìn)行二范數(shù)計(jì)算,并將計(jì)算結(jié)果 輸出給指數(shù)函數(shù)計(jì)算模塊2,所述指數(shù)函數(shù)計(jì)算模塊2的計(jì)算結(jié)果為RBF函數(shù)的計(jì)算結(jié)果。在FPGA中實(shí)現(xiàn)RBF函數(shù)的計(jì)算模塊設(shè)計(jì)過程為對能實(shí)現(xiàn)兩個(gè)1維向量RBF函數(shù)計(jì)算的PE單元進(jìn)行設(shè)計(jì),由公式K(Xi,Xj) = exp{-|χ,. - χ, |[/σ2}可知,要實(shí)現(xiàn)兩個(gè)向量的核函數(shù)計(jì)算可以將其分為兩個(gè)部分,即兩向量二范數(shù)計(jì)所述二范數(shù)計(jì)算模塊采用浮點(diǎn)減法器分別從兩個(gè)隨機(jī)存儲(chǔ)器RAMI和RAM2中讀取 兩個(gè)1維的向量數(shù)據(jù),并將讀取的兩個(gè)數(shù)據(jù)做差之后,作為第一浮點(diǎn)乘法器的兩個(gè)輸入數(shù) 據(jù),該浮點(diǎn)乘法器將輸入的兩個(gè)數(shù)據(jù)相乘之后輸出給范數(shù)計(jì)算單元3,該范數(shù)計(jì)算單元3輸 出數(shù)據(jù)給計(jì)數(shù)器,該計(jì)數(shù)器將接收到的第1個(gè)數(shù)據(jù)輸出給第二乘法器作為一個(gè)輸入數(shù)據(jù), 該第二浮點(diǎn)乘法器將輸入數(shù)據(jù)與1/ σ 2相乘之后作為該二范數(shù)計(jì)算模塊的輸出結(jié)果。所述范數(shù)計(jì)算單元3用于實(shí)現(xiàn)范數(shù)的計(jì)算,即,用于將浮點(diǎn)乘法器輸出的數(shù)據(jù)進(jìn) 行累加計(jì)算。所述范數(shù)計(jì)算單元3可采用下述結(jié)構(gòu)實(shí)現(xiàn)采用隨機(jī)存儲(chǔ)器RAM存儲(chǔ)浮點(diǎn)乘法器 的輸出數(shù)據(jù),采用先入先出存儲(chǔ)器FIFO存儲(chǔ)浮點(diǎn)加法器的輸出數(shù)據(jù),該浮點(diǎn)加法器分別從 隨機(jī)存儲(chǔ)器和先入先出存儲(chǔ)器FIFO中讀取數(shù)據(jù)進(jìn)行加法計(jì)算獲得輸出數(shù)據(jù)。二范數(shù)計(jì)算模塊3的設(shè)計(jì)過程為根據(jù)二范數(shù)的計(jì)算公式推導(dǎo)后獲得公式
\\xt - Xj = (X10 - x]0 f + (xn - Xjl f + (xi2 - x]2 f + (xi3 -Xj3)2+ ……+ ( _ Xfl f式中,xiQ,xn,…,Xil表示1維向量Xi中的各個(gè)數(shù)值,Xjtl^jl,…,Xjl表示1維向 量\中的各個(gè)數(shù)值,本實(shí)施方式所述的二范數(shù)計(jì)算模塊就是基于上述公式設(shè)計(jì)獲得的硬件 邏輯模塊,參見圖1中的1所指的虛線框內(nèi)的結(jié)構(gòu)。所述二范數(shù)計(jì)算模塊3中的浮點(diǎn)減法器分別對兩個(gè)隨機(jī)存儲(chǔ)器RAMI和RAM2進(jìn)行 多次尋址,即可獲得將兩個(gè)向量的各個(gè)數(shù)值的差數(shù)據(jù)。所述范數(shù)計(jì)算單元采用浮點(diǎn)加法器和一個(gè)隨機(jī)存儲(chǔ)器RAM3、一個(gè)先入先出存儲(chǔ)器FIFO組成,用于實(shí)現(xiàn)對乘法器輸出的兩個(gè)數(shù)值的差的平方進(jìn)行累加計(jì)算。由于ISE(是一種使用XILINX的FPGA的設(shè)計(jì)工具)中浮點(diǎn)減法器及乘法器均能 實(shí)現(xiàn)流水,當(dāng)減法器的延遲時(shí)間為ts,乘法器的延遲時(shí)間設(shè)為tm時(shí),維數(shù)1的兩向量Xi與\ 通過減法器及乘法器計(jì)算完成所需時(shí)間為t = ts+tm+l。例如,若兩向量Xi與\均為6維 數(shù)據(jù),減法器及乘法器的延遲均設(shè)為3個(gè)時(shí)鐘,則通過減法器及乘法器計(jì)算完成所需時(shí)間t 為t = 3+3+6 = 12個(gè)時(shí)鐘。由于范數(shù)計(jì)算單元中的浮點(diǎn)加法器必須有一定時(shí)間延遲才能正確計(jì)算,故而在設(shè) 計(jì)中為了將乘法器連續(xù)輸出的1個(gè)計(jì)算值相加計(jì)算范數(shù)值,先將乘法器計(jì)算獲得的1個(gè)值 保存到RAM3中,通過對RAM3連續(xù)1次尋址逐一將每次輸出的結(jié)果與FIFO中存儲(chǔ)數(shù)據(jù)結(jié)果
相加即可得到
權(quán)利要求
1.基于FPGA的RBF函數(shù)計(jì)算模塊,其特征在于,該計(jì)算模塊包括兩個(gè)隨機(jī)存儲(chǔ)器 RAMI、RAM2、二范數(shù)計(jì)算模塊和指數(shù)函數(shù)計(jì)算模塊,所述兩個(gè)隨機(jī)存儲(chǔ)器RAMI和RAM2分別用于存儲(chǔ)ι維向量Xi及~ ; 二范數(shù)計(jì)算模塊用于實(shí)現(xiàn)兩個(gè)向量的二范數(shù)計(jì)算所述指數(shù)函數(shù)計(jì)算模塊用于實(shí)現(xiàn)指數(shù)函數(shù)e_x的計(jì)算,并獲得RBF函數(shù)的最終計(jì)算結(jié)果;二范 數(shù)計(jì)算模塊分別從兩個(gè)隨機(jī)存儲(chǔ)器RAMI和RAM2中讀取向量Xi及\進(jìn)行二范數(shù)計(jì)算,并將 計(jì)算結(jié)果輸出給指數(shù)函數(shù)計(jì)算模塊,所述指數(shù)函數(shù)計(jì)算模塊的計(jì)算結(jié)果為RBF函數(shù)的計(jì)算結(jié)果。
2.根據(jù)權(quán)利要求1所述的基于FPGA的RBF函數(shù)計(jì)算模塊,其特征在于,所述二范數(shù)計(jì) 算模塊采用浮點(diǎn)減法器分別從兩個(gè)隨機(jī)存儲(chǔ)器RAMI和RAM2中讀取兩個(gè)1維的向量數(shù)據(jù), 并將讀取的兩個(gè)數(shù)據(jù)做差之后,作為第一浮點(diǎn)乘法器的兩個(gè)輸入數(shù)據(jù),該浮點(diǎn)乘法器將輸 入的兩個(gè)數(shù)據(jù)相乘之后輸出給范數(shù)計(jì)算單元,該范數(shù)計(jì)算單元輸出數(shù)據(jù)給計(jì)數(shù)器,該計(jì)數(shù) 器將接收到的第1個(gè)數(shù)據(jù)輸出給第二乘法器作為一個(gè)輸入數(shù)據(jù),該第二浮點(diǎn)乘法器將輸入 數(shù)據(jù)與1/ σ 2相乘之后作為該二范數(shù)計(jì)算模塊的輸出結(jié)果。
3.根據(jù)權(quán)利要求2所述的基于FPGA的RBF函數(shù)計(jì)算模塊,其特征在于,所述范數(shù)計(jì)算 單元用于實(shí)現(xiàn)范數(shù)的計(jì)算,即,用于將浮點(diǎn)乘法器輸出的數(shù)據(jù)進(jìn)行累加計(jì)算。
4.根據(jù)權(quán)利要求2所述的基于FPGA的RBF函數(shù)計(jì)算模塊,其特征在于,所述范數(shù)計(jì)算 單元可采用下述結(jié)構(gòu)實(shí)現(xiàn)采用隨機(jī)存儲(chǔ)器RAM存儲(chǔ)浮點(diǎn)乘法器的輸出數(shù)據(jù),采用先入先 出存儲(chǔ)器FIFO存儲(chǔ)浮點(diǎn)加法器的輸出數(shù)據(jù),該浮點(diǎn)加法器分別從隨機(jī)存儲(chǔ)器和先入先出 存儲(chǔ)器FIFO中讀取數(shù)據(jù)進(jìn)行加法計(jì)算獲得輸出數(shù)據(jù)。
5.根據(jù)權(quán)利要求1所述的基于FPGA的RBF函數(shù)計(jì)算模塊,其特征在于,指數(shù)函數(shù)計(jì)算 模塊將二范數(shù)計(jì)算模塊輸出的數(shù)據(jù)存入先入先出存儲(chǔ)器FIFO,同時(shí)將該數(shù)據(jù)輸出給乘法器 A,該乘法器A將輸入數(shù)據(jù)與IOh相乘之后輸出結(jié)果數(shù)據(jù)給浮點(diǎn)轉(zhuǎn)定點(diǎn)單元,浮點(diǎn)轉(zhuǎn)定點(diǎn)單 元將輸入的浮點(diǎn)數(shù)轉(zhuǎn)換成定點(diǎn)數(shù)之后輸出給取整單元,該取整單元將輸入的數(shù)據(jù)取整之后 同時(shí)輸出給k參數(shù)存儲(chǔ)器和先入先出存儲(chǔ)器FIFOB,該先入先出存儲(chǔ)器FIFOB輸出數(shù)據(jù)給b 參數(shù)存儲(chǔ)器,乘法器B讀取k參數(shù)存儲(chǔ)器中的數(shù)據(jù)和先入先出存儲(chǔ)器FIFOA中的數(shù)據(jù)做乘 法,并將結(jié)果數(shù)據(jù)輸出給減法器,該減法器將輸入數(shù)據(jù)與b參數(shù)存儲(chǔ)器中讀取的數(shù)據(jù)進(jìn)行 減法操作之后獲得二范數(shù)計(jì)算模塊的結(jié)果數(shù)據(jù)輸出,h為分段計(jì)算過程中的取數(shù)間隔m的 小數(shù)位數(shù)。
全文摘要
基于FPGA的RBF函數(shù)計(jì)算模塊,涉及一種機(jī)器學(xué)習(xí)方法中的算法,具體涉及到一種算法的硬件實(shí)現(xiàn)方法。本發(fā)明解決了現(xiàn)有采用查表法實(shí)現(xiàn)RBF函數(shù)的方法存在的硬件資源占用率高的缺點(diǎn)。本發(fā)明提出一種采用分段線性逼近的方法實(shí)現(xiàn)RBF函數(shù)的方法,獲得基于FPGA的RBF函數(shù)計(jì)算模塊,該模塊采用兩個(gè)隨機(jī)存儲(chǔ)器RAM1和RAM2分別用于存儲(chǔ)l維向量xi及xj;二范數(shù)計(jì)算模塊用于實(shí)現(xiàn)兩個(gè)向量的二范數(shù)計(jì)算所述指數(shù)函數(shù)計(jì)算模塊用于實(shí)現(xiàn)指數(shù)函數(shù)e-x的計(jì)算,并獲得RBF函數(shù)的最終計(jì)算結(jié)果;二范數(shù)計(jì)算模塊分別從兩個(gè)隨機(jī)存儲(chǔ)器RAM1和RAM2中讀取向量xi及xj進(jìn)行二范數(shù)計(jì)算,并將計(jì)算結(jié)果輸出給指數(shù)函數(shù)計(jì)算模塊,所述指數(shù)函數(shù)計(jì)算模塊的計(jì)算結(jié)果為RBF函數(shù)的計(jì)算結(jié)果。
文檔編號G06N7/00GK102096844SQ20111005325
公開日2011年6月15日 申請日期2011年3月7日 優(yōu)先權(quán)日2011年3月7日
發(fā)明者仲雪潔, 劉大同, 龐業(yè)勇, 彭喜元, 江維, 趙光權(quán), 馬寧 申請人:哈爾濱工業(yè)大學(xué)