瞭解LSTM網絡

遞歸神經網絡

人類不會每時每刻都開始思考。當你閱讀這篇文章時,你會根據你對之前單詞的理解來理解每個單詞。你不要扔掉所有東西,然後再從頭開始思考。你的想法有持久性。

傳統的神經網絡無法做到這一點,這似乎是一個主要的缺點。例如,假設您想要對電影中每個點發生的事件進行分類。目前尚不清楚傳統神經網絡如何利用其對電影中先前事件的推理來告知後者。

循環神經網絡解決了這個問題。它們是帶有循環的網絡,允許信息持續存在。

遞歸神經網絡具有循環。

在上圖中,一塊神經網絡,A一個,看一些輸入xŤXŤ並輸出值hŤHŤ。循環允許信息從網絡的一個步驟傳遞到下一個步驟。

這些循環使得循環神經網絡看起來有點神祕。但是,如果你多想一點,事實證明它們與普通的神經網絡並沒有什麼不同。可以將循環神經網絡視爲同一網絡的多個副本,每個副本都將消息傳遞給後繼者。考慮如果我們展開循環會發生什麼:

展開的遞歸神經網絡。

展開的遞歸神經網絡。

這種類似鏈的性質表明,遞歸神經網絡與序列和列表密切相關。它們是用於此類數據的神經網絡的自然架構。

他們肯定會被使用!在過去幾年中,將RNN應用於各種問題取得了令人難以置信的成功:語音識別,語言建模,翻譯,圖像字幕......這個列表還在繼續。我將討論使用RNNs可以實現的驚人壯舉,以及Andrej Karpathy的優秀博客文章,迴歸神經網絡的不合理有效性。但他們真的很棒。

這些成功的關鍵在於使用“LSTM”,這是一種非常特殊的遞歸神經網絡,對於許多任務而言,它比標準版本好得多。幾乎所有基於遞歸神經網絡的令人興奮的結果都是用它們實現的。這篇論文將探討這些LSTM。

長期依賴問題

RNN的一個吸引力是他們可能能夠將先前信息連接到當前任務,例如使用先前的視頻幀可能通知對當前幀的理解。如果RNN可以做到這一點,它們將非常有用。但他們可以嗎?這取決於。

有時,我們只需要查看最近的信息來執行當前任務。例如,考慮一種語言模型,試圖根據之前的單詞預測下一個單詞。如果我們試圖預測“雲在天空中”的最後一個詞,我們不需要任何進一步的背景 - 很明顯下一個詞將是天空。在這種情況下,如果相關信息與所需信息之間的差距很小,則RNN可以學習使用過去的信息。

但也有一些情況需要更多的背景。考慮嘗試預測文本中的最後一個詞“我在法國長大......我說流利的法語。”最近的信息表明,下一個詞可能是一種語言的名稱,但如果我們想縮小哪種語言,我們需要從更進一步的背景來看,法國的背景。相關信息與需要變得非常大的點之間的差距是完全可能的。

不幸的是,隨着差距的擴大,RNN無法學習連接信息。

神經網絡與長期依賴關係鬥爭。

理論上,RNN絕對能夠處理這種“長期依賴性”。人類可以仔細挑選參數來解決這種形式的玩具問題。遺憾的是,在實踐中,RNN似乎無法學習它們。Hochreiter(1991)[德國]Bengio等人對該問題進行了深入探討(1994),他找到了一些非常根本的原因,爲什麼它可能很難。

值得慶幸的是,LSTM沒有這個問題!

LSTM Networks

長短期內存網絡 - 通常只稱爲“LSTM” - 是一種特殊的RNN,能夠學習長期依賴性。它們由Hochreiter&Schmidhuber(1997)介紹,並在以下工作中被許多人提煉和推廣。1它們在各種各樣的問題上運作得非常好,現在被廣泛使用。

