出現梯度消失與梯度爆炸的原因以及解決方案


在學習李宏毅老師機器學習的相關視頻時,課下做了一個有關神經網絡的小Demo,但是運行效果總是不盡人意,上網查詢資料,才發現是梯度爆炸和梯度消失惹的禍。今天就讓我們一起來學習一下梯度消失與梯度爆炸的概念、產生原因以及該如何解決。

目錄

1.梯度消失與梯度爆炸的概念

2.梯度消失與梯度爆炸的產生原因

3.梯度消失與梯度爆炸的解決方案


 

首先讓我們先來了解一個概念:什么是梯度不穩定呢?

概念:在深度神經網絡中的梯度是不穩定的,在靠近輸入層的隱藏層中或會消失,或會爆炸。這種不穩定性才是深度神經網絡中基於梯度學習的根本問題。

產生梯度不穩定的根本原因:前面層上的梯度是來自后面層上梯度的乘積。當存在過多的層時,就會出現梯度不穩定場景,比如梯度消失和梯度爆炸。

划重點:梯度消失和梯度爆炸屬於梯度不穩定的范疇

 


 

1.梯度消失與梯度爆炸的概念

梯度消失:在神經網絡中,當前面隱藏層的學習速率低於后面隱藏層的學習速率,即隨着隱藏層數目的增加,分類准確率反而下降了。這種現象叫梯度消失。

梯度爆炸:在神經網絡中,當前面隱藏層的學習速率低於后面隱藏層的學習速率,即隨着隱藏層數目的增加,分類准確率反而下降了。這種現象叫梯度爆炸。

其實梯度消失和梯度爆炸是一回事,只是表現的形式,以及產生的原因不一樣。

2.梯度消失與梯度爆炸的產生原因

梯度消失:(1)隱藏層的層數過多;(2)采用了不合適的激活函數(更容易產生梯度消失,但是也有可能產生梯度爆炸)

梯度爆炸:(1)隱藏層的層數過多;(2)權重的初始化值過大

 

以下將從這3個角度解釋產生這兩種現象的根本原因

(1)隱藏層的層數過多

  總結:從深層網絡角度來講,不同的層學習的速度差異很大,表現為網絡中靠近輸出的層學習的情況很好,靠近輸入的層學習的很慢,有時甚至訓練了很久,前幾層的權值和剛開始隨機初始化的值差不多。因此,梯度消失、爆炸,其根本原因在於反向傳播訓練法則,屬於先天不足。具體見下圖:

從上圖可以非常容易的看出來:對於四個隱層的網絡來說,第四隱藏層比第一隱藏層的更新速度慢了兩個數量級!!!

(2)激活函數

 我們以下圖的反向傳播為例,假設每一層只有一個神經元且對於每一層都可以用公式1表示,其中σ為sigmoid函數,C表示的是代價函數,前一層的輸出和后一層的輸入關系如公式1所示。我們可以推導出公式2。

σ為sigmoid函數,其導數的圖像如下圖所示:

 

可見,的最大值為,而我們一般會使用標准方法來初始化網絡權重,即使用一個均值為0標准差為1的高斯分布。因此,初始化的網絡權值通常都小於1,從而有對於2式的鏈式求導,層數越多,求導結果越小,最終導致梯度消失的情況出現。所以說,sigmoid函數一般不適合用於神經網絡中,那神經網絡中應該用哪些激活函數呢?等等就為你揭曉!

 (3)初始化權重的值過大

,也就是w比較大的情況下,根據2式的鏈式相乘可得(反向傳播),則前面的網絡層比后面的網絡層梯度變化更快,引起了梯度爆炸的問題。所以,在一般的神經網絡中,權重的初始化一般都利用高斯分布(正態分布)隨機產生權重值。

 3.梯度消失與梯度爆炸的解決方案

梯度消失和梯度爆炸問題都是因為網絡太深,網絡權值更新不穩定造成的,本質上是因為梯度反向傳播中的連乘效應。對於更普遍的梯度消失問題,可以考慮一下三種方案解決:

(1)用ReLU、Leaky-ReLU、P-ReLU、R-ReLU、Maxout等替代sigmoid函數。(幾種激活函數的比較見我的博客)

(2)用Batch Normalization。(對於Batch Normalization的理解可以見我的博客)

(3)LSTM的結構設計也可以改善RNN中的梯度消失問題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM