來自知乎大佬towser的回答,比較深刻,也加了點自己的注釋,侵刪「lstm 能解決梯度消失/梯度**」是對 lstm 的經典誤解,rnn 中的梯度消失/梯度**和普通的 mlp 或者深層 cnn 中梯度消失/梯度**的含義不一樣。mlp/cnn 中不同的層有不同的引數,各是各的梯度;而 rnn 中同樣的權重在各個時間步共享,最終的梯度 g = 各個時間步的梯度 g_t 的和。(
rnn反向傳播使用bptt,即收集 全部or部分 歷史對cell共享引數進行更新
)
由 1 中所述的原因,rnn 中總的梯度是不會消失的。即便梯度越傳越弱,那也只是遠距離的梯度消失,由於近距離的梯度不會消失,所有梯度之和便不會消失。rnn 所謂梯度消失的真正含義是,梯度被近距離梯度主導,導致模型難以學到遠距離的依賴關係。
lstm 中梯度的傳播有很多條路徑,ct−
1=>ct
=ft⨀
ct−1
+it⨀
ct^c_ => c_t = f_t \bigodot c_ + i_t \bigodot \hat
ct−1=
>ct
=ft
⨀ct
−1+
it⨀
ct^
這條路徑上只有逐元素相乘和相加的操作,梯度流最穩定;但是其他路徑(例如 ct−
1=>ht
−1=>it
=>ct
c_ => h_ => i_t => c_t
ct−1=
>ht
−1=
>it
=>ct
)上梯度流與普通 rnn 類似,照樣會發生相同的權重矩陣反覆連乘。(第一條路徑形成梯度回傳的高速公路,神圖鎮樓
)
lstm 剛提出時沒有遺忘門,或者說相當於 ft=
1f_t=1
ft=
1 ,這時候在 c_=>c_t直接相連的短路路徑上,dlo
ss/d
ctdloss/dc_t
dloss/
dct
可以無損地傳遞給 dlo
ss/d
ct−1
dloss/dc_
dloss/
dct−
1,從而這條路徑上的梯度暢通無阻,不會消失。類似於 resnet 中的殘差連線。(高速公路通暢無阻
)
但是在其他路徑上,lstm 的梯度流和普通 rnn 沒有太大區別,依然會**或者消失。由於總的遠距離梯度 = 各條路徑的遠距離梯度之和,即便其他遠距離路徑梯度消失了,只要保證有一條遠距離路徑(就是上面說的那條高速公路)梯度不消失,總的遠距離梯度就不會消失(正常梯度 + 消失梯度 = 正常梯度)。因此 lstm 通過改善一條路徑上的梯度問題拯救了總體的遠距離梯度。
同樣,因為總的遠距離梯度 = 各條路徑的遠距離梯度之和,高速公路上梯度流比較穩定,但其他路徑上梯度有可能**,此時總的遠距離梯度 = 正常梯度 + **梯度 = **梯度,因此 lstm 仍然有可能發生梯度**。不過,由於 lstm 的其他路徑非常崎嶇,和普通 rnn 相比多經過了很多次啟用函式(導數都小於 1),因此 lstm 發生梯度**的頻率要低得多。實踐中梯度**一般通過梯度裁剪來解決。(可能**,只是較rnn程度小一點
)
對於現在常用的帶遺忘門的 lstm 來說,6 中的分析依然成立,而 5 分為兩種情況:其一是遺忘門接近 1(例如模型初始化時會把 forget bias 設定成較大的正數,讓遺忘門飽和),這時候遠距離梯度不消失;其二是遺忘門接近 0,但這時模型是故意阻斷梯度流的,這不是 bug 而是 feature(例如情感分析任務中有一條樣本 「a,但是 b」,模型讀到「但是」後選擇把遺忘門設定成 0,遺忘掉內容 a,這是合理的
)。當然,常常也存在 f 介於 [0, 1] 之間的情況,在這種情況下只能說 lstm 改善(而非解決)了梯度消失的狀況。
最後,別總是抓著梯度不放。梯度只是從反向的、優化的角度來看的,多從正面的、建模的角度想想 lstm 有效性的原因。選擇性、資訊不變性
都是很好的視角,比如看看這篇
機器學習面試題 為啥LSTM比RNN好
其實這算是個經典的問題了,在一般的只要你做過時間序列相關的專案或者理論的時候,lstm和rnn的對比肯定是要問的。那兩者到底有啥區別呢?其實對於這個問題,要從rnn在發展過程中帶來的令人詬病的短處說起,rnn在train引數的時候,需要反向傳播梯度,這個梯度是這麼算的 w i 1 wi r loss...
ReLU為什麼比Sigmoid效果好
附 雙曲函式類似於常見的 也叫圓函式的 三角函式。基本雙曲函式是雙曲正弦 sinh 雙曲余弦 cosh 從它們匯出雙曲正切 tanh sigmod函式 relu函式 綜合 為什麼通常relu比sigmoid和tanh強,有什麼不同?主要是因為它們gradient特性不同。sigmoid和tanh的g...
ReLU為什麼比Sigmoid效果好
relu為什麼比sigmoid效果好 附 雙曲函式類似於常見的 也叫圓函式的 三角函式。基本雙曲函式是雙曲正弦 sinh 雙曲余弦 cosh 從它們匯出雙曲正切 tanh sigmod函式 relu函式 綜合 為什麼通常relu比sigmoid和tanh強,有什麼不同?1 相比sigmoid和tan...