深度網絡梯度爆炸的原因、產生的影響和解決方法

1.概念

深度模型有關數值穩定性的典型問題是:衰減(vanishing)和爆炸(explosion)。

當神經網絡的層數較多時,模型的數值穩定性容易變差。舉個簡單的例子:

爲了便於討論,不考慮偏差參數, 且設所有隱藏層的激活函數爲恆等映射(identity mapping)φ(x) = x。給定輸入X,多層感知 機的第l層的輸出H(l) = XW(1)W(2) ...W(l)。此時,如果層數l較大,H(l)的計算可能會出現衰 減或爆炸。舉個例子,假設輸入和所有層的權重參數都是標量,如權重參數爲0.2和5,多層感知 機的第30層輸出爲輸入X分別與0.230 ≈ 1 × 10−21(衰減)和530 ≈ 9 × 1020(爆炸)的乘積。類 似地,當層數較多時,梯度的計算也更容易出現衰減或爆炸。

簡單說,權重參數小於1,會出現衰減,大於1,會出現爆炸。梯度消失和梯度爆炸本質上是一樣的,都是因爲網絡層數太深而引發的梯度反向傳播中的連乘效應。

梯度消失產生的影響:

會導致靠近輸入層的隱藏層權值更新緩慢或者更新停滯。這就導致在訓練時,只等價於後面幾層的淺層網絡的學習。

梯度爆炸產生的影響:

梯度爆炸一般出現在深層網絡和權值初始化值太大的情況下,梯度爆炸會引起網絡不穩定,最好的結果是無法從訓練數據中學習,而最壞的結果是出現無法再更新的NaN權重值。

2.容易有數值穩定性問題的場景:

一是深度網絡中,網絡層數太多;從深層網絡角度來講,不同的層學習的速度差異很大,表現爲網絡中靠近輸出的層學習的情況很好,靠近輸入的層學習的很慢,有時甚至訓練了很久,前幾層的權值和剛開始隨機初始化的值差不多。因此,梯度消失、爆炸,其根本原因在於反向傳播訓練法則,屬於先天不足,另外多說一句,Hinton提出capsule的原因就是爲了徹底拋棄反向傳播,如果真能大範圍普及,那真是一個革命。

梯度更新的速度:越靠近輸出層,更新速度越快,越靠近輸入層,更新速度越慢。原因:鏈式求導法則,越靠近輸入層,鏈式越長,計算時間越多,因此越慢。

二是使用了不合適的激活函數,即非線性函數,比如sigmod函數,該函數的導數最大爲0.25,再往後面網絡傳播的時候,很容易產生梯度消失。

事實上,梯度消失更容易出現,因爲對於激活函數的求導

可以看到,當w越大,其wx+b很可能變的很大,而根據上面sigmoid函數導數的圖像可以看到,wx+b越大,導數的值也會變的很小。因此,若要出現梯度爆炸,其w既要大還要保證激活函數的導數不要太小。

3.解決方法

1)預訓練加微調

提出採取無監督逐層訓練方法,其基本思想是每次訓練一層隱節點,訓練時將上一層隱節點的輸出作爲輸入,而本層隱節點的輸出作爲下一層隱節點的輸入,此過程就是逐層“預訓練”(pre-training);在預訓練完成後,再對整個網絡進行“微調”(fine-tunning)。Hinton在訓練深度信念網絡(Deep Belief Networks中,使用了這個方法。

2)梯度剪切、正則

梯度剪切這個方案主要是針對梯度爆炸提出的,其思想是設置一個梯度剪切閾值,然後更新梯度的時候,如果梯度超過這個閾值,那麼就將其強制限制在這個範圍之內。這可以防止梯度爆炸。

權重正則化(weithts regularization)解決梯度爆炸。比較常見的是l1l1l1正則,和l2l2l2正則,在各個深度框架中都有相應的API可以使用正則化,比如在tensorflowtensorflowtensorflow中,若搭建網絡的時候已經設置了正則化參數,則調用以下代碼可以直接計算出正則損失。正則化是通過對網絡權重做正則限制過擬合。

3)優化激活函數relu、leakrelu、elu

**Relu:**思想也很簡單,如果激活函數的導數爲1,那麼就不存在梯度消失爆炸的問題了,每層的網絡都可以得到相同的更新速度,relu就這樣應運而生。

relu的主要貢獻在於:

-- 解決了梯度消失、爆炸的問題

-- 計算方便,計算速度快

-- 加速了網絡的訓練

同時也存在一些缺點

-- 由於負數部分恆爲0,會導致一些神經元無法激活(可通過設置小學習率部分解決)

-- 輸出不是以0爲中心的

leakrelu:

leakrelu就是爲了解決relu的0區間帶來的影響,其數學表達爲:leakrelu=max(k∗x,x)leakrelu=max(k*x,x)leakrelu=max(k∗x,x)其中k是leak係數,一般選擇0.01或者0.02,或者通過學習而來。leakrelu解決了0區間帶來的影響,而且包含了relu的所有優點。

elu:

elu激活函數也是爲了解決relu的0區間帶來的影響。但是elu相對於leakrelu來說,計算要更耗時間一些。

整理了一些激活函數的圖以及其導數:

4)batchnorm

Batchnorm是深度學習發展以來提出的最重要的成果之一了,目前已經被廣泛的應用到了各大網絡中,具有加速網絡收斂速度,提升訓練穩定性的效果,Batchnorm本質上是解決反向傳播過程中的梯度問題。解決的過程:

f2​=f1​(wT∗x+b)對w求導,得到∂f2/∂w​​=∂f2/∂f1​ * ​​x,反向傳播式子中有xxx的存在,所以xxx的大小影響了梯度的消失和爆炸,batchnorm就是通過對每一層的輸出規範爲均值和方差一致的方法,消除了xxx帶來的放大縮小的影響,進而解決梯度消失和爆炸的問題,或者可以理解爲BN將輸出從飽和區拉倒了非飽和區。

5)殘差結構

殘差可以很輕鬆的構建幾百層,一千多層的網絡而不用擔心梯度消失過快的問題,原因就在於殘差的捷徑(shortcut)部分,其中殘差單元如下圖所示:

相比較於以前網絡的直來直去結構,殘差中有很多這樣的跨層連接結構。這樣傳播過程中,不會存在梯度全爲1的情況,不會梯度消失。

6)LSTM

LSTM全稱是長短期記憶網絡(long-short term memory networks),是不那麼容易發生梯度消失的,主要原因在於LSTM內部複雜的“門”(gates),如下圖,LSTM通過它內部的“門”可以接下來更新的時候“記住”前幾次訓練的”殘留記憶“。

 

參考:

1.梯度消失和爆炸的前世今生:https://blog.csdn.net/qq_25737169/article/details/78847691

2.Deep Residual Learning for Image Recognition

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章