本發(fā)明屬于神經(jīng)網(wǎng)絡(luò)算子計算,特別涉及一種基于硬件的prelu激活卷積算子計算的方法。
背景技術(shù):
1、現(xiàn)有技術(shù)中,隨著神經(jīng)網(wǎng)絡(luò)技術(shù)的發(fā)展,應(yīng)用中越來越多的激活函數(shù)被使用。其中prelu和leakyrelu激活函數(shù)因為其優(yōu)秀的特性,使用范圍越來越廣。但是由于計算流程的問題,其與一般的relu等函數(shù)有所區(qū)別,特別是涉及到量化時,并不能很好的支持prelude和leakyrelu。
2、現(xiàn)有技術(shù)中常用的術(shù)語包括:
3、batchnormal批正則化:對輸入的批數(shù)據(jù)進行歸一化,映射到均值為0,方差為1的正態(tài)分布。同時因為將輸入數(shù)據(jù)都映射到了原點周圍,會導(dǎo)致激活函數(shù)表達能力變差,所以又引入了縮放和平移,計算公式如下:
4、
5、局部算子:局部算子是指在某個點的取值僅受到該點周圍一定范圍內(nèi)的數(shù)值影響,而不會受到其他位置上的數(shù)值影響。通俗地說,就是它只對一個點的取值依賴于該點附近的數(shù)值。常見的局部算子包括梯度算子、拉普拉斯算子、sobel算子等。在圖像處理領(lǐng)域中,均值濾波器(mean?filter)和中值濾波器(median?filter)也是一種常用的局部算子。由于局部算子僅考慮了局部信息,因此其計算速度較快,并且可以應(yīng)用于實時處理等場景。神經(jīng)網(wǎng)絡(luò)由很多算子根據(jù)輸入輸出連接組成有向無環(huán)圖,一般的在量化時需要考慮算子之間的融合,例如卷積-批歸一化-激活可以融合當作一個算子。本文中的局部算子,是指神經(jīng)網(wǎng)絡(luò)中的局部結(jié)構(gòu),是神經(jīng)網(wǎng)絡(luò)中的子圖。因為本文討論卷積的prelu激活,所以可以理解為局部算子等價于conv-bn-act。
技術(shù)實現(xiàn)思路
1、為了解決上述問題,本技術(shù)的目的在于:結(jié)合硬件計算的特性,在原有的算子基礎(chǔ)上進行擴充,使其支持prelu激活函數(shù)。
2、具體地,本發(fā)明提供一種基于硬件的prelu激活卷積算子計算的方法,所述方法包括:
3、s1,線下計算,是將可預(yù)先計算出的參數(shù)s和b,在pc端先行計算完成,其中,
4、
5、
6、sx為輸入的量化scale,
7、sw為卷積權(quán)重的量化scale,
8、sbn為batchnormal化簡后的參數(shù)scale,
9、bbn為batchnormal化簡后的參數(shù)bias,
10、max為輸出張量的量化閾值的最大值,
11、h,j,k,g,是根據(jù)輸入的量化閾值和輸出量化閾值的最小值變化的參數(shù);
12、wint為量化后的整型的權(quán)重,
13、sif為輸入tensor的量化位寬對應(yīng)的整型域范圍,
14、s2,搭載在開發(fā)板上的芯片實際運行中根據(jù)實際值的符號選用正確的參數(shù),張量先經(jīng)過卷積再計算batchnormal最后再經(jīng)過激活計算,表示為:局部算子conv-->batchnormal-->act,這三個算子原本的輸入輸出,包括內(nèi)部的計算都是浮點數(shù)的計算,通過量化將浮點數(shù)據(jù)轉(zhuǎn)為低bit的整型數(shù)據(jù);進一步包括:
15、s2.1,現(xiàn)有局部算子conv-->batchnormal-->act,表達式:
16、
17、
18、act=clip(bn,min,max)
19、y=act
20、其中,x為卷積的輸入,w為卷積的權(quán)重,bias為卷積的偏置;var、eps、γ、β是bn(batchnormal的縮寫)的參數(shù);
21、其中的act此時設(shè)為prelu算子(act是激活函數(shù)的縮寫),公式如下:
22、
23、s2.1.1融合conv與bn的操作:
24、
25、
26、設(shè)
27、
28、這里根據(jù)conv和bn的公式,將conv-bn計算化簡,其中x為conv的輸入,w為conv的權(quán)重;
29、s2.2,將整型的xint,wint帶入bn的計算公式;
30、板端的conv的量化算子,接收x和w量化后的整形值,并且計算出量化后的整形的輸出值,這樣網(wǎng)絡(luò)就能夠使用整形值進行推理;
31、其中,浮點的x與整型的xint之間的關(guān)系,以及浮點的w與wint之間的關(guān)系如下;
32、s2.2.1,對x和w進行量化后,浮點值與整形值有以下關(guān)系:
33、當input_clip_min=0
34、當input_clip_min<0
35、x=sx*(j*xint-k*sif)
36、
37、
38、有wint=(2*wint-sw)
39、
40、sif=2n-1,sw=2n-1;
41、j和k根據(jù)input_clip_min的符號取不同的值;
42、對于權(quán)重weight來說,wint=(2*wint-sw)是因為板端weight范圍是[-(2n-1),(2n-1)];
43、s2.2.2,將x和w帶入bn的計算公式:
44、
45、設(shè)
46、
47、至此,bn輸出的結(jié)果就使用定點化數(shù)據(jù)進行了表達,而激活函數(shù)需要判斷bn的值的正負;
48、s2.3,板端會計算的值,這里的計算符號表示卷積操作,所以需要加上b和calibration才能得到正確的符號;
49、由于由于prelu激活只會改變輸入的負半軸數(shù)據(jù),其輸入值如果大于等于0則直接輸出,如果小于0則乘上一個參數(shù);
50、上述計算出conv-bn的輸出bn,也就是激活的輸入,需要對其判斷符號,以確定那種計算方式;
51、s2.3.1,現(xiàn)只考慮負數(shù)的情況:
52、所述act指prelu,輸入為上面的bn,輸出命名為prelu;
53、prelu=act(bn)
54、
55、將前面bn的表達式帶入:
56、
57、設(shè)新的
58、
59、其中,
60、
61、
62、input_clip_min<0時j=2k=1
63、input_clip_min=0時j=1k=0
64、output_clip_min<0時h=0.5g=0.5
65、output_clip_min<0時h=1g=0
66、上述計算出的s和b都是激活前值為負數(shù)的情況,記做sneg和bneg;
67、s2.3.2,如果激活的輸入為正值則sneg和bneg中的阿爾法值為1,記作spos和bpos;
68、s2.4,最終芯片上計算邏輯為:
69、
70、
71、所述步驟s1中,所述線下是指在非開發(fā)板的運行環(huán)境。
72、所述步驟s2中,所述芯片控制程序邏輯并計算,程序在開發(fā)板的環(huán)境上運行,開發(fā)板上運行的算子需要最大限度的減少計算步驟。
73、所述步驟s2所述選用正確的參數(shù)即推導(dǎo)開發(fā)板上需要參數(shù)進行算子的計算過程,芯片運行的是最終推導(dǎo)出來的公式即芯片上運行的是量化的算子。
74、所述步驟s2.3中,由于輸出需要為整型值,所以prelu也要根據(jù)feature?map的量化公式進行量化,當只考慮負半軸時,也就是激活的計算邏輯為對輸入乘以一個參數(shù)alpha。
75、由此,本技術(shù)的優(yōu)勢在于:提供一種prelu激活卷積計算的方法用于加快神經(jīng)網(wǎng)絡(luò)在芯片上的運行速度。