張有健,陳 晨,王再見*
(1.安徽師范大學 物理與電子信息學院,安徽 蕪湖241002;2.安徽省智能機器人信息融合與控制工程實驗室,安徽 蕪湖241002)
近年來,深度學習(Deep Learning)算法漸漸成為人工智能熱點研究領域。因此如何改進深度學習算法,優化現有算法的性能是眾多學者一直致力解決的問題。其中激活函數可以將非線性因素引入深度神經網絡中,以此模擬非線性函數使得神經網絡可以任意逼近任何非線性函數[1],這樣神經網絡就可以應用到眾多的非線性模型中,大大提高了模型的泛化能力。
由于激活函數的重要性,眾多學者通過對神經網絡的研究,提出了多種不同類型的激活函數[2]。例如Sigmoid,Tanh,ReLU等經典激活函數及其改進結構。然而至今為止,對激活函數研究還沒有明確的指導性原則。
為了使讀者能夠更加深入了解激活函數的性能、工作原理以及激活函數存在的不足。本文調研了現階段主流的幾種激活函數Sigmoid,Tanh,ReLU,P-ReLU,L-ReLU,并在不同的深度學習算法下測試激活函數的效果。在卷積神經網絡(Covolutional Neural Network,CNN)[3-4]中使用MNIST,CIFAR-10經典數據集測試不同激活函數,并在循環神經網絡(Recurrent Neural Network,RNN)[5-6]中使用大豆糧油數據集對大豆的產值進行預警,由實驗結果可知,S系激活函數比ReLU系激活函數收斂更快,而ReLU系激活函數則在精度上優于S系激活函數。
深度學習網絡中,激活函數受中樞神經系統中的生物神經元[7]啟發而設計。如圖1所示,v1,v2,…,vi是神經元的輸入值,wj1wj2,…,wji為神經元傳遞的權值,bi為神經元傳遞的函數偏置向量。

圖1 人工神經元結構圖Fig.1 Structure of artificial neurons
根據生物神經元的特性將輸入值vi與權值wji相乘,加上函數偏置向量bi得到神經元輸出x,量化后通過相應的激活函數f(·),最后由激活函數f(·)來決定特定神經元是否被激活。
為了挖掘數據之間的復雜關系,深度學習將激活層加入到之前隱藏層的非線性輸出中[7],原理如式(1)所示。
y=f(wx+b),
(1)
式中,f(·)為w內核的權值加上b的偏差,x為當前隱藏層的輸入,y為當前隱藏層輸出,同樣也是下一個隱藏層的輸入。
S系激活函數是神經網絡中最早提出的一批激活函數,由于它與生物神經元的激活率[8]有相似的表達,因此廣泛應用于早期的神經網絡中。S系激活函數主要有兩種類型:Sigmoid函數和雙曲正切函數(Tanh)函數。S系激活函數是一個增長函數,它在線性和非線性行為之間保持平衡,如圖2所示。Sigmoid函數的取值范圍為0~1,Tanh函數則關于零點對稱,取值范圍為-1~1。

圖2 常用的激活函數示意圖Fig.2 Commonly used activation function diagram
由Sigmoid為代表的有一些眾所周知的激活函數,如Sigmoid,Tanh,如圖2 (a),式(2)~(3)所示。
(2)
(3)
如圖2(a)所示,Sigmoid激活函數存在飽和區域和非原始對稱的缺點,當數據處于飽和區域時,反向傳播的梯度更新非常緩慢,非原點對稱的問題會阻礙和減慢訓練。激活函數克服了非原點對稱的缺點,但也存在飽和區的缺點。Sigmoid和Tanh的激活函數在反向傳播時也會出現梯度爆炸或梯度丟失的問題,因為它們的梯度相乘可能很大,也可能很小。基本激活函數的導數如式(4)~(5)所示。
(4)
(5)
通過導數計算得到激活函數Sigmoid 導數最大值為0.25,激活函數Tanh導數最大值為1。通過梯度的疊加計算,由于Sigmoid的導數小于1,因此多個小于1的導數相乘導致梯度非常小。同理,Tanh函數雖然要優于Sigmoid,然而其梯度仍然小于1,因此難以避免的存在梯度消失的問題,導致模型難以收斂。
針對上述問題,研究者提出了ReLU激活函數[9-10],ReLU是一個分段函數,當輸入為負時,輸出為0;否則,輸出等于輸入。ReLU的梯度為1,如式(6)所示,不會導致梯度爆炸或梯度丟失的問題,但會導致另一個問題,輸出總是大于0,忽略了負的輸入。式(7)為ReLU的導數形式。

