這篇blog你們就隨便看一下吧,基本上是參照RNN模型與NLP應用(4/9):LSTM模型這個是video和Understanding LSTM Networks這篇博客寫出來的。實際上你們只須要看上述兩個內容就🆗了,他們的教程深刻淺出,形象生動。html
在網絡流量預測入門(一)之RNN 介紹中,對RNN的原理進行了介紹,而後,在簡單明朗的 RNN 寫詩教程中詳細的介紹瞭如何使用keras構建RNN模型來寫詩。git
而在這篇blog中將對LSTM進行介紹。github
LSTM全稱Long Short-Term Memory,中文名:長短時間記憶,是一種循環網絡。值得注意的是,Long Short-Term Memory中的-
是放在Short與Term中間的。相比較於Simple RNN,LSTM在長的時間序列中有着更好的表現。網絡
Simple RNN網絡會由於梯度消失問題,致使沒法回憶起長久的記憶,也就是說Simple RNN是一個Short-Term Memory的模型。可是,LSTM經過某一些操做,使得其可以回憶起長久的記憶,也就是說它是一個長的短時間記憶,所以被稱之爲 Long Short-Term Memory。——李宏毅ide
RNN會面臨兩個問題:梯度消失問題和梯度爆炸問題,關於具體的公式推導,能夠參考RNN 的梯度消失問題。函數
簡單點來講,就是下圖中的\(W\)和\(U\)會隨着時間序列的加長,也就是layer層數的增多而產生梯度消失和梯度爆炸問題。而LSTM經過門的機制解決了整個問題。post
下面將對LSTM的結構進行介紹。學習
下面是一張LSTM的結構示意圖,來自Understanding LSTM Networks,看起來很複雜,確實相比較於RNN,它確實要複雜不少,可是卻也沒那麼難理解。與Simple RNN很相似,input 一個\(x_t\),output一個狀態\(h_t\)。(只不過在其內部多了一個叫作Cell State的東西)ui
下圖中,被重複的單元稱之爲細胞(Cell),也就是圖中綠色的框框。spa
下圖是結構圖中所出現的符號:
先對符號作解釋:
- 表明的是神經網絡,中間的\(\sigma\)或者\(tanh\)表明的是其激活函數。
- 表示逐點操做:
- 表示逐點相乘:\(\left[\begin{array}{c}0.9 \\ 0.2 \\ -0.5 \\ -0.1\end{array}\right] \circ\left[\begin{array}{c}0.5 \\ 0 \\ 1 \\ 0.8\end{array}\right]=\left[\begin{array}{c}0.45 \\ 0 \\ -0.5 \\ -0.08\end{array}\right]\)
- 表示逐點相加:\(\left[\begin{array}{c}0.9 \\ 0.2 \\ -0.5 \\ -0.1\end{array}\right] + \left[\begin{array}{c}0.5 \\ 0 \\ 1 \\ 0.8\end{array}\right]=\left[\begin{array}{c}1.4 \\ 0.2 \\ 0.5 \\ 0.7\end{array}\right]\)
- 表示逐點用tanh函數:\(tanh(\left[\begin{array}{c}0.9 \\ 0.2 \\ -0.5 \\ -0.1\end{array}\right]) =\left[\begin{array}{c}0.717 \\ 0.198 \\ -0.462 \\ -0.100\end{array}\right]\)
- 表示以下將兩個矩陣鏈接起來:
LSTM發揮做用,離不開如下幾個概念:Cell State ,Forget Gate,Input Gate ,Output Gate。下面將詳細對其進行介紹。
Celle State是LSTM最關鍵的部分,它相似一條傳輸帶,貫穿LSTM整個部分(能夠形象地理解爲主要矛盾)。舉個例子:
當咱們分析一部小說主題的時候,確定不會一個字一個字地分析,咱們會抓住主要矛盾,分析小說中的主要情節矛盾,而後判斷一部小說的主題。
- 有些小說寫的比較隱晦,主題可能會在後段部分才顯現出來,所以咱們在讀小說的時候,會不斷更新腦海中對主要矛盾的印象,往裏面添加新的東西,同時刪除某些次要的東西。
- 有的小說開門見山,在文章的開始就會告訴你主題是什麼,所以,你在後面閱讀的過程當中,你就不會再向你腦海中的主要矛盾添加內容了,由於你知道後面的內容不會影響主要矛盾。
接下來將討論三種門,不過在討論三種門以前,咱們應該先弄清楚什麼是門。
內容參考於RNN模型與NLP應用(4/9):LSTM模型。
在LSTM中有三種門,那麼門究竟是什麼呢?門的做用很簡單,就是讓information選擇性經過。門的結構以下圖左邊所示:
在這種狀況下,當一個數據\(c\)經過一個門\(f\)🚪的時候(\(f\) 中的每個數都位於\(0\sim 1\)之間),\(f\)會對數據 \(c\) 進行選擇,可讓它所有經過(圖中的\(-0.5*1=-0.5\)),也可讓它徹底不經過(圖中的\(0.2*0=0\)),固然也可讓它部分的經過。
而在LSTM分別有着如下三種門:Forget Gate,Input Gate,Output Gate。
遺忘門構成以下所示\(f_{t}=\sigma\left(W_{f} \cdot\left[h_{t-1}, x_{t}\right]+b_{f}\right)\),\(f_t\)中的每個值都介於\(0\sim1\)之間,其中\(W_f\)和\(b_f\)是LSTM在訓練的時候,經過反向傳播進行學習的。
遺忘門的做用很簡單,那就是控制\(C_{t-1}\)中哪一些數據應該被「遺忘」。
圖中的 \(i_t\) 表示輸入門,\(\tilde{C}_{t}\)表示待加入Cell State的數據。\(i_t\)中的每個值都介於\(0\sim1\)之間,而\(\tilde{C}_{t}\)的值介於\(-1 \sim 1\)之間,其中\(W_i,W_c,b_i,b_c\)是經過反向傳播進行學習更新的。
輸入門的做用就是控制\(\tilde{C}_{t}\)中哪一些數據可以加入到Cell State中。
Cell State的更新須要遺忘門和輸入門的同時做用,遺忘門做用於上一個狀態\(C_{t-1}\),輸入門做用於當前輸入\(\tilde{C}_{t}=\tanh \left(W_{C} \cdot\left[h_{t-1}, x_{t}\right]+b_{c}\right)\)。這樣,當被遺忘門處理後的\(C_{t-1}\)加上新的輸入\(\tilde{C}_{t}\),就組成新的\(C_t\)了,完成了一次Cell State的更新。
輸出門的結構以下說所示,\(O_t\)中的每個值都介於\(0\sim1\)之間,其中\(W_o\)和\(b_o\)是LSTM在訓練的時候,經過反向傳播進行學習的。
輸出門的做用實際上就是經過控制\(C_t\)以達到控制\(h_t\)的目的。
輸出的示意圖以下所示,\(tanh(C_t)\)中的每個值都位於\(-1 \sim +1\)之間,輸出門\(O_t\)經過控制\(C_t\)的information,來產生輸出\(h_t\)。\(h_t\)會被賦值爲兩份,一份做爲下個layer的\(h_t\),一份用於LSTM在時序\(t\)時刻的輸出。
以上,即是對LSTM結構的介紹,若是已經可以很好的理解上面的內容,讓咱們再回過頭來看下面這張圖,是否是就感受簡單起來了呢?
在下篇博客,將介紹如何使用LSTM來生成音樂。嘿嘿嘿~~