一文看懂從 RNN 到 LSTM
僅作學術交流,如有侵權,請聯(lián)系后臺刪除
這是在看了臺大李宏毅教授的深度學習視頻之后的一點總結和感想。看完介紹的第一部分 RNN 尤其 LSTM 的介紹之后,整個人醍醐灌頂。本篇博客就是對視頻的一些記錄加上了一些個人的思考。
???0. 從 RNN 說起
循環(huán)神經網絡(Recurrent Neural Network,RNN)是一種用于處理序列數(shù)據(jù)的神經網絡。相比一般的神經網絡來說,他能夠處理序列變化的數(shù)據(jù)。比如某個單詞的意思會因為上文提到的內容不同而有不同的含義,RNN 就能夠很好地解決這類問題。
???1. 普通 RNN

?為當前狀態(tài)下數(shù)據(jù)的輸入,?
?表示接收到的上一個節(jié)點的輸入。
?為當前節(jié)點狀態(tài)下的輸出,而?
?為傳遞到下一個節(jié)點的輸出。
對這里的?y?如何通過?h'?計算得到往往看具體模型的使用方式。通過序列形式的輸入,我們能夠得到如下形式的 RNN。

???2. LSTM
2.1 什么是 LSTM
LSTM 結構(圖右)和普通 RNN 的主要輸入輸出區(qū)別如下所示。

?,LSTM有兩個傳輸狀態(tài),一個?
?(cell state),和一個?
(hidden state)。(Tips:RNN 中的?
?對于 LSTM 中的?
?)
?改變得很慢,通常輸出的?
?是上一個狀態(tài)傳過來的?
?加上一些數(shù)值。
?則在不同節(jié)點下往往會有很大的區(qū)別。2.2 深入 LSTM 結構
下面具體對 LSTM 的內部結構來進行剖析。
首先使用 LSTM 的當前輸入?
?和上一個狀態(tài)傳遞下來的?
?拼接訓練得到四個狀態(tài)。


其中,?
?,?
?,
?是由拼接向量乘以權重矩陣之后,再通過一個?
?激活函數(shù)轉換成0到1之間的數(shù)值,來作為一種門控狀態(tài)。而?
?則是將結果通過一個?
?激活函數(shù)將轉換成-1到1之間的值(這里使用?
?是因為這里是將其做為輸入數(shù)據(jù),而不是門控信號)。
下面開始進一步介紹這四個狀態(tài)在 LSTM 內部的使用。(敲黑板)

?是 Hadamard Product,也就是操作矩陣中對應的元素相乘,因此要求兩個相乘矩陣是同型的。?
?則代表進行矩陣加法。
LSTM 內部主要有三個階段:
1. 忘記階段。這個階段主要是對上一個節(jié)點傳進來的輸入進行選擇性忘記。簡單來說就是會 “忘記不重要的,記住重要的”。
具體來說是通過計算得到的?
?(f表示forget)來作為忘記門控,來控制上一個狀態(tài)的?
?哪些需要留哪些需要忘。
?進行選擇記憶。哪些重要則著重記錄下來,哪些不重要,則少記一些。當前的輸入內容由前面計算得到的?
?表示。而選擇的門控信號則是由?
?(i 代表 information)來進行控制。將上面兩步得到的結果相加,即可得到傳輸給下一個狀態(tài)的??。也就是上圖中的第一個公式。
3. 輸出階段。這個階段將決定哪些將會被當成當前狀態(tài)的輸出。主要是通過?
?來進行控制的。并且還對上一階段得到的?
?進行了放縮(通過一個 tanh 激活函數(shù)進行變化)。
與普通 RNN 類似,輸出?
?往往最終也是通過?
?變化得到。
