LSTM的“前生今世”
更多深度文章,請關注:https://yq.aliyun.com/cloud
循環神經網絡(RNN)
人腦因為某種機製的存在,從來不會從頭開始思考。當你閱讀這篇文章時,你會根據你對以前的詞意的理解來理解每個單詞。你從來不會把所有東西都扔掉,再從頭開始思考。由於這種機製的存在,我們的大腦變得無比高效。算法其實就是模擬我們人類思維的一種真實映射。不管是RNN,還是LSTM它們都是基於人類思維的一種數學表現形式。
但傳統神經網絡不能做到這一點,這似乎是一個很大的缺陷。例如,想象一下你想要分析一個電影中每個點發生什麼樣的事件。傳統的神經網絡是不能夠利用電影中以前的事件的來推理出以後的事件。但循環神經網絡解決了這個問題。它是具有循環的網絡,允許信息持續存在。
在上圖中,一個神經網絡,A,輸入Xt並輸出Ht。循環允許信息從網絡的一個步驟傳遞到下一個。
這些循環使得循環神經網絡看起來很神秘。然而,如果你在深入的思考一下,那就證明它們並不是一般的神經網絡。一個循環的神經網絡可以被認為是同一個網絡的多個副本,它們每一個都會傳遞給後繼者的消息。考慮如果我們展開循環神經網絡會發生什麼呢?請看下圖:
這種鏈狀特征揭示了循環神經網絡與序列和列表的關係非常密切。RNN是用於分析此類數據的神經網絡的自然結構。
在過去的幾年裏,RNN應用於語音識別,語言建模,翻譯,圖像字幕等各種問題上,並且取得了巨大的成功。這些成功的基礎是使用“LSTM”,這是一種非常特殊的循環神經網絡,對於許多任務來說,它比標準版本要好的多。幾乎所有基於循環神經網絡的令人興奮的結果都是通過它實現的。本文就著重探討LSTM。
長期依賴的問題
RNN的功能之一就是他們可以能夠將先前的信息連接到當前任務,例如使用先前的視頻幀可以增加對當前幀的理解。如果RNN可以做到這一點,他們將非常有用。
但有時,我們隻需要查看最近的信息來執行當前的任務。例如,考慮一種語言模型,嚐試基於以前的單詞來預測下一個單詞。例如我們試圖預測“雲在天空 ”中的最後一個字,我們就不需要任何其他的語境。在這種情況下,如果相關信息與所需神經元之間的差距很小,則RNN可以使用過去的信息。
但也有需要更多上下文的情況。考慮嚐試預測文本中的最後一個單詞“我在法國長大…….我說流利的法語”。最近的信息表明,下一個單詞可能是一種語言的名稱,但是如果我們想縮小範圍確定是哪種語言,我們需要法國的背景,從而進一步的來確定。這時,相關信息之間的差距就變得非常大。不幸的是,隨著距離的擴大,RNN無法學會使用過去信息。
理論上,RNN絕對有能力處理類似的“長期依賴”。人們可以仔細挑選參數來解決這種形式的玩具問題。不幸的是,在實踐中,RNN似乎沒有辦法做到這些。Hochreiter(1991)[German]和Bengio等人深入探討了這個問題。他們發現解決這個問題是非常困難的。幸運的是,LSTM成功的解決了這個問題!
LSTM網絡
Long Short Term Memory(通常稱為“LSTM”)是一種特殊的RNN,能夠保存長期的依賴關係。在這個模型中,常規的神經元,即一個將S型激活應用於其輸入線性組合的單位,被存儲單元所代替。每個存儲單元是與一個輸入門,一個輸出門和一個跨越時間步驟無幹擾送入自身的內部狀態相關聯。它是由Hochreiter&Schmidhuber(1997)介紹,並且許多人對它進行了精煉和普及。
所有的循環神經網絡都具有神經網絡重複模塊鏈。在標準的RNN中,該重複模塊具有非常簡單的結構,例如單個tanh層。
LSTM也具有這樣的鏈結構,但是重複模塊具有不同的結構。沒有一個單一的神經網絡層,而是有四個,並且以非常特殊的方式進行交互。
不要擔心改變了什麼細節。接下來我們將逐步介紹LSTM。現在,先熟悉我們將要使用的符號。
在上圖中,每一行都含有從一個節點的輸出到其他節點的輸入的整個向量。粉色圓圈表示點向運算,如向量加法,而黃色框是神經網絡層。行合並表示連接,而行交叉表示其內容正在複製,副本將轉送到不同的位置。
LSTM的核心思想
LSTM的關鍵是細胞狀態,即水平線穿過圖的頂部。
細胞狀態類似於輸送帶。它直接在整個鏈上運行,隻有一些小的線性相互作用。信息很容易的可以通過它並且保持不變。
LSTM確實具有刪除或添加信息到細胞狀態的能力,這種能力由被稱為門的結構調節使用。門是一種可選擇地讓信息通過的方式。它們由S形的神經網絡層和點向乘法運算組成。
SIGMOID函數輸出值是0或者1,它描述每個組件應該通過多少數據。值為0表示“如何都不能通過”,而值為1意味著“讓一切通過!”
LSTM有三個門,用於保護和控製細胞狀態。
一步一步“走過”LSTM
LSTM的第一步就是決定我們要從單元格中丟棄什麼信息。這一決定是由一個sigmoid layer控製的。它主要控製ht−1和xt之間的計算,輸出0或者1。1代表“完全保持”,而0 代表“徹底丟棄”。
我們回到一個語言模型的例子,試圖根據所有以前的語料來預測下一個單詞。在這樣的問題中,細胞狀態可能包括當前主題(subject)的詞性的分析,從這些分析中,我們可以使用正確的代詞或者動詞。
下一步是決定我們要在單元格狀態下存儲的新信息。這有兩部分,首先,稱為“輸入門層”的S形層(sigmoid layer)決定了我們將更新哪些值。接下來,tanh層會創建新的候選值的向量。在下一步中,我們將結合這兩個來創建對狀態的更新。
在我們的語言模型的例子中,我們希望將新主題的詞性可以添加到單元格狀態,以替換我們忘記的舊詞性。
現在是更新舊細胞狀態的時候了,我們把舊狀態乘以ft,忘記我們之前決定忘記的事情。然後我們加it∗Ct,這是新的候選狀態,按照我們決定更新每個狀態值的程度來衡量。
在語言模型的情況下,我們實際上已經刪除關於舊主題詞性的信息,並添加了新信息,正如我們在之前的步驟中所做的。
最後,我們需要決定我們要輸出什麼。此輸出將基於我們的單元格狀態,但這將是一個過濾版本。首先,我們運行一個sigmoid層,它決定了我們要輸出的單元格狀態的哪些部分。然後,我們把細胞狀態通過tanh,並將其乘以sigmoid門的輸出,以便我們隻輸出我們需要的部分。
對於語言模型,由於它隻是看到一個主題,它可能需要輸出與動詞相關的信息,以防下一步需要。例如,它可能會輸出主題是單數還是複數,以便我們知道動詞應該如何組合在一起。
LSTM變異
到目前為止我所描述的是一個很正常的LSTM。但並不是所有的LSTM都與上述相同。事實上,幾乎每一篇涉及LSTM的論文都使用了一個略有不同的版本。差異很小,但值得一提的是它們。
Gers&Schmidhuber(2000)介紹的一種受歡迎的LSTM變體添加了“窺視孔連接(peephole connections)”。這意味著我們讓門層看著單元格狀態。
上麵的圖就是增加了所有的門的窺視。
另一種變異是使用耦合的忘記(coupled forget)和輸入門。而不是單獨決定要忘記什麼,我們應該添加新信息,然後一起做出這些決定。
LSTM的更顯著的變化是由Cho等人(2014)介紹的門控循環單元或GRU 。它將忘記和輸入門組合成一個單一的“更新門”,還合並了單元格狀態和隱藏狀態,並進行了一些其他更改。所得到的模型比標準LSTM模型更簡單,並且越來越受歡迎。
這些是最顯著的LSTM變體。還有很多其他的,如Yao等人(2015)的 Depth Gated RNNs 。還有一些完全不同的處理長期依賴的方法,例如Koutnik(2014)等人的 Clockwork RNNs。
哪些變體最好?分歧是否重要?Greff等人 (2015)做了一個很好的比較流行的變種,發現這些變異都是一樣的。Jozefowicz,et al(2015)測試了一萬多個RNN架構,發現在某些任務上它們的表現比LSTM更好。
結論
此前,我說人們通過RNN取得了顯著的成果,這些成果基本上都是使用LSTM實現的。這足以表明LSTM的強大。可能寫成一組方程式,會讓LSTM看起來很嚇人。但我希望在這篇文章中你會對它有一個認識,使他們變得更加平易近人。
LSTM是RNN發展的一大步。很自然的想法:還有另一大步嗎?研究人員的共同觀點是:“是的!還有下一步,值得關注!“這個想法是讓RNN的每個步驟從一些較大的信息集合中挑選信息。例如,如果您使用RNN創建描述圖像的標題,則可能會選擇圖像的一部分來查看其輸出的每個字。事實上,徐(2015)做到了這一點 ,如果你想要引起注意,這可能是一個有趣的起點!
致謝
我很感謝一些人幫助我更好地了解LSTM, 我非常感謝Google的同事們有用的反饋,特別是Oriol Vinyals,Greg Corrado,Jon Shlens,Luke Vilnis和Ilya Sutskever。我也感謝許多其他朋友和同事花時間幫助我,包括達裏奧·阿莫德迪和雅各布·斯坦哈特。
本文由@阿裏雲雲棲社區組織翻譯。
文章原標題《Understanding LSTM Networks》
作者:colah 博客:https://colah.github.io
譯者:袁虎 審閱:
文章為簡譯,更為詳細的內容,請查看原文
最後更新:2017-09-12 00:32:33