本節課內容概述:
- 本節課主要解釋了梯度消失和梯度爆炸問題以及其他類型的RNN
- 上節課將的是RNN以及爲什麼RNN適用於語言模型。
- 因爲它可以記住前面的信息。
- 梯度消失問題導致了新RNN的出現:LSTM和GRU
- 其他修復梯度消失或者梯度爆炸的方法:
- 梯度剪裁
- 跳過連接
- 其他更有趣的RNN:
- 雙向RNN
- 多層RNN
首先是梯度消失問題:
應用RNN的時候,如果要求h1的梯度,則會應用鏈式法則求導,有可能會存在導數越求越小的情況,也就是梯度消失問題。
回憶一下RNN及求梯度的公式:
當求第j步中的梯度時,如果Wh很小,那麼求Wh的(i-j)次冪則會更小,導致梯度很小。
如果Wh<1,會有梯度消失問題,Wh>1會有梯度爆炸問題。
爲什麼梯度消失會成爲一個問題?
藍色箭頭的梯度會丟失,因爲黃色箭頭的梯度更大。
所以h1處的權重更新就會根據黃色箭頭的梯度來更新,那麼RNN的意義就沒有了。因爲RNN比起n-gram的優勢就是可以利用遠處的信息。
舉個例子:
我們都知道橫線處應該填的是ticket。用RNN進行預測得出來的也應該是ticket,這是根據第一句話的信息得出來的。但是如果RNN存在梯度消失問題,那麼它就不能利用第一句話提供的信息,因爲對它來說太遠了。導致RNN不能利用較長距離的信息進行預測,只能利用較近距離的信息導致答案不準確。
爲什麼梯度爆炸是個問題?
梯度更新的公式如下:
模型參數是通過求梯度進行更新的,如果梯度太多,會導致θ更新幅度過大,從而輕易的到達INF或者NAN。
如下圖所示。當到達一個梯度最大的時候,也就是在陡坡處,正確的參數位置應該是在坡低,但是由於梯度很大,參數更新就會一下子沿着左圖的直線方向前進,遠遠超過了最佳梯度位置。
解決辦法:梯度剪裁
如果求得的梯度大於某個閾值,在引用SGD訓練優化之前先把梯度減小。方法如下:
RNN的主要問題是:難於保留過長信息。
隱藏狀態被不斷的重寫
如果讓RNN有單獨的記憶呢?
LSTM:Long Short-Term Memory 長短期記憶
在步驟t,有一個隱藏層ht和一個細胞狀態ct,兩者的向量長度都爲n
細胞c存儲長期信息
LSTM從細胞中可以擦除,寫和讀信息
擦除,寫和讀的操作可以被三個相應的門控制:
門也是長度爲n的向量
在每個步驟中,門可以關閉或者打開
門是動態的,基於當前環境進行改變
有一個輸入序列xt,能計算出一個隱藏層狀態序列ht,細胞狀態ct。在步驟t,各個門和計算公式和解釋如下:
- 遺忘門:控制是否忘記之前的細胞狀態
- 輸入門:控制新細胞的內容
- 輸出們:控制細胞輸出到隱藏層的內容
- 新細胞內容:根據輸入xt產生的細胞的內容
- 細胞狀態:使用遺忘門f控制是否忘記之前的細胞狀態,使用輸入門控制是否使用新產生的細胞內容
- 隱藏狀態:從輸出門中獲得細胞內容
以下的圖展示的LSTM的工作過程:
LSTM是如何解決梯度消失問題呢?
LSTM可以保存很多步以前的信息:
如果遺忘門f一直設置爲1,那麼信息就不會丟失。
雖然LSTM也不能保證沒有梯度消失和梯度爆炸問題,但是它提供了一個簡單的方式來學習長期依賴。
GRU :Gated Recurrent Units
作爲LSTM的一個更簡單的替代方案。
在每個時間步,有輸入xt和隱藏狀態ht,沒有細胞狀態。
- 更新門:控制隱層狀態被更新還是保留上一個隱層狀態。
- 重置門:控制之前的隱藏層狀態是否被用於計算新的內容
- 新的隱層內容:重置門決定上一步的隱層是否被保留用以計算新的隱層以及使用當前輸入內容計算新的隱層內容
- 隱層狀態:更新門實時控制上一步的隱層狀態是否被保留以及新的隱層狀態內容是否應用於當前隱層狀態。
LSTM和GRU的比較:
研究者們提出了許多RNN的不同版本,但是隻有LSTM和GRU被廣泛使用
GUR和LSTM的最大不同是,GRU計算速度更快而且參數更少
沒有一定的結論說GRU和LSTM哪個更快
一般來說,LSTM是一個默認的選擇,特別是如果數據有很長的依賴,或者有很多訓練數據。
經驗法則:如果想要更高效的計算,可以換成GRU
梯度消失或者梯度爆炸問題僅僅是RNN的問題嗎?
不!它是所有神經架構的問題,包括前饋網絡和卷積網絡。特別是深度比較深的網絡。
由於鏈式法則和非線性函數的使用,隨着傳播過程,梯度會消失
這樣底層就會很難訓練。
解決方案:許多新的前饋網絡和卷積網絡加了直接的連接
1、比如殘差連接,也叫做ResNet,跳躍連接。
有一條線直接跳過了內部的層作爲後面的層的輸入,如上圖所示,F(x)+x
2、比如說密集連接,也叫做DenseNet
將任意層的輸出作爲之後任意層的輸入。
3、比如說高速公路連接,也叫做HightwayNet
和殘差連接類似,但是連接的定義和轉換的層被動態門控制
源於LSTM產生的,但是被應用於深度的卷積網絡
結論:
RNN是不穩定的因爲重複使用了相同的權重W
雙向RNN
在下面的情感分類任務中,我們把隱層狀態視爲單詞terribly的表示。成爲上下文表示。但是這個上下文表示只包含左邊部分的信息,不包含右邊部分的信息。右邊部分信息中的exciting能把terribly這個單詞的感情色彩從消極的變成積極的。因爲terribly有多個意思:”非常”、“可怕地”,如果不看右邊的信息,就會可能把它理解爲可怕地,而它真正的意思應該是”非常“
如下圖所示,如果採用雙向的RNN,那麼terribly對應的上下文表示就可以獲得左邊和右邊的信息
雙向RNN的公式如下所示:
注意:
雙向RNN僅適用於當有辦法知道整個輸入序列的時候,當只知道左邊部分的信息的時候沒有辦法適用雙向RNN,比如不適用與語言模型。但是如果知道完整信息,雙向RNN就會很有用,比如bert模型。
多層RNN
RNN在一個維度上是很深的,也可以讓它在另一個維度上也很深,這就是多層RNN。
這個將會讓網絡計算更復雜的表示。
低層次的RNN計算低層次的特徵,高層次的RNN計算高層次的特徵。
多層RNN也叫做堆疊RNN
- 高性能的RNN通常是多層的,但是沒有前饋網絡和卷積網絡一樣深。
- 2-4層的深度對於作爲編碼器的RNN來說是合適的,4層的深度對於解碼器的RNN來說是合適的。
- 之前提到的跳躍連接和密集連接對於訓練更深層次的RNN來說是必要的。
- 基於Transformer的網絡能達到24層(bert模型)