
一、前言
前段時間通過引入新的激活函數Dice,帶來了名額的提升,借着這個機會,今天總結下常用的一些激活函數。
激活函數在深度學習中起着非常重要的作用,本文主要介紹下常用的激活函數及其優缺點。主要分為以下幾個部分:
- 引入激活函數的目的
- sigmoid激活函數帶來的梯度消失和爆炸問題
- 常用激活函數對比
關于之前Dice激活函數的實作,可以參見下面的連結:
絕密伏擊:深度學習中Batch Normalization和Dice激活函數zhuanlan.zhihu.com
二、引入激活函數的目的
圖1:帶一層隐藏層的神經網絡
先看一個隻含一層隐藏層的神經網絡,如圖1所示。輸入為
條樣本
,隐藏層
的權重和偏置分别為
,
,輸出層
的權重和偏置分别為
,
。輸出層的計算為:
将(1),(2)聯合起來可得:
從(3)可以看出,
雖然加入了隐藏層,但是還是等效于單層的神經網絡:權重為
,偏置為
上述的根本原因在于全連接配接隻是對資料做
仿射變換,而多個仿射變換的疊加仍然是一個放射變換。是以有必要引入非線性變換,這個非線性變換就是今天要講的
激活函數。
三、sigmoid激活函數帶來的梯度消失和爆炸問題
為了解決前面的問題,後來提出了sigmoid激活函數。sigmoid函數可以将元素的值變換到0和1之間,定義如下:
圖2:sigmoid激活函數
sigmoid激活函數的導數為:
sigmoid激活函數雖然增強了模型的非線性表達能力,但是卻帶來了梯度消失和爆炸的問題,下面具體分析下是如何導緻的。
3.1 sigmoid可能帶來的梯度消失
圖3:多層神經網絡示意圖
圖3是一個多層的神經網絡,假設其損失函數為
,前一層
和後一層
的關系可以表示如下:
其中
,則反向傳播計算
的梯度為:
從(8)可以看出,
梯度的計算依賴
,
的計算方式如下:
根據公式(5)可知
,而網絡權重一般會進行标準化,是以
通常會小于1,進而
,是以:
從公式(10)可以看出,
随着反向傳播鍊式求導,層數越多最後的梯度越小,最終導緻梯度消失。
3.2 sigmoid可能帶來的梯度爆炸
3.1節讨論了sigmoid可能會帶來梯度消失,那麼會不會導緻梯度爆炸呢?這個還是有可能的,如果
,即權重參數
比較大的時候,就會出現梯度爆炸。那麼這個可能性到底有多大,下面具體分析下。
備注:為了便于表示,後面的因為
,是以必須
,才可能出現
。由
可得出
的取值範圍為:
由于
,故公式(11)可以變換為:
是以
的數值變化範圍為公式(12)中的右邊-左邊,即:
圖4:梯度爆炸x的數值範圍
圖4顯示了公式(13)中的
數值範圍随
的變化,可以看到
的最大數值範圍也僅僅為0.45,
是以僅僅在很窄的範圍内才可能出現梯度爆炸。
根據3.1和3.2節,可以得出以下結論:
- sigmoid激活函數在深層神經網絡中極大機率會引起梯度消失
- sigmoid激活函數很小的機率會出現梯度爆炸
由于sigmoid的局限性,是以後來很多人又提出了一些改進的激活函數,比如:ReLU,Leaky-ReLU,PReLU,Dice,RReLU等。後面具體介紹下幾個激活函數的差別。
四、常用激活函數對比
4.1 ReLU
ReLU是Krizhevsky、Hinton等人在2012年
《ImageNet Classification with Deep Convolutional Neural Networks》論文中提出的一種激活函數,可以用來解決梯度消失的問題,其定義如下:
圖5:ReLU激活函數
從公式(14)可以看出ReLU在正區間的導數為1,是以不會發生梯度消失。關于ReLU的缺點,可以參見下面的描述:
神經網絡在訓練的時候,一旦學習率沒有設定好,第一次更新權重的時候,輸入是負值,那麼這個含有ReLU的神經節點就會死亡,再也不會被激活。因為:ReLU的導數在的時候是1,在![]()
sigmoid函數_深度學習中激活函數總結 的時候是0。如果![]()
sigmoid函數_深度學習中激活函數總結 ![]()
sigmoid函數_深度學習中激活函數總結 ,那麼ReLU的輸出是0,那麼反向傳播中梯度也是0,權重就不會被更新,導緻神經元不再學習。
在實際訓練中,如果學習率設定的太高,可能會發現網絡中40%的神經元都會死掉,且在整個訓練集中這些神經元都不會被激活。是以,設定一個合适的較小的學習率,會降低這種情況的發生。為了解決神經元節點死亡的情況,有人提出了Leaky-ReLU,PReLu,RReLU,ELU等激活函數。
總結一下ReLU的優缺點。
優點:
- ReLU解決了梯度消失的問題
- 由于ReLU線性特點,神經網絡的計算和訓練比sigmoid快很多
缺點:
- ReLU可能會導緻神經元死亡,權重無法更新。
4.2 Leaky-ReLU
Leaky-ReLU是Andrew L. Maas等人在2013年
《Rectifier Nonlinearities Improve Neural Network Acoustic Models(Leaky ReLU)》論文中提出的一種激活函數。由于ReLU将所有負數部分的值設為0,進而造成神經元的死亡。而Leaky-ReLU是對負值給與一個非零的斜率,進而避免神經元死亡的情況。Leaky-ReLU定義如下:
圖6:Leaky-ReLU激活函數
Leaky-ReLU很好的解決了ReLU中神經元死亡的問題。因為Leaky-ReLU保留了
時的梯度,在
時,不會出現神經元死亡的問題。總結一下Leaky-ReLU的優缺點。
優點:
- Leaky-ReLU解決了ReLU中神經元死亡的問題
- 由于Leaky-ReLU線性特點,神經網絡的計算和訓練比sigmoid快很多
缺點:
- Leaky-ReLU中的超參 需要人工調整
sigmoid函數_深度學習中激活函數總結
4.3 PReLU
PReLU是Kaiming He等人在2015年《
Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification》論文中提出的激活函數。和Leaky-ReLU相比,将
變成可訓練的參數,不再依賴于人工調整。PReLU的定義如下:
其中
是可訓練的參數。
4.4 Dice
Dice是Guorui Zhou等人在2018年《
Deep Interest Network for Click-Through Rate Prediction》論文中提出的激活函數。
Dice是對PRelu做了平滑,使得拐點不再是固定的0,而是依賴于資料的分布,定義如下:
圖7:Dice激活函數和PReLU的對比
4.5 RReLU
RReLU(Randomized Leaky ReLU)的首次提出是在Kaggle比賽NDSB中,也是Leaky-ReLU的一個變體。RReLU在訓練的過程中,
是從均勻分布
中随機選取的,RReLU在訓練過程中的定義如下:
其中:
公式(18)中的
表示第
個樣本的第
維輸入。
圖8:RReLU激活函數
在測試階段,
取值為訓練階段所有
的平均值,即:
。NDSB競賽冠軍設定的均勻分布為:
Bing Xu等人在2015年《
Empirical Evaluation of Rectified Activations in Convolution Network》文章中關于ReLU,Leaky ReLU,PReLU,RReLU效果進行了詳細的對比,可以參考下面的連結:
https://arxiv.org/pdf/1505.00853.pdfarxiv.org
五、總結
從最初的sigmoid到後面的Leaky ReLU、PReLU,再到近期的SELUs、GELUs,激活函數的改進從來沒有中斷過。激活函數不僅解決了深層神經網絡的梯度消失和爆炸問題,同時對于模型的拟合能力和收斂速度起着至關重要的重用。是以了解激活函數的相關原理還是非常有必要的。
六、Reference
- https://ziyubiti.github.io/2016/11/06/gradvanish/
- 神經網絡梯度消失和梯度爆炸及解決辦法
- https://zhuanlan.zhihu.com/p/25631496
- 梯度消失和ReLU - heixialee - 部落格園