通常來說,梯度爆炸更容易處理一些。因為梯度爆炸的時候,我們的程序會收到NaN錯誤。我們也可以設置一個梯度閾值,當梯度超過這個閾值的時候可以直接截取。
梯度消失更難檢測,而且也更難處理一些??偟膩碚f,我們有三種方法應對梯度消失問題:
- 合理的初始化權(quán)重值。初始化權(quán)重,使每個神經(jīng)元盡可能不要取極大或極小值,以躲開梯度消失的區(qū)域。
- 使用relu代替sigmoid和tanh作為激活函數(shù)。原理請參考上一篇文章零基礎入門深度學習(4) - 卷積神經(jīng)網(wǎng)絡的激活函數(shù)一節(jié)。
- 使用其他結(jié)構(gòu)的RNNs,比如長短時記憶網(wǎng)絡(LTSM)和Gated Recurrent Unit(GRU),這是最流行的做法。我們將在以后的文章中介紹這兩種網(wǎng)絡。