為什麼會有梯度爆炸和梯度消失?

2021-03-02 機器學習算法與自然語言處理

點擊上方「MLNLP」,選擇「星標」公眾號

重磅乾貨,第一時間送達

來自 | 知乎

地址 | https://www.zhihu.com/question/290392414/answer/951298995

編輯 | 機器學習算法與自然語言處理

本文僅作學術分享,若侵權,請聯繫後臺刪文處理

https://www.zhihu.com/question/290392414/answer/951298995

梯度下降作為一種最常見的迭代式優化策略,應用在神經網絡的BP算法中,由於深度神經網絡層級太深,在求導的過程中,由於鏈式法則,可能會出現梯度消失和梯度爆炸現象,為了搞清楚為什麼會出現這些情況,我們可以先從最簡單的單層神經網絡的求導過程著手,查看求導的結果。

正向傳播的公式如下:

(1)

(2)

損失函數使用均方差形式:

(3)

對x1,w1,x2,w2進行求導,為了更加清晰,我們遵循鏈式法則,一步一步進行求導:

(4)

(5)

(6)

(7)

(8)

(9)

經過上述求導,我們得到輸入x和權重w的梯度如下:

(10)

(11)

從上述式子我們知道 是sigmoid激活函數的求導,它的範圍在(0,1)之間, 和 範圍不確定,那麼在多層神經網絡中向上遊傳遞的梯度可能在(0,1)之間,如果層層之間的梯度均在(0,1)之間,層層縮小,那麼就會出現梯度消失。反之,如果層層傳遞的梯度大於1,那麼經過層層擴大,就會出現梯度爆炸,可見梯度的消失與爆炸與激活函數沒有特別大的關係,反而和權重有較大關係,因此權重的初始化對神經網絡的訓練很重要。

總之它的產生主要是由於鏈式法則的求導,梯度層層縮放導致的,因為神經網絡的不只有激活函數的作用,還有權重與神經元的相互作用。

https://www.zhihu.com/question/290392414/answer/940509039

讀論文不認真的後果……梯度消失/爆炸是激活函數和權重相互作用產生的聯合效果,不單單是激活函數的問題,不管你用 sigmoid/tanh 還是 ReLU 都有可能發生梯度消失/爆炸,只是發生的頻繁程度不同。

每層神經網絡大體是一次矩陣乘法(線性變換)再接一次激活函數,例如這樣:

求導以後是這樣:

其中第一項是每個元素都小於 1 的對角陣(假設這裡用 sigmoid 激活函數,其他激活函數可同理分析),於是特徵值也小於 1,會產生壓縮的效果;而第二項特徵值的大小與 W 本身有關,既可能收縮也可能擴張。

假如 W 的所有特徵值都小於 1,那麼此時兩項相乘也是收縮的效果;反之,兩項的乘積有可能(注意不是一定)產生擴張的效果。多層累積以後,就有可能發生梯度消失和梯度爆炸。

舉個 RNN 的例子吧:

https://link.zhihu.com/?target=http%3A//proceedings.mlr.press/v28/pascanu13.pdf

論文第二節說的很清楚:

We first prove that it is sufficient for λ1 < 1/γ , where λ1 is the largest singular value of Wrec, for the vanishing gradient problem to occur. (即當 W 滿足某種條件時,一定會發生梯度消失)

By inverting this proof we get the necessary condition for exploding gradients, namely that the largest singular value λ1 is larger than 1/γ (otherwise the long term components would vanish instead of exploding).  (即當 W 滿足某種條件時,有可能會發生梯度爆炸)

https://www.zhihu.com/question/290392414/answer/550156067

是這樣的,梯度消失:主要是指激活函數的導數小於1,例如sigmoid函數,tanh

梯度爆炸:相反是指激活函數的梯度大於1,

當神經網絡層數很多的時候,因為需要反向求梯度,所以如果激活函數是sigmoid就會產生梯度消失,tanh也是一樣,他們兩個的梯度都小於1'而relu函數梯度等於1解決了梯度消失問題

你沒有理解對,梯度爆炸是指用的激活函數梯度大於1,如果使用sigmoid函數,只有梯度消失,就沒有梯度爆炸,relu函數是沒有梯度消失,應該也沒有梯度爆炸。

梯度爆炸是指用的其他激活函數,並不是sigmoid,tanh

推薦閱讀:

綜述 | 知識圖譜技術綜述(上)

一戰賺了1090億,恐怖的張一鳴!

