翻譯自colah'blog,網址爲http://colah.github.io/posts/2015-08-Understanding-LSTMs/git
Long Short-Term Memory 網絡—— 通常就叫作 LSTM ——是一種 RNN 特殊的類型,能夠學習長期依賴信息。LSTM 由Hochreiter & Schmidhuber (1997)提出,並在近期被Alex Graves進行了改良和推廣。在不少問題,LSTM 都取得至關巨大的成功,並獲得了普遍的使用。github
LSTM 經過刻意的設計來避免長期依賴問題。記住長期的信息在實踐中LSTM 的默認行爲,而非須要付出很大代價才能得到的能力!微信
全部 RNN 都具備一種重複神經網絡模塊的鏈式的形式。在標準的 RNN 中,這個重複的模塊只有一個很是簡單的結構,例如一個 tanh 層。網絡
LSTM 一樣是這樣的結構,可是重複的模塊擁有一個不一樣的結構。不一樣於 單一神經網絡層,這裏是有四個,以一種很是特殊的方式進行交互。post
如今,咱們先來熟悉一下圖中使用的各類元素的圖標。學習
在上面的圖例中,每一條黑線傳輸着一整個向量,從一個節點的輸出到其餘節點的輸入。粉色的圈表明 pointwise 的操做,諸如向量的和,而黃色的矩陣就是學習到的神經網絡層。合在一塊兒的線表示向量的鏈接,分開的線表示內容被複制,而後分發到不一樣的位置。人工智能
LSTM 的核心思想
LSTM 的關鍵就是細胞狀態,水平線在圖上方貫穿運行。spa
細胞狀態相似於傳送帶。直接在整個鏈上運行,只有一些少許的線性交互。信息在上面流傳保持不變會很容易。.net
LSTM 有經過精心設計的稱做爲「門」的結構來去除或者增長信息到細胞狀態的能力。門是一種讓信息選擇式經過的方法。他們包含一個 sigmoid 神經網絡層和一個 pointwise 乘法操做。翻譯
Sigmoid 層輸出 0 到 1 之間的數值,描述每一個部分有多少許能夠經過。0 表明「不準任何量經過」,1 就指「容許任意量經過」!
LSTM 擁有三個門,來保護和控制細胞狀態。
逐步理解 LSTM
在咱們 LSTM 中的第一步是決定咱們會從細胞狀態中丟棄什麼信息。這個決定經過一個稱爲忘記門層完成。該門會讀取 h_{t-1}
和 x_t
,輸出一個在 0 到 1 之間的數值給每一個在細胞狀態 C_{t-1}
中的數字。1 表示「徹底保留」,0 表示「徹底捨棄」。
讓咱們回到語言模型的例子中來基於已經看到的預測下一個詞。在這個問題中,細胞狀態可能包含當前主語的性別,所以正確的代詞能夠被選擇出來。當咱們看到新的主語,咱們但願忘記舊的主語。
下一步是肯定什麼樣的新信息被存放在細胞狀態中。這裏包含兩個部分。第一,sigmoid 層稱 「輸入門層」 決定什麼值咱們將要更新。而後,一個 tanh 層建立一個新的候選值向量,\tilde{C}_t
,會被加入到狀態中。下一步,咱們會講這兩個信息來產生對狀態的更新。
在咱們語言模型的例子中,咱們但願增長新的主語的性別到細胞狀態中,來替代舊的須要忘記的主語。
如今是更新舊細胞狀態的時間了,C_{t-1}
更新爲 C_t
。前面的步驟已經決定了將會作什麼,咱們如今就是實際去完成。
咱們把舊狀態與 f_t
相乘,丟棄掉咱們肯定須要丟棄的信息。接着加上 i_t * \tilde{C}_t
。這就是新的候選值,根據咱們決定更新每一個狀態的程度進行變化。
在語言模型的例子中,這就是咱們實際根據前面肯定的目標,丟棄舊代詞的性別信息並添加新的信息的地方。
更新細胞狀態
最終,咱們須要肯定輸出什麼值。這個輸出將會基於咱們的細胞狀態,可是也是一個過濾後的版本。首先,咱們運行一個 sigmoid 層來肯定細胞狀態的哪一個部分將輸出出去。接着,咱們把細胞狀態經過 tanh 進行處理(獲得一個在 -1 到 1 之間的值)並將它和 sigmoid 門的輸出相乘,最終咱們僅僅會輸出咱們肯定輸出的那部分。
在語言模型的例子中,由於他就看到了一個 代詞,可能須要輸出與一個 動詞 相關的信息。例如,可能輸出是否代詞是單數仍是負數,這樣若是是動詞的話,咱們也知道動詞須要進行的詞形變化。
本文分享自微信公衆號 - AI MOOC人工智能平臺(AIMOOC_XLAB)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。