神經網絡常用激活函數(未完成)

激活函數作用:

  • 做非線性映射
  • 如果使用線性激活函數或者沒有使用一個激活函數,那麼無論神經網絡有多少層一直在做的只是計算線性函數。事實證明如果在隱藏層用線性激活函數,在輸出層用sigmoid函數,那麼這個模型的複雜度和沒有任何隱藏層的標準Logistic迴歸是一樣的
  • 吳恩達說:不能在隱藏層用線性激活函數,可以用ReLU或者tanh或者leaky ReLU或者其他的非線性激活函數,唯一可以用線性激活函數的通常就是輸出層;會在隱層用線性函數的,除了一些特殊情況,比如與壓縮有關的,或者部分迴歸問題

 

激活函數的性質:

  • 可微(梯度下降)
  • 單調(保證單層網絡爲凸函數)
  • 輸出值的範圍:
    • 有限:基於GD的方法更穩定,因爲特徵的表示受有限權值的影響更顯著
    • 無限:訓練高效,需要小的學習率

 

神經網絡常用激活函數:

sigmoid

公式: 

導數:

反向傳播:

總結:

  • 輸出在 (0, 1) ,可以表示概率
  • 導數值域 (0 , 0.25) ,反向傳播梯度消失
  • 偏移現象:輸出不是0均值
  • 除了輸出層是一個二分類問題基本不會用它

 

tanh

  • 輸出在 (-1, 1) ,均值接近0
  • 導數值域 (0, 1),收斂比sigmoid快,但是反向傳播也可能產生梯度消失
  • 比較優秀,幾乎適合所有場合
  • 結果表明,如果在隱藏層上使用函數tanh,效果總是優於sigmoid函數

 

ReLU系列:(摘自:吳恩達)

  • 最常用的默認函數,如果不確定用哪個激活函數,就使用ReLu或者Leaky ReLu
  • 在區間變動很大的情況下,激活函數的導數或者激活函數的斜率都會遠大於0,在程序實現就是一個if-else語句,而sigmoid函數需要進行浮點四則運算,在實踐中,使用ReLu激活函數神經網絡通常會比使用sigmoid或者tanh激活函數學習的更快。
  • sigmoidtanh函數的導數在正負飽和區的梯度都會接近於0,這會造成梯度彌散,而ReluLeaky ReLu函數大於0部分都爲常數,不會產生梯度彌散現象。(同時應該注意到的是,Relu進入負半區的時候,梯度爲0,神經元此時不會訓練,產生所謂的稀疏性,而Leaky ReLu不會有這問題)

ReLU

  • 輸出大於等於0,導數爲 0 或 1
  • 分段線性函數
  • 有良好的數學性質,運算比sigmoid、tanh快,而且可以避免梯度消失或梯度爆炸
  • ReLU壞死:網絡中的神經元無法在正向傳播中起作用而永久死亡的現象
  • ReLU壞死和偏移會影響網絡的收斂性
  •  

leaky-ReLU

  • 這樣可以避免在x<0時,不能夠學習的情況:

  • 解決了ReLU的硬飽和問題(在x趨近於負無窮時,導數=0,導數無限接近於0是軟飽和)

P-ReLU:

帶參數的ReLU,認爲a也可以作爲參數學習

BP更新ai時,採用的是帶動量的更新方式:

上式的兩個係數分別是動量和學習率,ai被初始化爲0.25。

需要特別注意的是:更新ai時不施加權重衰減(L2正則化),因爲這會把ai很大程度上push到0。事實上,即使不加正則化,試驗中ai也很少有超過1的。

 

  • PReLU只增加了極少量的參數,也就意味着網絡的計算量以及過擬合的危險性都只增加了一點點。特別的,當不同channels使用相同的ai時,參數就更少了。

 

ELU

(a=0.7時)

  • 融合了ReLU和sigmoid,左側具有軟飽和性,右側線性部分可以緩解梯度消失,左側軟飽和對輸入變化或噪聲更魯棒
  • 輸出均值接近0,收斂快

 

Maxout

公式: 

  • 能夠近似任意連續函數
  • 當  爲0時,退化爲ReLU
  • 緩解梯度消失,避免ReLU壞死,增加了參數量和計算量

 

梯度消失/爆炸原因及解決辦法

原因,淺層的梯度計算需要後面各層的權重及激活函數導數的乘積,因此可能出現前層比後層的學習率小(vanishing gradient)或大(exploding)的問題,所以具有不穩定性.那麼如何解決呢?

需要考慮幾個方面:

  • 權重初始化
  • 使用合適的方式初始化權重, 如ReLU使用MSRA的初始化方式, tanh使用xavier初始化方式.
  • 只考慮輸入個數時,MSRA初始化是一個均值爲0方差爲根號2/n的高斯分佈:

  • 激活函數選擇
  • 激活函數要選擇ReLU等梯度累乘穩定的.
  • 學習率
  • 一種訓練優化方式是對輸入做白化操作(包括正規化和去相關), 目的是可以選擇更大的學習率. 現代深度學習網絡中常使用Batch Normalization(包括正規化步驟,但不含去相關). (All you need is a good init. If you can't find the good init, use Batch Normalization.)

梯度爆炸

由於sigmoid,ReLU等函數的梯度都在[0,1]以內,所以不會引發梯度爆炸問題。 而梯度爆炸需要採用梯度裁剪、BN、設置較小學習率等方式解決。

著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

原文: https://www.cnblogs.com/makefile/p/activation-function.html © 康行天下

著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

原文: https://www.cnblogs.com/makefile/p/activation-function.html © 康行天下

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章