「機器學習」深度學習中消失的梯度

機器學習 深度學習 技術 會技術的葛大爺 會技術的葛大爺 2017-11-04

瞭解深度學習的同學可能知道,目前深度學習面臨的一個問題就是在網絡訓練的過程中存在梯度消失問題(vanishing gradient problem),或者更廣義地來講就是不穩定梯度問題。那麼到底什麼是梯度消失呢?這個問題又是如何導致的呢?這就是本文要分享的內容。

1. 消失的梯度

首先,我們將一個網絡在初始化之後在訓練初期的結果可視化如下:

「機器學習」深度學習中消失的梯度

在上圖中,神經元上的條可以理解為神經元的學習速率。這個網絡是經過隨機初始化的,但是從上圖不難發現,第二層神經元上的條都要大於第一層對應神經元上的條,即第二層神經元的學習速率大於第一層神經元學習速率。那這可不可能是個巧合呢?其實不是的,在書中,Nielsen通過實驗說明這種現象是普遍存在的。

我們再來看下對於一個具有四個隱層的神經網絡,各隱藏層的學習速率曲線如下:

「機器學習」深度學習中消失的梯度

可以看出,第一層的學習速度和最後一層要差兩個數量級,也就是比第四層慢了100倍。 實際上,這個問題是可以避免的,儘管替代方法並不是那麼有效,同樣會產生問題——在前面的層中的梯度會變得非常大!這也叫做激增的梯度問題(exploding gradient problem),這也沒有比消失的梯度問題更好處理。更加一般地說,在深度神經網絡中的梯度是不穩定的,在前面的層中或會消失,或會激增,這種不穩定性才是深度神經網絡中基於梯度學習的根本原因。

2. 什麼導致了梯度消失?

為了弄清楚為何會出現消失的梯度,來看看一個極簡單的深度神經網絡:每一層都只有一個單一的神經元。下面就是有三層隱藏層的神經網絡:

「機器學習」深度學習中消失的梯度

  我們把梯度的整個表達式寫出來:

「機器學習」深度學習中消失的梯度

為了理解每個項的行為,先看下sigmoid函數導數的曲線:

「機器學習」深度學習中消失的梯度

該導數在σ′(0)=1/4時達到最高。現在,如果我們使用標準方法來初始化網絡中的權重,那麼會使用一個均值為0標準差為1的高斯分佈。因此所有的權重通常會滿足

「機器學習」深度學習中消失的梯度

有了這些信息,我們發現會有

「機器學習」深度學習中消失的梯度

並且在進行所有這些項的乘積時,最終結果肯定會指數級下降:項越多,乘積的下降也就越快。

下面我們從公式上比較一下第三層和第一層神經元的學習速率:

「機器學習」深度學習中消失的梯度

比較一下

「機器學習」深度學習中消失的梯度

因此,梯度消失的本質原因是:

「機器學習」深度學習中消失的梯度

3. 梯度激增問題

舉個例子說明下:

首先,我們將網絡的權重設置得很大,比如ω1=ω2=ω3=ω4=100。然後,我們選擇偏置使得σ′(zj)項不會太小。這是很容易實現的:方法就是選擇偏置來保證每個神經元的帶權輸入是zj=0(這樣σ′(zj)=1/4)。比如說,我們希望z1=ω1∗a0+b1,我們只需要把b1=−100∗a0即可。我們使用相同的方法來獲取其他的偏置。這樣我們可以發現所有的項wj∗σ′(zj)都等於100*1/4=25。最終,我們獲得了激增的梯度。

4. 不穩定的梯度問題

不穩定的梯度問題:根本的問題其實並非是消失的梯度問題或者激增的梯度問題,而是在前面的層上的梯度是來自後面的層上項的乘積。當存在過多的層次時,就出現了內在本質上的不穩定場景。唯一讓所有層都接近相同的學習速度的方式是所有這些項的乘積都能得到一種平衡。如果沒有某種機制或者更加本質的保證來達成平衡,那網絡就很容易不穩定了。簡而言之,真實的問題就是神經網絡受限於不穩定梯度的問題。所以,如果我們使用標準的基於梯度的學習算法,在網絡中的不同層會出現按照不同學習速度學習的情況。

5. 參考文獻

Michael Nielsen,《Neural Networks and Deep Learning》

作者:Poll的筆記 出處://www.cnblogs.com/maybe2030/

相關推薦

推薦中...