遞歸神經網絡
人類并不是每時每刻都從頭開始思考。正如你閱讀這篇文章的時候,你是在了解前面詞語的基礎上來了解每個詞。你不會丢棄所有已知的資訊而從頭開始思考。你的思想具有持續性。
傳統的神經網絡不能做到這點,而且這似乎也是它的主要缺陷。比如,你想對電影中每個點發生的事件類型進行分類。目前還不清楚傳統神經網絡如何利用之前事件的推理來得出後來事件。
遞歸神經網絡能夠解決這一問題。這些網絡中具有循環結構,能夠使資訊持續儲存。
遞歸神經網絡具有循環結構
在上圖中,一組神經網絡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似乎同樣有趣。過去的幾年對遞歸神經網絡來說是激動人心的時期,而且今後更會如此!