1. 程式人生 > >啟用函式使用法則

啟用函式使用法則

sigmoid 、tanh 、ReLu

  • tanh 函式或者雙曲正切函式是總體上都優於 sigmoid 函式的啟用函式。

  • 基本已經不用 sigmoid 啟用函數了,tanh 函式在所有場合都優於 sigmoid 函式。
  • 但有一個例外:在二分類的問題中,對於輸出層,因為y的值是 0 或 1,所以想讓y值介於 0 和 1 之間,而不是在-1 和+1 之間。所以需要使用 sigmoid 啟用函式。
  • sigmoid 函式和 tanh 函式兩者共同的缺點是,在z特別大或者特別小的情況下,導數的梯度或者函式的斜率會變得特別小,最後就會接近於 0,導致降低梯度下降的速度。

這有一些選擇啟用函式的經驗法則:

  • 如果輸出是 0、1 值(二分類問題),則輸出層選擇 sigmoid 函式,然後其它的所有單元都選擇 Relu 函式。
  • 這是很多啟用函式的預設選擇,如果在隱藏層上不確定使用哪個啟用函式,那麼通常會使用 Relu 啟用函式。有時,也會使用 tanh 啟用函式,但 Relu 的一個優點是:當z是負值的時候,導數等於 0。

這裡也有另一個版本的 Relu 被稱為 Leaky Relu。

  • 當z是負值時,這個函式的值不是等於 0,而是輕微的傾斜,如圖。
  • 這個函式通常比 Relu 啟用函式效果要好,儘管在實際中 Leaky ReLu 使用的並不多。

兩者的優點是:

  • 第一,在z的區間變動很大的情況下,啟用函式的導數或者啟用函式的斜率都會遠大於0,在程式實現就是一個 if-else 語句,而 sigmoid 函式需要進行浮點四則運算,在實踐中,使用 ReLu 啟用函式神經網路通常會比使用 sigmoid 或者 tanh 啟用函式學習的更快。
  • 第二,sigmoid 和 tanh 函式的導數在正負飽和區的梯度都會接近於 0,這會造成梯度彌散,而 Relu 和 Leaky ReLu 函式大於 0 部分都為常熟,不會產生梯度彌散現象。(同時應該注意到的是,Relu 進入負半區的時候,梯度為 0,神經元此時不會訓練,產生所謂的稀疏性,而 Leaky ReLu 不會有這問題)
  • z在 ReLu 的梯度一半都是 0,但是,有足夠的隱藏層使得 z 值大於 0,所以對大多數的訓練資料來說學習過程仍然可以很快。

快速概括一下不同啟用函式的過程和結論。

  • sigmoid 啟用函式:除了輸出層是一個二分類問題基本不會用它。
  • tanh 啟用函式:tanh 是非常優秀的,幾乎適合所有場合。
  • ReLu 啟用函式:最常用的預設函式,,如果不確定用哪個啟用函式,就使用 ReLu 或者Leaky ReLu。

 

 

如果不確定哪一個啟用函式效果更好,可以把它們都試試,然後在驗證集或者發展集上進行評價。然後看哪一種表現的更好,就去使用它。

 

來源:吳恩達deeplearning筆記