林鈺棽,魏云龍,陳琪琪,張 威,邱志敏
1(福州大學(xué) 物理與信息工程學(xué)院,福州 350100) 2(華南理工大學(xué) 電子與信息學(xué)院,廣州 510640) 3(中國科學(xué)院大學(xué) 中國科學(xué)院長春光學(xué)精密機(jī)械與物理研究所,長春 130033) 4(北京航空航天大學(xué) 電子信息工程學(xué)院,北京 100191)
人工智能及邊緣計(jì)算的大規(guī)模應(yīng)用,使人工神經(jīng)網(wǎng)絡(luò)(Artificial Neural Network,ANN)在端側(cè)的應(yīng)用日益廣泛.端側(cè)計(jì)算常用的處理器為嵌入式處理器,神經(jīng)網(wǎng)絡(luò)在資源受限的嵌入式處理器上的計(jì)算效率不高.Sigmoid函數(shù)是人工神經(jīng)網(wǎng)絡(luò)常用的激活函數(shù),其計(jì)算過程需要進(jìn)行指數(shù)和除法運(yùn)算,其較高的計(jì)算時(shí)間復(fù)雜度和空間復(fù)雜度影響嵌入式平臺(tái)的神經(jīng)網(wǎng)絡(luò)計(jì)算效率,提高Sigmoid函數(shù)計(jì)算效率是當(dāng)前嵌入式計(jì)算平臺(tái)提高神經(jīng)網(wǎng)絡(luò)運(yùn)行效率需要解決的關(guān)鍵問題之一.
Sigmoid 函數(shù)主體為e指數(shù)運(yùn)算,常用標(biāo)準(zhǔn)C的math庫exp函數(shù)實(shí)現(xiàn),分析其源碼可知其實(shí)現(xiàn)原理為泰勒級(jí)數(shù)展開法1.為了提高精度,泰勒級(jí)數(shù)展開法往往需要高階展開,這樣增加了Sigmoid函數(shù)的運(yùn)算復(fù)雜度和計(jì)算資源的消耗.為了降低Sigmoid函數(shù)運(yùn)算復(fù)雜度,目前已提出了如查表法、CORDIC 算法、多項(xiàng)式擬合等方法.
查表法將不同x值所對(duì)應(yīng)的Sigmoid函數(shù)值存儲(chǔ)在已知存儲(chǔ)塊中,計(jì)算時(shí)根據(jù)輸入變量在已存變量存儲(chǔ)塊中查找該變量對(duì)應(yīng)的計(jì)算值,進(jìn)而得到計(jì)算結(jié)果.隨著精度的提高所需的存儲(chǔ)資源顯著增加,資源消耗高[1].CORDIC算法即坐標(biāo)軸旋轉(zhuǎn)數(shù)字計(jì)算方法,其本質(zhì)是通過一系列與運(yùn)算有關(guān)的角度基底θk來逼近任何一個(gè)旋轉(zhuǎn)角度.該計(jì)算只需簡單的移位和加減,不涉及乘除,但其本質(zhì)是迭代收斂算法,計(jì)算時(shí)間長,且實(shí)時(shí)性差[2].多項(xiàng)式擬合法即將Sigmoid函數(shù)分段,每段采用合適的折線段來逼近Sigmoid函數(shù)[3-7].該方法對(duì)擬合函數(shù)有較高的要求,使用低階多項(xiàng)式會(huì)使精度降低,而高階多項(xiàng)式則會(huì)增加運(yùn)算復(fù)雜度[8].
為了降低Sigmoid函數(shù)在ARM Cortex-M平臺(tái)上的運(yùn)算復(fù)雜度,本文提出一種新的Sigmoid激活函數(shù)優(yōu)化方法—分段極限近似法.首先根據(jù)Sigmoid函數(shù)在中間變化快、兩端變化緩慢的特點(diǎn),將其分為常數(shù)區(qū)和非線性擬合區(qū);其次依據(jù)第2個(gè)重要極限公式將Sigmoid函數(shù)中的指數(shù)計(jì)算轉(zhuǎn)換為log2n次乘法計(jì)算,簡化e指數(shù)計(jì)算進(jìn)而降低Sigmoid函數(shù)的運(yùn)算復(fù)雜度.實(shí)驗(yàn)表明,這種優(yōu)化方法相比標(biāo)準(zhǔn)C的math庫exp函數(shù)實(shí)現(xiàn)Sigmoid函數(shù)的方法在運(yùn)算速度上可以提升23.67倍;準(zhǔn)確率上,在平均絕對(duì)誤差小于0.001的情況下該方法產(chǎn)生的擬合誤差不會(huì)造成神經(jīng)網(wǎng)絡(luò)判別準(zhǔn)確率的下降.
Sigmoid函數(shù)是一種廣泛應(yīng)用于神經(jīng)網(wǎng)絡(luò)的激活函數(shù)[9],其計(jì)算公式如式(1)所示,其值域?yàn)?0,1).
(1)
Sigmoid函數(shù)及其一階導(dǎo)函數(shù)、二階導(dǎo)函數(shù)如圖1所示.Sigmoid函數(shù)的一階導(dǎo)數(shù)反映其變化率,變化率小表明值變化速度緩慢,變化率較小的區(qū)間可用常數(shù)來擬合.將Sigmoid函數(shù)分為兩個(gè)區(qū)間:常數(shù)區(qū)和非線性擬合區(qū).這兩個(gè)區(qū)間的分界點(diǎn)取決于常數(shù)區(qū)與“1”之間的最大允許誤差Δ,如式(2)所示.本文設(shè)置最大允許誤差為0.003,代入式(2)計(jì)算,可得常數(shù)區(qū)與非線性擬合區(qū)的分界點(diǎn)x為6.由于Sigmoid函數(shù)的對(duì)稱性,負(fù)半軸的分界點(diǎn)x為-6,常數(shù)區(qū)定為(-∞,-6)和(6,+∞),非線性擬合區(qū)為[-6,6].(-∞,-6)用常數(shù)“0”擬合,(6,+∞)用常數(shù)“1”擬合,[-6,6]用非線性函數(shù)擬合.