(6)

(7)
針對ReLU激活函數的不足,學者們提出了許多改進的ReLU激活函數,如Leaky ReLU (L-ReLU)、參數ReLU (P-ReLU)[11]。P-ReLU函數的參數和ELU函數的參數是可變的,因此它們可以更加適應不同的數據集,L-ReLU的參數是固定的,因此它泛化性則略有欠缺。文獻[12]提出一種新的激活函數方法——截斷線性單元(ELU),這種方法可以更好地捕捉到嵌入信號的結構,這些信號通常具有極低的圖像內容信噪比,但如果截斷值很小,就會導致性能下降。改進后的ReLU激活函數如圖2(b),式(8)~(10)所示,其中α,β,?分別為ReLU系激活函數的參數。

(8)

(9)
(10)
文獻[13]研究發現,新的組合激活函數可以通過結合基本的激活函數以數據驅動方式輸出,并提出了以分層組合基本激活函數集成適應不同的輸入。文獻[14]提出一種新的組合激活函數,多參數指數線性單元MPELU。它由ReLU和ELU組合成,可以通過改變參數成為任何“ReLU家庭”成員,如ReLU,L-ReLU,P-ReLU。文獻[15-16]提出了基于ReLU改進版的激活函數,它可以適應任何輸入,但仍存在梯度爆炸或梯度丟失的現象。
文獻[17]提出一種可訓練的激活函數和一種多層結構多層Maxout網絡(MMN),它具有非飽和區的特點,并且可以近似任何激活函數,這樣可以適應任何輸入,并且可以解決梯度爆炸或梯度消失問題,但需要付出的代價是大量的計算。文獻[18]嘗試在ReLU本身不變的情況下,用偽導數代替原有的ReLU導數。偽導數的設計是為了緩解零導數的問題,并與一般的原始導數保持一致,通過實驗表明,在CIFAR-10測試中,使用偽導數ReLU (Pseudo Derivative ReLU,PD-ReLU)可以明顯改善AlexNet。文獻[19]使用一種雙邊ReLU激活函數針對圖像處理問題,并比傳統ReLU精度更高。然而在某種程度上卻增加ReLU函數梯度爆炸和梯度消失的風險。激活函數作為熱點研究領域,無法列舉所有的激活函數,本文主要測試研究現階段使用廣泛的一些激活函數。表1列出了現階段常用激活函數的優勢及不足。

表1 主流激活函數的對比Tab.1 Comparison of mainstream activation functions
本節使用大量實驗來證明不同激活函數的有效性及其優勢與不足。所有實驗均在本次實驗環境中,將Tensorflow作為本次深度學習實驗的框架模型。實驗環境:Inter(R) Core(TM) i5-4590 CPU@3.30 GHz RAM:8 GB GPU:NVIDIA GeForce GTX 1060 3 GB。實驗基于2,4,6,8,10,20層CNN。本節實驗選擇MNIST作為實驗測試的數據庫,手寫數字數據庫有一個包含60 000個示例的訓練集和一個包含10 000個示例的測試集。數字的大小已標準化并集中在固定大小的圖像中。通過計算像素的質心,將圖像居中,并平移圖像,使該點位于28×28區域的中心。
如圖3(a)所示,在MNIST上測試了部分激活函數的有效性,各個激活函數的平均準確率高達99.3%,同時可得出在8層卷積層時對應的準確率更高。在圖3(b)中各個激活函數的準確率基本達到93%以上,但現有的激活函數在卷積層達到8~20層時,準確性下降較快。雙曲正切函數甚至只有33.83%的準確性。而L-ReLU和P-ReLU由于不涉及指數運算,且無死亡神經元的問題,避免了梯度消失和梯度爆炸的問題,因此相比于ReLU和Tanh更具魯棒性。

