RNN 的基本原理
RNN makes prediction based on the hidden state in the previous timestep and current input.
以一個範例來看看RNN 是的工作:假如需要判斷使用者的說話意圖(問天氣、問時間、設置鬧鐘…),使用者輸入一句“what time is it?”我們需要先對這句話進行分詞,然後按照順序輸入 RNN 。先將 “what”作為 RNN 的輸入,得到輸出「01」,然後,我們按照順序,將“time”輸入到 RNN 網路,得到輸出「02」。這個過程我們可以看到,輸入 “time” 的時候,前面 “what” 的輸出也產生了影響(隱藏層中有一半是黑色的)。以此類推,前面所有的輸入都對未來的輸出產生了影響,大家可以看到圓形隱藏層中包含了前面所有的顏色。如下圖所示:
通過上面的例子,我們已經發現,短期的記憶影響較大(如橙色區域),但是長期的記憶影響就很小(如黑色和綠色區域),這就是 RNN 存在的短期記憶問題。
RNN 有短期記憶問題,無法處理很長的輸入序列,且訓練 RNN 需要投入極大的成本。
梯度消失 (Vanishing gradient)
梯度消失指的是,當我們試圖利用 Gradient Descent 與 Backpropagation 演算法更新參數時,梯度會隨著傳遞的層數越多而遞減,使得模型的參數被更新的很慢,甚至難以繼續訓練。梯度是用於更新神經網絡權重的值,梯度消失問題是指隨著時間推移,梯度在傳播時會下降,如果梯度值變得非常小,則不會繼續學習。
在 RNN 的情況,由於權重是重複被使用,梯度消失的問題變成權重只受到接近的詞影響,越遠的詞影響越小。換句話說,模型在做預測時,可能會遺失太遠之前的資訊。
RNN受限於短期記憶問題。如果一個序列足夠長,那它們很難把信息從較早的時間步傳輸到後面的時間步。因此,如果你嘗試處理一段文本來進行預測,RNN可能在開始時就會遺漏重要信息。在反向傳播過程中,RNN中存在「梯度消失」問題。
RNN的變型:LSTM和GRU
LSTM – 長短期記憶網路
長短期記憶網路——通常被稱為 LSTM,是一種特殊的 RNN,能夠學習長期依賴性。由 Hochreiter 和 Schmidhuber(1997)提出的。LSTM 被廣泛使用。LSTM 被明確設計用來避免長期依賴性問題。
LSTM的核心思路
LSTM的核心概念是細胞狀態及其各種閥。細胞狀態在傳輸途徑上,一直沿序列鏈傳遞相關信息。您可以將其視為網路的「記憶」。理論上,細胞狀態可在整個序列處理過程中攜帶相關信息。因此,即使來自較早時間步長的信息也可以使其進入較晚時間步長的方式,從而減少了短期記憶的影響。隨著單元狀態的發展,信息會通過閘閥添加或刪除到單元狀態。
Cell State

閥是不同的神經網路,它們決定允許有關細胞狀態的信息。閥可以了解在訓練期間需要保留或忘記哪些信息。可以選擇性地以讓資訊通過。
LSTM 可以通過所謂“閥”的精細結構向細胞狀態添加或移除資訊。閥可以選擇性地以讓資訊通過。它們由 S 形神經網路層和逐點乘法運算組成。S 形網路的輸出值介於 0 和 1 之間,表示有多大比例的資訊通過。0 值表示“沒有資訊通過”,1 值表示“所有資訊通過”。
Forget gate

Input Gate
Output Gate
GRU(Gated Recurrent Unit):GRU是LSTM 的一個變體。他保留了 LSTM 劃重點,遺忘不重要資訊的特點,在long-term 傳播的時候也不會被丟失。
GRU(Gate Recurrent Unit)是迴圈神經網路(Recurrent Neural Network, RNN)的一種。和LSTM(Long-Short Term Memory)一樣,也是為了解決長期記憶和反向傳播中的梯度等問題而提出來的。GRU 將 LSTM 中的遺忘閥 (forget gate) 與輸入閥 (input gate) 用一個更新閥 (update gate) 取代,並把單元狀態 (cell state) 和隱藏狀態 (ht) 進行合併,計算新資訊的方式和 LSTM 也有所不同。GRU 主要是在 LSTM 的模型上做了一些簡化和調整,在訓練資料集比較大的情況下可以節省很多時間。
GRU的輸入輸出結構,如下:
Reset Gates, Update Gates, new Hidden State content, and Hidden State









