消失的梯度問題:問題,原因,意義及其解決對策

消失的梯度問題:問題,原因,意義及其解決對策

問題

隨著越來越多的激活函數加到神經網絡中,損失函數的梯度趨近於0,使得網絡結構很難訓練。

原因

具體的激活函數,比如sigmoid函數,把很大的空間壓縮到0和1之間。因此,sigmoid函數的輸入即使變化很大也只會改變一點輸出。因此,求導就變得很小。

消失的梯度問題:問題,原因,意義及其解決對策

圖1:sigmoid函數以及導數

例如,圖一是sigmoid函數及其導數。注意當sigmoid函數的輸入變大或變小時(當|x|),導數如何接近零。

為什麼這是重要的?

對於使用激活函數的僅有幾層的淺層網絡結構,這不是很大的問題。然而,當使用更多層的時候,可能會造成梯度太小而不能很好的訓練。

神經網絡的梯度是使用反向傳播來找到的。簡單來說,反向傳播通過將網絡從最終層逐層移動到初始層來找到網絡的導數。 通過鏈式的規則,將各層的導數乘上網絡(從最終層到初始層),計算出初始層的導數。

然而,當有n個隱藏層使用像sigmoid的激活函數時,n個小的倒數相乘。因此,當我們反向傳到初始層的時候,梯度會大幅度下降。

一個小的梯度意味著初始層的權重和偏差不會在訓練中得到有效更新。由於這些初始層通常對識別輸入數據的核心元素至關重要,因此可能導致整個網絡的整體不準確。

解決方案

最簡單的解決方案是使用激活函數,像ReLU,不會導致一個小的導數。

殘差網絡是另外一個解決方案,因為提供了殘差與之前的層直接連接。就像圖2中,殘差連接直接將block的開頭x的值添加到block(F(x)+x)的結尾。雷鋒網(公眾號:雷鋒網)雷鋒網雷鋒網

這個殘差連接不通過“擠壓”的激活函數,從而導致block的整體倒數更大。


消失的梯度問題:問題,原因,意義及其解決對策

圖2:殘差層

小編個人註解:精髓就在於直接連過來的那個x了。h(x)=f(x)+ x,h(x)對 x 求偏導,值為1,這個1直接傳到block的最前端,保證了來自後一層的梯度值完好的傳過了這一層然後進入到前一層,使得淺層的weights也可以得到很好的訓練。


最後,batch normalization層還可以解決這個問題。如前所述,當一個大的輸入空間映射到一個小的輸入空間時,問題就出現了,導致導數消失。 在圖1中,很清晰看到|x|變大的時候。bath normalization通過簡單地規範化輸入來減少這個問題,這樣x就不會到達sigmoid函數的外邊緣。如圖3所示,它對輸入進行了規範化,使其大部分落在綠色區域,其中導數不太小。

消失的梯度問題:問題,原因,意義及其解決對策

圖三: 限制輸入的sigmoid 函數

所以小編特意讓我導師給我們把講解的給錄製下來了,如果要是想領取這個學習視頻的可以私信給小編,順便幫小編轉發一下讓更多的人來學習。

消失的梯度問題:問題,原因,意義及其解決對策



分享到:


相關文章: