田 娟, 李英祥, 李彤巖
(成都信息工程大學(xué) 通信工程學(xué)院, 成都 610225)
近年, 深度學(xué)習(xí)[1]在計算機視覺、語音識別、自然語言處理、圖形圖像識別[2]等領(lǐng)域的運用備受關(guān)注. 與淺層神經(jīng)網(wǎng)絡(luò)相比, 深度神經(jīng)網(wǎng)絡(luò)層數(shù)的增加意味著其學(xué)到的特征越緊密, 表達能力也越強. 但是, 訓(xùn)練的層數(shù)越多, 訓(xùn)練也就越困難, 主要是因為在反向傳播算法中殘差會隨著網(wǎng)絡(luò)傳播的深度遞減, 使得底層網(wǎng)絡(luò)因為殘差過小而無法得到有效訓(xùn)練或無法訓(xùn)練. 殘差的衰減與網(wǎng)絡(luò)模型中激活函數(shù)(activation function)的選用密切相關(guān), 更好的激活函數(shù)可以抑制殘差在網(wǎng)絡(luò)傳播過程中的衰減并提高模型的收斂速度. 深度神經(jīng)網(wǎng)絡(luò)之所以能得到快速發(fā)展和應(yīng)用很大一部分得益于激活函數(shù)的發(fā)展. 文章針對激活函數(shù)進行了深入研究,對激活函數(shù)如何影響深度網(wǎng)絡(luò)的訓(xùn)練, 其發(fā)展現(xiàn)狀及原理性能進行了分析總結(jié), 并基于Caffe框架用CNN對Mnist數(shù)據(jù)集進行分類識別實驗. 在整個實驗過程中, 激活函數(shù)是唯一的變量. 通過實驗驗證不同激活函數(shù)對深度神經(jīng)網(wǎng)絡(luò)帶來的影響.
神經(jīng)網(wǎng)絡(luò)中激活函數(shù)的主要作用是提供網(wǎng)絡(luò)的非線性建模能力. 如果網(wǎng)絡(luò)中僅包含線性卷積和全連接運算, 網(wǎng)絡(luò)僅能夠表達線性映射, 即便增加網(wǎng)絡(luò)的深度也依舊是線性映射, 難以有效建模實際環(huán)境中非線性分布的數(shù)據(jù). 當(dāng)激活函數(shù)應(yīng)用于深度神經(jīng)網(wǎng)絡(luò)時, 其主要在前向傳播和反向傳播兩個過程中對網(wǎng)絡(luò)訓(xùn)練產(chǎn)生影響.
圖1是神經(jīng)網(wǎng)絡(luò)的基本處理單元.
圖1 神經(jīng)元前向傳播示意圖
圖1的輸出為:
反向傳播過程是網(wǎng)絡(luò)更新權(quán)值和偏置值的過程.圖2是一個輸出神經(jīng)元的反向傳播過程.
圖2 神經(jīng)元反向傳播示意圖
假設(shè)整個網(wǎng)絡(luò)的輸出層有兩個神經(jīng)元, 則網(wǎng)絡(luò)輸出誤差表示為:
通過鏈?zhǔn)椒▌t有:
其中,
網(wǎng)絡(luò)中其他的權(quán)值更新和上述過程類似. 從式(5)可以看出, 在每一次更新中, 每經(jīng)過一層, 殘差都要乘以如果選擇的激活函數(shù)不恰當(dāng), 經(jīng)過多層以后深度神經(jīng)網(wǎng)絡(luò)就會因底層殘差太小而無法得到有效訓(xùn)練. 因此, 在反向傳播過程中, 激活函數(shù)的選擇會影響到整個模型是否收斂和收斂效果.
激活函數(shù)的前期研究經(jīng)歷了三個階段:
(1) 簡單線性模型: 這種模型反映不出激活函數(shù)的非線性特征, 不具備分類的特性, 因此很少被采用.
(2) 線性閾值函數(shù): 該函數(shù)具有良好的分類特性,但由于其為不可導(dǎo)函數(shù), 使得難以找到有效的學(xué)習(xí)算法.
(3) Sigmoid函數(shù)
Sigmoid函數(shù)是典型的S型函數(shù), 函數(shù)表達式為:
函數(shù)圖像如圖3所示.
圖3 Sigmoid函數(shù)圖像
從圖3可以看出, Sigmoid函數(shù)的輸出值在(0,1)之間, 為非線性函數(shù). 當(dāng)x的取值越來越大時, 函數(shù)曲線變得越來越平緩, 意味著此時函數(shù)導(dǎo)數(shù)也越來越小. 同樣的, 當(dāng)x的取值越來越小時也存在這樣的問題. 只有當(dāng)x取值在0附近時, 導(dǎo)數(shù)取值較大.Sigmoid函數(shù)對中間區(qū)域的信號增益較大, 兩側(cè)區(qū)域信號增益較小, 克服了前兩種函數(shù)的缺陷, 因此在一段時間內(nèi)得到了廣泛地應(yīng)用. 但是, 在使用過程中其缺點逐漸暴露, 主要表現(xiàn)在兩點. (1) 在反向傳遞過程中, 當(dāng)輸入非常大或者非常小時趨近于0, 導(dǎo)致向下一層傳遞的梯度變得非常小,從而導(dǎo)致梯度消失. (2)Sigmoid 函數(shù)不是關(guān)于原點中心對稱的, 這個特性會導(dǎo)致后面網(wǎng)絡(luò)層的輸入也不是以零為中心的, 進而影響梯度下降的運作.
針對Sigmoid的問題, 后續(xù)出現(xiàn)了大量的改進函數(shù). 有使用正弦函數(shù)、反正切函數(shù)來代替Sigmoid函數(shù)的, 其中應(yīng)用最廣的是使用雙曲正切函數(shù)(Tanh)來代替Sigmoid. Tanh的函數(shù)表達式為:
函數(shù)圖像如圖4所示.
圖4 Tanh函數(shù)圖像
從圖4可以看出, Tanh與Sigmoid函數(shù)圖像相似,都是連續(xù)可微的非線性函數(shù), 不同的是Tanh的輸出以0為中心, 函數(shù)位于 (–1,1)區(qū)間上. 文獻[3]提到Tanh網(wǎng)絡(luò)的收斂速度比Sigmoid快. 當(dāng)x非常大或者非常小時, Tanh函數(shù)的倒數(shù)仍然趨近于0, 因此它并沒有解決Sigmoid函數(shù)的最大問題——由于函數(shù)飽和性產(chǎn)生的梯度消失.Sigmoid、Tanh激活函數(shù)是傳統(tǒng)神經(jīng)網(wǎng)絡(luò)模型中十分典型, 運用廣泛的兩個激活函數(shù), 它們的廣泛運用形成了一種概念: 非線性激活函數(shù)要比線性激活函數(shù)更加先進. 然而, 這一觀念隨著神經(jīng)元的稀疏性被證實而打破. 神經(jīng)元對輸入的大量信號進行了抑制, 只有少部分信號被響應(yīng), 這樣可以提高學(xué)習(xí)的精度, 更好地提取出稀疏特征, 同時稀疏特征并不需要網(wǎng)絡(luò)具有很強大的線性不可分機制, 因此使用簡單的線性激活函數(shù)可能更為合適. 另一方面, 2001年Charles Dugas等人在做正數(shù)回歸預(yù)測[4]中偶然使用了Softplus函數(shù)取得了很好的效果, 同年Charles Dugas等人在NIPS會議中提到, Softplus可以看作是強制非負校正函數(shù)max(0,x)的平滑版本. 這些都為ReLU函數(shù)的發(fā)展奠定了基礎(chǔ).Softplus和ReLU的函數(shù)圖像如圖5所示.
圖5 Softplus和ReLU函數(shù)圖像
線性激活函數(shù)ReLU[5]在深度神經(jīng)網(wǎng)絡(luò)中的使用加速了深度網(wǎng)絡(luò)的直接監(jiān)督式訓(xùn)練的最終突破, 也是2012年卷積神經(jīng)網(wǎng)絡(luò)在ILSVRC競賽中取得里程碑突破的原因之一. 其在網(wǎng)絡(luò)中的使用效果明顯優(yōu)于前面的Sigmoid、Tanh函數(shù), 是現(xiàn)在使用最廣泛的激活函數(shù). 其函數(shù)表達式為:
由圖5可知, ReLU能夠在x>0時保持梯度不衰減, 從而有效的緩解了梯度消失問題, 而且其運算簡單.另外, ReLU函數(shù)優(yōu)于其他激活函數(shù)的另一優(yōu)點是它不會同時激活所有的神經(jīng)元. 如果輸入值為負, ReLU函數(shù)會轉(zhuǎn)換為0, 此時神經(jīng)元不被激活. 這意味著, 在一段時間內(nèi), 只有少量的神經(jīng)元被激活, 神經(jīng)網(wǎng)絡(luò)的這種稀疏性使其變得高效且易于計算. ReLU在給神經(jīng)元網(wǎng)絡(luò)帶來稀疏性的同時也帶來了弊端. 當(dāng)輸入落入x<0的區(qū)域, 會導(dǎo)致對應(yīng)的權(quán)值無法更新, 而且強制的稀疏處理也會減少模型的有效容量, 即特征屏蔽太多, 導(dǎo)致模型無法學(xué)習(xí)到有效特征. 因此ReLU在訓(xùn)練過程中非常的脆弱.
為了緩解ReLU的問題, 隨后提出了LReLU、PReLU、RReLU等ReLU的變形函數(shù). 其中的基本思想是在x<0時乘以一個比較小的系數(shù), 函數(shù)表達式為:
函數(shù)圖像如圖6所示.
圖6 LReLU/PReLU/RReLU函數(shù)圖像
2015年Kaiming He在文獻[6]中指出, Leaky ReLU函數(shù)中的參數(shù)不僅可以作為超參數(shù)進行訓(xùn)練,而且可以達到更好的效果,于是Parametric ReLU(PReLU)函數(shù)被提出. PReLU中是一個隨機的超參數(shù), 其在訓(xùn)練過程中可以進行反向傳播從而被學(xué)習(xí), 并且在測試時為固定值. 這使神經(jīng)元能夠選擇負區(qū)域最好的梯度,有了這種能力, 它可以變成 ReLU 或 Leaky ReLU. 在文獻[6]中指出PReLU比ReLU收斂速度更快. 因為PReLU的輸出更接近0均值, 使得SGD更接近natural gradient.
在Kaggle的NDSB比賽中Randomized Leaky ReLU (RReLU)[7]函數(shù)被首次提出, 它是LReLU的“隨機”版本, 即指是隨機的. 其核心思想是在訓(xùn)練過程中從一個高斯分布中隨機生成, 然后在測試過程中進行修正.
2013年, Maxout激活函數(shù)在ICML2013上被提出,作者Goodfellow在文獻[8]中將Maxout與Dropout結(jié)合, 證明其在MNIST, CIFAR-10, CIFAR-100,SVHN這4個數(shù)據(jù)上都取得了很好的識別率. Maxout是ReLU的推廣, 其隱含層節(jié)點的輸出表達式為:
Maxout引入了參數(shù)k, 與Sigmoid、ReLU相比其增加了k個神經(jīng)元, 然后輸出激活函數(shù)中的最大值.Maxout是一個可學(xué)習(xí)的分段線性函數(shù), 具有非常強的擬合能力, 研究表明兩層Maxout就可以擬合任意的的凸函數(shù). 如 ReLU 和 Leaky ReLU 均可用 Maxout歸納.然而與ReLU相比, Maxout每個神經(jīng)元的參數(shù)數(shù)量增加了一倍, 這就導(dǎo)致整體參數(shù)的數(shù)量劇增, 使得網(wǎng)絡(luò)的計算量增加了.
2015年Clevert等人在文獻[9]中提出了ELU激活函數(shù), 它是一種融合了Sigmoid和ReLU的一類激活函數(shù). 函數(shù)表達式為:
函數(shù)圖像如圖7所示.
圖7 ELU函數(shù)圖像
由圖7可知, ELU左側(cè)部分解決了ReLU落入“死亡區(qū)”的問題, 并且使得ELU對輸入變化或噪聲更具魯棒性. 右側(cè)線性部分使得ELU能夠解決Sigmoid出現(xiàn)的梯度消失問題.
2017年10月, 在文獻[10]中谷歌研究者發(fā)布了新型激活函數(shù)Swish, 引發(fā)了不小的爭議. 其數(shù)學(xué)公式為:
圖8 Swish函數(shù)圖像
由圖8可以看出, Swish 具有無上界有下界、平滑、非單調(diào)等特性. 當(dāng)時, Swish為線性函數(shù)當(dāng)趨近于無窮時, Swish為線性函數(shù)變?yōu)榱薘eLU函數(shù) 因此Swish可以看成是介于線性函數(shù)和ReLU之間的平滑函數(shù). 在文獻[10]中證明了Swish函數(shù)的性能優(yōu)于ReLU, 但也有研究中認為Swish函數(shù)并沒有什么創(chuàng)新意義. 從函數(shù)本身來看在x>0區(qū)域其曲線形狀與 ReLU 激活函數(shù)不同, 即使在輸入值增大的情況下, Swish 激活函數(shù)的輸出可能下降. 大多數(shù)激活函數(shù)是單調(diào)的, 即輸入值增大的情況下, 輸出值不可能下降. 而 Swish 函數(shù)為 0 時具備單側(cè)有界的特性. Swish能否代替標(biāo)準(zhǔn)的ReLU還需要進一步研究.
此外, 在文獻[11]中提出的CReLU激活函數(shù), 它來自ICML2016, 是對ReLU的一種改進激活函數(shù). 其主要思想是將激活函數(shù)的輸入做一次額外的取反以達到消除冗余濾波器的目的. 文獻[12]中提出了另一種激活函數(shù)MPELU, 它同時具備 ReLU、PReLU和 ELU的優(yōu)點. 文獻[13]針對S型函數(shù)會導(dǎo)致學(xué)習(xí)速度下降問題, 提出了一種組合激活函數(shù), 該函數(shù)既滿足了S型函數(shù)的要求, 其在一些重要點上又能取得較大的導(dǎo)數(shù), 提高學(xué)習(xí)速度. 文獻[14]提出了參數(shù)可調(diào)的激活函數(shù), 以增加神經(jīng)網(wǎng)絡(luò)的非線性映射能力. 文獻[15]在Sigmoid函數(shù)基礎(chǔ)上引入了指數(shù)和幅度因子, 兼顧了響應(yīng)的快速性以及平穩(wěn)性, 具有良好的逼近能力和濾波效果. 上面介紹的激活函數(shù)都是十分常見的, 但這些遠不夠涵蓋現(xiàn)存的激活函數(shù).
卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)是深度學(xué)習(xí)算法在圖像處理領(lǐng)域的一個應(yīng)用, 它的特殊性體現(xiàn)在兩個方面, 一是神經(jīng)元間的非全連接性; 二是網(wǎng)絡(luò)中權(quán)值采用共享機制. 本節(jié)通過CNN實驗來驗證不同激活函數(shù)對深度神經(jīng)網(wǎng)絡(luò)的影響. 采用的數(shù)據(jù)集為MNIST數(shù)據(jù)集, 它是美國中學(xué)生手寫阿拉伯?dāng)?shù)值集, 共有60 000個28×28維0–9的手寫數(shù)字, 其中50 000個樣本作為訓(xùn)練集, 10 000個樣本作為測試集.
實驗在Ubuntu系統(tǒng)的Caffe框架下進行,采用Python語言進行編程. 實驗分析所用的機器配置為: 處理器CPU為Intel(R) Core(TM) i7-6700HQ CPU @2.60 GHz 2.59 GHz, 內(nèi)存 8.00 GB, 操作系統(tǒng)Ubuntu 14.04, GPU NVIDIA GeForce GTX 950M.
實驗采用caffe框架中的Lenet-5模型. Caffe中activation function的形式直接決定了其訓(xùn)練速度以及隨機梯度下降(SGD)算法的求解. 針對Sigmoid、Tanh、ReLU、PReLU、ELU 5種激活函數(shù), 實驗總共設(shè)計了5次實驗, 每次實驗采用不同的激活函數(shù). 5次實驗中激活函數(shù)是唯一變量, 其余的網(wǎng)絡(luò)文件以及網(wǎng)絡(luò)配置文件都相同. 這樣設(shè)計是為了在同一網(wǎng)絡(luò), 同一數(shù)據(jù)集下來研究不同激活函數(shù)的特性以及它們對網(wǎng)絡(luò)的影響. 每次實驗總共對訓(xùn)練集進行了10 000次訓(xùn)練,每100次訓(xùn)練輸出一次損失函數(shù), 每500次使用測試集的數(shù)據(jù)進行一次測試.
為了觀察采用不同激活函數(shù)的網(wǎng)絡(luò)表現(xiàn)出的性能,對每次實驗中的測試精度和損失函數(shù)進行統(tǒng)計, 統(tǒng)計對比結(jié)果如表1, 表2所示. 之所以要對損失函數(shù)進行統(tǒng)計是因為損失函數(shù)是衡量數(shù)據(jù)屬于某個類別的概率,損失函數(shù)越小說明網(wǎng)絡(luò)收斂越快, 而測試精度則是直觀反映網(wǎng)絡(luò)性能的量.
從表2看出, 采用PReLU激活函數(shù)的網(wǎng)絡(luò)取得了最高的準(zhǔn)確率—0.9916,說明PReLU引入了可訓(xùn)練參數(shù)后不僅解決了梯度消失問題, 還大大提高了網(wǎng)絡(luò)的識別率. 同時, 從表1中發(fā)現(xiàn)PReLU不僅是精度最高的而且是收斂最快更快的, 這是因為PReLU的輸出更接近0均值, SGD更接近natural gradient.
表1 激活函數(shù)與迭代次數(shù)對應(yīng)的損失函數(shù)值(Loss)
表2 激活函數(shù)與迭代次數(shù)對應(yīng)的測試精度(Accuracy)
其次表現(xiàn)得較好的是ReLU和Tanh函數(shù). 在實驗中, 兩者的網(wǎng)絡(luò)性能相差并不大. 與傳統(tǒng)的Sigmoid函數(shù)相比, ReLU能夠有效緩解梯度消失問題, 從而直接以監(jiān)督的方式訓(xùn)練深度神經(jīng)網(wǎng)絡(luò), 無需依賴無監(jiān)督的逐層預(yù)訓(xùn)練. 現(xiàn)在很多網(wǎng)絡(luò)都采用ReLU 函數(shù), 不僅因為它的優(yōu)良性能, 還有一個原因是現(xiàn)在大多數(shù)網(wǎng)絡(luò)都是fine turning別人的網(wǎng)絡(luò), 而ReLU是不引入其他參數(shù)的激活函數(shù)的最選擇.
Tanh在本文的網(wǎng)絡(luò)模型中表現(xiàn)的十分良好. 與Sigmoid 不同的是, Tanh 是0 均值的, 因此實際應(yīng)用中,Tanh 會比 Sigmoid具有更快的收斂速度,實驗結(jié)果也證明了這一點. 但是Tanh并沒有解決梯度消失問題,雖然在本實驗中Tanh和Sigmoid都能很好的收斂, 但是在更復(fù)雜的網(wǎng)絡(luò)中還是要謹慎使用.
從實驗結(jié)果來看, ELU融合Sigmoid和ReLU后確實比Sigmoid的性能更好, 但是引起的變化并不大.Sigmoid函數(shù)雖然是最早使用的激活函數(shù), 但是從實驗結(jié)果來看它的性能卻是最差的一個, 不管是從精度上還是收斂速度上都不及后面出現(xiàn)的激活函數(shù).
另外, 對各個激活函數(shù)層在forward和backward過程中消耗的時間進行了統(tǒng)計, 如圖9所示.
從圖9可以看出, Sigmoid、Tanh、ELU函數(shù)由于其函數(shù)較復(fù)雜, 在正向傳播過程中耗時較多. PReLU由于其引入了額外的參數(shù)進行訓(xùn)練, 在反向傳播過程中有較大的耗時. 雖然PReLU在實驗所用網(wǎng)絡(luò)中收斂速度很快, 但當(dāng)網(wǎng)絡(luò)越復(fù)雜時, 其耗時表現(xiàn)得越明顯.ReLU由于其函數(shù)計算簡單, 求導(dǎo)容易, 在耗時方面表現(xiàn)出了較好的性能. 再結(jié)合上面的分析, ReLU在訓(xùn)練過程中也能取得較好的準(zhǔn)確率, 這就是為什么ReLU在激活函數(shù)領(lǐng)域始終占據(jù)主導(dǎo)地位的原因之一.
圖9 激活函數(shù)forward/backward耗時統(tǒng)計圖
通過以上實驗對比可以看出, 激活函數(shù)對一個神經(jīng)網(wǎng)絡(luò)的重要程度, 小則影響網(wǎng)絡(luò)的收斂速度和測試精度, 嚴重則可能導(dǎo)致梯度消失, 使網(wǎng)絡(luò)無法訓(xùn)練. 近年, 不僅有創(chuàng)新性的激活函數(shù)推出, 許多改進的激活函數(shù)也取得了很好的效果. 面對眾多的成果, 如何做出恰當(dāng)?shù)倪x擇目前尚未有統(tǒng)一定論, 仍需依靠實驗指導(dǎo).
本文對深度神經(jīng)網(wǎng)絡(luò)的重要影響因素激活函數(shù)進行了深入研究, 并通過實驗分別用Tank、ReLU、PReLU、ELU代替原始網(wǎng)絡(luò)中的Sigmoid函數(shù), 取得了更好的結(jié)果. 然后通過表格對比方式對采用不同激活函數(shù)的網(wǎng)絡(luò)性能進行了比較. 激活函數(shù)的發(fā)展對深度神經(jīng)網(wǎng)絡(luò)的進一步應(yīng)用起著至關(guān)重要的作用, 其也會是深度神經(jīng)網(wǎng)絡(luò)研究中的重點.