深度學習——啟用函式Sigmoid/Tanh/ReLU
啟用函式(Activation Function)的特點:
- 非線性: 當啟用函式是線性的時候,一個兩層的神經網路就可以逼近基本上所有的函數了。
- 可微: 當優化方法是基於梯度的時候,這個性質是必須的。
- 單調性: 當啟用函式是單調的時候,單層網路能夠保證是凸函式。
- f(x)≈x: 當啟用函式滿足這個性質的時候,如果引數的初始化是random的很小的值,那麼神經網路的訓練將會很高效。
- 輸出值範圍: 當啟用函式輸出值是 有限 的時候,基於梯度的優化方法會更加 穩定,因為特徵的表示受有限權值的影響更顯著;當啟用函式的輸出是 無限 的時候,模型的訓練會更加高效,不過在這種情況小,一般需要更小的學習率。
啟用函式 Sigmoid/Tanh/ReLU
Sigmoid 的數學形式:
它能夠把輸入的連續實值“壓縮”到0和1之間。特別的,如果是非常大的負數,那麼輸出就是0;如果是非常大的正數,輸出就是1.
sigmoid 函式曾經被使用的很多,不過近年來,用它的人越來越少了。主要是因為它的一些 缺點:
- 當輸入非常大或者非常小的時候,這些神經元的梯度是接近於0的,從圖中可以看出梯度的趨勢。
- Sigmoid 的 輸出不是0均值,這會導致後一層的神經元將得到上一層輸出的非0均值的訊號作為輸入。
Tanh的數學形式:
tanh(x)=2sigmoid(2x)−1
Tanh是Sigmoid的變形,與 sigmoid 不同的是,tanh 是0均值的。因此,實際應用中,tanh 會比 sigmoid 更好。
ReLU的數學形式:
f(x)=max(0,x)很顯然,從圖左可以看出,輸入訊號<0時,輸出都是0,>0 的情況下,輸出等於輸入。
二維情況下,使用ReLU之後的效果如下:
ReLU 的優點:
- 使用 ReLU 得到的SGD的收斂速度會比 sigmoid/tanh 快很多(看右圖)。相比於 sigmoid/tanh,ReLU 只需要一個閾值就可以得到啟用值,而不用去算一大堆複雜的運算。
ReLU 的缺點: 訓練的時候很容易就”die”了。
如果這個情況發生了,那麼這個神經元的梯度就永遠都會是0。實際操作中,如果你的learning rate 很大,那麼很有可能你網路中的40%的神經元都”dead”了。
ReLU變體(Leaky-ReLU/P-ReLU/R-ReLU):
Leaky ReLU:
Leaky Relu是用來解決ReLU這個 “dead” 的問題的。與
ReLU 不同的是:
這裡的 α 是一個很小的常數。這樣,即修正了資料分佈,又保留了一些負軸的值,使得負軸資訊不會全部丟失。
關於Leaky ReLU 的效果,有說好的,也有說不好的。
Parametric ReLU:
對於 Leaky ReLU 中的α,通常都是通過先驗知識人工賦值的。
然而可以觀察到,損失函式對α的導數我們是可以求得的,可不可以將它作為一個引數進行訓練呢?
Kaiming He的論文《Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification》指出,不僅可以訓練,而且效果更好。
原文說使用了Parametric ReLU後,最終效果比不用提高了1.03%.
Randomized ReLU:
Randomized Leaky ReLU 是 leaky ReLU 的random 版本 (α 是random的)。在訓練過程中,
α 是從一個高斯分佈 U(l,u) 中 隨機出來的,然後在測試過程中進行修正。
選擇啟用函式的建議:
一般情況下,使用ReLU會比較好
1、使用 ReLU,就要注意設定 learning rate,不要讓網路訓練過程中出現很多 “dead” 神經元;
2、如果“dead”無法解決,可以嘗試 Leaky ReLU、PReLU 、RReLU等Relu變體來替代ReLU;
3、不建議使用 sigmoid,如果一定要使用,也可以用 tanh來替代。