【算法】梯度消失与梯度爆炸
概念
梯度不穩定
在層數比較多的神經網絡模型的訓練過程中會出現梯度不穩定的問題。
損失函數計算的誤差通過梯度反向傳播的方式,指導深度網絡權值的更新優化。因為神經網絡的反向傳播算法是從輸出層到輸入層的逐層向前進行鏈式求導,前面層上的梯度是來自于后面層上梯度的乘積,當存在神經網絡層數過多時,就有可能出現了梯度不穩定場景。
梯度消失
在神經網絡反向傳播中,當梯度從后往前傳時,梯度不斷減小,最后變為零,此時,淺層的神經網絡權重得不到更新,那么前面隱藏層的學習速率低于后面隱藏層的學習速率,即隨著隱藏層數目的增加,分類準確率反而下降了。這種現象叫做梯度消失。
靠近輸入層的權值更新會變得很慢,導致靠近輸入層的隱藏層權值幾乎不變,接近于初始化的權值。這樣在網絡很深的時候,學習的速度很慢或者無法學習。
梯度爆炸
當權值過大,神經網絡前面層比后面層梯度變化更快,會引起梯度爆炸問題。梯度爆炸就是由于初始化權值過大,w大到乘以激活函數的導數都大于1,因為前面層比后面層變化的更快,就會導致神經網絡前面層的權值越來越大,梯度爆炸的現象就發生了。
梯度爆炸是一種與梯度消失相反的情況,當進行反向傳播時,梯度從后往前傳時,梯度不斷增大,導致權重更新太大,以致于不斷波動,使神經網絡在最優點之間波動。
舉個例子
梯度下降作為一種最常見的迭代式優化策略,應用在神經網絡的BP算法中,由于深度神經網絡層級太深,在求導的過程中,由于鏈式法則,可能會出現梯度消失和梯度爆炸現象,為了搞清楚為什么會出現這些情況,我們可以先從最簡單的單層神經網絡的求導過程著手,查看求導的結果。
這是由于反向傳播結果的數值大小不止取決于求導的式子,很大程度上也取決于輸入的模值。當計算圖每次輸入的模值都大于1,那么經過很多層回傳,梯度將不可避免地呈幾何倍數增長(每次都變成3~4倍,重復上萬次,想象一下310000有多大……),直到Nan。這就是梯度爆炸現象。
當然反過來,如果我們每個階段輸入的模恒小于1,那么梯度也將不可避免地呈幾何倍數下降(比如每次都變成原來的三分之一,重復一萬次就是3-10000),直到0。這就是梯度消失現象。
值得一提的是,由于人為的參數設置,梯度更傾向于消失而不是爆炸。
解決方法
- 使用 ReLU 激活函數可以減少梯度爆炸
- 計算速度快,但是由于負數部分恒為0,會導致一些神經元無法激活
- 計算速度快,但是由于負數部分恒為0,會導致一些神經元無法激活
- leakReLU,解決relu的0區間帶來的影響
- 其中k是leak系數,一般選擇0.01或者0.02,或者通過學習而來。
- 其中k是leak系數,一般選擇0.01或者0.02,或者通過學習而來。
- ELU
- 梯度剪切
其思想是設置一個梯度剪切閾值,然后更新梯度的時候,如果梯度超過這個閾值,那么就將其強制限制在這個范圍之內。這可以防止梯度爆炸。 - 批量歸一化
通過規范化操作將輸出信號x規范化到均值為0,方差為1保證網絡的穩定性,加速網絡收斂速度。
參考資料:https://www.zhihu.com/question/290392414
猜你喜歡:👇🏻
?【總結】一文了解所有的機器學習評價指標
?【總結】機器學習劃分數據集的幾種方法
?【算法】深度學習神經網絡都調哪些參數?
總結
以上是生活随笔為你收集整理的【算法】梯度消失与梯度爆炸的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab画一个电动机系统图,基于MA
- 下一篇: python命令窗口中怎么导入numpy