【译】深入理解LSTM网络
遞歸神經網絡
人類不會每時每刻都開始思考。 當你閱讀這篇文章時,你會根據你對之前單詞的理解來理解每個單詞。 你不要扔掉所有東西,然后再從頭開始思考。 你的想法有持久性。
傳統的神經網絡無法做到這一點,這似乎是一個主要的缺點。 例如,假設您想要對電影中每個點發生的事件進行分類。 目前尚不清楚傳統神經網絡如何利用其對電影中先前事件的推理來告知后者。
循環神經網絡解決了這個問題。 它們是帶有循環的網絡,允許信息持續存在。
遞歸神經網絡具有循環。
在上圖中,一塊神經網絡\(A \) ,查看一些輸入\(x_t \)并輸出一個值\(h_t \) 。 循環允許信息從網絡的一個步驟傳遞到下一個步驟。
這些循環使得循環神經網絡看起來有點神秘。 但是,如果你多想一點,事實證明它們與普通的神經網絡并沒有什么不同。 可以將循環神經網絡視為同一網絡的多個副本,每個副本都將消息傳遞給后繼者。 考慮如果我們展開循環會發生什么:
展開的遞歸神經網絡。
這種類似鏈的性質表明,遞歸神經網絡與序列和列表密切相關。 它們是用于此類數據的神經網絡的自然架構。
他們肯定會被使用! 在過去幾年中,將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確實能夠移除或添加信息到細胞狀態,由稱為門的結構精心調節。
蓋茨是一種可選擇通過信息的方式。 它們由S形神經網絡層和逐點乘法運算組成。
sigmoid層輸出0到1之間的數字,描述每個組件應該通過多少。 值為零意味著“不讓任何東西通過”,而值為1則意味著“讓一切都通過!”
LSTM具有三個這樣的門,用于保護和控制電池狀態。
一步一步的LSTM走過
我們的LSTM的第一步是確定我們將從細胞狀態中丟棄哪些信息。 這個決定是由一個叫做“忘記門層”的sigmoid層決定的。它看著\(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門的輸出,這樣我們只輸出我們決定的部分。
對于語言模型示例,由于它只是看到一個主題,它可能想要輸出與動詞相關的信息,以防接下來會發生什么。 例如,它可能輸出主語是單數還是復數,以便我們知道動詞應該與什么形式共軛,如果接下來的話。
長期記憶的變種
到目前為止我所描述的是一個非常正常的LSTM。 但并非所有LSTM都與上述相同。 事實上,似乎幾乎所有涉及LSTM的論文都使用略有不同的版本。 差異很小,但值得一提的是其中一些。
由Gers&Schmidhuber(2000)引入的一種流行的LSTM變體是添加“窺視孔連接”。這意味著我們讓柵極層看到單元狀態。
上面的圖表為所有門增加了窺視孔,但許多論文會給一些窺視孔而不是其他的。
另一種變化是使用耦合的遺忘和輸入門。 我們不是單獨決定忘記什么以及應該添加新信息,而是共同做出這些決定。 我們只會忘記當我們要在其位置輸入內容時。 當我們忘記舊事物時,我們只向州輸入新值。
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 Vinyals , Greg Corrado , Jon Shlens , Luke Vilnis和Ilya Sutskever 。 我也很感謝許多其他朋友和同事花時間幫助我,包括Dario Amodei和Jacob Steinhardt 。 我特別感謝Kyunghyun Cho關于我的圖表的非常周到的信件。
在這篇文章之前,我在神經網絡教授的兩個研討會系列中練習解釋LSTM。 感謝所有參與這些活動的人,感謝他們對我的耐心和反饋。
除了原作者之外,很多人都對現代LSTM做出了貢獻。 一個非全面的名單是:Felix Gers,Fred Cummins,Santiago Fernandez,Justin Bayer,Daan Wierstra,Julian Togelius,Faustino Gomez,Matteo Gagliolo和Alex Graves 。 ?
?
http://colah.github.io/posts/2015-08-Understanding-LSTMs/
總結
以上是生活随笔為你收集整理的【译】深入理解LSTM网络的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用CRF做命名实体识别——NER系列(三
- 下一篇: 从分布式一致性算法到区块链共识机制