1. 程式人生 > 實用技巧 >深度學習 《梯度消失和梯度爆炸》

深度學習 《梯度消失和梯度爆炸》

一:梯度消失
在深層網路中,一方面由於求導法則,計算越前面層次或者時刻的梯度,會出現很多的乘法運算,很容易導致梯度消失和梯度爆炸,另一方面還受到啟用函式的影響,Sigmoid函式和tanh函式會出現梯度為0 的區域,前面也說了,BP網路中,使用skip connection可以解決梯度消失,典型的就是ResNet。在RNN中LSTM, GRU就是解決思路。

其實我感覺他們的思路有異曲同工之妙,都是將先前的層次/序列的輸出通過某種方式可以輸入到某一層次需要用到的時候。求導的過程中,偏導數不至於為0,或者說降低了為0的概率,解決該問題。

二:梯度爆炸
那出現了梯度爆炸怎麼玩呢?出現梯度爆炸的時候,引數值可能變得異常巨大,可能是NaN,這時候甚至都能計算溢位,這個時候我們需要進行干預了,用到技巧就叫做 Grident Clipping。

過程如下:設定一個梯度的閾值,一旦發現計算後的梯度大於該閾值,立馬進行干預,也不難,就是多個判斷的過程。

1) 先設定一個梯度的閾值,也就是最大值,不能大於這個值
2) 反向傳播中比較閾值和梯度的大小
3) 如果地圖大於這個閾值,立馬對地圖進行縮放處理,讓他不能大於這個閾值。
虛擬碼如下截圖:

在這裡插入圖片描述