當前位置: 首頁>>算法&結構>>正文


理解LSTM及其圖示符號

雖然我們不知道大腦的功能如何,但我們感覺它必須有一個邏輯單元和一個記憶單元,然後通過推理和經驗做出決定。所以類似的對於計算機來說,我們有邏輯單元,CPU和GPU,當然也有記憶(內存)單元。

但是當你看一個神經網絡時,它的功能就像一個黑匣子。你從一邊輸入一些輸入,你從另一邊接收一些輸出。它做出的決定主要基於當前的輸入。

我認為說神經網絡完全沒有記憶是不公平的。畢竟,這些學習的權重是對訓練數據的某種記憶 。但是這個記憶更加靜態。有時我們想記住一個輸入以備後用。這種情況有很多例子,比如股票市場。為了做出良好的投資判斷,我們必須至少從時間窗口查看股票數據。

讓神經網絡接受時間序列數據的簡單方法是將幾個神經網絡連接在一起。每個神經網絡處理一個時間步。不是在每個單獨的時間步驟提供數據,而是在窗口或上下文中的所有時間步驟向神經網絡提供數據。

很多時候,需要處理具有周期性模式的數據。作為一個比較簡陋的例子,假設你想預測聖誕樹銷售量。這是一個非常季節性的事情,並且可能每年僅高峰一次。所以預測聖誕樹銷售的好策略是從一年前的數據中查看數據。對於這類問題,您需要有一個很大的背景來包含古老的數據點,或者您擁有良好的記憶。你知道什麽數據是值得記住的,以備後用,什麽東西在無用時需要被遺忘。

理論上,單純連接的神經網絡,即所謂的遞歸神經網絡可以解決上述問題。但實際上,它有兩個問題:梯度消失和梯度爆炸,這使它在實踐中無法使用。

之後,LSTM(長期短期記憶)被發明出來,它通過明確引入一個內存單元來解決這個問題,稱為單元入網。這是LSTM構建模塊的示意圖。

乍一看很嚇人。讓我們忽略內部,但隻查看單元的輸入和輸出。該網絡需要三個輸入。 X_t是當前時間步的輸入。 h_t-1是前一個LSTM單元的輸出,C_t-1是前一個單元的記憶,我認為這是最重要的輸入。至於輸出,h_t是當前網絡的輸出。 C_t是當前單元的記憶。

因此,這個單元通過考慮當前輸入,先前輸出和先前的存儲器來做出決定。它會產生一個新的輸出並改變它的記憶 。

其內部 記憶 C_t變化的方式與通過管道輸送水是非常相似的。假設記憶是水,它會流入管道。你想要改變這種記憶流程,這種變化是由兩個閥門控製的。

第一個閥門被稱為遺忘閥門。如果關閉它,則不會保留舊的記憶。如果你完全打開這個閥門,所有舊的記憶都會通過。

第二個閥是新的記憶閥。新的記憶將通過上麵的T形接頭進入,並與舊內存合並。第二個閥門應該控製多少新記憶。

在LSTM圖上,頂部的“pipe”是記憶管道。輸入是舊的記憶(一個向量)。它通過的第一個交叉是遺忘閥。它實際上是一個element-wise乘法運算。所以如果你用一個接近0的向量乘以舊的記憶C_t-1,這意味著你想忘記大部分舊記憶。如果您的忘記閥門等於1,則讓舊記憶通過。

然後記憶流將經過的第二個操作是這個 +操作符。該運算符表示piece-wise總和。它類似於T形接頭管。新的內存和舊的內存將通過此操作合並。另一個閥門(+符號下麵的✖)控製舊存儲器應添加多少新記憶。

完成這兩個操作後,您將舊記憶C_t-1更改為新記憶C_t。

現在讓我們看看閥門。第一個被稱為遺忘閥。它由一個簡單的單層神經網絡控製。神經網絡的輸入是h_t-1,前一個LSTM塊的輸出X_t,當前LSTM塊的輸入C_t-1,前一塊的記憶以及最後的偏置矢量b_0。這個神經網絡有一個sigmoid函數作為激活,它的輸出矢量是遺忘閥,它將通過element-wise乘法應用到舊記憶C_t-1。

現在第二個閥被稱為新的記憶閥。再次,它是一個簡單的單層神經網絡,其輸入與遺忘閥相同。這個閥門控製著新記憶應該影響舊記憶的程度。

新的記憶本身是由另一個神經網絡產生的。它也是一個單層網絡,但使用tanh作為激活功能。該網絡的輸出將element-wise多個新的記憶閥門,並添加到舊的記憶中,形成新的記憶。

這兩個符號是遺忘閥和新的記憶閥。

最後,我們需要為這個LSTM單元生成輸出。該步驟具有由新記憶,先前輸出h_t-1,輸入X_t和偏置矢量控製的輸出閥。該閥門控製多少新的存儲器應該輸出到下一個LSTM單元。

上圖是受克裏斯托弗的博客文章的啟發。但大多數時候,你會看到如下圖。這兩種變化的主要區別在於下圖不會將記憶單元C視為單元的輸入。相反,它將它視為內部事物“Cell”。

我喜歡克裏斯托弗的圖,因為它明確地顯示了這個記憶C如何從前一個單元傳遞到下一個單元。但是在下麵的圖片中,你不能很容易地看到C_t-1實際上來自前一個單元。而C_t是輸出的一部分。

我不喜歡下麵的圖表的第二個原因是你在單元內執行的計算應該是有序的,但是你不能從下麵的圖表清楚地看到它。例如,要計算本機的輸出,您需要準備好新的記憶C_t。因此,第一步應該是評估C_t。

下圖嘗試用虛線和實線表示此“delay”或“order”(此圖片中有錯誤)。虛線表示舊老的記憶。實線表示新的記憶 。操作要求新的記憶必須等到C_t可用。

但是這兩個圖基本上是一樣的。在這裏,我想使用第一個圖的相同符號和顏色重新繪製上圖:

這是關閉舊記憶的遺忘門(閥):

這是新的記憶閥和新的記憶:

這些是兩個閥門和element-wise總和來合並舊記憶和新記憶,以形成C_t(綠色,流回大“Cell”):

這是LSTM單元的輸出閥和輸出:

參考資料

本文由《純淨天空》出品。文章地址: https://vimsky.com/zh-tw/article/3851.html,未經允許,請勿轉載。