【NLP複習】常用激活函數的比較

一、啥是激活函數?爲啥用激活函數?常用的有哪些?

  • 啥是激活函數?激活函數是上層節點的輸出下層節點的輸入之間的一個非線性函數關係
  • 爲啥用激活函數?要是不用激活函數,不管多少層的神經網絡說白了都是些線性變換的疊加,網絡的逼近能力有限,所以引入非線性函數。
  • 常用的有哪些?早期:sigmoid、tanh;近期:Relu及其改進(Leaky-ReLU、P-ReLU、R-ReLU...)、Maxout

二、Sigmoid函數

  • Sigmoid公式、求導、圖像:
  • Sigmoid的導數的圖像:
  • 缺點:x較大時,導數接近0,導致參數長時間得不到更新。因此除了輸出層是一個二分類問題,其他基本不用它。
  • pytorch:torch.sigmoid()

三、Tanh函數(雙曲正切)

  • tanh公式、求導、圖像:
  • tanh導數圖像:
  • 優缺點:解決了Sigmoid函數的不是zero-centered輸出問題(y軸方向均值爲0),然而仍有梯度消失(gradient vanishing)的問題和冪運算耗時的問題。
  • pytorch:torch.tanh()

四、relu函數

  • relu公式、求導、圖像
  • relu導數圖像
  • relu優點:
    • 正區間解決了梯度彌散(梯度消失)
    • 計算速度非常快,只需要判斷輸入是否大於0
    • 收斂速度遠快於sigmoid和tanh
  • relu缺點:
    • ReLU的輸出不是zero-centered
    • Dead ReLU Problem,指的是某些神經元可能永遠不會被激活,導致相應的參數永遠不能被更新,原因:
      • 非常不幸的參數初始化,這種情況比較少見
      • learning rate太高導致在訓練過程中參數更新太大,不幸使網絡進入這種狀態。解決方法是可以採用Xavier初始化方法,以及避免將learning rate設置太大或使用adagrad等自動調節learning rate的算法。

五、其他激活函數

  • Leaky ReLU函數(PReLU):

    •  

      優缺點:不會有Dead ReLU問題,但性能還沒證明比relu好

  • ELU (Exponential Linear Units) 函數:

    • 優缺點:沒有Dead ReLU問題;輸出的均值接近0;zero-centered。但性能也不一定比relu好

  • MaxOut函數

    • maxout相當於一層神經網絡,對於輸入特徵 X=(x1,x2,……xd),其函數如下:

      • 權重w是一個大小爲(d,m,k)三維矩陣,b是一個大小爲(m,k)的二維矩陣,這兩個就是我們需要學習的參數。如果我們設定參數k=1,這時網絡就類似於普通的MLP網絡。

    • 參考經驗:

      • 最好不用sigmoid,不如tanh,更不如ReLU 和 Maxout

      • 儘量使用zero-centered數據 (可以經過數據預處理實現) 和zero-centered輸出。所以要儘量選擇輸出具有zero-centered特點的激活函數以加快模型的收斂速度。

      • 如果使用 ReLU,那麼一定要小心設置 learning rate,而且要注意不要讓網絡出現很多 “dead” 神經元,如果這個問題不好解決,那麼可以試試 Leaky ReLU、PReLU 或者 Maxout.

【參考資料】

 

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