天天看點

sigmoid函數_深度學習中激活函數總結

sigmoid函數_深度學習中激活函數總結

一、前言

前段時間通過引入新的激活函數Dice,帶來了名額的提升,借着這個機會,今天總結下常用的一些激活函數。

激活函數在深度學習中起着非常重要的作用,本文主要介紹下常用的激活函數及其優缺點。主要分為以下幾個部分:

  1. 引入激活函數的目的
  2. sigmoid激活函數帶來的梯度消失和爆炸問題
  3. 常用激活函數對比
擴充:

關于之前Dice激活函數的實作,可以參見下面的連結:

絕密伏擊:深度學習中Batch Normalization和Dice激活函數​zhuanlan.zhihu.com

sigmoid函數_深度學習中激活函數總結

二、引入激活函數的目的

sigmoid函數_深度學習中激活函數總結

圖1:帶一層隐藏層的神經網絡

先看一個隻含一層隐藏層的神經網絡,如圖1所示。輸入為

sigmoid函數_深度學習中激活函數總結

條樣本

sigmoid函數_深度學習中激活函數總結

,隐藏層

sigmoid函數_深度學習中激活函數總結

的權重和偏置分别為

sigmoid函數_深度學習中激活函數總結

sigmoid函數_深度學習中激活函數總結

,輸出層

sigmoid函數_深度學習中激活函數總結

的權重和偏置分别為

sigmoid函數_深度學習中激活函數總結

sigmoid函數_深度學習中激活函數總結

。輸出層的計算為:

sigmoid函數_深度學習中激活函數總結
sigmoid函數_深度學習中激活函數總結

将(1),(2)聯合起來可得:

sigmoid函數_深度學習中激活函數總結

從(3)可以看出,

雖然加入了隐藏層,但是還是等效于單層的神經網絡

:權重為

sigmoid函數_深度學習中激活函數總結

,偏置為

sigmoid函數_深度學習中激活函數總結

上述的根本原因在于全連接配接隻是對資料做

仿射變換

,而多個仿射變換的疊加仍然是一個放射變換。是以有必要引入非線性變換,這個非線性變換就是今天要講的

激活函數

三、sigmoid激活函數帶來的梯度消失和爆炸問題

為了解決前面的問題,後來提出了sigmoid激活函數。sigmoid函數可以将元素的值變換到0和1之間,定義如下:

sigmoid函數_深度學習中激活函數總結
sigmoid函數_深度學習中激活函數總結

圖2:sigmoid激活函數

sigmoid激活函數的導數為:

sigmoid函數_深度學習中激活函數總結

sigmoid激活函數雖然增強了模型的非線性表達能力,但是卻帶來了梯度消失和爆炸的問題,下面具體分析下是如何導緻的。

3.1 sigmoid可能帶來的梯度消失

sigmoid函數_深度學習中激活函數總結

圖3:多層神經網絡示意圖

圖3是一個多層的神經網絡,假設其損失函數為

sigmoid函數_深度學習中激活函數總結

,前一層

sigmoid函數_深度學習中激活函數總結

和後一層

sigmoid函數_深度學習中激活函數總結

的關系可以表示如下:

sigmoid函數_深度學習中激活函數總結
sigmoid函數_深度學習中激活函數總結

其中

sigmoid函數_深度學習中激活函數總結

,則反向傳播計算

sigmoid函數_深度學習中激活函數總結

的梯度為:

sigmoid函數_深度學習中激活函數總結

從(8)可以看出,

sigmoid函數_深度學習中激活函數總結

梯度的計算依賴

sigmoid函數_深度學習中激活函數總結

sigmoid函數_深度學習中激活函數總結

的計算方式如下:

sigmoid函數_深度學習中激活函數總結

根據公式(5)可知

sigmoid函數_深度學習中激活函數總結

,而網絡權重一般會進行标準化,是以

sigmoid函數_深度學習中激活函數總結

通常會小于1,進而

sigmoid函數_深度學習中激活函數總結

,是以:

sigmoid函數_深度學習中激活函數總結

從公式(10)可以看出,

随着反向傳播鍊式求導,層數越多最後的梯度越小,最終導緻梯度消失

3.2 sigmoid可能帶來的梯度爆炸

3.1節讨論了sigmoid可能會帶來梯度消失,那麼會不會導緻梯度爆炸呢?這個還是有可能的,如果

sigmoid函數_深度學習中激活函數總結

,即權重參數

sigmoid函數_深度學習中激活函數總結

比較大的時候,就會出現梯度爆炸。那麼這個可能性到底有多大,下面具體分析下。

備注:為了便于表示,後面的
sigmoid函數_深度學習中激活函數總結
都取其中的一個元素,并簡記為
sigmoid函數_深度學習中激活函數總結

因為

sigmoid函數_深度學習中激活函數總結

,是以必須

sigmoid函數_深度學習中激活函數總結

,才可能出現

