神經網絡常用激活函數

激活函數作用:

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

 

激活函數的性質:

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

 

神經網絡常用激活函數:

sigmoid

公式:\delta(z) = 

導數:

反向傳播:

總結:

  • 輸出在 (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

  • 解決了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

公式: f(x) = max((w_1^Tx + b_1),(w_2^Tx+b_2),...,(w_n^Tx+b_n))

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

 

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