圖1 Sigmoid函數(shù)及其一階、二階導(dǎo)數(shù)
(2)
Sigmoid函數(shù)的一階導(dǎo)數(shù)和二階導(dǎo)數(shù)的計(jì)算公式如式(3)、式(4)所示.
(3)
(4)
Sigmoid函數(shù)的二階導(dǎo)數(shù)在(-∞,0)內(nèi)恒大于零,在(0,+∞)內(nèi)恒小于零.因此Sigmoid函數(shù)的變化率函數(shù)在(-∞,0)單調(diào)遞增,在(0,+∞)單調(diào)遞減.
由Sigmoid函數(shù)的一階導(dǎo)數(shù)即式(3)計(jì)算可得:常數(shù)區(qū)與非線性擬合區(qū)的分界點(diǎn)變化率為0.0025.根據(jù)Sigmoid函數(shù)變化率在區(qū)間(0,+∞)單調(diào)遞減的特性可知,常數(shù)區(qū)(6,+∞)內(nèi)Sigmoid函數(shù)的變化率均小于0.0025,根據(jù)對(duì)稱性可知在(-∞,-6)區(qū)間函數(shù)的變化率均小于0.0025,即在區(qū)間(-∞,-6)和(6,+∞)內(nèi)使用常數(shù)擬合不會(huì)產(chǎn)生較大誤差.
Sigmoid函數(shù)主體為e指數(shù)運(yùn)算,e指數(shù)運(yùn)算為超越函數(shù),影響了Sigmoid函數(shù)在非線性區(qū)間的計(jì)算效率.在計(jì)算機(jī)中,標(biāo)準(zhǔn)C math庫的e指數(shù)的實(shí)現(xiàn)方法是泰勒級(jí)數(shù)展開法,這種方法復(fù)雜度高.本文在設(shè)定誤差內(nèi)提出一種運(yùn)算量小,資源消耗低的非線性函數(shù),以實(shí)現(xiàn)指數(shù)函數(shù)的近似計(jì)算.
第2個(gè)重要極限公式如式(5)所示:
(5)
命名n為極限參數(shù),由式(5)可以推出:
(6)
(7)


