啟用函式(sigmoid和ReLU)
阿新 • • 發佈:2020-10-22
啟用函式給神經元引入了非線性因素,如果不用啟用函式,神經網路每一層輸出都是上層輸入的線性函式,無論神經網路有多少層,輸出都是輸入的線性組合。
比如對於一個二分類問題:
如果用線性分類,那就只能按照下圖劃分:
如果可以非線性分類,那就可以按照下面的圖進行劃分:
啟用函式使得神經網路可以任意逼近任何非線性函式,這樣神經網路就可以應用到眾多的非線性模型中。
- sigmoid
sigmoid函式的定義為:
sigmoid函式的影象如下:
優點:sigmoid函式可以將實數對映到 [公式] 區間內。平滑、易於求導。
缺點:1. 啟用函式含有冪運算和除法,計算量大;2. 反向傳播時,很容易就會出現梯度消失的情況,從而無法完成深層網路的訓練;3. sigmoid的輸出不是0均值的,這會導致後一層的神經元將得到上一層輸出的非0均值的訊號作為輸入。
- ReLU
relu啟用函式的定義為:
relu啟用函式的影象為:
優點:1.計算量小;2.啟用函式導數維持在1,可以有效緩解梯度消失和梯度爆炸問題;3.使用Relu會使部分神經元為0,這樣就造成了網路的稀疏性,並且減少了引數之間的相互依賴關係,緩解了過擬合問題的發生。
缺點:輸入啟用函式值為負數的時候,會使得輸出為0,那麼這個神經元在後面的訓練迭代的梯度就永遠是0了(由反向傳播公式推導可得),引數w得不到更新,也就是這個神經元死掉了。這種情況在你將學習率設得較大時(網路訓練剛開始時)很容易發生(波浪線一不小心就拐到負數區域了,然後就拐不回來了)。
解決辦法:一些對Relu的改進,如ELU、PRelu、Leaky ReLU等,給負數區域一個很小的輸出,不讓其置0,從某種程度上避免了使部分神經元死掉的問題。