LSTM為什麼比RNN好

2021-10-05 01:42:58 字數 2243 閱讀 6527

來自知乎大佬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...