圖3 部分激活函數的精度比較Fig.3 Precision comparison of partial activation functions investigated
表2和表3記錄了卷積層數分別2,6,10,20層下的CNN在MNIST數據集下的收斂時間。通過對比可知,由于每種激活函數涉及到的運算并不相同,不同的激活函數每次迭代所需的時間也不盡相同。相對于MNIST數據集,每次迭代的時間P-ReLU小于L-ReLU,大于Tanh和ReLU。且迭代的時間隨著卷積層數的變化而變化,例如當卷積層增至20層時,L-ReLU比P-ReLU慢2 000 000 μs左右,比Tanh要慢約5 999 167 μs。

表2 4種激活函數在2,6層卷積層下的收斂時間Tab.2 Convergence time of four activation functions under 2 and 6 convolution layers was tested

表3 4種激活函數在10,20層卷積層下的收斂時間Tab.3 Convergence time of four activation functions under 10 and 20 convolution layers was tested
為了驗證不同激活函數的泛化性,本次實驗使用選擇擅長處理序列數據[20-21]的循環神經網絡,使用Tensorflow作為本次深度學習實驗的框架模型。實驗環境:Inter(R) Core(TM) i5-4590 CPU@3.30 GHz RAM:8 GB GPU:NVIDIA GeForce GTX 1060 3 GB。實驗基于3層隱藏層的循環神經網絡。
本次實驗使用自收集大豆數據集,數據來源于國家糧食統計局、中國糧食年鑒等權威機構。數據集分為訓練集及測試集兩部分。其中訓練集為1995—2007年中國大豆產值數據,測試集為2008—2016年的大豆數據集,最后通過訓練后的RNN預測2008—2016年的大豆產值,并與實際的大豆產值對比得到最后的預測精度。其中訓練集為3 258條示例,測試集為2 172條示例。
由圖4中可知,在RNN下不同的激活函數對算法的精度同樣有很大的影響。可以看出使用Tanh激活函數時,對大豆的產值預測達到85%的精確度,而在P-ReLU激活函數下,達到了93%的預測精度,結合S激活函數存在較大飽和區的特點和最終的預測精度來看,S系激活函數應用在傳統的RNN中,造成的梯度消失問題嚴重的制約了算法的精度。同時在綜合上節卷積層中的實驗對比可得ReLU系激活函數的收斂時間可能更長,而其由于沒有梯度消失與梯度爆炸的問題,使得算法的精度要優于S系激活函數,其中P-ReLU由于其自適應性,無指數運算的特點在大豆數據集中達到了最高的精度預測。

圖4 不同激活函數下的循環神經網絡對大豆產值的預測結果Fig.4 Prediction results of cyclic neural network under different activation functions on soybean output value
本文調研了目前使用較為廣泛的激活函數,并在CNN和RNN中進行了測試對比。通過部分實驗對比,得出S系激活函數在迭代時間上要比ReLU系激活函數更少,而在精度上ReLU系要遠遠高于S系激活函數。不同激活函數對深度學習算法的性能影響很大,現階段在激活函數的改進上還沒有指導性的理論原則,因此激活函數的優化仍然是改進深度學習的重點領域。下一步將針對現有激活函數的不足提出一種新的激活函數來優化深度學習算法。