本發(fā)明涉及神經(jīng)網(wǎng)絡(luò)及集成電路設(shè)計(jì)領(lǐng)域,特別是一個(gè)應(yīng)用于神經(jīng)網(wǎng)絡(luò)的高斯誤差函數(shù)電路。
背景技術(shù):
自1943年美國(guó)心理學(xué)家W.McCulloch和數(shù)學(xué)家W.Pitts提出一個(gè)簡(jiǎn)單的神經(jīng)元模型之后,神經(jīng)網(wǎng)絡(luò)技術(shù)迎來(lái)了第一次熱潮。之后在20世紀(jì)70-80年代,由于當(dāng)時(shí)計(jì)算機(jī)運(yùn)算水平的限制,神經(jīng)網(wǎng)絡(luò)無(wú)法得到很好地發(fā)展,所以研究進(jìn)入了低潮。最近,由于集成電路技術(shù)的飛速發(fā)展,集成電路的集成度和運(yùn)算能力得到了飛速的提升,這使得受到冷落的神經(jīng)網(wǎng)絡(luò)重新進(jìn)入研究視線,之后發(fā)展迅速,并得到了廣泛的應(yīng)用。
在神經(jīng)網(wǎng)絡(luò)中,神經(jīng)元之間通過(guò)全或無(wú)的動(dòng)作電位,即神經(jīng)脈沖(Spike),進(jìn)行通訊,因此這是一個(gè)二值化問(wèn)題(非0即1)。Logit和probit是兩種常用的連接函數(shù)用于完成該二值化處理。由于probit連接函數(shù)在對(duì)神經(jīng)元Spike進(jìn)行二值化建模方面具有非常方便的神經(jīng)生物學(xué)表示,所以被廣泛采用。Probit連接函數(shù)與高斯誤差函數(shù)erf(x)關(guān)系密切,如公式(1)、(2)所示,其中a+x代表一個(gè)線性擬合函數(shù)。因此它在神經(jīng)網(wǎng)絡(luò)中起到非常重要的作用。
Probit(P)=a+x (1)
P=0.5-0.5*erf(a+x) (2)
另一方面,由公式(2)可以看出,erf(x)函數(shù)可以計(jì)算神經(jīng)元的條件放電概率強(qiáng)度P,它反映了一個(gè)神經(jīng)元產(chǎn)生一個(gè)Spike的條件放電概率。該概率值在神經(jīng)網(wǎng)絡(luò)中用于計(jì)算神經(jīng)網(wǎng)絡(luò)中的權(quán)值。由于對(duì)模型中的權(quán)值進(jìn)行訓(xùn)練的過(guò)程非常復(fù)雜、漫長(zhǎng),尤其是數(shù)據(jù)量非常巨大的情況下,該過(guò)程尤其緩慢。因此有一大批研究人員正在研究神經(jīng)網(wǎng)絡(luò)硬件加速器用以加速該訓(xùn)練過(guò)程。由于求神經(jīng)網(wǎng)絡(luò)權(quán)值是一個(gè)反復(fù)迭代的過(guò)程,直到求出的權(quán)值收斂為止,因此,高斯誤差函數(shù)的精度將影響訓(xùn)練出來(lái)的模型權(quán)值的精度,并影響模型收斂的速度。
綜上所述,很有必要設(shè)計(jì)出高精度的高斯誤差函數(shù)電路來(lái)加速神經(jīng)網(wǎng)絡(luò)訓(xùn)練的速度并提高模型的精度。目前為止,已有的設(shè)計(jì)方案精度都比較低,如圖1和2所示,或者就是電路過(guò)于復(fù)雜,導(dǎo)致整個(gè)電路的面積非常大,占用大量的邏輯資源。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明提供了一個(gè)高精度、低復(fù)雜度、面積小的應(yīng)用于神經(jīng)網(wǎng)絡(luò)的高斯誤差函數(shù)電路。解決了目前傳統(tǒng)高斯誤差函數(shù)電路精度低、面積大的缺陷。它與具體的制造工藝無(wú)關(guān),可以應(yīng)用到各種工藝尺寸的設(shè)計(jì)中。因此可以非常靈活、方便的應(yīng)用到神經(jīng)網(wǎng)絡(luò)加速器等神經(jīng)網(wǎng)絡(luò)相關(guān)的硬件設(shè)計(jì)中。
為解決傳統(tǒng)高斯誤差函數(shù)電路精度低、面積大的缺陷,本發(fā)明創(chuàng)新采用多項(xiàng)式和指數(shù)函數(shù)逼近算法。多項(xiàng)式部分通過(guò)運(yùn)用子表達(dá)式消除技術(shù),減小電路的面積和延時(shí);指數(shù)函數(shù)部分通過(guò)位拼接運(yùn)算轉(zhuǎn)化負(fù)值,消除潛在的減法操作。
一種應(yīng)用于神經(jīng)網(wǎng)絡(luò)的高斯誤差函數(shù)電路,包括3個(gè)平方器、2個(gè)乘法器、2個(gè)乘加器、2個(gè)點(diǎn)積數(shù)字信號(hào)處理器、1個(gè)加法器、1個(gè)求倒DSP和1個(gè)指數(shù)DSP,采用多項(xiàng)式和指數(shù)函數(shù)式(7)逼近算法來(lái)實(shí)現(xiàn)高斯誤差函數(shù)電路;
其中
s=1/(1+(-p)*x),x∈(-∞,0] (8);
多項(xiàng)式部分通過(guò)運(yùn)用子表達(dá)式消除技術(shù),減小電路的面積和延時(shí);指數(shù)函數(shù)部分通過(guò)位拼接運(yùn)算轉(zhuǎn)化負(fù)值,消除潛在的減法操作。
所述的高斯誤差函數(shù)電路,輸入x進(jìn)入電路后分成兩路并行運(yùn)算,分別計(jì)算式(7)中的多項(xiàng)式和指數(shù)部分;
一路,輸入x以{1’b1,x[30:0]}的形式經(jīng)過(guò)乘加器(f_mac_dsp)以及求倒DSP(f_recip_dsp)得到s,后經(jīng)兩級(jí)平方器(f_square_dsp)得到s的平方項(xiàng)(s2)以及四次方項(xiàng)(s4),這兩項(xiàng)分別經(jīng)過(guò)一個(gè)乘法器與s相乘得到s的三次方項(xiàng)(s3)以及五次方項(xiàng)(s5);
另一路,輸入x依次經(jīng)過(guò)平方器、拼接運(yùn)算(concat)、指數(shù)DSP(f_expo_dsp)求得x2_n_expo,即式(7)中的指數(shù)函數(shù)部分
前面所述兩路的輸出作為第三部分的輸入,兩個(gè)點(diǎn)乘DSP,即f_dp3_dsp和f_dp2_dsp,并行運(yùn)算,它們的輸出經(jīng)過(guò)一個(gè)加法器求和得到式(7)中的多項(xiàng)式,最后,多項(xiàng)式與指數(shù)函數(shù)經(jīng)過(guò)一個(gè)乘加器和拼接運(yùn)算即可求得最終結(jié)果erf(x)={x[31],bn[30:0]}。
本發(fā)明由于采用了以上技術(shù)方案,其具有以下的優(yōu)點(diǎn)和積極效果:
1、本發(fā)明與傳統(tǒng)的泰勒展開法實(shí)現(xiàn)方案相比,無(wú)論是在精度、面積還是速度方面都有非常明顯的優(yōu)勢(shì),尤其是在精度方面至少高出兩個(gè)數(shù)量級(jí)。
2、本發(fā)明可以用Verilog代碼實(shí)現(xiàn),與實(shí)現(xiàn)工藝無(wú)關(guān),不同于與實(shí)現(xiàn)工藝相關(guān)的硬核IP和固核IP,可以非常方便的應(yīng)用在各種工藝中,可移植性非常強(qiáng)。
3、本發(fā)明的電路精度高、面積小,便于硬件實(shí)現(xiàn)與軟件仿真驗(yàn)證,因此本發(fā)明能夠促進(jìn)神經(jīng)網(wǎng)絡(luò)加速器等各種神經(jīng)網(wǎng)絡(luò)硬件設(shè)計(jì)的研究。
附圖說(shuō)明
圖1是傳統(tǒng)的用平方根函數(shù)來(lái)逼近高斯誤差函數(shù)的算法仿真結(jié)果;
圖2是傳統(tǒng)的用泰勒展開法設(shè)計(jì)的硬件的后仿真結(jié)果;
圖3是本發(fā)明應(yīng)用于神經(jīng)網(wǎng)絡(luò)的高斯誤差函數(shù)電路的一種電路結(jié)構(gòu)圖;
圖4是本發(fā)明應(yīng)用于神經(jīng)網(wǎng)絡(luò)的的高斯誤差函數(shù)電路在180nm工藝下制造后的裸片圖;
圖5是本發(fā)明應(yīng)用于神經(jīng)網(wǎng)絡(luò)的高斯誤差函數(shù)電路的流片測(cè)試結(jié)果。
具體實(shí)施方式
以下將結(jié)合附圖詳細(xì)說(shuō)明本發(fā)明的具體實(shí)施方式。
目前有兩種常見的傳統(tǒng)高斯誤差函數(shù)電路實(shí)現(xiàn)方式,一種是采用式(3)所示的平方根函數(shù)來(lái)設(shè)計(jì)硬件,式中ε(x)代表誤差。該算法的Matlab軟件仿真結(jié)果見圖1??梢姡撍惴ǖ木确浅5?,最大絕對(duì)誤差|ε(x)|為6.3*10-3,精度極差,因此不適合用于硬件電路的設(shè)計(jì)。
還有一種傳統(tǒng)的實(shí)現(xiàn)方案是采用泰勒展開法在[-3,3]區(qū)間內(nèi)對(duì)erf(x)進(jìn)行泰勒展開,該方法可以表示為:
該方案在n=28時(shí)硬件實(shí)現(xiàn)后的硬件輸出誤差曲線如圖2所示。其最大絕對(duì)誤差|ε(x)|為4.52*10-5。其占用的硬件資源非常多,因此面積非常大,另外精度也不是很高(見表1)。
本發(fā)明中創(chuàng)新地使用了另一種算法來(lái)對(duì)高斯誤差函數(shù)進(jìn)行逼近,該算法在(M.Abnmowitz and I.Stegun,Handbook of Mathematical Functions[M],Dover,p.299,1972)中被提出,采用多項(xiàng)式和指數(shù)函數(shù)來(lái)在[0,∞)區(qū)間上對(duì)高斯誤差函數(shù)進(jìn)行擬合,其形式為:
其中,t為中間變量,其表達(dá)式為:
t=1/(1+px),x∈[0,∞) (6)
公式中用到的系數(shù)為:
p=0.3275911 a1=0.254829592 a2=-0.284496736
a3=1.421413741 a4=-1.453152027 a5=1.061405429
由于該算法精度高(最大絕對(duì)誤差|ε(x)|只有1.5*10-7)。所以本發(fā)明主要基于該算法。
下面首先介紹本發(fā)明高斯誤差函數(shù)電路的電路設(shè)計(jì)及優(yōu)化原理。
表達(dá)式改寫:考慮到加法器的面積與延時(shí)與減法器相比都比較小,且高斯誤差函數(shù)是一個(gè)奇函數(shù),所以式(5)、(6)可以改寫為:
s=1/(1+p*(-x),x∈(-∞,0] (8)
運(yùn)算邏輯的簡(jiǎn)化:電路中有一些項(xiàng)是負(fù)值,因此存在一些減法運(yùn)算,這可以通過(guò)簡(jiǎn)單的位拼接運(yùn)算(不消耗任何邏輯資源)來(lái)將其轉(zhuǎn)化為負(fù)值,這樣便消除了潛在的減法操作,因此能夠節(jié)省面積。例如,(7)中存在一項(xiàng)在設(shè)計(jì)電路時(shí)不用引入一個(gè)額外的減法器來(lái)求出-x2,可以直接將x2的符號(hào)位設(shè)置為1’b1即可得到-x2,即{1’b1,x2[30:0]}。另外,為了減小電路的面積和延時(shí),多項(xiàng)式部分可以采用子表達(dá)式消除技術(shù)。由于平方器的面積和延時(shí)與乘法器相比都比較小,所以多項(xiàng)式中的平方項(xiàng)、三次方、四次方等項(xiàng)可以充分利用平方器來(lái)實(shí)現(xiàn)。例如,s5可以寫成s5=(s2)2*s;相比于傳統(tǒng)的(((s*s)*s)*s)*s而言,無(wú)論是面積還是延時(shí),都是前者更加小,更有優(yōu)勢(shì)。
符號(hào)位的獲得:由于erf(x)函數(shù)是一個(gè)奇函數(shù),當(dāng)x≥0時(shí),輸入輸出的符號(hào)位均為0;x<0時(shí),輸入輸出的符號(hào)位均為1。因此,函數(shù)值的符號(hào)位其實(shí)是不用經(jīng)過(guò)計(jì)算得到的,輸入數(shù)據(jù)的最高位(即符號(hào)位)即可直接作為輸出數(shù)據(jù)的符號(hào)位,不但簡(jiǎn)化了邏輯,而且?guī)缀跸溯敵鰯?shù)據(jù)符號(hào)位的延遲。
工作區(qū)間的拓展:前面考慮的是x≤0的情形,此時(shí)erf(x)=erf(-(-x))=erf(-|x|)。當(dāng)x>0時(shí),考慮到erf(x)函數(shù)是一個(gè)奇函數(shù),所以erf(x)=-erf(-x)=-erf(-|x|),而負(fù)號(hào)僅體現(xiàn)在結(jié)果的符號(hào)位上。所以,在不考慮符號(hào)位的情況下,數(shù)值部分為erf(-|x|),這其實(shí)和x≤0時(shí)完全相同。所以,計(jì)算輸出結(jié)果時(shí),只需要用{1’b1,x[30:0]}即-|x|參加運(yùn)算即可。這樣便能很簡(jiǎn)單的將電路的工作區(qū)間擴(kuò)展到整個(gè)實(shí)數(shù)域。
接下來(lái)介紹電路的具體實(shí)現(xiàn)。
本發(fā)明的高斯誤差函數(shù)電路的結(jié)構(gòu)圖如圖3所示,它包含3個(gè)平方器(f_square_dsp)、2個(gè)乘法器、2個(gè)乘加器(f_mac_dsp)、2個(gè)點(diǎn)積DSP(f_dp2_dsp,f_dp3_dsp)、1個(gè)加法器、1個(gè)求倒DSP(f_recip_dsp)和1個(gè)指數(shù)DSP(f_expo_dsp)。上述DSP均采用Synopsys公司的Design Ware庫(kù)中的浮點(diǎn)DSP,非常容易獲得,且能夠在精度、速度、面積等方面獲得很好的效果。圖3中用到的拼接運(yùn)算concat并不消耗任何邏輯資源。
圖3中所用的所有數(shù)據(jù)均采用32位單精度浮點(diǎn)數(shù)格式(即符合IEEE-754標(biāo)準(zhǔn))。圖中用到的所有系數(shù)(1,-1,-p,a1,a2,a3,a4,a5)均需要采用其對(duì)應(yīng)的32位單精度浮點(diǎn)數(shù)格式。這可以在Matlab中通過(guò)簡(jiǎn)單的num2bin函數(shù)來(lái)求得。
圖3上面部分,主要來(lái)實(shí)現(xiàn)公式(8)中的s以及式(7)中對(duì)應(yīng)的s2、s3、s4、s5。圖中的s對(duì)應(yīng)公式中的s,圖中的s2、s3、s4、s5分別對(duì)應(yīng)公式中s2、s3、s4、s5。用到的乘加器f_mac_dsp實(shí)現(xiàn)的運(yùn)算為a*b+c。與普通的乘法器與加法器組合方案相比,面積更小,精度更高。求倒單元f_recip_dsp用于實(shí)現(xiàn)求倒運(yùn)算,即實(shí)現(xiàn)s=1/as。由于平方器與普通的乘法器相比,面積小、延遲短,所以這里充分利用平方器來(lái)構(gòu)建s的各次方項(xiàng)。
圖3中間部分,x2是x的平方項(xiàng),它通過(guò)一個(gè)平方器來(lái)求得。平方器的輸出經(jīng)過(guò)拼接運(yùn)算更改其符號(hào)位得到-x2,即圖中的{1’b1,x2[30:0]}。之后通過(guò)一個(gè)浮點(diǎn)指數(shù)運(yùn)算單元f_expo_dsp即可計(jì)算出公式(7)中的即圖中的x2_n_expo。
圖3下面部分,用來(lái)計(jì)算最終輸出。圖中用到的兩個(gè)點(diǎn)積DSP f_dp2_dsp和f_dp3_dsp,它們實(shí)現(xiàn)的運(yùn)算分別為:a*b+c*d、a*b+c*d+e*f。它們并行運(yùn)算,輸出經(jīng)過(guò)一個(gè)加法器求和得到式(7)中的多項(xiàng)式a1s+a2s2+a3s3+a4s4+a5s5。最后,多項(xiàng)式與指數(shù)函數(shù)經(jīng)過(guò)一個(gè)乘加器和拼接運(yùn)算即可求得最終的輸出結(jié)果erf(x)={x[31],bn[30:0]}。
將上述結(jié)構(gòu)寫成Verilog代碼調(diào)用Design Ware中的浮點(diǎn)DSP即可實(shí)現(xiàn)該電路。如果要設(shè)計(jì)成版圖,需要用邏輯綜合工具(如Design Compiler)進(jìn)行綜合,最后用自動(dòng)布局布線工具(如IC Compiler)進(jìn)行布局布線。
本發(fā)明在SMIC 180nm工藝下對(duì)該結(jié)構(gòu)進(jìn)行了流片、測(cè)試、驗(yàn)證,相應(yīng)的裸片圖如圖4所示,圖5給出了它的測(cè)試結(jié)果,即本發(fā)明的硬件輸出誤差曲線。從圖中可以看出本發(fā)明的最大絕對(duì)誤差為3.12*10-7,其中核心面積為62932μm2,整個(gè)芯片的面積為2.03mm*1.19mm=2.42mm2。
本發(fā)明與泰勒展開法的結(jié)果對(duì)比如表1所示:
表1
從表1可知本發(fā)明無(wú)論是在絕對(duì)誤差、面積還是延時(shí)方面都比傳統(tǒng)的泰勒展開法有優(yōu)勢(shì)。在絕對(duì)誤差方面,本發(fā)明比泰勒展開法小99.21%;在面積方面,本發(fā)明比它要小77.21%;在電路延時(shí)方面,本發(fā)明比它要小11.96%。
本發(fā)明的絕對(duì)誤差不會(huì)因?yàn)樗霉に嚥煌兴淖?因?yàn)殡娐方Y(jié)構(gòu)是一定的),但是面積和延時(shí)的優(yōu)化率可能會(huì)隨所用標(biāo)準(zhǔn)單元庫(kù)的不同而有所變化。一般情況下,本發(fā)明會(huì)隨著使用工藝的特征尺寸的減小而表現(xiàn)出更加出色的性能。