學過RNN的想必都聽過下面的言論,
“RNN容易產生梯度消失和梯度爆炸”,“RNN不能捕獲長期記憶”,那麼
RNN爲什麼不能捕獲長期記憶?RNN真的就會發生梯度消失和爆炸嗎?
先來個答案,當序列很長的時候,RNN確實不能捕獲長期依賴關係,也確實容易梯度爆炸,但是否容易梯度消失,卻要好好分析下,亦或者說,RNN梯度消失不同於我們往常理解的“MLP、CNN等裏面的梯度消失”。詳細解說請往下看~
一切要從BPTT說起~
目錄
(1) RNN中的梯度消失與梯度爆炸
RNN中loss對某個參數的梯度由2部分相加組成,一部分是橫向沿着時間軸傳播的,另一部分是縱向沿着網絡層數傳播的,一般而言,RNN的網絡層數不會太深,但時間軸卻可能很長。所以縱向部分的不會出現梯度消失或爆炸的,橫向部分會梯度爆炸,但不會梯度消失(因爲RNN的各個時間步是共享參數的,所以梯度=各個時間步的梯度之和,即使梯度越傳越弱,那也只是遠距離的梯度很小,但近距離的梯度依舊有),兩者相加之後,梯度不會消失,但依舊會爆炸(只要橫向或縱向一者爆炸則爆炸)。
其實我們常說的RNN容易梯度消失,這裏的梯度消失不同於我們“MLP、CNN”等裏面的梯度消失,這裏的梯度消失的含義是在時間軸上,梯度被近距離的梯度主導。如下圖,
RNN梯度消失(圖片來自CS224n的ppt)
[矩陣的二範數(因爲令,則,所以等式成立)]
當w的最大特徵值大於1的時候,會發生梯度爆炸,小於1則會發現梯度消失。
(2) 梯度消失爲什麼會成爲一個問題?
梯度消失會導致RNN不能捕獲長期依賴關係,如下圖(圖片來自CS224n的ppt))
(3)怎麼看待RNN不能捕獲長期依賴關係?
從正向傳播來看,在時間軸上,不斷的連乘使得較遠的消息幾乎爲0,所以在生成單詞詞,幾乎沒有參考到前面的信息,所以存在捕捉長距離依賴的問題。
從反向傳播來看,見(2)。