網路流量預測入門(二)之LSTM介紹
網路流量預測入門(二)之LSTM介紹
這篇blog大家就隨便看一下吧,基本上是參照RNN模型與NLP應用(4/9):LSTM模型這個是video和Understanding LSTM Networks這篇部落格寫出來的。實際上大家只需要看上述兩個內容就🆗了,他們的教程深入淺出,形象生動。
在網路流量預測入門(一)之RNN 介紹中,對RNN的原理進行了介紹,然後,在簡單明朗的 RNN 寫詩教程中詳細的介紹了如何使用keras構建RNN模型來寫詩。
而在這篇blog中將對LSTM進行介紹。
LSTM簡介
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。——李宏毅
Simple RNN的弊端
RNN會面臨兩個問題:梯度消失問題和梯度爆炸問題,關於具體的公式推導,可以參考RNN 的梯度消失問題。
簡單點來說,就是下圖中的\(W\)和\(U\)會隨著時間序列的加長,也就是layer層數的增多而產生梯度消失和梯度爆炸問題。而LSTM通過門的機制解決了整個問題。
下面將對LSTM的結構進行介紹。
LSTM的結構
下面是一張LSTM的結構示意圖,來自Understanding LSTM Networks,看起來很複雜,確實相比較於RNN,它確實要複雜很多,但是卻也沒那麼難理解。與Simple RNN很類似,input 一個\(x_t\),output一個狀態\(h_t\)。(只不過在其內部多了一個叫做Cell State的東西)
下圖中,被重複的單元稱之為細胞(Cell),也就是圖中綠色的框框。
下圖是結構圖中所出現的符號:
先對符號做解釋:
代表的是神經網路,中間的\(\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。下面將詳細對其進行介紹。
細胞狀態(Cell State)
Celle State是LSTM最關鍵的部分,它類似一條傳輸帶,貫穿LSTM整個部分(可以形象地理解為主要矛盾)。舉個例子:
當我們分析一部小說主題的時候,肯定不會一個字一個字地分析,我們會抓住主要矛盾,分析小說中的主要情節矛盾,然後判斷一部小說的主題。
- 有些小說寫的比較隱晦,主題可能會在後段部分才顯現出來,因此我們在讀小說的時候,會不斷更新腦海中對主要矛盾的印象,往裡面添加新的東西,同時刪除某些次要的東西。
- 有的小說開門見山,在文章的開始就會告訴你主題是什麼,因此,你在後面閱讀的過程中,你就不會再向你腦海中的主要矛盾添加內容了,因為你知道後面的內容不會影響主要矛盾。
接下來將討論三種門,不過在討論三種門之前,我們應該先弄清楚什麼是門。
內容參考於RNN模型與NLP應用(4/9):LSTM模型。
門(Gate)
在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。
遺忘門(Forget 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}\)中哪一些數據應該被「遺忘」。
輸入門(Input Gate)
圖中的 \(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的更新
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的更新。
輸出門(Output Gate)
輸出門的結構如下說所示,\(O_t\)中的每一個值都介於\(0\sim1\)之間,其中\(W_o\)和\(b_o\)是LSTM在訓練的時候,通過反向傳播進行學習的。
輸出門的作用實際上就是通過控制\(C_t\)以達到控制\(h_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來生成音樂。嘿嘿嘿~~
參考
- RNN模型與NLP應用(4/9):LSTM模型
- Understanding LSTM Networks
- 什麼是 LSTM 循環神經網路
- ML Lecture 21-1: Recurrent Neural Network (Part I)
- RNN 的梯度消失問題