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