理解長短期記憶網絡

遞歸神經網絡

人類並不是每時每刻都從頭開始思考。正如你閱讀這篇文章的時候,你是在理解前面詞語的基礎上來理解每個詞。你不會丟棄所有已知的信息而從頭開始思考。你的思想具有持續性。

傳統的神經網絡不能做到這點,而且這似乎也是它的主要缺陷。比如,你想對電影中每個點發生的事件類型進行分類。目前還不清楚傳統神經網絡如何利用之前事件的推理來得出後來事件。

遞歸神經網絡能夠解決這一問題。這些網絡中具有循環結構,能夠使信息持續保存。


遞歸神經網絡具有循環結構

在上圖中,一組神經網絡A,接收參數,輸出,循環A可以使信息從網絡的某個步驟中傳遞到下一個步驟。

這些循環使得遞歸神經網絡有些不可思議。不過,如果你進一步思考,可以發現,它們與常規神經網絡並非完全不同。可以將遞歸神經網絡想象成是有多層相同網絡的神經網絡,每一層將信息傳遞給下一層。如果我們展開循環,就是這樣:


展開的遞歸神經網絡

這種鏈狀的性質表明,遞歸神經網絡與序列和列表密切相關。這是處理這種數據所使用的神經網絡的自然結構。

人們當然使用了它們!在過去的幾年裏,在許多問題上使用RNNs已經取得了難以置信的成功,比如語音識別,語言建模,翻譯,圖像字幕,這樣的例子不勝枚舉。不過我不將討論RNNs的驚人壯舉,Andrej Karpathy對此寫了篇非常棒的博客,遞歸神經網絡不可思議的有效性(The Unreasonable Effectiveness of Recurrent Neural Networks)。它們真是太了不起了。

成功的關鍵是使用了“LSTMs”,一種特殊的遞歸神經網絡,在許多任務中,它的表現要比標準遞歸神經網絡出色許多。幾乎所有基於遞歸神經網絡令人振奮的結果都是由它們實現的。這篇文章就將探討這些LSTMs。

長期依賴關係問題

RNNs呼籲的一點就是,它們可能將前期信息與當前任務連接,比如使用前面的視頻幀可能得出對當前幀的理解。如果RNNs能夠做到這點,它們會非常有用。但是它們能嗎?這得看情況。

有些時候,在執行當前任務時,我們只需要查看最近的信息。比如,考慮一個語言模型,試圖根據之前單詞預測下一個。如果我們想要預測“the clouds are in the sky”中最後一個單詞,我們不需要更多的上下文——很明顯下一個單詞會是“sky”。在這種情況下,如果相關信息與預測位置的間隔比較小,RNNs可以學會使用之前的信息。


但我們也有需要更多上下文的情況。考慮試圖預測“I grew up in France… I speak fluent French.”中最後一個詞。最近信息顯示下一個詞可能是一門語言的名字,但是如果我們想要縮小選擇範圍,我們需要包含“法國”的那段上下文,從前面的信息推斷後面的單詞。相關信息與預測位置的間隔很大是完全有可能的。

不幸的是,隨着這種間隔的拉長,RNNs就會無法學習連接信息。


從理論上講,RNNs絕對能夠處理這樣的“長期依賴關係”。一個人可以仔細挑選參數來解決這種簡單的問題。不幸的是,實際上RNNs不能夠學習它們。這種問題被Hochreiter (1991)【德國】Bengio等人深入探討過,他們發現了造成這種可能的一些非常基本的原因。

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

LSTM網絡

長短期記憶網絡——通常簡稱“LSTMs”——是一種特殊的RNN,能夠學習長期依賴關係。它們由Hochreiter和Schmidhuber (1997)提出,在後期工作中又由許多人進行了調整和普及(除了原始作者之外,許多人爲現代LSTM做出了貢獻,不完全統計:Felix Gers, Fred Cummins, Santiago Fernandez, Justin Bayer, Daan Wierstra, Julian Togelius, Faustian Gomez, Matteo Gagliolo 和 Alex Graves)。它們在大量問題上效果異常出色,現在正在廣泛使用。

