NO IMAGE

原文連結http://www.csdn.net/article/2015-11-25/2826323?ref=myread

摘要:作者早前提到了人們使用RNNs取得的顯著成效,基本上這些都是使用了LSTMs。對於大多數任務,它們真的可以達到更好的效果!寫了一堆方程式,LSTMs看起來很嚇人。希望通過這篇文章中一步一步的剖析,能更好理解它們。

遞迴神經網路

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

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

遞迴神經網路能夠解決這一問題。這些網路中具有迴圈結構,能夠使資訊持續儲存。

遞迴神經網路具有迴圈結構

在上圖中,一組神經網路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)

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