LSTM明確旨在避免長期依賴性問題。長時間記住信息實際上是他們的默認行爲,而不是他們難以學習的東西!

所有遞歸神經網絡都具有神經網絡重複模塊鏈的形式。在標準RNN中,該重複模塊將具有非常簡單的結構,例如單個tanh層。

標準RNN中的重複模塊包含單個層。

LSTM也具有這種類似鏈的結構,但重複模塊具有不同的結構。有四個,而不是一個神經網絡層,以一種非常特殊的方式進行交互。

LSTM神經網絡。

LSTM中的重複模塊包含四個交互層。

不要擔心發生了什麼的細節。我們將逐步介紹LSTM圖。現在,讓我們試着對我們將要使用的符號感到滿意。

在上圖中,每一行都攜帶一個整個向量,從一個節點的輸出到其他節點的輸入。粉色圓圈表示逐點運算,如矢量加法,而黃色框表示神經網絡層。行合併表示連接,而行分叉表示其內容被複制,副本將轉移到不同的位置。

LSTM背後的核心理念

LSTM的關鍵是單元狀態,水平線貫穿圖的頂部。

電池狀態有點像傳送帶。它直接沿着整個鏈運行,只有一些次要的線性交互。信息很容易沿着它不變地流動。

LSTM確實能夠移除或添加信息到細胞狀態,由稱爲門的結構精心調節。

蓋茨是一種可選擇通過信息的方式。它們由S形神經網絡層和逐點乘法運算組成。

sigmoid層輸出0到1之間的數字,描述每個組件應該通過多少。值爲零意味着“不讓任何東西通過”,而值爲1則意味着“讓一切都通過!”

LSTM具有三個這樣的門,用於保護和控制電池狀態。

一步一步的LSTM走過

我們的LSTM的第一步是確定我們將從細胞狀態中丟棄哪些信息。這個決定是由一個叫做“忘記門層”的sigmoid層決定的。它看着ht - 1HŤ- 1和xŤXŤ,並輸出0之間的數字0和11對於單元狀態C中的每個數字t - 1CŤ- 1。一個11代表“完全保持這個”而00 代表“完全擺脫這個”。

讓我們回到我們的語言模型示例,試圖根據以前的所有單詞預測下一個單詞。在這樣的問題中,細胞狀態可能包括當前受試者的性別,因此可以使用正確的代詞。當我們看到一個新主題時,我們想要忘記舊主題的性別。

下一步是確定我們將在單元狀態中存儲哪些新信息。這有兩個部分。首先,稱爲“輸入門層”的sigmoid層決定我們將更新哪些值。接下來,tanh層創建新候選值C的向量〜ŤC〜Ť,這可以添加到州。在下一步中,我們將結合這兩個來創建狀態更新。

在我們的語言模型的例子中,我們想要將新主題的性別添加到單元格狀態,以替換我們忘記的舊主題。

現在是時候更新舊的單元狀態,Ct - 1CŤ- 1,進入新的細胞狀態C.ŤCŤ。之前的步驟已經決定要做什麼,我們只需要實際做到這一點。

我們將舊狀態乘以fŤFŤ忘記了我們之前決定忘記的事情。然後我們加我Ť* C.〜Ť一世Ť*C〜Ť。這是新的候選值,根據我們決定更新每個州的值來縮放。

在語言模型的情況下,我們實際上放棄了關於舊主題的性別的信息並添加新信息,正如我們在前面的步驟中所做的那樣。

