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

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


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

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

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

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

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

圖5 神經網絡示意圖

圖6 實驗驗證框圖
驗證數據庫采用UCI數據庫,該數據庫由加州大學歐文分校(University of CaliforniaIrvine)提出,用于機器學習標準測試,是目前學術界廣泛使用的機器學習數據庫[11].
本文從UCI數據庫中選擇了5個用于分類任務的數據集進行訓練和測試.表3為從UCI數據庫中選擇數據集的基本信息.

表3 實驗數據集描述
神經網絡模型訓練的測試集與訓練集之比為3∶7,實驗中ARM Cortex-M平臺上運行神經網絡的數據集為測試集數據.
首先從UCI數據庫中選取用于分類任務的數據集完成PC端BP神經網絡的設計、訓練、驗證,訓練后的權重參數保存至文件.然后,在ARM Cortex-M平臺上復原神經網絡并導入已訓練得到的權重參數運行神經網絡,利用不同Sigmoid實現方法比較神經網絡運行速度.最后,對ARM Cortex-M實驗系統(tǒng)和PC實驗系統(tǒng)神經網絡的測試準確率進行比較.表4為各數據集神經網絡模型的結構和Sigmoid函數的使用情況.

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

表5 數據集輸出層平均絕對誤差

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

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