理解LSTM網絡

理解LSTM網絡

週期神經網絡(Recurrent Neural Networks)

人類並非每一秒都在從頭開始思考問題。當你閱讀這篇文章時,你是基於之前的單詞來理解每個單詞。你並不會把所有內容都拋棄掉,然後從頭開始理解。你的思考具有持久性。

傳統的神經網絡並不能做到這一點,這似乎是其一個主要的缺點。例如,想象你要把一部電影裏面每個時間點所正在發生的事情進行分類。並不知道傳統神經網絡怎樣才能把關於之前事件的推理運用到之後的事件中去。

週期神經網絡解決了這個問題。它們是一種具有循環的網絡,具有保持信息的能力。

如圖所示


這裏寫圖片描述

如上圖所示,神經網絡的模塊A輸入爲xi ,輸出爲hi 。模塊A的循環結構使得信息從網絡的上一步傳到了下一步。

這個循環使週期神經網絡看起來有點神祕。然而,如果你仔細想想就會發現它與普通的神經網絡並沒有太大不同。週期神經網絡可以被認爲是相同網絡的多重複制結構,每一個網絡把消息傳給其繼承者。如果我們把循環體展開就是這樣,如圖所示


這裏寫圖片描述

這種鏈式屬性表明,週期神經網絡與序列之間有着緊密的聯繫。這也是運用這類數據最自然的結構。

當然它們已經得到了應用!過去幾年中,RNNs已經被成功應用於各式各樣的問題中:語音識別,語言建模,翻譯,圖像標註…等等。RNNs取得的各種矚目成果可以參看Andrej Karpathy的博客:The Unreasonable Effectiveness of Recurrent Neural Networks。確實效果讓人非常吃驚。

取得這項成功的一個要素是『LSTMs』,這是一種非常特殊的週期神經網絡,對於許多任務,比標準的版本要有效得多。幾乎所有基於週期神經網絡的好成果都使用了它們。本文將着重介紹LSTMs。

長期依賴問題(The Problem of Long-Term Dependencies)

RNNs的一個想法是,它們可能會能夠將之前的信息連接到現在的任務之中。例如用視頻前一幀的信息可以用於理解當前幀的信息。如果RNNs能夠做到這些,那麼將會非常使用。但是它們可以嗎?這要看情況。

有時候,我們處理當前任務僅需要查看當前信息。例如,設想又一個語言模型基於當前單詞嘗試着去預測下一個單詞。如果我們嘗試着預測『the clouds are i n the sky』的最後一個單詞,我們並不需要任何額外的信息了-很顯然下一個單詞就是『天空』。這樣的話,如果目標預測的點與其相關信息的點之間的間隔較小,RNNs可以學習利用過去的信息。

但是也有時候我們需要更多的上下文信息。設想預測這句話的最後一個單詞:『I grew up in France… I speak fluent French』。最近的信息表明下一個單詞似乎是一種語言的名字,但是如果我們希望縮小確定語言類型的範圍,我們需要更早之前作爲France 的上下文。而且需要預測的點與其相關點之間的間隔非常有可能變得很大,如圖所示


這裏寫圖片描述

不幸的是,隨着間隔增長,RNNs變得難以學習連接之間的關係了,如圖所示


這裏寫圖片描述

理論上來說,RNNs絕對能夠處理這種『長期依賴』。人們可以小心選取參數來解決這種類型的小模型。悲劇的是,事實上,RNNs似乎並不能學習出來這些參數。這個問題已經在Hochreiter (1991) [German]Bengio, et al. (1994)中被深入討論,他們發現了爲何RNNs不起作用的一些基本原因。

幸運的是,LSTMs可以解決這個問題!

LSTM網絡

長短時間記憶網絡(Long Short Term Memory networks)——通常成爲『LSTMs』——是一種特殊的RNN,它能夠學習長時間依賴。它們由Hochreiter & Schmidhuber (1997)提出,後來由很多人加以改進和推廣。他們在大量的問題上都取得了巨大成功,現在已經被廣泛應用。

LSTMs是專門設計用來避免長期依賴問題的。記憶長期信息是LSTMs的默認行爲,而不是它們努力學習的東西!

所有的週期神經網絡都具有鏈式的重複模塊神經網絡。在標準的RNNs中,這種重複模塊具有非常簡單的結構,比如是一個tanh層,如圖所示


這裏寫圖片描述

LSTMs同樣具有鏈式結構,但是其重複模塊卻有着不同的結構。不同於單獨的神經網絡層,它具有4個以特殊方式相互影響的神經網絡層,如圖所示


這裏寫圖片描述

不要擔心接下來涉及到的細節。我們將會一步步講解LSTM的示意圖。下面是我們將要用到的符號,如圖所示


這裏寫圖片描述

在上圖中,每一條線代表一個完整的向量,從一個節點的輸出到另一個節點的輸入。粉紅色圓形代表了逐點操作,例如向量求和;黃色方框代表學習出得神經網絡層。聚攏的線代表了串聯,而分叉的線代表了內容複製去了不同的地方。

LSTMs背後的核心思想

LSTMs的關鍵在於細胞狀態,在圖中以水平線表示。

細胞狀態就像一個傳送帶。它順着整個鏈條從頭到尾運行,中間只有少許線性的交互。信息很容易順着它流動而保持不變。如圖所示


這裏寫圖片描述

LSTM通過稱之爲門(gates)的結構來對細胞狀態增加或者刪除信息。

門是選擇性讓信息通過的方式。它們的輸出有一個sigmoid層和逐點乘積操作,如圖所示


這裏寫圖片描述