LSTMs明確設計成能夠避免長期依賴關係問題。記住信息很長一段時間幾乎是它們固有的行爲,而不是努力去學習!

所有的遞歸神經網絡都具有一連串重複神經網絡模塊的形式。在標準的RNNs中,這種重複模塊有一種非常簡單的結構,比如單個tanh層。


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

LSTMs同樣也有這種鏈狀的結構,但是重複模塊有着不同的結構。它有四層神經網絡層以特殊的方式相互作用,而不是單個神經網絡層。


LSTM中的重複模塊包含四個相互作用的神經網絡層

先別急着想問細節。我們之後會一步一步講解LSTM圖。現在,我們先來熟悉下我們將要使用到的符號。

在上面的圖中,每條線表示一個完整向量,從一個節點的輸出到其他節點的輸入。粉紅色圓圈代表逐點操作,比如向量加法,而黃色框框表示的是已學習的神經網絡層。線條合併表示串聯,線條分叉表示內容複製並輸入到不同地方。

LSTMs核心理念

LSTMs的關鍵點是單元狀態,就是穿過圖中的水平線。

單元狀態有點像是個傳送帶。它貫穿整個鏈條,只有一些小的線性相互作用。這很容易讓信息以不變的方式向下流動。


LSTM有能力向單元狀態中移除或添加信息,通過結構來仔細管理稱爲門限。

門限是有選擇地讓信息通過。它們由一個sigmoid神經網絡層和逐點乘法運算組成。


sigmoid層輸出0到1之間的數字,描述了每個成分應該通過門限的程度。0表示“不讓任何成分通過”,而1表示“讓所有成分通過!”。

LSTM有三種這樣的門限,來保護和控制單元狀態。

一步一步剖析LSTM

LSTM中第一步是決定哪些信息需要從單元狀態中拋棄。這項決策是由一個稱爲“遺忘門限層”的sigmoid層決定的。它接收和,然後爲單元狀態中的每個數字計算一個0到1之間的數字。1表示“完全保留”,而0則表示“完全拋棄”。

我們來回顧一下那個語言模型的例子,試圖根據前面所有的詞語來預測下一個詞。在這種問題中,單元狀態可能包含當前主語的性別,所以可以使用正確的代詞。當碰到一個新的主語時,我們希望它能夠忘記舊主語的性別。


接下來我們需要決定在單元狀態中需要存儲哪些新信息。這分爲兩個部分。首先,一個叫做“輸入門限層”的sigmoid層決定哪些值需要更新。接下來,一個tanh層創建一個向量,包含新候選值,這些值可以添加到這個狀態中。下一步我們將會結合這兩者來創建一個狀態更新。

在語言模型的例子中,我們希望在單元狀態中添加新主語的性別,來替換我們忘記的舊主語性別。


現在來更新舊單元狀態了,輸入到新單元狀態。之前的步驟已經決定了需要做哪些事情,我們只需要實現這些事情就行了。

我們在舊狀態上乘以,忘記之前決定需要忘記的。然後我們加上,這就是新的候選值,它的規模取決於我們決定每個狀態值需要更新多少。

在語言模型的例子中,這裏就是我們實際丟棄舊主語性別信息,根據之前步驟添加新信息的地方。


最後,我們需要決定需要輸出什麼。這個輸出將會建立在單元狀態的基礎上,但是個過濾版本。首先,我們運行一個sigmoid層來決定單元狀態中哪些部分需要輸出。然後我們將單元狀態輸入到tanh函數(將值轉換成-1到1之間)中,然後乘以輸出的sigmoid門限值,所以我們只輸出了我們想要輸出的那部分。

對於語言模型例子來說,因爲它只看到了一個主語,它可能想輸出與動詞相關的信息,爲接下來出現的詞做準備。比如,它可能輸出主語是單數還是複數,那麼我們知道接下來修飾動詞的應該成對。


