1. 什么是激活函數
如下圖,在神經元中,輸入inputs通過加權、求和后,還被作用了一個函數。這個函數就是激活函數Activation Function
2. 為什么要用激活函數
如果不用激活函數,每一層輸出都是上層輸入的線性函數,無論神經網路有多少層,輸出都是輸入的線性組合。與沒有隱藏層效果相當,這種情況就是最原始的感知機了。
使用的話,激活函數給神經元引入了非線性因素,使得神經網絡可以任意逼近任何非線性函數,這樣神經網絡就可以應用到眾多的非線性模型中。
3. 都有什么激活函數
(1)sigmoid函數
導數:
等式的證明也很簡單。sigmoid函數也叫Logistic函數,用於隱層神經元輸出,取值范圍為(0,1)
sigmoid缺點:
- 激活函數計算量大,反向傳播求誤差梯度使,求導涉及除法
- 反向傳播使,很容易就會出現梯度消失的情況,從而無法完成生成網絡的訓練
- sigmoid兩端飽和且容易kill掉梯度
- 收斂緩慢
為何出現梯度消失:
sigmoid原函數及導數圖如下圖所示:
由圖可知,導數從0開始很快又趨近於0,易造成"梯度消失"現象
(2)tanh函數(雙曲正切)
取值范圍[-1,1]。0均值,實際應用中tanh比sigmoid要好
(3)ReLU
公式:
輸入信號 < 0時,輸出都是0;輸入 > 0時,輸出等於輸入
1. ReLU更容易優化,因為其分段線性性質,導致其前傳、后傳、求導都是分段線性的。而傳統的sigmoid函數,由於兩端飽和,在傳播過程中容易丟失信息
2. ReLU會使一部分神經元輸出為0,造成了網絡的稀疏性,並且減少了參數的相互依存關系,緩解了過擬合。
3. 當然現在也有一些對ReLU的改進,比如lrelu、prelu,在不同的數據集上會有一些訓練速度上或者准確率上的改進。
4. 現在主流的做法,是在relu之后,加上一層batch normalization,盡可能保證每一層網絡的輸入具有相同的分布。
ReLU的缺點:
訓練的時候很"脆弱",很容易"die"
例如:一個非常大的梯度流過一個ReLU神經元,更新過參數之后,這個神經元再也不會對任何數據有激活現象了,那么這個神經元就永遠都會是0.
(4)softmax函數
Softmax-用於多分類神經網絡輸出
上圖所示,如果某個 zj 大過其他 z,那這個映射的分量就逼近於1,其他逼近於0,主要應用於多分類
為什么要取指數?
1. 模擬 max 的行為,讓大的更大
2. 需要一個可導函數