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