理解長短期記憶(Long Short Term Memory, LSTM)模型(colah 原文翻譯)

本文爲譯文,詳見原文

遞歸神經網絡(Recurrent Neural Network, RNN)

人類每時每刻的思考都不是孤立的從頭開始,就像你在閱讀這篇文章時,你對每個詞的理解都是基於對先前詞的理解而產生的,因爲你的想法是具有時序關聯性的。

傳統神經網絡的一個主要缺點是——做不到信息的時序關聯。舉個例子,想象一下你想區分一個電影某個時間點所發生的事件,傳統的神經網絡就做不到根據之前的事件來推理得到下一個事件。

遞歸神經網絡(RNN)可以解決這一問題,它的網絡結構中存在迴環,使得之前的信息得以保留。
這裏寫圖片描述

上面的示意圖中,模塊A 接收輸入xt ,並輸出一個值ht ,環形結構允許信息從一個網絡狀態轉移到下一個網絡狀態。

有了環形結構,使得RNN看上去有些神祕,但如果你仔細想一想,它們其實與常規的神經網絡並無不同。一個遞歸神經網絡可以被認爲是相同網絡的多次複製,每個網絡將一個信號傳遞到它的下一個網絡,如果我們將環形結構展開:
展開RNN

該鏈式結構揭示了RNN與序列(sequences)和列表(lists)緊密關聯,用這種神經網絡結構處理特定數據(文本,語言等)也是直觀自然的。在過去的幾年中,已經有一些難以置信的RNN成功應用案例來解決各種問題:語音識別、語言建模、翻譯、圖片字幕……這個名單還在不斷擴展,相關討論見Andrej Karpathy的博文:The Unreasonable Effectiveness of Recurrent Neural Networks

這些成功背後的本質是“長短期記憶模型(LSTMs)”的使用,這是一種特殊的遞歸神經網絡,它對很多任務都適用,而且相較於標準的RNN模型,它的性能要高出許多,幾乎所有基於RNN令人激動的成果都是由它取得。本文也將探索這些LSTM模型。

長期依賴(Long-Term Dependencies)的問題

RNN優勢之一在於它們能夠將先前的信息關聯到當前的任務中,比如用之前的視頻幀可以輔助理解當前的視頻幀。如果RNN真能做到這些,那將是非常有用的,但真是這樣嗎?視情況而定!

有時我們只需要看當前的信息就能完成當前的任務,比如:考慮一個語言預測模型想要根據之前的單詞預測下一個單詞。如果我們想要預測這句話“the clouds are in the sky,”的最後一個詞,那麼很顯然即使根據前面的5個單詞我們也能夠預測到下一個單詞是“sky”。這些情況下,相關的信息距離所求信息的距離不遠,所以RNN能夠學習使用先前信息。
RNN3

但在有些情況下,我們需要更多的背景信息。如果想要預測“I grew up in France… I speak fluent French.”這句話的最後一個單詞,離得近的句子“I speak fluent”暗示後面的單詞很可能是一種語言,但如果我們想要確定是哪種語言,我們就需要先前出現的背景信息“France”,但它距離當前預測單詞位置太遠了。不幸的是,當這個距離變大時,RNN網絡將不能夠關聯這些背景信息了。
這裏寫圖片描述

理論上來說,通過人工挑選合適參數,RNN網絡應該是完全可以解決這樣的“長期依賴”問題的,但實際上RNN網絡好像並不能做到。這個問題被Hochreiter (1991)Bengio, et al. (1994)等人深入探索過,他們發現了一些根本原因。

幸運的是,LSTM不存在這樣的問題!

LSTM 網絡

Long Short Term Memory networks通常稱爲“LSTMs”,是一種特殊的RNN,它被設計用來避免長期依賴的問題。

所有的遞歸神經網絡都是重複的神經網絡鏈,在標準的RNN中,這種重複的子模塊有一種很簡單的結構,比如一個tanh層。
RNN5

LSTMs也有這種鏈式結構,但是重複的子模塊結構不一樣,它不僅僅只有單一神經網絡層,而是有四個層以一種特殊的方式進行交互。
RNN6

不要擔心細節,下面我們將一步步展開講解LSTM的結構。現在,我們先了解示意圖中用到的表示符號:
RNN7

上面的線條符號都包含一個向量,從一個節點到另一個節點,粉色的圓圈代表點對點的操作,比如向量相加,黃色的框代表學習到的神經網絡。相交的線條代表信息合併,分開的線條代表信息複製分裂。

LSTMs背後的核心思想

LSTMs的關鍵是元胞狀態(cell state),也就是在頂端的水平直線。元胞狀態有點像傳送帶,它沿着整條鏈一直向下,只與少數的線條有交互,信息可以容易地從它裏面流過,不作過多改變。
RNN8

LSTM也能夠往元胞狀態增加或者減少信息,這由門(gates)結構控制。門能夠選擇性地讓信息通過。它們由sigmoid神經網絡層組成,並經過一個點乘操作。
RNN9

sigmoid層輸出0到1之間的數字,描述允許每一部分通過百分之多少的信息。0代表捨棄所有信息,1代表讓所有信息通過。一個LSTM有三個這樣的門來保護和控制元胞狀態。

LSTM工作步驟的詳細介紹