最後,我們需要決定我們要輸出的內容。此輸出將基於我們的單元狀態,但將是過濾版本。首先,我們運行一個sigmoid層,它決定我們要輸出的單元狀態的哪些部分。然後,我們把細胞狀態通過tanh正切(推值是間-1- 1和11並將它乘以sigmoid門的輸出,這樣我們只輸出我們決定的部分。

對於語言模型示例,由於它只是看到一個主題,它可能想要輸出與動詞相關的信息,以防接下來會發生什麼。例如,它可能輸出主語是單數還是複數,以便我們知道動詞應該與什麼形式共軛,如果接下來的話。

長期記憶的變種

到目前爲止我所描述的是一個非常正常的LSTM。但並非所有LSTM都與上述相同。事實上,似乎幾乎所有涉及LSTM的論文都使用略有不同的版本。差異很小,但值得一提的是其中一些。

Gers&Schmidhuber(2000)引入的一種流行的LSTM變體是添加“窺視孔連接”。這意味着我們讓柵極層看到單元狀態。

500

上面的圖表爲所有門增加了窺視孔,但許多論文會給一些窺視孔而不是其他的。

另一種變化是使用耦合的遺忘和輸入門。我們不是單獨決定忘記什麼以及應該添加新信息,而是共同做出這些決定。我們只會忘記當我們要在其位置輸入內容時。當我們忘記舊事物時,我們只向州輸入新值。

LSTM稍微有點戲劇性的變化是由Cho等人引入的門控循環單元(GRU)(2014年)。它將遺忘和輸入門組合成一個“更新門”。它還合併了單元狀態和隱藏狀態,並進行了一些其他更改。由此產生的模型比標準LSTM模型簡單,並且越來越受歡迎。

門控遞歸單元神經網絡。

這些只是最着名的LSTM變種中的一小部分。還有很多其他的東西,比如Yao等人的 Depth Gated RNNs (2015年)。還有一些完全不同的解決長期依賴關係的方法,如Koutnik等人的Clockwork RNNs (2014年)

哪種變體最好?差異是否重要?格雷夫等人。(2015)對流行的變種做了很好的比較,發現它們都差不多。Jozefowicz,et al。(2015)測試了超過一萬個RNN架構,找到了一些在某些任務上比LSTM更好的架構。

結論

早些時候,我提到了人們使用RNN取得的顯着成果。基本上所有這些都是使用LSTM實現的。對於大多數任務來說,它們確實工作得更好!

寫下來作爲一組方程式,LSTM看起來非常令人生畏。希望在這篇文章中逐步走過它們,使它們更加平易近人。

LSTM是我們通過RNN實現的重要一步。很自然地想知道:還有另一個重要的步驟嗎?研究人員的共同觀點是:“是的!下一步是它的注意力!“我們的想法是讓RNN的每一步都從一些更大的信息集中選擇信息。例如,如果您使用RNN創建描述圖像的標題,則可能會選擇圖像的一部分來查看其輸出的每個單詞。實際上,等人。(2015)做到這一點 - 如果你想探索注意力,它可能是一個有趣的起點!使用注意力已經取得了許多非常令人興奮的結果,而且似乎還有很多事情即將來臨......

注意力不是RNN研究中唯一激動人心的線索。例如,Kalchbrenner 等人的 Grid LSTMs (2015)似乎非常有希望。在生成模型中使用RNN的工作 - 例如Gregor,et al。(2015)Chung,et al。(2015年),或Bayer&Osendorfer(2015年) - 似乎也很有趣。過去幾年對於遞歸神經網絡來說是一個激動人心的時刻,即將到來的神經網絡承諾只會更加激動人心!

致謝

我很感謝很多人幫助我更好地理解LSTM,評論可視化,並對這篇文章提供反饋。

我非常感謝Google的同事提供的有用反饋,尤其是Oriol VinyalsGreg CorradoJon ShlensLuke VilnisIlya Sutskever。我也很感謝許多其他朋友和同事花時間幫助我,包括Dario AmodeiJacob Steinhardt。我特別感謝Kyunghyun Cho關於我的圖表的非常周到的信件。

在這篇文章之前,我在神經網絡教授的兩個研討會系列中練習解釋LSTM。感謝所有參與這些活動的人,感謝他們對我的耐心和反饋。

 

原文鏈接:http://colah.github.io/posts/2015-08-Understanding-LSTMs/

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