圖2 極限近似法滿二叉樹計(jì)算
t=log2n+1
(8)
可得t-1=log2n,因而,利用公式(6),e指數(shù)計(jì)算可以轉(zhuǎn)換成log2n次乘法計(jì)算,降低其在處理器中的計(jì)算時(shí)間復(fù)雜度.
利用式(7)對(duì)Sigmoid函數(shù)進(jìn)行非線性擬合,本文命名這種擬合方法為極限近似法.
極限參數(shù)n的選取條件取決于選定區(qū)間內(nèi)e指數(shù)計(jì)算所允許的均方誤差.對(duì)于給定區(qū)間[x1,x2],設(shè)均方誤差為ξ,則:
由泰勒級(jí)數(shù)展開公式:
(9)
(10)
區(qū)間[x1,x2]均方誤差為:
(11)
求解得:
(12)
(13)
本文得出e的擬合方程式(6)的極限參數(shù)n的求解公式(13),其給定區(qū)間為[x1,x2],設(shè)定的e指數(shù)均方誤差為ξ.
前述均方誤差計(jì)算區(qū)間為[-6,6],即x1=-6,x2=6時(shí),求解極限參數(shù)n為式(14).
(14)
e指數(shù)泰勒級(jí)數(shù)展開公式如式(15)所示.
(15)
由上式可知,當(dāng)展開次數(shù)為n(n≥2)時(shí),計(jì)算e指數(shù)需要用到n次加法和2(n-1)次乘法,運(yùn)算復(fù)雜度高.
比較本文的極限近似法與泰勒級(jí)數(shù)展開法在相同乘法次數(shù)下對(duì)e指數(shù)的擬合精度,計(jì)算其均方誤差,見式(16).
(16)
γ(x)=f(x)-ex
(17)
[x1,x2]為計(jì)算均方誤差的區(qū)間,由公式(2)計(jì)算可得非線性擬合區(qū)為[-6,6],因此僅在此區(qū)間計(jì)算均方誤差,即x1=-6,x2=6.f(x)為擬合函數(shù).
表1為在相同乘法次數(shù)下,極限近似法和泰勒級(jí)數(shù)展開法對(duì)e指數(shù)擬合的均方誤差.圖3為極限近似法和泰勒級(jí)數(shù)展開法對(duì)e指數(shù)擬合的均方誤差取對(duì)數(shù)(e為底)形式下的曲線圖.可知,在相同乘法次數(shù)下泰勒級(jí)數(shù)展開法的均方誤差遠(yuǎn)大于極限近似法的均方誤差.兩種方法的均方誤差均隨著乘法次數(shù)的增加而減小,因此精度與速度是相互對(duì)立的關(guān)系.因而,在相同計(jì)算時(shí)間情況下極限近似法相較泰勒級(jí)數(shù)展開法可以取得更高的精度.

表1 相同乘法次數(shù)下兩種方法e指數(shù)的均方誤差(x∈[-6,6])

圖3 e指數(shù)均方誤差曲線圖
本文利用MATLAB工具分析Sigmoid函數(shù)的擬合性能,在非線性擬合區(qū)間內(nèi)計(jì)算Sigmoid函數(shù)的平均絕對(duì)誤差.非線性擬合區(qū)間以 0.001為間隔取數(shù),Sigmoid函數(shù)的平均絕對(duì)誤差計(jì)算結(jié)果如表2所示.

