bp演算法中為什麼會產生梯度消失?
簡單地說,根據鏈式法則,如果每一層神經元對上一層的輸出的偏導乘上權重結果都小於1的話( ),那麼即使這個結果是0.99,在經過足夠多層傳播之後,誤差對輸入層的偏導會趨於0( )。下面是數學推導推導。
假設網路輸出層中的第 個神經元輸出為,而要學習的目標為 。這裡的 表示時序,與輸入無關,可以理解為網路的第 層。
若採用平方誤差作為損失函數,第 個輸出神經元對應的損失為
將損失 對輸出求偏導
根據鏈式法則,我們知道,第 層的梯度可以根據第 層的梯度求出來
這裡用 表示第 層的第 個神經元, 表示第 層的第 個神經元。
進一步,第 層的梯度可以由第 層的梯度計算出來
這實際上是一個遞歸嵌套的式子,如果我們對 做進一步展開,可以得到式子
最終,可以一直展開到第 層。
把所有的加法都移到最外層,可以得到
表示的是第 層中神經元的下標(即第 層第 個神經元), 表示第 層的下標。 對應輸出層, 對應第 層。實際上展開式就是從網路的第 層到 層,每一層都取出一個神經元來進行排列組合的結果。這個式子並不準確,因為 時實際是損失 對輸出層的偏導,即
,
並沒有應用權重,把它修正一下
這樣,我們就得到了第 層和第 層的梯度之間的關係
在上面的式子中,由於加法項正負號之間可能互相抵消。因此,比值的量級主要受最後的乘法項影響。如果對於所有的 有
1.0" eeimg="1">則梯度會隨著反向傳播層數的增加而呈指數增長,導致梯度爆炸。
如果對於所有的 有
則在經過多層的傳播後,梯度會趨向於0,導致梯度消失。
LSTM就是為了解決以上兩個問題提出的方法之一,它強制令 。 LSTM如何來避免梯度彌撒和梯度爆炸? - 知乎
有興趣可以參考Long Short Term Memory 一文 。上面的推導過程大體上也參考自這篇論文。
Reference:
Graves, Alex. Long Short-Term Memory. Supervised Sequence Labelling with Recurrent Neural Networks. Springer Berlin Heidelberg, 2012:1735-1780.
主要是因為以前用sigmoid的時候,sigmoid中心部位和兩側的梯度差別太大,如果權重初始化得太大,激活值基本都在sigmoid兩側,兩側梯度幾乎為0,傳播幾層就沒有梯度了。
即使用很好的初始化演算法把激活值控制在一個合理範圍內,優化幾下有幾個神經元就又跑到兩側了,而一旦到兩側,因為梯度過小,就再也無法通過梯度更新來使其恢復。
這個問題在提出ReLU和有效的初始化方法(例如MSRA)後已經大概率解決。
後來又出了個Batch Normalization,不管優化多少層都跟淺層一樣,梯度消失問題基本可以認為徹底解決了。
別的答案都寫得很好,我就不說那麼複雜了,手機打不太方便,你算一算sigmoid函數的導數,x*(1-x)反向傳播的時候是一個鏈式偏導,本來你的神經元經過前向傳播sigmoid函數激活後就是一個0到1之間的數,現在還乘以1-x,兩個小數相稱,乘的多就趨於0了啊,那還有個鬼的梯度啊
我覺得這個取決於你用的activation function吧。比如說sigmoid
這篇文章寫的通俗易懂,如果看不懂公式推導可以只看解釋的部分。總的來說是因為激活函數的問題,造成每層乘以了最多0.25的乘積。同時也解釋了為什麼會梯度激增http://m.blog.csdn.net/article/details?id=52742773from=timeline
梯度消失指的是權重不再更新,直觀上看是從最後一層到第一層權重的更新越來越慢,直至不更新。本質原因是反向傳播的連乘效應,導致最後對權重的偏導接近於零。
網路層數太多是導致梯度消失或者梯度爆炸的直接原因, 使用S型激活函數(如:sigmoid函數,tanh函數)會導致梯度消失問題,初始權重設置太大會導致梯度爆炸
sigmoid你求下導數就知道了。 最大值為1/4。層數一深就自然而然vanish了。和saturation有關,但更大的原因還是因為不管在哪裡sigmoid導數都小於等於1/4。 tanh好一些,但依舊有類似問題。所以為什麼relu好,因為導數要麼0要麼1,gradient explode,clip就好,頂多收斂慢一些。而vanish就沒辦法了。
residual也是一個解決vanish比較好的辦法。 residual感覺是隨著訓練進行,有效depth在逐漸增加。推薦閱讀:
※一個沒有基礎的工科研究生如何學習神經網路?
※word2vec 相比之前的 Word Embedding 方法好在什麼地方?
※在使用relu的網路中,是否還存在梯度消失的問題?
※關於語音識別特徵提取該如何入門?
※詞向量,LDA,word2vec三者的關係是什麼?_?