机器学习笔记:梯度消失
1 梯度消失
1.1 直觀理解
????????以sigmoid激活函數為例,如果我們使用sigmoid作為激活函數的話,很大的一個input的變化,經過了sigmoid之后的output變化會小很多。
? ? ? ?這樣經過很多層sigmoid之后,最后的輸出變化會很小很小。
?????????那么進行反向傳播的時候,最后的損失函數傳遞到約遠離輸出的地方,值越小,那這些遠離輸出地方的參數更新得也就越慢
1.2 從反向傳播的式子理解
??
?
????????紅框框住的是激活函數的導數,tanh和sigmoid的導數均小于1,這會導致訓練深模型的時候出問題。
?
?
?1.2.1 SVD分解
李宏毅線性代數筆記13:SVD分解_UQI-LIUWJ的博客-CSDN博客
令A表示激活函數,那么Ax就是經過激活函數之后的x?
我們需要比較||Ax||和||x||
根據SVD,我們有:?其中U和V是正交矩陣,奇異值σ1>σ2>...>σn>0
在李宏毅線性代數11: 正交(Orthogonality)_UQI-LIUWJ的博客-CSDN博客?中,我們說過,正交矩陣是norm-preserving的,所以
我們令||x||=c,假設A是滿秩的,我們有:
(正交基的線性組合)
?而?
所以
?
?而我們之前有了和
所以,即
等號成立當且僅當,即
?如果我們有很多個最大奇異值小于1的矩陣,那么最終的乘積會很小很小 ,這就導致了梯度消失
?而tanh和sigmoid正滿足這一特征,所以最終會導致梯度下降
1.3 RNN 中梯度消失帶來的問題
?很遠處的梯度會很小(直至消失),因此模型的參數只會根據最近的一些因素而更新
——>我們就不知道遠處的元素對當前權重沒有影響,究竟是因為距離太遠了還是真的沒有關聯
2 幾種梯度消失的解決方法
- 不同的激活函數,使得梯度=1
- 使用類似于Adam這樣的優化函數,自適應地放縮梯度
- RNN中的LSTM等
比如下面這個例子,如果因為梯度消失的話,那么這個be動詞就會受books的影響更大,導致最終會輸出'are'而不是'is'?
?3 梯度爆炸
在前面,我們有:
所以從另一個角度講,也有?
?如果那么多個A相乘得到的結果將會很大很大,這就導致了梯度爆炸?
——>會導致網絡中出現Inf或者NaN
3.1 解決方法
使用gradient clipping (截取)
如果梯度過大,那么截取之?
?
總結
以上是生活随笔為你收集整理的机器学习笔记:梯度消失的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习笔记:反向传播
- 下一篇: 机器学习笔记:交叉验证