谷歌大脑科学家亲解 LSTM:一个关于“遗忘”与“记忆”的故事 本文作者:奕欣2017-01-14 09:46 导语:AI科技评论保证这是相对通俗易懂的一篇入门介绍了,看不懂的话欢迎关注「AI 科技
谷歌大腦科學家親解 LSTM:一個關于“遺忘”與“記憶”的故事
| 本文作者:奕欣 | 2017-01-14 09:46 |
雷鋒網按:這篇文章發布已久,但非常經典,出自?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 圖進行一步步的梳理。現在,讓我們一起熟悉下接下來會用到的一些符號。
?在上面所示的圖中,
-
黃塊表示神經網絡層;
-
粉圈代表按位操作(pointwise operations),如向量加法;
-
每條線代表著一整個向量(vector),用來表示從一個節點的輸出到另一個節點的輸入;
-
合并的線代表連接(concatenate);?
-
分叉的線表示復制(copy)。
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) 的論文。
總結
以上是生活随笔為你收集整理的谷歌大脑科学家亲解 LSTM:一个关于“遗忘”与“记忆”的故事 本文作者:奕欣2017-01-14 09:46 导语:AI科技评论保证这是相对通俗易懂的一篇入门介绍了,看不懂的话欢迎关注「AI 科技的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 解密谷歌机器学习工程最佳实践——机器学习
- 下一篇: 剑桥加密资产研究的主要发现 金评媒JPM