LSTM中的第一步是決定什麼信息將從元胞狀態中被丟棄,該決定由一個叫“遺忘門”的sigmoid層產生,它的輸入是ht1xt ,輸出是一個0到1之間的係數,元胞狀態Ct1 中的每個數字都要與該係數相乘。

讓我們回到上面那個根據之前的所有詞預測下一個詞的語言模型,在這種情況下,元胞狀態可能包含當前主語的性別(男or女),根據它使用正確的代詞(he/she),當有一個新的主語時,我們希望遺忘先前主語的性別。
RNN10

下一步是決定哪些新的信息將被存儲到元胞狀態中,這包含兩個部分。首先,一個叫“輸入門層”的sigmoid層決定我們將要更新哪些值;然後,一個tanh層創建一個新的可被加入元胞狀態的候選值向量Ct~ ;最後,我們將結合上面的一個值和一個向量,更新狀態。

用上面的語言模型舉例,就是我們想要加入新主語的性別信息到狀態中,從而代替我們想遺忘的舊的性別信息。
RNN11

下面要將舊的狀態Ct1 更新到新的狀態Ct ,上面的步驟已經決定了做什麼,我們只需要執行就好。

我們將舊狀態乘上ft ,先忘記我們決定忘記的信息。然後加上itCt~ ,即用每個狀態值更新率it 乘上候選值向量。

在語言模型中,這相當於我們正真丟棄掉關於舊主語性別的信息,同時加上新主語性別的信息。
RNN12

下面我們需要決定輸出是什麼,這個輸出將基於元胞狀態,但需要被過濾一下。首先,我們用一個sigmoid門決定元胞狀態的哪一部分將被輸出;然後,將元胞狀態經過一個tanh層(使得值被規範化到-1到1之間);最後,將得到的值乘上sigmoid門輸出的結果,從而得到我們決定輸出的部分。

類比語言模型例子,因爲它只看到了一個主語,下面它可能想要輸出與一個動詞相關的信息,比如可能輸出這個主語是單數還是複數形式的,這樣我們就能知道主語後面應該跟哪一個動詞形式了。
RNN13

LSTM的變種結構

上面介紹的是一種很普通的LSTM,但並不是所有的LSTM都跟它的一樣,LSTM還有一些其他變種模型。實際上,幾乎每一篇關於LSTM的文章都使用了稍微不同的版本,但差別都比較細微,下面介紹幾種值得一提的變種模型。

Gers & Schmidhuber (2000)等人發明了一種比較受歡迎的LSTM變種模型,在標準LSTM結構中加入了“窺視孔連接”(“peephole connections”),這意味着我們讓門能夠看到元胞狀態。
RNN14

從上面的示意圖可以看出,每一個門層都加上了窺視孔,但許多文章會選擇一些門加窺視孔,並不是所有門都有。

另一個變種使用連接的遺忘和輸入門,沒有將決定忘記什麼舊信息和加入什麼新信息分開先後處理,而是二者同時做出決策。我們忘記的狀態信息和新加入的狀態信息一樣多。
RNN15

一個引人注目的LSTM變種叫門遞歸單元(Gated Recurrent Unit, GRU),由 Cho, et al. (2014)提出。它將遺忘門和輸入門合併成一個“更新門”(“update gate”),它還合併了元胞狀態(cell state)和隱藏狀態(hidden state),還有其他的一些變化。得到的模型比標準的LSTM模型要簡單一些,而且正變得原來越受歡迎。
RNN16

這只是最有名的LSTM變種中的一些,還有很多其他變種,比如Yao, et al. (2015)提出的Depth Gated RNNs。還有一些完全不同的解決長期依賴的方案,比如Koutnik, et al. (2014)提出的Clockwork RNNs。

那麼哪一個變種是最好的呢?它們不同之處重要嗎?Greff, et al. (2015)做了一個很好工作,比較了那些有名的變種模型後發現它們都差不多。 Jozefowicz, et al. (2015)測試了超過10000個RNN結構,發現了一些在特定任務中表現比LSTMs更好的模型。

結論

之前就提過,人們用RNN所取得的顯著結果大多數都是用LSTMs取得的,它們確實在大多數任務中表現更佳。

如果用一連串的數學等式來描述LSTM,看起來確實很唬人,希望通過這篇文章能夠讓你更好地理解LSTM。

LSTM是RNN基礎上的一次飛躍,我們自然會想:還有沒有其他飛躍的可能性?研究者的普遍觀點是“有!下一步變革就是注意力(Attention)”,這個觀點是讓RNN有目的性地從大量的信息中挑選出一部分信息。比如,如果你用RNN創建一幅圖片的文字描述(caption description),它的每一個輸出文字都是選擇圖片中的一小部分得到的。實際上,Xu, et al. (2015)就做了這個工作,如果你想探索注意力,這將是一個有趣的着眼點。使用注意力已經誕生了許多令人激動的成果,而且有更多有待挖掘的地方。

注意力不是唯一令人激動的RNN研究方向,比如,Kalchbrenner, et al. (2015)的Grid LSTMs似乎也很有前景。在生成模型中使用RNN,比如 Gregor, et al. (2015)Chung, et al. (2015)或者Bayer & Osendorfer (2015)也似乎非常有趣。接下來的幾年對RNN來說是令人激動的一段時期,新的研究成果將會更有趣。

Reference

[1] http://colah.github.io/posts/2015-08-Understanding-LSTMs/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章