表2 Sigmoid函數(shù)平均絕對(duì)誤差(x∈[-6,6])
由表2可知,隨著極限參數(shù)n的增大,Sigmoid函數(shù)的平均絕對(duì)誤差越小,擬合精度越高,相應(yīng)計(jì)算時(shí)間越長.Sigmoid函數(shù)平均絕對(duì)誤差的對(duì)數(shù)形式(e為底)與e指數(shù)均方誤差的對(duì)數(shù)形式的關(guān)系如圖4所示.

圖4 Sigmoid平均絕對(duì)誤差與e指數(shù)均方誤差關(guān)系圖
由圖4可知:二者具有近似線性的關(guān)系,線性回歸擬合公式如式(18)所示.
y=0.5078x-9.1696
(18)
y為Sigmoid函數(shù)平均絕對(duì)誤差的對(duì)數(shù)形式,x為e指數(shù)均方誤差的對(duì)數(shù)形式.假定Sigmoid平均絕對(duì)誤差為λ,由式(14)及式(18)可得極限參數(shù)n與λ的關(guān)系式:
(19)
為了驗(yàn)證Sigmoid函數(shù)分段極限近似法對(duì)嵌入式計(jì)算平臺(tái)神經(jīng)網(wǎng)絡(luò)計(jì)算效率的影響,本文以ARM Cortex-M實(shí)驗(yàn)平臺(tái)為驗(yàn)證系統(tǒng)進(jìn)行了實(shí)驗(yàn).
BP神經(jīng)網(wǎng)絡(luò)通過前向傳播、誤差反向傳播和權(quán)重更新這3個(gè)過程進(jìn)行訓(xùn)練[10].訓(xùn)練過程運(yùn)算量大,因此神經(jīng)網(wǎng)絡(luò)的訓(xùn)練部分在處理能力強(qiáng)的PC端進(jìn)行,訓(xùn)練結(jié)束后的權(quán)重參數(shù)存于文件,在ARM Cortex-M平臺(tái)上導(dǎo)入權(quán)重參數(shù)進(jìn)行測試.
實(shí)驗(yàn)主要分為PC端數(shù)據(jù)集訓(xùn)練以及ARM Cortex-M平臺(tái)數(shù)據(jù)集測試這兩個(gè)部分.PC端實(shí)驗(yàn)環(huán)境為Anaconda3,編程語言采用Python3.7.實(shí)驗(yàn)網(wǎng)絡(luò)為全連接層神經(jīng)網(wǎng)絡(luò),其結(jié)構(gòu)如圖5所示.神經(jīng)網(wǎng)絡(luò)框架編程采用TensorFlow深度神經(jīng)網(wǎng)絡(luò)開源軟件庫.ARM Cortex-M平臺(tái)上選用STM32F407ZGT6芯片進(jìn)行實(shí)驗(yàn),其工作頻率為168MHz.利用廣州市星翼電子科技有限公司生產(chǎn)的探索者STM32F407開發(fā)板,ARM開發(fā)環(huán)境采用MDK5軟件,版本號(hào)為5.25,并使用C語言進(jìn)行編程.圖6為實(shí)驗(yàn)驗(yàn)證框圖.

圖5 神經(jīng)網(wǎng)絡(luò)示意圖

圖6 實(shí)驗(yàn)驗(yàn)證框圖
驗(yàn)證數(shù)據(jù)庫采用UCI數(shù)據(jù)庫,該數(shù)據(jù)庫由加州大學(xué)歐文分校(University of CaliforniaIrvine)提出,用于機(jī)器學(xué)習(xí)標(biāo)準(zhǔn)測試,是目前學(xué)術(shù)界廣泛使用的機(jī)器學(xué)習(xí)數(shù)據(jù)庫[11].
本文從UCI數(shù)據(jù)庫中選擇了5個(gè)用于分類任務(wù)的數(shù)據(jù)集進(jìn)行訓(xùn)練和測試.表3為從UCI數(shù)據(jù)庫中選擇數(shù)據(jù)集的基本信息.

