神經網絡中梯度不穩定的根本原因:在於前層上的梯度的計算來自於後層上梯度的乘積(鏈式法則)。當層數很多時,就容易出現不穩定。下邊3個隱含層爲例:
其b1的梯度爲:
加入激活函數爲sigmoid,則其導數如下圖:
sigmoid導數σ'的最大值爲1/4。同常一個權值w的取值範圍爲abs(w) < 1,則:|wjσ'(zj)| < 1/4,從而有:
從上式可以得出結論:前層比後層的梯度變化更小,變化更慢,進而引起梯度消失的問題。相反,如果|wjσ'(zj)| > 1時,前層比後層的梯度變化更大,就引起梯度爆炸的問題。實際中,當使用sigmoid作爲激活函數時,更普遍的是梯度消失的問題。
在重複一遍,從根本上講無論是梯度消失還是梯度爆炸,其背後的原因是前層網絡的梯度是後層網絡的乘積,所以神經網絡不穩定。唯一可能的情況是以上連續乘積剛好平衡在1左右,但這種機率很小。
解決梯度消失的方法:
隱含層神經元的激活函數用Relu!