雷鋒網(公眾號:雷鋒網)按:這篇文章發布已久,但非常經典,出自 Google Brain 科學家 Christopher Olah 的博客,小編保證這是相對通俗易懂的一篇入門介紹了,看不懂的話歡迎關注「AI 科技評論」私聊。
如果你對深度學習稍有些研究的話,相信你一定聽說過 LSTM,雷鋒網此前也編譯過 LSTM 之父 Jürgen Schmidhuber 的訪談文章,他與 Sepp Hochreiter 在 1997 年發表的一篇論文中提出了 LSTM 的概念。
LSTM 能夠提升神經網絡接受輸入信息及訓練數據的記憶機制,讓輸出結果得到大幅度的提升。雖然因為當時的硬體限制不那麼廣為人知,但近年來包括谷歌在內的一系列公司都開始在深度學習中採用 LSTM。
那麼 LSTM 到底是什麼呢?雷鋒網今天介紹的這篇文章出自 Google Brain 科學家 Christopher Olah 的博客,雷鋒網在原文的基礎上加入了一些自己的理解,儘量保證這是最簡單的入門介紹了,看不懂的話歡迎關注「AI 科技評論」私聊。
首先,了解一下 RNN 吧在開始 LSTM 的入門前,別急,讓我們先了解一下 RNN。如果你有一定的基礎,雷鋒網建議你直接跳過這一部分。
首先,人們在思考問題的時候,並不會從零開始,而是會憑藉自己以往的一些經驗與記憶做出判斷。最簡單的例子,就是你現在正在閱讀的過程中,你不會孤立地理解所讀的每一個詞,而會結合前面所看到的詞來理解意義。也就是說,你的思考具備連續性。
傳統的神經網絡可做不到這一點,而且這儼然是它的一個短板。舉個例子,你想要對一部電影裡的每個鏡頭進行分類,判斷熒幕上都在演些什麼。但是,傳統神經網絡可能只能孤立地看待每一幀,而無法把上一個鏡頭串聯起下一秒發生的事情。
RNN(循環神經網絡)就是為解決這個問題而生的,顧名思義,也就是能夠讓信息在網絡中再次循環的網絡。
含有「環」(loop)的循環神經網絡
上圖是 RNN 的一部分,A 的輸入是 xt , 輸出為值 ht. 這個循環能夠讓信息從神經網絡中的一步傳遞到下一步。
這些環看起來讓 RNN 變得有些難理解。但是,如果你再想一下,其實它與傳統神經網絡類似,只不過是把同一個網絡多次複製,並將信息傳遞到下一個網絡。如果將這個循環拆開,就能比較容易地理解了:
一個展開的 RNN
像鏈條一樣的網絡實際上也體現出 RNN 的一個特點:它與序列或列表有著緊密的聯繫,而它們是處理此類數據的重要架構(簡直就是量身定製的一樣!)。
而更重要的是,它們確實得以順利應用。在過去的幾年時間中,RNN 被成功應用於解決各種問題:語音識別、語言建模、機器翻譯、為圖像起標題等……而且它的應用領域還在不斷擴展。它到底有多牛?我就不在這裡贅述了。
這些成功的關鍵在於它們使用了 LSTM。LSTM 是 RNN 的一種特殊形式,而它的普適性比起傳統的 RNN 要好得多。幾乎所有激動人心的發現都是在 LSTM 上實現的,而這也是雷鋒網在接下來的篇幅中所要討論的內容。
世界上最遙遠的距離RNN 的一大魅力在於它能夠將此前的信息結合到當前的任務中,比如像我們剛才提及的電影例子一樣,利用此前的幀信息理解當前的內容。如果 RNN 能實現這一點,那誠然非常有效。但事實是否如願?不一定。
有時,我們只需要利用近期信息來處理當前任務。比如在一個語言模型中,如果我們嘗試根據幾個單詞來預測下一個單詞,像我們要猜出「the clouds are in the _____」,但是因為句義已經非常明顯,我們不需要更多的上下文。在這種情況下,相關信息所隔的距離並不遠,因此 RNN 能夠學會使用此前的信息。
但是,就像我們做完型填空時,可能需要整合全文來填某一個句子,比如「I grew up in France….(雷鋒網此處省略一萬字)I speak fluent _____ .」。如果網絡只知道鄰近的幾個單詞,可能它會知道此處需要填寫一門語言,但至於應該填什麼,就需要找到更遠前的信息,直到 找到 France 才行。這種需要尋找相距很遠信息的情況,實際上非常常見。
而糟糕的是,距離增加時,RNN 能將相關信息串聯起來的能力也就越弱。正如雷鋒網雲,世界上最遙遠的距離不是生與死,而是明明在同一個段落裡,卻找不到相關聯的詞語。
理論上,RNN 是能夠處理這種「遙遠」的問題的。我們能夠人為地挑選出一些參數,解決依賴問題中較為簡單的任務。不過在實踐中,RNN 並不能自主地處理這些任務。這個問題 Hochreiter (1991) [German] 與 Bengio, et al. (1994) 已經進行過探討並找到了相關方法。
幸運的是,LSTM 不存在這個問題。
LSTM 網絡長短期記憶網絡——通常也被簡稱為 LSTMs——是一種特殊類型的 RNN,能夠學習長期的依賴關係。這個網絡就像雷鋒網所說的,由 Sepp Hochreiter 和 Jürgen Schmidhuber 在 1997 年提出,並加以完善與普及,LSTM 在各類任務上表現良好,因此也被廣泛使用。
LSTM 就是為了解決長期依賴問題而生,也就是說,對信息的長期記憶是它們的自發行為,而不是刻意去學習的。
所有的 RNN 都具備重複性的鏈條形式,而在標準的 RNN 中,這個重複模式都有著一個簡單的結構,比如單層的 tanh 層。
標準 RNN 的重複模塊裡都有一個單層網絡
LSTM 也有這種結構化的鏈條,但重複性模塊有著不同的結構。與 RNN 不同的是,LSTM 中有一個四層的網絡,並以一種特殊的方式進行交互。
LSTM 網絡的重複模塊包含一個四層的交互網絡
然而我們並不需要在意這些細節。接下來,請和雷鋒網一起對 LSTM 圖進行一步步的梳理。現在,讓我們一起熟悉下接下來會用到的一些符號。
在上面所示的圖中,
LSTMs 的核心LSTMs 的核心所在是 cell 的狀態(cell state),也就是下圖這條向右的線。
Cell 的狀態就像是傳送帶,它的狀態會沿著整條鏈條傳送,而只有少數地方有一些線性交互。信息如果以這樣的方式傳遞,實際上會保持不變。
LSTM 通過一種名為「門」(gate)的結構控制 cell 的狀態,並向其中刪減或增加信息。
雷鋒網註:你可以把門理解為一種控制信息通過的方式。門由一個 sigmoid 網絡層與一個按位乘操作構成。
Sigmoid 層的輸出值在 0 到 1 間,表示每個部分所通過的信息。0 表示「對所有信息關上大門」;1 表示「我家大門常打開」。
一個 LSTM 有三個這樣的門,控制 cell 的狀態。
解讀 LSTM:一個關於「遺忘」的故事首先,LSTM 的第一步需要決定我們需要從 cell 中拋棄哪些信息。這個決定是從 sigmoid 中的「遺忘層」來實現的。它的輸入是 ht-1 和 xt,輸出為一個 0 到 1 之間的數。Ct−1 就是每個在 cell 中所有在 0 和 1 之間的數值,就像我們剛剛所說的,0 代表全拋棄,1 代表全保留。
再拿剛才預測單詞的語言模型來舉例,cell 的狀態可能會需要考慮主語的性別,這樣才能找到正確的代詞。因此如果我們設定,如果看到了一個新的主語,就「忘記」舊的主語所代表的性別。
下一步,我們需要決定什麼樣的信息應該被存儲起來。這個過程主要分兩步。首先是 sigmoid 層(輸入門)決定我們需要更新哪些值;隨後,tanh 層生成了一個新的候選向量 C`,它能夠加入狀態中。
最後,我們將這兩個值結合起來,並更新 cell 的狀態。
在雷鋒網方才提及的這個例子中,我們需要將新主語的性別信息加入 cell 的狀態中,以替換要忘記的舊信息。
接下來,我們就可以更新 cell 的狀態了。將舊狀態與 ft 相乘,忘記此前我們想要忘記的內容,然後加上 C`。得到的結果便是新的候選值,依照我們決定的值進行縮放。
在這個語言模型中,這個過程就實現了我們所設想的目標:遇到一個新主語時,就忘記舊語言的性別。
最後,我們需要確定輸出的內容。這個輸出內容取決於我們的 cell 狀態,但這是一個經過過濾的版本。
首先,我們會運行一個 sigmoid 層決定 cell 狀態輸出哪一部分。
隨後,我們把 cell 狀態通過 tanh 函數,將輸出值保持在-1 到 1 間。
之後,我們再乘以 sigmoid 門的輸出值,就可以得到結果了。
對於語言模型的例子,當它只看到一個主語時,就可能會輸出與動詞相關的信息。比如它會輸出主語是單數還是複數。這樣的話,如果後面真的出現了動詞,我們就可以確定它的形式了。
LSTM 的各種「變體」目前我所提及的 LSTM,只是最最基本的形式,並不是所有的 LSTM 長得都一樣一樣的。實際上,所有提及 LSTM 的論文都有著小小的改動,這些改進雖然並不明顯,但值得在這裡一提。
時尚時尚最時尚的 LSTM 變體就是 Gers & Schmidhuber (2000) 提出的「貓眼連接」(peephole connections)的神經網絡,也就是說,門連接層能夠接收到 cell 的狀態。
上圖展示了全加上「貓眼」的效果,但實際上論文中並不會加這麼多啦。
另一種變體就是採用一對門,分別叫遺忘門(forget)及輸入門(input)。與分開決定遺忘及輸入的內容不同,現在的變體會將這兩個流程一同實現。我們只有在將要輸入新信息時才會遺忘,而也只會在忘記信息的同時才會有新的信息輸入。
一個比較惹眼的變體為 GRU(Gated Recurrent),由 Cho, et al. (2014) 提出。他將遺忘門與輸入門結合在一起,名為「更新門」(update gate),並將 cell 狀態與隱藏層狀態合併在一起,此外還有一些小的改動。這個模型比起標準 LSTM 模型簡單一些,因此也變得更加流行了。
當然,這裡所列舉的只是一管窺豹,還有很多其它的變體,比如 Yao, et al. (2015) 提出的 Depth Gated RNNs;或是另闢蹊徑處理長期依賴問題的 Clockwork RNNs,由 Koutnik, et al. (2014) 提出。
哪個是最好的呢?而這些變化是否真的意義深遠?Greff, et al. (2015) 曾經對比較流行的幾種變種做過對比,發現它們基本上都差不多;而 Jozefowicz, et al. (2015) 測試了超過一萬種 RNN 結構,發現有一些能夠在特定任務上超過 LSTMs。
結論早些時候,我曾經提及很多人用 RNN 取得重要進步,而這些都是基於 LSTM 的網絡。它們的確在大多數任務上表現頗佳!
在前文中,雷鋒網小編貼出了好多公式呀,概念呀,算法呀,搞得 LSTM 好像有點嚇人。但是呢,我們希望一步步的解讀能讓 LSTM 於你而言,不再是一頭霧水的一個概念,讓它變得更加有人味一些。
LSTM 對於 RNN 來說是一個大的進步。在有了 LSTMs 後,越來越多的任務都可用 RNN 來解決了。那麼自然地,我們會想:是否還會有下一個 LSTM 式的飛躍呢?學界普遍的一個答案是,會的!下一步就是 attention 了。Attention 是什麼?也就是說,從 RNN 的每一步中提取信息,並形成一個更大的信息集合。比如使用 RNN 產生能描述圖片的標題時,它可能只選擇圖片的一部分進行關注。實際上,Xu, et al. (2015) 就是這樣做的——這可能會成為你探索 attention 算法的一個切入口。目前採用 attention 的研究也已經取得了不少進展,可能已經走到了飛躍的十字路口吧……
除了 attention,RNN 領域中還有其它的研究方向,比如 Kalchbrenner, et al. (2015) 的 Grid LSTMs 前景不錯,而生成模型中的 RNN 同樣也令人印象深刻:比如 Gregor, et al. (2015)、 Chung, et al. (2015) 或是 Bayer & Osendorfer (2015) 的論文。
過去幾年間,RNN 可謂是深度學習的寵兒,我也同樣相信接下來的數年也會是這樣。
雷鋒網版權文章,未經授權禁止轉載。詳情見轉載須知。