結構
1. RNN與LSTM的對比
RNN:
LSTM:
其中的notation:
這裏要注意:上圖中四個黃框,每一個都是普通的神經網絡,激活函數就是框上面所標註的。
通過對比可以看出,RNN的一個cell中只有一個神經網絡,而LSTM的一個cell中有4個神經網絡,故一個LSTM cell的參數是一個RNN cell參數的四倍。
從上圖也可以看出,原來的一個RNN cell只需要存儲一個隱藏層狀態h,而一個LSTM cell需要存儲兩個狀態c和h。
LSTM比RNN多了一個細胞狀態,就是最上面一條線(也就是c),像一個傳送帶,信息可以不加改變的流動。即Ct-2可能和Ct+1存儲的信息可能非常相似,所以LSTM可以解決RNN長依賴的問題。
2. LSTM信息的流動
一個LSTM cell有3個門,分別叫做遺忘門(f門),輸入門(i門)和輸出門(o門)。要注意的是輸出門的輸出ot並不是LSTM cell最終的輸出,LSTM cell最終的輸出是ht和ct。
這三個門就是上圖中三個標着的黃色的框。sigmoid層輸出0-1的值,表示讓多少信息通過,1表示讓所有的信息都通過。
LSTM的輸入: , 和
LSTM的輸出: 、
= ( [, ] + )
= ( [, ] + )
= ( [, ] + )
= +
= ( [, ] + )
= ()
注意上面公式中的是對應元素乘,而不是矩陣的乘法
忘記門:扔掉信息(細胞狀態)
第一步是決定從細胞狀態裏扔掉什麼信息(也就是保留多少信息)。將上一步細胞狀態中的信息選擇性的遺忘 。
實現方式:通過sigmoid層實現的“忘記門”。以上一步的和這一步的作爲輸入,然後爲裏的每個數字輸出一個0-1間的值,記爲,表示保留多少信息(1代表完全保留,0表示完全捨棄)
例子:讓我們回到語言模型的例子中來基於已經看到的預測下一個詞。在這個問題中,細胞狀態可能包含當前主語的類別,因此正確的代詞可以被選擇出來。當我們看到新的主語,我們希望忘記舊的主語。
例如,他今天有事,所以我… 當處理到‘’我‘’的時候選擇性的忘記前面的’他’,或者說減小這個詞對後面詞的作用。
輸入層門:存儲信息(細胞狀態)
第二步是決定在細胞狀態裏存什麼。將新的信息選擇性的記錄到細胞狀態中。 實現方式:包含兩部分,
- sigmoid層(輸入門層)決定我們要更新什麼值,這個概率表示爲
- tanh層創建一個候選值向量,將會被增加到細胞狀態中。 我們將會在下一步把這兩個結合起來更新細胞狀態。
例子:在我們語言模型的例子中,我們希望增加新的主語的類別到細胞狀態中,來替代舊的需要忘記的主語。 例如:他今天有事,所以我…
當處理到‘’我‘’這個詞的時候,就會把主語我更新到細胞中去。
更新細胞狀態(細胞狀態)
注意上面公式中的是對應元素乘,而不是矩陣的乘法
更新舊的細胞狀態 實現方式: 表示忘記上一次的信息的程度,
表示要將候選值加入的程度, 這一步我們真正實現了移除哪些舊的信息(比如一句話中上一句的主語),增加哪些新信息,最後得到了本細胞的狀態 。
輸出層門:輸出(隱藏狀態)
最後,我們要決定作出什麼樣的預測。 實現方式:
- 我們通過sigmoid層(輸出層門)來決定輸出的本細胞狀態 的哪些部分;
- 然後我們將細胞狀態通過tanh層(使值在-1~1之間),然後與sigmoid層的輸出相乘得到最終的輸出 。
所以我們只輸出我們想輸出的部分。 例子:在語言模型的例子中,因爲它就看到了一個 代詞,可能需要輸出與一個 動詞相關的信息。例如,可能輸出是否代詞是單數還是複數,這樣如果是動詞的話,我們也知道動詞需要進行的詞形變化。
例如:上面的例子,當處理到‘’我‘’這個詞的時候,可以預測下一個詞,是動詞的可能性較大,而且是第一人稱。 會把前面的信息保存到隱層中去。
LSTM的各個變量
⊙ 是element-wise乘,即按元素乘
介紹下各個變量的維度,LSTM cell的輸出 的維度是黃框裏隱藏層神經元的個數,記爲d,即矩陣 , , , 的行數。t 時刻LSTM cell的輸入的維度記爲 n,最終的輸入是和的聯合,即[, ] ,其維度是,所有矩陣(包括 , , , )的維度都是[,+],所有的向量包括( , , , , , , , , , , 和)維度都是。(爲了表示、更新方便,我們將bias放到矩陣裏)
以舉例:
同理:
合併爲一個矩陣就是:
轉載自:https://blog.csdn.net/wjc1182511338/article/details/79285503 , 個別地方有補充