梯度消失、梯度爆炸

梯度消失、梯度爆炸

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

當神經網絡的層數較多時,模型的數值穩定性容易變差。

假設一個層數爲LL的多層感知機的第llH(l)\boldsymbol{H}^{(l)}的權重參數爲W(l)\boldsymbol{W}^{(l)},輸出層H(L)\boldsymbol{H}^{(L)}的權重參數爲W(L)\boldsymbol{W}^{(L)}。爲了便於討論,不考慮偏差參數,且設所有隱藏層的激活函數爲恆等映射(identity mapping)ϕ(x)=x\phi(x) = x。給定輸入X\boldsymbol{X},多層感知機的第ll層的輸出H(l)=XW(1)W(2)W(l)\boldsymbol{H}^{(l)} = \boldsymbol{X} \boldsymbol{W}^{(1)} \boldsymbol{W}^{(2)} \ldots \boldsymbol{W}^{(l)}。此時,如果層數ll較大,H(l)\boldsymbol{H}^{(l)}的計算可能會出現衰減或爆炸。舉個例子,假設輸入和所有層的權重參數都是標量,如權重參數爲0.2和5,多層感知機的第30層輸出爲輸入X\boldsymbol{X}分別與0.2301×10210.2^{30} \approx 1 \times 10^{-21}(消失)和5309×10205^{30} \approx 9 \times 10^{20}(爆炸)的乘積。當層數較多時,梯度的計算也容易出現消失或爆炸。

梯度消失、爆炸會帶來哪些影響

舉個例子,對於一個含有三層隱藏層的簡單神經網絡來說,當梯度消失發生時,接近於輸出層的隱藏層由於其梯度相對正常,所以權值更新時也就相對正常,但是當越靠近輸入層時,由於梯度消失現象,會導致靠近輸入層的隱藏層權值更新緩慢或者更新停滯。這就導致在訓練時,只等價於後面幾層的淺層網絡的學習。

解決辦法

梯度消失和梯度爆炸本質上是一樣的,都是因爲網絡層數太深而引發的梯度反向傳播中的連乘效應。

解決梯度消失、爆炸主要有以下幾種方案:

換用Relu、LeakyRelu、Elu等激活函數

ReLu:讓激活函數的導數爲1

LeakyReLu:包含了ReLu的幾乎所有有點,同時解決了ReLu中0區間帶來的影響

ELU:和LeakyReLu一樣,都是爲了解決0區間問題,相對於來,elu計算更耗時一些(爲什麼)

具體可以看關於各種激活函數的解析與討論

BatchNormalization

BN本質上是解決傳播過程中的梯度問題

ResNet殘差結構

Resnet

LSTM結構

LSTM不太容易發生梯度消失,主要原因在於LSTM內部複雜的“門(gates)”,具體看LSTM基本原理解析

預訓練加finetunning

此方法來自Hinton在06年發表的論文上,其基本思想是每次訓練一層隱藏層節點,將上一層隱藏層的輸出作爲輸入,而本層的輸出作爲下一層的輸入,這就是逐層預訓練。

訓練完成後,再對整個網絡進行“微調(fine-tunning)”。

此方法相當於是找全局最優,然後整合起來尋找全局最優,但是現在基本都是直接拿imagenet的預訓練模型直接進行finetunning。

梯度剪切、正則

這個方案主要是針對梯度爆炸提出的,其思想是設值一個剪切閾值,如果更新梯度時,梯度超過了這個閾值,那麼就將其強制限制在這個範圍之內。這樣可以防止梯度爆炸。
另一種防止梯度爆炸的手段是採用權重正則化,正則化主要是通過對網絡權重做正則來限制過擬合,但是根據正則項在損失函數中的形式:可以看出,如果發生梯度爆炸,那麼權值的範數就會變的非常大,反過來,通過限制正則化項的大小,也可以在一定程度上限制梯度爆炸的發生。

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