簡單理解LSTM神經網路
遞迴神經網路
在傳統神經網路中,模型不會關注上一時刻的處理會有什麼資訊可以用於下一時刻,每一次都只會關注當前時刻的處理。舉個例子來說,我們想對一部影片中每一刻出現的事件進行分類,如果我們知道電影前面的事件資訊,那麼對當前時刻事件的分類就會非常容易。實際上,傳統神經網路沒有記憶功能,所以它對每一刻出現的事件進行分類時不會用到影片已經出現的資訊,那麼有什麼方法可以讓神經網路能夠記住這些資訊呢?答案就是Recurrent Neural Networks(RNNs)遞迴神經網路。
遞迴神經網路的結果與傳統神經網路有一些不同,它帶有一個指向自身的環,用來表示它可以傳遞當前時刻處理的資訊給下一時刻使用,結構如下:
其中,Xt為輸入,A為模型處理部分,ht為輸出。
為了更容易地說明遞迴神經網路,我們把上圖展開,得到:
這樣的一條鏈狀神經網路代表了一個遞迴神經網路,可以認為它是對相同神經網路的多重複制,每一時刻的神經網路會傳遞資訊給下一時刻。如何理解它呢?假設有這樣一個語言模型,我們要根據句子中已出現的詞預測當前詞是什麼,遞迴神經網路的工作原理如下:
其中,W為各類權重,x表示輸入,y表示輸出,h表示隱層處理狀態。
遞迴神經網路因為具有一定的記憶功能,可以被用來解決很多問題,例如:語音識別、語言模型、機器翻譯等。但是它並不能很好地處理長時依賴問題。
長時依賴問題
長時依賴是這樣的一個問題,當預測點與依賴的相關資訊距離比較遠的時候,就難以學到該相關資訊。例如在句子”我出生在法國,……,我會說法語“中,若要預測末尾”法語“,我們需要用到上下文”法國“。理論上,遞迴神經網路是可以處理這樣的問題的,但是實際上,常規的遞迴神經網路並不能很好地解決長時依賴,好的是LSTMs可以很好地解決這個問題。
LSTM 神經網路
Long Short Term Mermory network(LSTM)是一種特殊的RNNs,可以很好地解決長時依賴問題。那麼它與常規神經網路有什麼不同?
首先我們來看RNNs具體一點的結構:
所有的遞迴神經網路都是由重複神經網路模組構成的一條鏈,可以看到它的處理層非常簡單,通常是一個單tanh層,通過當前輸入及上一時刻的輸出來得到當前輸出。與神經網路相比,經過簡單地改造,它已經可以利用上一時刻學習到的資訊進行當前時刻的學習了。
LSTM的結構與上面相似,不同的是它的重複模組會比較複雜一點,它有四層結構:
其中,處理層出現的符號及表示意思如下:
LSTMs的核心思想
理解LSTMs的關鍵就是下面的矩形方框,被稱為memory block(記憶塊),主要包含了三個門(forget gate、input gate、output gate)與一個記憶單元(cell)。方框內上方的那條水平線,被稱為cell state(單元狀態),它就像一個傳送帶,可以控制資訊傳遞給下一時刻。
這個矩形方框還可以表示為:
這兩個圖可以對應起來看,下圖中心的ct即cell,從下方輸入(ht−1,xt)到輸出ht的一條線即為cell state,ft,it,ot分別為遺忘門、輸入門、輸出門,用sigmoid層表示。上圖中的兩個tanh層則分別對應cell的輸入與輸出。
LSTM可以通過門控單元可以對cell新增和刪除資訊。通過門可以有選擇地決定資訊是否通過,它有一個sigmoid神經網路層和一個成對乘法操作組成,如下:
該層的輸出是一個介於0到1的數,表示允許資訊通過的多少,0 表示完全不允許通過,1表示允許完全通過。
逐步解析LSTM
LSTM第一步是用來決定什麼資訊可以通過cell state。這個決定由“forget gate”層通過sigmoid來控制,它會根據上一時刻的輸出ht−1和當前輸入xt來產生一個0到1 的ft值,來決定是否讓上一時刻學到的資訊Ct−1通過或部分通過。如下:
舉個例子來說就是,我們在之前的句子中學到了很多東西,一些東西對當前來講是沒用的,可以對它進行選擇性地過濾。
第二步是產生我們需要更新的新資訊。這一步包含兩部分,第一個是一個“input gate”層通過sigmoid來決定哪些值用來更新,第二個是一個tanh層用來生成新的候選值C~t,它作為當前層產生的候選值可能會新增到cell state中。我們會把這兩部分產生的值結合來進行更新。
現在我們對老的cell state進行更新,首先,我們將老的cell state乘以ft來忘掉我們不需要的資訊,然後再與it∗C~t相加,得到了候選值。
一二步結合起來就是丟掉不需要的資訊,新增新資訊的過程:
舉個例子就是,在前面的句子中我們儲存的是張三的資訊,現在有了新的李四資訊,我們需要把張三的資訊丟棄掉,然後把李四的資訊儲存下來。
最後一步是決定模型的輸出,首先是通過sigmoid層來得到一個初始輸出,然後使用tanh將
Ct值縮放到-1到1間,再與sigmoid得到的輸出逐對相乘,從而得到模型的輸出。
這顯然可以理解,首先sigmoid函式的輸出是不考慮先前時刻學到的資訊的輸出,tanh函式是對先前學到資訊的壓縮處理,起到穩定數值的作用,兩者的結合學習就是遞迴神經網路的學習思想。至於模型是如何學習的,那就是後向傳播誤差學習權重的一個過程了。
上面是對LSTM一個典型結構的理解,當然,它也會有一些結構上的變形,但思想基本不變,這裡也就不多講了。
參考:http://colah.github.io/poss/2015-08-Understanding-LSTMs/
∑編輯 | Gemini
來源 | csdn部落格
演算法數學之美微信公眾號歡迎賜稿
稿件涉及數學、物理、演算法、計算機、程式設計等相關領域
稿件一經採用,我們將奉上稿酬。
投稿郵箱:math_alg@163.com
相關文章
- LSTM神經網路神經網路
- 最簡單的人工神經網路神經網路
- 簡單的神經網路測試神經網路
- YJango的迴圈神經網路——實現LSTMGo神經網路
- 簡單的圖神經網路介紹神經網路
- YJango的迴圈神經網路——scan實現LSTMGo神經網路
- 神經網路篇——從程式碼出發理解BP神經網路神經網路
- 一文讀懂LSTM和迴圈神經網路神經網路
- 3.2 神經網路的通俗理解神經網路
- 人工神經網路簡介神經網路
- Chainer 使複雜神經網路變的簡單AI神經網路
- RNN-迴圈神經網路和LSTM_01基礎RNN神經網路
- CNN-卷積神經網路簡單入門(2)CNN卷積神經網路
- JavaScript 實現簡單的神經網路演算法JavaScript神經網路演算法
- 迴圈神經網路LSTM RNN迴歸:sin曲線預測神經網路RNN
- 簡述脈衝神經網路SNN:下一代神經網路神經網路
- 機器學習:深入理解LSTM網路 (二)機器學習
- RNN與LSTM網路簡述RNN
- MATLAB神經網路工具箱(簡單操作介紹)Matlab神經網路
- RBF神經網路簡單介紹與MATLAB實現神經網路Matlab
- 用 JS 實現簡單的神經網路演算法JS神經網路演算法
- Machine Learning:神經網路簡介Mac神經網路
- 神經網路:numpy實現神經網路框架神經網路框架
- 神經網路神經網路
- 理解神經網路的不同損失函式神經網路函式
- 卷積神經網路數學原理解析卷積神經網路
- 文科生如何理解卷積神經網路?卷積神經網路
- 理解神經網路中的目標函式神經網路函式
- CNN筆記:通俗理解卷積神經網路CNN筆記卷積神經網路
- MATLAB神經網路工具箱(程式碼簡單實現)Matlab神經網路
- 如何簡單形象又有趣地弄懂神經網路是什麼?神經網路
- 十 | 門控迴圈神經網路LSTM與GRU(附python演練)神經網路Python
- 案例剖析:利用LSTM深層神經網路進行時間序列預測神經網路
- 深度學習四從迴圈神經網路入手學習LSTM及GRU深度學習神經網路
- [譯] 除錯神經網路的清單除錯神經網路
- 8、神經網路神經網路
- BP神經網路神經網路
- 模糊神經網路神經網路