長短期記憶變體

我目前所講述的還是非常常規的LSTM。但並不是所有的LSTMs都與上述的LSTM一樣。實際上,幾乎所有關於LSTMs的論文都稍有不同。雖然差異很小但也值得一談。

一種流行的LSTM變種,由Gers和Schmidhuber (2000)提出,加入了“窺視孔連接”(peephole connections)。這意味着門限層也將單元狀態作爲輸入。


上圖中,所有的門限中都加入了窺視孔,但是許多論文都只使用部分窺視孔。

另一個變種就是使用耦合遺忘和輸入門限。我們不單獨決定遺忘哪些、添加哪些新信息,而是一起做出決定。在輸入的時候才進行遺忘。在遺忘某些舊信息時纔將新值添加到狀態中。


稍微有戲劇性的LSTM變種是門限遞歸單元或GRU,由Cho等人(2014)提出。它將遺忘和輸入門限結合輸入到單個“更新門限”中。同樣還將單元狀態和隱藏狀態合併,並做出一些其他變化。所得模型比標準LSTM模型要簡單,這種做法越來越流行。


提出的深度門限RNNs(Depth Gated RNNs )。當然還有其他解決長短期依賴關係問題的方法,比如Koutnik等人(2014)提出的Clockwork RNNs 。

這些變種哪個是最好的?這些差異重要嗎?Greff等人(2015)針對流行的變種做了良好對比,發現它們其實都一樣。Jozefowicz等人(2015)對超過1萬種RNN架構做了測試,發現其中某些在特定任務上效果比LSTMs要好。

結論

早些時候,我提到了人們使用RNNs取得的顯著成效。基本上這些都是使用了LSTMs。對於大多數任務,它們真的可以達到更好的效果!

寫了一堆方程式,LSTMs看起來很嚇人。希望通過這篇文章中一步一步的剖析,能更好理解它們。

LSTMs是我們使用RNNs的一個飛躍。那麼很自然地會想:還有其他飛躍嗎?研究人員之間共同的想法是:“有的!還有其他飛躍,還有關注點(attention)!”。這個想法是,讓RNN中每一步都從更大的信息集中挑選信息作爲輸入。比如,你使用RNN來創建一個標題來描述圖像,它可能會挑選圖像的一部分作爲輸入,然後輸出信息。事實上,Xu等人(2015)這麼做了——如果你想探索關注點這可能是個有趣的出發點!使用關注點還有一些其他令人興奮的結果,而且似乎還有其他的效果還沒被發現……

關注點並不是RNN研究中唯一令人振奮的地方。比如,Kalchbrenner等人(2015)提出的Grid LSTMs似乎非常有前途。在生產模型——比如Gregor等人(2015)Chung等人(2015)Bayer,Osendorfer(2015)中使用RNNs似乎同樣有趣。過去的幾年對遞歸神經網絡來說是激動人心的時期,而且今後更會如此!

致謝

我要感謝幫助我理解LSTMs的一羣人,他們對網絡模型的結構圖進行了評論,並對這篇文章進行了反饋。

我非常感謝我在谷歌的同事提供的反饋,特別是Oriol VinyalsGreg CorradoJon ShlensLuke Vilnis,和Ilya Sutskever。同樣感謝那些百忙之中給予我幫助的朋友和同事,Dario Amodei,和Jacob Steinhardt。我特別要感謝Kyunghyun Cho,對我的圖表給出了非常周到的對應關係。

在寫這篇文章之前,我在我教的兩個神經網絡研討會上練習過解釋LSTMs。感謝參與其中每個人對我的耐心和給出的反饋。

原文鏈接:Understanding LSTM Networks(譯者/劉翔宇 審校/趙屹華 責編/周建丁 原創、翻譯投稿請聯繫:[email protected],微信號:jianding_zhou)

譯者介紹:劉翔宇,中通軟開發工程師,關注機器學習、神經網絡、模式識別。

發佈了17 篇原創文章 · 獲贊 18 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章