表3 實(shí)驗(yàn)數(shù)據(jù)集描述
神經(jīng)網(wǎng)絡(luò)模型訓(xùn)練的測試集與訓(xùn)練集之比為3∶7,實(shí)驗(yàn)中ARM Cortex-M平臺(tái)上運(yùn)行神經(jīng)網(wǎng)絡(luò)的數(shù)據(jù)集為測試集數(shù)據(jù).
首先從UCI數(shù)據(jù)庫中選取用于分類任務(wù)的數(shù)據(jù)集完成PC端BP神經(jīng)網(wǎng)絡(luò)的設(shè)計(jì)、訓(xùn)練、驗(yàn)證,訓(xùn)練后的權(quán)重參數(shù)保存至文件.然后,在ARM Cortex-M平臺(tái)上復(fù)原神經(jīng)網(wǎng)絡(luò)并導(dǎo)入已訓(xùn)練得到的權(quán)重參數(shù)運(yùn)行神經(jīng)網(wǎng)絡(luò),利用不同Sigmoid實(shí)現(xiàn)方法比較神經(jīng)網(wǎng)絡(luò)運(yùn)行速度.最后,對(duì)ARM Cortex-M實(shí)驗(yàn)系統(tǒng)和PC實(shí)驗(yàn)系統(tǒng)神經(jīng)網(wǎng)絡(luò)的測試準(zhǔn)確率進(jìn)行比較.表4為各數(shù)據(jù)集神經(jīng)網(wǎng)絡(luò)模型的結(jié)構(gòu)和Sigmoid函數(shù)的使用情況.

表4 神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)及Sigmoid函數(shù)的使用情況
本文提出的分段極限近似法實(shí)質(zhì)為一種分段擬合法,文獻(xiàn)[8]也提及了一種利用多項(xiàng)式進(jìn)行Sigmoid函數(shù)分段擬合優(yōu)化的方法.本文對(duì)比分段極限近似法及文獻(xiàn)[8]分段擬合法對(duì)標(biāo)準(zhǔn)C的math庫exp函數(shù)實(shí)現(xiàn)Sigmoid函數(shù)的方法運(yùn)算速度提升情況,驗(yàn)證計(jì)算平臺(tái)為ARM Cortex-M平臺(tái).
文獻(xiàn)[8]采用的分段擬合法將Sigmoid函數(shù)的絕對(duì)誤差控制在0.001以內(nèi),因此本文極限近似法設(shè)定的平均絕對(duì)誤差也為0.001,代入公式(19)計(jì)算得:n=274.85,取2的整數(shù)次冪得:n=512.
為了驗(yàn)證分段極限近似法對(duì)Sigmoid函數(shù)在ARM Cortex-M平臺(tái)上對(duì)神經(jīng)網(wǎng)絡(luò)運(yùn)算速度的影響,在ARM Cortex-M平臺(tái)上復(fù)原PC端的神經(jīng)網(wǎng)絡(luò),利用UCI數(shù)據(jù)庫中的數(shù)據(jù)集進(jìn)行測試.表5為本文ARM Cortex-M平臺(tái)上的輸出層平均絕對(duì)誤差,輸出層平均絕對(duì)誤差指嵌入式平臺(tái)上使用本文的極限近似法實(shí)現(xiàn)Sigmoid函數(shù)的神經(jīng)網(wǎng)絡(luò)最后一層輸出的結(jié)果與計(jì)算機(jī)端利用math函數(shù)庫實(shí)現(xiàn)Sigmoid函數(shù)的神經(jīng)網(wǎng)絡(luò)最后一層輸出的結(jié)果之差的平均值.表6為不同數(shù)據(jù)集使用不同Sigmoid函數(shù)實(shí)現(xiàn)方法的神經(jīng)網(wǎng)絡(luò)運(yùn)算時(shí)間比較.時(shí)間的測量通過開啟ARM的定時(shí)器測定.

表5 數(shù)據(jù)集輸出層平均絕對(duì)誤差

