梯度弥散与梯度爆炸及其解决方法
? ? ??梯度彌散(梯度消失): 通常神經網絡所用的激活函數是sigmoid函數,sigmod函數容易引起梯度彌散。這個函數能將負無窮到正無窮的數映射到0和1之間,并且對這個函數求導的結果是f′(x)=f(x)(1?f(x))f′(x)=f(x)(1?f(x))表示兩個0到1之間的數相乘,得到的結果就會變得很小了。神經網絡的反向傳播是逐層對函數偏導相乘,因此當神經網絡層數非常深的時候,最后一層產生的偏差就因為乘了很多的小于1的數而越來越小,最終就會變為0,從而導致層數比較淺的權重沒有更新,這就是梯度消失。
? ? ?梯度爆炸:就是由于初始化權值過大,前面層會比后面層變化的更快,就會導致權值越來越大,梯度爆炸的現象就發生了。
? ? ?反向傳播基于的是鏈式求導法則。如果導數小于1,那么隨著層數的增多,梯度的更新量會以指數形式衰減,結果就是越靠近輸出層的網絡層參數更新比較正常,而靠近輸入層的網絡層參數可能基本就不更新。這就是梯度消失。而如果導數值大于1,那么由于鏈式法則的連乘,梯度更新量是會成指數級增長的。這就是梯度爆炸。
?
轉載:詳解機器學習中的梯度消失、爆炸原因及其解決方法
引用:https://blog.csdn.net/qq_25737169/article/details/78847691
梯度消失、爆炸的解決方案
方案1-預訓練加微調
? ? ? ?此方法來自Hinton在2006年發表的一篇論文,Hinton為了解決梯度的問題,提出采取無監督逐層訓練方法,其基本思想是每次訓練一層隱節點,訓練時將上一層隱節點的輸出作為輸入,而本層隱節點的輸出作為下一層隱節點的輸入,此過程就是逐層“預訓練”(pre-training);在預訓練完成后,再對整個網絡進行“微調”(fine-tunning)。Hinton在訓練深度信念網絡(Deep Belief Networks中,使用了這個方法,在各層預訓練完成后,再利用BP算法對整個網絡進行訓練。此思想相當于是先尋找局部最優,然后整合起來尋找全局最優,此方法有一定的好處,但是目前應用的不是很多了。
方案2 梯度剪切、正則
? ? ? 梯度剪切這個方案主要是針對梯度爆炸提出的,其思想是設置一個梯度剪切閾值,然后更新梯度的時候,如果梯度超過這個閾值,那么就將其強制限制在這個范圍之內。這可以防止梯度爆炸。
另外一種解決梯度爆炸的手段是采用權重正則化(weithts regularization)比較常見的是l1 l1l1正則,和l2 l2l2正則,在各個深度框架中都有相應的API可以使用正則化,比如在tensorflow tensorflowtensorflow中,若搭建網絡的時候已經設置了正則化參數,
方案3? relu、leakrelu、elu等激活函數
方案4? batchnorm
Batchnorm是深度學習發展以來提出的最重要的成果之一了,目前已經被廣泛的應用到了各大網絡中,具有加速網絡收斂速度,提升訓練穩定性的效果,Batchnorm本質上是解決反向傳播過程中的梯度問題。
batchnorm全名是batchnormalization,簡稱BN,即批規范化,通過規范化操作將輸出信號x規范化保證網絡的穩定性。
具體的batchnorm原理非常復雜,在這里不做詳細展開
http://blog.csdn.net/qq_25737169/article/details/79048516
方案5? 殘差網絡
? ? ? 論文:Deep Residual Learning for Image Recognition
? ? ? 關于這篇論文的解讀可以參考知乎鏈接:https://zhuanlan.zhihu.com/p/31852747
?
?
總結
以上是生活随笔為你收集整理的梯度弥散与梯度爆炸及其解决方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python3 queue队列类
- 下一篇: 微信秘钥问题