sigmoid函數_深度學習中激活函數總結

。由

sigmoid函數_深度學習中激活函數總結

可得出

sigmoid函數_深度學習中激活函數總結

的取值範圍為:

sigmoid函數_深度學習中激活函數總結

由于

sigmoid函數_深度學習中激活函數總結

,故公式(11)可以變換為:

sigmoid函數_深度學習中激活函數總結

是以

sigmoid函數_深度學習中激活函數總結

的數值變化範圍為公式(12)中的右邊-左邊,即:

sigmoid函數_深度學習中激活函數總結
sigmoid函數_深度學習中激活函數總結

圖4:梯度爆炸x的數值範圍

圖4顯示了公式(13)中的

sigmoid函數_深度學習中激活函數總結

數值範圍随

sigmoid函數_深度學習中激活函數總結

的變化,可以看到

sigmoid函數_深度學習中激活函數總結

的最大數值範圍也僅僅為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》

論文中提出的一種激活函數,可以用來解決梯度消失的問題,其定義如下:

sigmoid函數_深度學習中激活函數總結
sigmoid函數_深度學習中激活函數總結

圖5:ReLU激活函數

從公式(14)可以看出ReLU在正區間的導數為1,是以不會發生梯度消失。關于ReLU的缺點,可以參見下面的描述:

神經網絡在訓練的時候,一旦學習率沒有設定好,第一次更新權重的時候,輸入是負值,那麼這個含有ReLU的神經節點就會死亡,再也不會被激活。因為:ReLU的導數在
sigmoid函數_深度學習中激活函數總結
的時候是1,在
sigmoid函數_深度學習中激活函數總結
的時候是0。如果
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定義如下:

sigmoid函數_深度學習中激活函數總結
sigmoid函數_深度學習中激活函數總結

圖6:Leaky-ReLU激活函數

Leaky-ReLU很好的解決了ReLU中神經元死亡的問題。因為Leaky-ReLU保留了

sigmoid函數_深度學習中激活函數總結

時的梯度,在

sigmoid函數_深度學習中激活函數總結

時,不會出現神經元死亡的問題。總結一下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相比,将

sigmoid函數_深度學習中激活函數總結

變成可訓練的參數,不再依賴于人工調整。PReLU的定義如下:

sigmoid函數_深度學習中激活函數總結

其中

sigmoid函數_深度學習中激活函數總結

是可訓練的參數。

4.4 Dice

Dice是Guorui Zhou等人在2018年《

Deep Interest Network for Click-Through Rate Prediction

》論文中提出的激活函數。

Dice是對PRelu做了平滑,使得拐點不再是固定的0,而是依賴于資料的分布

,定義如下:

sigmoid函數_深度學習中激活函數總結
sigmoid函數_深度學習中激活函數總結

圖7:Dice激活函數和PReLU的對比

4.5 RReLU

RReLU(Randomized Leaky ReLU)的首次提出是在Kaggle比賽NDSB中,也是Leaky-ReLU的一個變體。RReLU在訓練的過程中,

sigmoid函數_深度學習中激活函數總結

是從均勻分布

sigmoid函數_深度學習中激活函數總結

中随機選取的,RReLU在訓練過程中的定義如下:

sigmoid函數_深度學習中激活函數總結

其中:

sigmoid函數_深度學習中激活函數總結

公式(18)中的

sigmoid函數_深度學習中激活函數總結

表示第

sigmoid函數_深度學習中激活函數總結

個樣本的第

sigmoid函數_深度學習中激活函數總結

維輸入。

sigmoid函數_深度學習中激活函數總結

圖8:RReLU激活函數

在測試階段,

sigmoid函數_深度學習中激活函數總結

取值為訓練階段所有

sigmoid函數_深度學習中激活函數總結

的平均值,即:

sigmoid函數_深度學習中激活函數總結

。NDSB競賽冠軍設定的均勻分布為:

sigmoid函數_深度學習中激活函數總結
擴充:

Bing Xu等人在2015年《

Empirical Evaluation of Rectified Activations in Convolution Network

》文章中關于ReLU,Leaky ReLU,PReLU,RReLU效果進行了詳細的對比,可以參考下面的連結:

https://arxiv.org/pdf/1505.00853.pdf​arxiv.org

五、總結

從最初的sigmoid到後面的Leaky ReLU、PReLU,再到近期的SELUs、GELUs,激活函數的改進從來沒有中斷過。激活函數不僅解決了深層神經網絡的梯度消失和爆炸問題,同時對于模型的拟合能力和收斂速度起着至關重要的重用。是以了解激活函數的相關原理還是非常有必要的。

六、Reference

  1. https://ziyubiti.github.io/2016/11/06/gradvanish/
  2. 神經網絡梯度消失和梯度爆炸及解決辦法
  3. https://zhuanlan.zhihu.com/p/25631496
  4. 梯度消失和ReLU - heixialee - 部落格園

繼續閱讀