神經網路中常用的激活函數的說明
1 為什麼要使用激活函數
如果不用激勵函數(其實相當於激勵函數是f(x) = x),在這種情況下你每一層輸出都是上層輸入的線性函數,很容易驗證,無論你神經網路有多少層,輸出都是輸入的線性組合,與沒有隱藏層效果相當,這種情況就是最原始的感知機(Perceptron)了。 正因為上面的原因,我們決定引入非線性函數作為激勵函數,這樣深層神經網路就有意義了(不再是輸入的線性組合,可以逼近任意函數)。
2常見的幾個激活函數以及說明
2.1 sigmoid函數
Sigmoid函數的表達式y=1/(1+e^(-x))函數曲線如下圖所示
從數學上來看,Sigmoid函數對中央區的信號增益較大,對兩側區的信號增益小
2.2 tanh函數
y=(e^x-e^(-x))/(e^x+e^-x)也屬於S型函數,是0均值,其函數曲線與Sigmoid函數相似,下圖是兩者的比較
具體應用中,tanh函數比sigmoid函數更好,其實從數學角度,你可以看到
,更一般的我們可以證明
在x軸上任意一點,都有:
所以,當處理big data時,雙曲正切的導數的絕對值>sigmoid導數的絕對值導致tanh函數更容易找到局部或者全局最優點(下降速度快)換句話說,如果你用tanh函數作為激活函數,能更快使你的損失函數收斂到局部或者全局最小值。其次,兩者的導數範圍不一樣,sigmoid的導數取值範圍是
而tanh函數導數的取值範圍是
tanh函數導數的取值範圍更大
3 relu函數
relu函數的全稱是:Rectified Linear Units,公式是
函數圖像如下
相比於 sigmoid/tanh,ReLU 只需要一個閾值就可以得到激活值,而不用去算一大堆複雜的運算。
二維情況下,使用relu之後的效果
為什麼relu不會造成梯度彌散(梯度消失)
什麼叫梯度彌散:具體來說就是當使用反向傳播方法計算導數的時候,隨著網路的深度的增加,反向傳播的梯度(從輸出層到網路的最初幾層)的幅度值會急劇地減小。結果就造成了整體的損失函數相對於最初幾層的權重的導數非常小。這樣,當使用梯度下降法的時候,最初幾層的權重變化非常緩慢,以至於它們不能夠從樣本中進行有效的學習。這種問題通常被稱為「梯度的彌散」
relu的導數圖形如下
下面解釋為什麼Relu不會造成梯度彌散(摘自知乎)
S型函數(如sigmoid函數,tanh函數)在正負飽和區的梯度都接近於0,所以這會造成梯度彌散,而relu函數在大於0的部分梯度為常數,所以不會產生梯度彌散現象
其次:relu函數具有稀疏激活性(原因)
隨著訓練的推進,部分輸入會落入x
relu導數計算更快
參考文獻:[1]https://www.zhihu.com/question/52020211
[2]https://stats.stackexchange.com/questions/330559/why-is-tanh-almost-always-better-than-sigmoid-as-an-activation-function
tanhx=2σ(2x)?1
![](https://pic.pimg.tw/zzuyanan/1488615166-1259157397.png)
![](https://pic.pimg.tw/zzuyanan/1482887990-2595557020.jpg)
TAG:馬小白成長記 |