梯度消失和梯度爆炸

我只是知識的搬運工

1.爲什麼使用梯度下降來優化神經網絡參數?
反向傳播(用於優化神網參數):根據損失函數計算的誤差通過反向傳播的方式,指導深度網絡參數的更新優化。

採取反向傳播的原因:首先,深層網絡由許多線性層和非線性層堆疊而來,每一層非線性層都可以視爲是一個非線性函數(非線性來自於非線性激活函數),因此整個深度網絡可以視爲是一個複合的非線性多元函數。

我們最終的目的是希望這個非線性函數很好的完成輸入到輸出之間的映射,也就是找到讓損失函數取得極小值。所以最終的問題就變成了一個尋找函數最小值的問題,在數學上,很自然的就會想到使用梯度下降來解決。

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

在這裏插入圖片描述
3.產生的原因
以最簡單的網絡結構爲例,加入有三個隱藏層,每層的神經元個數都是1,且對應的非線性函數爲y_i = \sigma(z_i)=\sigma(w_i x_i + b_i)(其中 \sigma 爲某個激活函數)如下圖:
在這裏插入圖片描述
現在假設我們需要更新參數 ,那麼我們就要求出損失函數對參數 的導數,根據鏈式法則,可以寫成下面這樣:

而對於激活函數,之前一直使用Sigmoid函數,其函數圖像成一個S型,如下所示,它會將正無窮到負無窮的數映射到0~1之間:

在這裏插入圖片描述
在這裏插入圖片描述
當我們對Sigmoid函數求導時,得到其結果如下:
在這裏插入圖片描述

由此可以得到它Sigmoid函數圖像,呈現一個駝峯狀(很像高斯函數),從求導結果可以看出,Sigmoid導數的取值範圍在0~0.25之間,而我們初始化的網絡權值通常都小於1,因此,當層數增多時,小於0的值不斷相乘,最後就導致梯度消失的情況出現。同理,梯度爆炸的問題也就很明顯了,就是當權值過大時,導致 ,最後大於1的值不斷相乘,就會產生梯度爆炸。

Sigmoid函數求導圖像

在這裏插入圖片描述 4.解決辦法 4.1 換用Relu、LeakyRelu、Elu等激活函數 4.2 BatchNormalization 4.3 ResNet殘差結構 等 參考這裏:https://www.jianshu.com/p/3f35e555d5ba