梯度消失/梯度爆炸的問題不僅僅是RNN有,而是深度神經網路所面臨的問題。 這裡簡單地介紹一下RNN和RNN梯度消失的原因。
RNN是迴圈神經網路的英文縮寫(也是遞迴神經網路的英文縮寫)。
RNN模型如下圖所示
展開後就是
貫穿一個序列中每一個元素,Wa,ba,Wy,by都是被共享的,所以交叉熵損失是
當RNN處理長序列的時候,通常會出現梯度消失的問題。
讓我們來藉助一個例子處理這個問題。假設我們正在處理語言建模問題,嘗試學習兩個系列:
"The cat, which already ate ........................, was full"
"The cats, which already ate ........................, were full"
這裡我們需要學習的是,"was"搭配"cat","were"搭配"cats"。
普通的RNN會很難獲得它們的關係。要計算單詞"was",我們需要計算之後所有單詞的梯度。
乘以分數往往會使梯度消失,而乘以大的數目會導致梯度爆炸。這時候有一些的權重可能沒有被更新。 正如深度網路一樣,很容易發生梯度消失問題。
在深層網路(反向傳播)中,想要計算前面(某一層)的權重,需要計算在它之後所有層的權重,這會導致梯度消失。處理長序列的RNN也會發生類似的問題。
梯度爆炸的解決方案
梯度消失問題的解決方案
個人網站部落格:https://www.soaringroad.com/result/category/DeepLearning.ai
梯度消失/梯度爆炸的問題不僅僅是RNN有,而是深度神經網路所面臨的問題。 這裡簡單地介紹一下RNN和RNN梯度消失的原因。
RNNRNN是迴圈神經網路的英文縮寫(也是遞迴神經網路的英文縮寫)。
RNN模型如下圖所示
展開後就是
RNN的損失貫穿一個序列中每一個元素,Wa,ba,Wy,by都是被共享的,所以交叉熵損失是
RNN的梯度消失當RNN處理長序列的時候,通常會出現梯度消失的問題。
讓我們來藉助一個例子處理這個問題。假設我們正在處理語言建模問題,嘗試學習兩個系列:
"The cat, which already ate ........................, was full"
"The cats, which already ate ........................, were full"
這裡我們需要學習的是,"was"搭配"cat","were"搭配"cats"。
普通的RNN會很難獲得它們的關係。要計算單詞"was",我們需要計算之後所有單詞的梯度。
乘以分數往往會使梯度消失,而乘以大的數目會導致梯度爆炸。這時候有一些的權重可能沒有被更新。 正如深度網路一樣,很容易發生梯度消失問題。
在深層網路(反向傳播)中,想要計算前面(某一層)的權重,需要計算在它之後所有層的權重,這會導致梯度消失。處理長序列的RNN也會發生類似的問題。
RNN梯度消失/梯度爆炸的對策梯度爆炸的解決方案
截斷反向傳播。在反向的途中不更新所有權重, 不是最佳的,所有權重都不更新。梯度裁剪。梯度消失問題的解決方案
權重初始化,比如HE初始化。回聲狀態網路(ECS)。使用LSTM/GRU網路。參考個人網站部落格:https://www.soaringroad.com/result/category/DeepLearning.ai