簡單理解LSTM神經網路

演算法與數學之美發表於2018-02-06

遞迴神經網路 


在傳統神經網路中,模型不會關注上一時刻的處理會有什麼資訊可以用於下一時刻,每一次都只會關注當前時刻的處理。舉個例子來說,我們想對一部影片中每一刻出現的事件進行分類,如果我們知道電影前面的事件資訊,那麼對當前時刻事件的分類就會非常容易。實際上,傳統神經網路沒有記憶功能,所以它對每一刻出現的事件進行分類時不會用到影片已經出現的資訊,那麼有什麼方法可以讓神經網路能夠記住這些資訊呢?答案就是Recurrent Neural Networks(RNNs)遞迴神經網路。

遞迴神經網路的結果與傳統神經網路有一些不同,它帶有一個指向自身的環,用來表示它可以傳遞當前時刻處理的資訊給下一時刻使用,結構如下: 


640?wx_fmt=png&wxfrom=5&wx_lazy=1 


其中,Xt為輸入,A為模型處理部分,ht為輸出。


為了更容易地說明遞迴神經網路,我們把上圖展開,得到: 


640?wx_fmt=png


這樣的一條鏈狀神經網路代表了一個遞迴神經網路,可以認為它是對相同神經網路的多重複制,每一時刻的神經網路會傳遞資訊給下一時刻。如何理解它呢?假設有這樣一個語言模型,我們要根據句子中已出現的詞預測當前詞是什麼,遞迴神經網路的工作原理如下: 


640?wx_fmt=png


其中,W為各類權重,x表示輸入,y表示輸出,h表示隱層處理狀態。


遞迴神經網路因為具有一定的記憶功能,可以被用來解決很多問題,例如:語音識別、語言模型、機器翻譯等。但是它並不能很好地處理長時依賴問題。


長時依賴問題 


長時依賴是這樣的一個問題,當預測點與依賴的相關資訊距離比較遠的時候,就難以學到該相關資訊。例如在句子”我出生在法國,……,我會說法語“中,若要預測末尾”法語“,我們需要用到上下文”法國“。理論上,遞迴神經網路是可以處理這樣的問題的,但是實際上,常規的遞迴神經網路並不能很好地解決長時依賴,好的是LSTMs可以很好地解決這個問題。


LSTM 神經網路 


Long Short Term Mermory network(LSTM)是一種特殊的RNNs,可以很好地解決長時依賴問題。那麼它與常規神經網路有什麼不同? 
首先我們來看RNNs具體一點的結構: 


640?wx_fmt=png


所有的遞迴神經網路都是由重複神經網路模組構成的一條鏈,可以看到它的處理層非常簡單,通常是一個單tanh層,通過當前輸入及上一時刻的輸出來得到當前輸出。與神經網路相比,經過簡單地改造,它已經可以利用上一時刻學習到的資訊進行當前時刻的學習了。


LSTM的結構與上面相似,不同的是它的重複模組會比較複雜一點,它有四層結構: 


640?wx_fmt=png


其中,處理層出現的符號及表示意思如下: 


640?wx_fmt=png


LSTMs的核心思想 


理解LSTMs的關鍵就是下面的矩形方框,被稱為memory block(記憶塊),主要包含了三個門(forget gate、input gate、output gate)與一個記憶單元(cell)。方框內上方的那條水平線,被稱為cell state(單元狀態),它就像一個傳送帶,可以控制資訊傳遞給下一時刻。 


640?wx_fmt=png


這個矩形方框還可以表示為: 


640?wx_fmt=png 


這兩個圖可以對應起來看,下圖中心的ct即cell,從下方輸入(ht−1,xt)到輸出ht的一條線即為cell state,ft,it,ot分別為遺忘門、輸入門、輸出門,用sigmoid層表示。上圖中的兩個tanh層則分別對應cell的輸入與輸出。


LSTM可以通過門控單元可以對cell新增和刪除資訊。通過門可以有選擇地決定資訊是否通過,它有一個sigmoid神經網路層和一個成對乘法操作組成,如下: 


640?wx_fmt=png 


該層的輸出是一個介於0到1的數,表示允許資訊通過的多少,0 表示完全不允許通過,1表示允許完全通過。


逐步解析LSTM

 
LSTM第一步是用來決定什麼資訊可以通過cell state。這個決定由“forget gate”層通過sigmoid來控制,它會根據上一時刻的輸出
ht−1和當前輸入xt來產生一個0到1 的ft值,來決定是否讓上一時刻學到的資訊Ct−1通過或部分通過。如下: 


640?wx_fmt=png


舉個例子來說就是,我們在之前的句子中學到了很多東西,一些東西對當前來講是沒用的,可以對它進行選擇性地過濾。


第二步是產生我們需要更新的新資訊。這一步包含兩部分,第一個是一個“input gate”層通過sigmoid來決定哪些值用來更新,第二個是一個tanh層用來生成新的候選值C~t,它作為當前層產生的候選值可能會新增到cell state中。我們會把這兩部分產生的值結合來進行更新。 


640?wx_fmt=png


現在我們對老的cell state進行更新,首先,我們將老的cell state乘以ft來忘掉我們不需要的資訊,然後再與it∗C~t相加,得到了候選值。


一二步結合起來就是丟掉不需要的資訊,新增新資訊的過程: 


640?wx_fmt=png


舉個例子就是,在前面的句子中我們儲存的是張三的資訊,現在有了新的李四資訊,我們需要把張三的資訊丟棄掉,然後把李四的資訊儲存下來。


最後一步是決定模型的輸出,首先是通過sigmoid層來得到一個初始輸出,然後使用tanh將 
Ct值縮放到-1到1間,再與sigmoid得到的輸出逐對相乘,從而得到模型的輸出。 

640?wx_fmt=png

這顯然可以理解,首先sigmoid函式的輸出是不考慮先前時刻學到的資訊的輸出,tanh函式是對先前學到資訊的壓縮處理,起到穩定數值的作用,兩者的結合學習就是遞迴神經網路的學習思想。至於模型是如何學習的,那就是後向傳播誤差學習權重的一個過程了。

上面是對LSTM一個典型結構的理解,當然,它也會有一些結構上的變形,但思想基本不變,這裡也就不多講了。


參考:http://colah.github.io/poss/2015-08-Understanding-LSTMs/

∑編輯 | Gemini

來源 | csdn部落格

640?wx_fmt=gif

演算法數學之美微信公眾號歡迎賜稿

稿件涉及數學、物理、演算法、計算機、程式設計等相關領域
稿件一經採用,我們將奉上稿酬。

投稿郵箱:math_alg@163.com


相關文章