相關焦點

  • 每天五分鐘自然語言理解NLP:RNN為什麼會有梯度消失和梯度爆炸?
    舉報   本文重點   本文我們來看一下RNN最致命的問題,這個問題就是RNN的梯度消失和梯度爆炸的問題
  • 獨家連載 | 梯度消失和梯度爆炸
    不管怎麼樣,softsign函數導數的取值總是小於1的,所以softsign作為激活函數也會存在梯度消失的問題。4.6.2 梯度爆炸當我們使用sigmoid,tanh和softsign作為激活函數時,它們的導數取值範圍都是小於等於1的,所以會產生梯度消失的問題。那麼我們可能會想到,如果使用導數大於1的函數作為激活函數,情況會如何?
  • 梯度消失和梯度爆炸的數學原理及解決方案
    歡迎一起討論~梯度消失或者梯度爆炸是在訓練深度網絡時常常容易出現的情況,即在根據損失函數計算的誤差通過梯度反向傳播的方式對深度網絡權值進行更新時,得到的梯度值接近0或特別大,也就是消失或爆炸。梯度消失或梯度爆炸在本質原理上其實是一樣的。本博文打算從以下幾方面討論梯度消失或爆炸的原因,以及目前業界的一些解決方法。
  • 人腦是怎麼防止梯度消失和梯度爆炸的?
    梯度消失和梯度爆炸一直是深度學習的難點,而人腦有接近900億個神經元,可以說是一個非常規模龐大的網絡。那麼人腦是如何防止梯度消失和梯度爆炸的?小編在知乎上發現了這個有意思的問題,分享給大家思考。感覺這個問題跟我的科研方向有一點關係,所以就厚著臉皮強答一波了。
  • 人腦如何防止梯度消失和梯度爆炸?
    梯度消失和梯度爆炸一直是深度學習的難點,而人腦有接近900億個神經元,可以說是一個非常規模龐大的網絡。那麼人腦是如何防止梯度消失和梯度爆炸的?極市小編在知乎上發現了這個有意思的問題,分享給大家思考。感覺這個問題跟我的科研方向有一點關係,所以就厚著臉皮強答一波了。
  • 也來談談RNN的梯度消失/爆炸問題
    而於 RNN 梯度的相關分析,則是一個從優化角度思考分析模型的優秀例子,值得大家仔細琢磨理解。君不見,諸如「LSTM 為什麼能解決梯度消失/爆炸」等問題依然是目前流行的面試題之一。說到這裡,我們還沒說清楚一個問題:什麼是 RNN 的梯度消失/爆炸?梯度爆炸好理解,就是梯度數值發散,甚至慢慢就 NaN 了;那梯度消失就是梯度變成零嗎?
  • 梯度消失和梯度爆炸問題的最完整解析
    來源丨機械工業出版社《機器學習實戰:基於Scikit-Learn、Keras和TensorFlow》1 梯度消失與梯度爆炸正如我們在第一旦算法計算出代價函數相對於網絡中每個參數的梯度,就可以使用這些梯度以梯度下降步驟來更新每個參數。不幸的是,隨著算法向下傳播到較低層,梯度通常會越來越小。結果梯度下降更新使較低層的連接權重保持不變,訓練不能收斂到一個好的最優解。我們稱其為梯度消失問題。在某些情況下,可能會出現相反的情況:梯度可能會越來越大,各層需要更新很大的權重直到算法發散為止。
  • 【深度學習】梯度消失和梯度爆炸問題的最完整解析
    TensorFlow》1 梯度消失與梯度爆炸正如我們在第10章中討論的那樣,反向傳播算法的工作原理是從輸出層到輸入層,並在此過程中傳播誤差梯度。一旦算法計算出代價函數相對於網絡中每個參數的梯度,就可以使用這些梯度以梯度下降步驟來更新每個參數。不幸的是,隨著算法向下傳播到較低層,梯度通常會越來越小。結果梯度下降更新使較低層的連接權重保持不變,訓練不能收斂到一個好的最優解。我們稱其為梯度消失問題。在某些情況下,可能會出現相反的情況:梯度可能會越來越大,各層需要更新很大的權重直到算法發散為止。
  • 入門|詳解機器學習中的梯度消失、爆炸原因及其解決方法
    本文分為三部分,第一部分主要直觀的介紹深度學習中為什麼使用梯度更新,第二部分主要介紹深度學習中梯度消失及爆炸的原因,第三部分對提出梯度消失及爆炸的解決方案。有基礎的同鞋可以跳著閱讀。 其中,梯度消失爆炸的解決方案主要包括以下幾個部分。
  • RNN系列教程之三 | 基於時間的反向傳播算法和梯度消失問題
    前一部分中,我們介紹了如何在Python和Theano框架下實現RNN,但還未深入了解時序反向傳播算法(BPTT)是如何計算梯度的。這周,我們將簡單介紹BPTT,並解釋其與傳統反向傳播的區別。我們還將了解梯度消失問題,這也是推動LSTM(長短時記憶)和GRU(門控循環單元)(目前在NLP和其他領域最流行且有效模型)發展的原因。
  • 深度學習優化算法入門:三、梯度消失和激活函數
    不具有這一性質的數據可能導致梯度消失和訓練抖動。分布最好是正態的,否則可能導致網絡過擬合輸入空間的某個區域。在訓練過程中,不同batch和不同網絡層的激活分布,應該保持一定程度上的一致。梯度消失問題有豐富的文檔,隨著神經網絡越來越深,這一問題越來越得到重視。下面我們將解釋梯度為什麼會消失。讓我們想像一個最簡單的神經網絡,一組線性堆疊的神經元。實際上,上面的網絡很容易擴展成深度密集連接架構。只需將網絡中的每個神經元替換成一個使用sigmoid激活函數的全連接層。
  • 入門| 一文了解神經網絡中的梯度爆炸
    本文將介紹深度神經網絡中的梯度爆炸問題。 閱讀本文,你將了解: 什麼是梯度爆炸,模型訓練過程中梯度爆炸會引起哪些問題; 如何確定自己的網絡模型是否出現梯度爆炸; 如何修復梯度爆炸問題。 什麼是梯度爆炸? 誤差梯度是神經網絡訓練過程中計算的方向和數量,用於以正確的方向和合適的量更新網絡權重。
  • 梯度與梯度下降法
    derivative),然後我們看看梯度下降法(Gradient Descent),了解為什麼在優化問題中使用梯度下降法來優化目標函數。 這裡注意三點: 1)梯度是一個向量,即有方向有大小; 2)梯度的方向是最大方向導數的方向; 3)梯度的值(這裡指的是模,值有點歧義)是某方向上最大方向導數(的值,導數本身就是值) 補充:現在,我們可以來換一個角度看這個問題:從某點出發,沿著所有的路徑我們往下滑,當都在 Z 方向上下降了同樣的高度(比如 1),最陡的那條路徑,在 X-Y 平面上的投影一定是最短的
  • 訓練深度神經網絡失敗的罪魁禍首不是梯度消失,而是退化
    人們通常認為這種困難主要是(如果不全是)由於梯度消失問題(和/或梯度爆炸問題)。「梯度消失」指的是隨著網絡深度增加,參數的梯度範數指數式減小的現象。梯度很小,意味著參數的變化很緩慢,從而使得學習過程停滯,直到梯度變得足夠大,而這通常需要指數量級的時間。
  • VGGNet vs ResNet:機器學習中的梯度消失問題
    你能解釋一下VGGNet和ResNet的區別嗎?這是人工智慧和機器學習領域的一個常見面試問題。雖然答案可以在網上找到,但一直還沒能找到一個簡明扼要的答案。我們將從什麼是VGGNet開始,然後看看VGGNet遇到了什麼問題,以及ResNet如何解決它。
  • 徹底解決梯度爆炸問題,新方法不用反向傳播也能訓練ResNet
    機器之心報導參與:思、一鳴反向傳播是深度學習算法中必不可少的組成部分,但是其固有的梯度爆炸(消失),計算速度慢等問題一直困擾著學界。近日,紐西蘭維多利亞惠靈頓大學的研究者提出了一種新型的算法,可以讓深度學習在不依賴反向傳播的情況下進行收斂,徹底解決了梯度爆炸問題。同時,研究者表示,只需要額外訓練單層的網絡就可以達到圖像分類中的 SOTA 性能。
  • 這篇論文讓你無懼梯度消失或爆炸,輕鬆訓練一萬層神經網絡
    選自arXiv作者:Batchlechner等機器之心編譯機器之心編輯部深度學習在眾多領域都取得了顯著進展,但與此同時也存在一個問題:深層網絡的訓練常常面臨梯度消失或梯度爆炸的阻礙,尤其是像 Transformer 這樣的大型網絡。
  • 消失的梯度問題:問題,原因,意義及其解決對策
    原因 具體的激活函數,比如sigmoid函數,把很大的空間壓縮到0和1之間。因此,sigmoid函數的輸入即使變化很大也只會改變一點輸出。因此,求導就變得很小。   為什麼這是重要的? 對於使用激活函數的僅有幾層的淺層網絡結構,這不是很大的問題。然而,當使用更多層的時候,可能會造成梯度太小而不能很好的訓練。 神經網絡的梯度是使用反向傳播來找到的。簡單來說,反向傳播通過將網絡從最終層逐層移動到初始層來找到網絡的導數。
  • 機器學習——梯度下降、梯度下降的線性回歸算法
    一、梯度下降梯度下降是一個用來求函數最小值的算法,我們將使用梯度下降算法來求出代價函數J(θo,θ1)的最小值。梯度下降算法中要做的就是不停地一點點改變θo和θ1,直到J成為最小值或局部最小值。通常將θo和θ1的初始值設為0。
  • 方向導數和梯度是什麼?
    為什麼梯度的方向是函數在該點的方向導數最大的方向,梯度的模是最大方向導數的值?大家在看複習全書時,有認真想過這個問題嗎?小編在本文以二元函數為例詳細講解方向導數和梯度,並試圖以儘可能通俗地語言回答上述問題。