1. 程式人生 > >深度學習之激活函數、優化方法和正則化

深度學習之激活函數、優化方法和正則化

形式 unit 優勢 神經元 必須 vat 數值 line 利用

激活函數(activate function)在神經元中非常重要,為了增強網絡的表示能力和學習能力,激活函數需要具備以下幾點性質:

(1)連續並可導的非線性函數,以便於利用數值優化的方法來學習網絡參數。

(2)激活函數及其導數要盡可能簡單,以提高網絡計算的效率。

(3)激活函數的導函數的值域要在一個合適的區間內,否則會影響訓練的穩定性。

常見的激活函數有以下幾種:

1、Sigmoid激活函數

Sigmoid函數定義為:

技術分享圖片

Sigmoid函數可以把一個實數域的輸出壓縮到(0, 1)的區間上,當輸入值在0附近時,Sigmoid函數近似為線性函數;當輸入值靠近兩端時,對輸入值進行抑制,輸入越小,越接近於0,輸入越大,越接近於1。

和感知機的階躍函數相比,Sigmoid函數是連續可導的,其輸出值直接可以看做是概率分布,使得神經網絡可以更好地和統計學習模型結合。

2、Tanh激活函數

Tanh函數(雙曲正切函數)的定義為:

技術分享圖片Tanh函數可以看作是放大並平移的 Sigmoid函數,其值域是 (-1, 1)Tanh函數的輸出是零中心化的,Logistic函數的輸出恒大於 0。就在隱含層上的表現而言,Tanh函數的效果總是優於 Sigmoid 函數,因為Tanh函數值域在(-1,1)上,其均值更接近0均值,而非零中心化的Sigmoid函數,其輸出會使得後一層的神經元的輸入發生位置偏移,進一步使得梯度下降的收斂速度變慢。

技術分享圖片

Sigmoid函數和 Tanh 函數兩者共同的缺點是,在z特別大或者特別小的情況下,導數的梯度會變得特別小,最後就會接近於0(稱為兩端飽和問題),導致梯度下降的速度降低,而ReLU激活函數對這一點進行了修正。

3、ReLU激活函數

ReLU(Rectified Linear Unit ,修正線性單元)激活函數是目前深層神經網絡中常用的激活函數。ReLU激活函數的形狀類似於一個斜坡,只要x為正值,導數恒等於1,當x為負值時,導數恒等於0.

定義為:

技術分享圖片

ReLU激活函數的優點在於:

(1)采用ReLU的神經元只需要進行加、乘和比較的操作,相比Sigmoid函數和Tanh函數,在學習上更加高效。

(2)ReLU函數被認為具有生物上的解釋性,因為在生物神經網絡中,同時處於興奮狀態的神經元非常稀疏,人的大腦中在同一時刻大概只有1~4%的神經元處於活躍狀態,而ReLU的單邊抑制使其具有很好的稀疏性。相比之下,Sigmoid激活函數和Tanh激活函數會導致一個非稀疏的神經網絡。

(3)在優化方面,Sigmoid函數和Tanh函數的兩端飽和(即自變量趨於負無窮或正無窮時,導數值趨近於0),這會造成梯度彌散問題,而ReLU函數為左飽和函數,且在x>0時導數為1,在一定程度上緩解了神經網絡的梯度小的問題,加快了梯度下降的收斂速度。

但ReLU函數也有一個比較大的缺點,稱為死亡ReLU問題,意思是在訓練時,如果參數在一次不恰當的更新後,第一個隱藏層中的某個ReLU神經元在所有的訓練數據上都不能被激活,那麽這個神經元自身參數的梯度永遠為0,在以後的訓練過程中永遠不會被激活。

為了解決這個問題,其他ReLU函數的變種被提了出來,比如Leaky ReLU(帶泄露的ReLU)、帶參數的ReLU和ELU(指數線性單元)。

4、Leaky ReLU

Leaky ReLU(帶泄露的ReLU)在輸入x<0時,保持一個很小的梯度,這樣當神經元非激活時也能有一個非零的梯度可以更新參數,避免永遠不能被激活。

Leaky ReLU的函數形式為:

技術分享圖片

其中 γ 是一個很小的常數,比如 0.01 。γ < 1時,Leaky ReLU也可以寫為 :
技術分享圖片

5、Softplus 函數

Softplus函數可以看作是 rectifier函數的平滑版本,其定義為:

技術分享圖片

Softplus函數的導數恰好是Sigmoid函數。Softplus函數雖然類似於ReLU函數,具有單側抑制、寬興奮邊界的特性,卻沒有稀疏激活性。

技術分享圖片

6、如何選擇激活函數

Sigmoid 激活函數:如果是二分類問題,且輸出值為0、1,則輸出層選擇Sigmoid函數,然後其他所有單元都選擇ReLU函數或者Tanh函數。除了二分類問題外輸出層基本不會用它。

Tanh 激活函數:Tanh 函數非常優秀,幾乎適合所有場合。

ReLu 激活函數:最常用的激活函數,如果不確定用哪個激活函數,就使用 ReLU 或者Leaky ReLU。

7、激活函數必須為非線性函數?

神經網絡的激活函數必須使用非線性函數。為什麽不能使用線性函數呢?因為使用線性函數的話,加深神經網絡的層數就沒有意義了。線性函數的問題在於,不管怎麽加深層數,總是存在和它等效的無隱含層神經網絡,不如直接去掉全部隱含層。所以為了發揮疊加層所帶來的優勢,隱含層的激活函數必須使用非線性函數,唯一可以使用線性激活函數的通常就是輸出層。

參考資料:

1、邱錫鵬《神經網絡與深度學習》

2、吳恩達:《深度學習》

深度學習之激活函數、優化方法和正則化