表6 神經(jīng)網(wǎng)絡(luò)運(yùn)算時(shí)間比較
實(shí)驗(yàn)數(shù)據(jù)表明,在表5所示的各數(shù)據(jù)集輸出層平均絕對(duì)誤差的范圍內(nèi),分段極限近似法及文獻(xiàn)[8]分段擬合法對(duì)標(biāo)準(zhǔn)C的math庫exp函數(shù)實(shí)現(xiàn)Sigmoid函數(shù)的方法在速度上可分別平均提升24.67倍和4.94倍.在相同誤差數(shù)量級(jí)下分段極限近似法對(duì)速度提升效果更加顯著.
由于擬合誤差的存在,每一層神經(jīng)元的值都會(huì)發(fā)生變化(增加或減少),從而影響下一層神經(jīng)元的值;在輸出層,當(dāng)兩個(gè)神經(jīng)元的值很接近時(shí),整個(gè)網(wǎng)絡(luò)中積累的誤差會(huì)導(dǎo)致網(wǎng)絡(luò)識(shí)別的結(jié)果發(fā)生變化[12].為了驗(yàn)證分段極限近似法對(duì)準(zhǔn)確率的影響,本文在ARM Cortex-M平臺(tái)上復(fù)原與PC端一致的神經(jīng)網(wǎng)絡(luò),并導(dǎo)入已訓(xùn)練后的權(quán)重參數(shù),然后利用PC端的測試集數(shù)據(jù)對(duì)ARM Cortex-M平臺(tái)上的神經(jīng)網(wǎng)絡(luò)進(jìn)行測試,分段極限近似法的Sigmoid函數(shù)平均絕對(duì)誤差設(shè)置為0.001.表7為PC和ARM Cortex-M平臺(tái)的神經(jīng)網(wǎng)絡(luò)判別準(zhǔn)確率的比較.

表7 神經(jīng)網(wǎng)絡(luò)準(zhǔn)確率比較
實(shí)驗(yàn)結(jié)果表明,ARM Cortex-M平臺(tái)上神經(jīng)網(wǎng)絡(luò)判別準(zhǔn)確率與PC端的準(zhǔn)確率一致,說明在平均絕對(duì)誤差小于0.001的情況下分段極限近似法對(duì)Sigmoid函數(shù)產(chǎn)生的擬合誤差不會(huì)造成神經(jīng)網(wǎng)絡(luò)判別準(zhǔn)確率的下降.
綜合神經(jīng)網(wǎng)絡(luò)運(yùn)算速度和識(shí)別準(zhǔn)確率的實(shí)驗(yàn)數(shù)據(jù),可以得出在ARM Cortex-M平臺(tái)上,通過降低Sigmoid激活函數(shù)運(yùn)算復(fù)雜度,分段極限近似法在確保判別準(zhǔn)確率的前提下提升了神經(jīng)網(wǎng)絡(luò)的運(yùn)算速度,同時(shí)具備了低計(jì)算時(shí)間復(fù)雜度和高精度的優(yōu)點(diǎn).
本文提出一種新的Sigmoid函數(shù)優(yōu)化方法——分段極限近似法,在資源受限的嵌入式平臺(tái)上能夠不影響判別準(zhǔn)確率的前提下有效降低神經(jīng)網(wǎng)絡(luò)計(jì)算時(shí)間復(fù)雜度.該方法通過選擇合適的極限參數(shù)值,同時(shí)滿足ARM Cortex-M平臺(tái)上的精度和速度的需求.實(shí)驗(yàn)表明Sigmoid函數(shù)的實(shí)現(xiàn),該方法相較標(biāo)準(zhǔn)C的math庫exp函數(shù)可以提升23.67倍的速度,且在平均絕對(duì)誤差小于0.001的情況下對(duì)Sigmoid函數(shù)產(chǎn)生的擬合誤差不會(huì)造成神經(jīng)網(wǎng)絡(luò)判別準(zhǔn)確率的下降.該方法為嵌入式平臺(tái)上神經(jīng)網(wǎng)絡(luò)的低復(fù)雜度、高精度運(yùn)行提供一種優(yōu)化方法.