Sigmoid 層的輸出在0到1之間,定義了各成分被放行通過的程度。0值意味着『不讓任何東西過去』;1值意味着『讓所有東西通過』。

一個LSTM具有3種門,用以保護和控制細胞狀態。

逐步講解LSTM

LSTM的第一步是決定我們要從細胞中拋棄何種信息。這個決定是由叫做『遺忘門』的sigmoid層決定的。它以hi1xi 爲輸入,在Ct1 細胞輸出一個介於0和1之間的數。其中1代表『完全保留』,0代表『完全遺忘』。

讓我們回到之前那個語言預測模型的例子,這個模型嘗試着根據之前的單詞學習預測下一個單詞。在這個問題中,細胞狀態可能包括了現在主語的性別,因此能夠使用正確的代詞。當我們見到一個新的主語時,我們希望它能夠忘記之前主語的性別。如圖所示


這裏寫圖片描述

下一步是決定細胞中要存儲何種信息。它有2個組成部分。首先,由一個叫做『輸入門層』的sigmoid層決定我們將要更新哪些值。其次,一個tanh層創建一個新的候選向量C̃ t ,它可以加在狀態之中。在下一步我們將結合兩者來生成狀態的更新。

在語言模型的例子中,我們希望把新主語的性別加入到狀態之中,從而取代我們打算遺忘的舊主語的性別,如圖所示


這裏寫圖片描述

現在我們可以將舊細胞狀態Ct1 更新爲Ct 了。之前的步驟已經決定了該怎麼做,我們現在實際操作一下。

我們把舊狀態乘以ft ,用以遺忘之前我們決定忘記的信息。然後我們加上itC̃ t 。這是新的候選值,根據我們決定更新狀態的程度來作爲放縮係數。

在語言模型中,這裏就是我們真正丟棄關於舊主語性別信息以及增添新信息的地方,如圖所示


這裏寫圖片描述

最終,我們可以決定輸出哪些內容。輸出取決於我們的細胞狀態,但是以一個過濾後的版本。首先,我們使用sigmoid層來決定我們要輸出細胞狀態的哪些部分。然後,把用tanh處理細胞狀態(將狀態值映射到-1至1之間)。最後將其與sigmoid門的輸出值相乘,從而我們能夠輸出我們決定輸出的值。如圖所示


這裏寫圖片描述

對於語言模型,在預測下一個單詞的例子中,當它輸入一個主語,它可能會希望輸出相關的動詞。例如,當主語是單數或複數時,它可能會以相應形式的輸出。

各種LSTM的變化形式

目前我所描述的都是普通的LSTM。然而並非所有的LSTM都是一樣的。事實上,似乎每一篇使用LSTMs的文章都有些細微差別。這些差別很小,但是有些值得一提。

其中一個流行的LSTM變化形式是由Gers & Schmidhuber (2000)提出,增加了『窺視孔連接(peephole connections)』。如圖所示


這裏寫圖片描述

在上圖中,所有的門都加上了窺視孔,但是許多論文中只在其中一些裝了窺視孔。

另一個變種是使用了配對遺忘與輸入門。與之前分別決定遺忘與添加信息不同,我們同時決定兩者。只有當我們需要輸入一些內容的時候我們才需要忘記。只有當早前信息被忘記之後我們纔會輸入。如圖所示


這裏寫圖片描述

LSTM一個更加不錯變種是 Gated Recurrent Unit(GRU),是由Cho, et al. (2014)提出的。這個模型將輸入門與和遺忘門結合成了一個單獨的『更新門』。而且同時還合併了細胞狀態和隱含狀態,同時也做了一下其他的修改。因此這個模型比標準LSTM模型要簡單,並且越來越收到歡迎。如圖所示


這裏寫圖片描述

這些僅僅只是LSTM的少數幾個著名變種。還有很多其他的種類,例如由Yao, et al. (2015) 提出的Depth Gated RNNs 。以及處理長期依賴問題的完全不同的手段,如Koutnik, et al. (2014)提出的Clockwork RNNs。

那種變種是最好的?這些不同重要嗎?Greff, et al. (2015) 將各種著名的變種做了比較,發現其實基本上是差不多的。Jozefowicz, et al. (2015) 測試了超過一萬種RNN結構,發現了一些在某些任務上表現良好的模型。

結論

最開始我提到的傑出成就都使用的是RNNs。本質上所有這些成果都是使用了LSTMs。在大多數任務中,確實它們的表現非常優秀!

以公式的形式寫下來,LSTMs看起來非常令人膽怯。然而本文的逐步講解使得LSTM變得平易近人了。

LSTMs 是我們使用RNNs的重要一步。我們很自然地想到:還有下一個重要的一大步嗎?研究者的普遍觀點是:『有!下一大步就是「注意力」。』其基本思想就是讓RNN的每一步從更大範圍的信息中選取。例如,假設你爲圖片打標籤,它可能會爲它輸出的每一個詞語選取圖片的一部分作爲輸入。事實上,Xu, et al. (2015)就是這麼做的——如果你想探索『注意力』的話,這是個有趣的引子!已經有大量使用『注意力』得到的良好成果,而且似乎更多的陳果也將要出現……

『注意力』並非是RNN研究中唯一一個激動人心的方向。例如,Kalchbrenner, et al. (2015)做出的Grid LSTMs 似乎很有前途。在生成模型中使用RNNs-例如Gregor, et al. (2015)Chung, et al. (2015)以及Bayer & Osendorfer (2015) -似乎也很有趣。過去幾年是RNN激動人心的階段,未來幾年將會更加如此!

本文譯自

Understanding LSTM Networks

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