LSTM 講解

colah 寫了一篇介紹LSTM的博客,寫的非常的好。爲了能夠是自己更加深入的瞭解。特此,將它翻譯了過來。原文地址:http://colah.github.io/posts/2015-08-Understanding-LSTMs/

遞歸神經網絡(Recurrent Neural Networks)

人類並不會每一秒都重新開始他們的思維。當你閱讀這篇文章,你能夠基於你前面的理解,來理解當前的每一個單詞。你並不會丟掉前面所有的東西和重新開始你的思維。因爲你的思維具有持久性。

傳統的神經網絡並沒有能力做到這一點,這看起來是一個非常大的缺點。例如,假設你想對電影中每個時刻所發生事件屬於什麼類型進行分類。目前還不清楚,傳統的神經網絡能否做到這點–合理的利用電影鍾已經發生的事件去推斷及將要發生的事件。

然而,遞歸神經網絡解決了這個問題。它的網絡是循環的,允許信息更加持久化。 
RNN

在上圖中,有一個神經網絡模塊AA, 輸入xixi和輸出值hihi。循環允許將信息從當前這一步傳遞到下一步。

這個循環使得遞歸神經網絡看起來更加的神祕。然而,如果你仔細的想一下,它並不是那麼,它並沒有難於理解也並沒有比正常的神經網絡更加的複雜。遞歸神經網絡可以被看作相同神經網絡的多重拷貝,每個神經網絡模塊都會把信息傳遞給下一個神經模塊。考慮一下,如果我們將循環展開,將會發生什麼? 
RNN

這種鏈式一樣的結構很自然的揭示了遞歸神經網絡本質上是與序列(sequences)和列表(lists)密切相關。對於這中類型的數據,遞歸神經網絡是一種很自然的神經網絡架構。

RNN 已經被人們所使用並且非常的有用! 在過去的幾年裏,RNN已經非常成功的運用到了各種各樣的問題上:演講識別,語言模型,翻譯,圖像字幕… 這樣子的例子舉不勝舉。在這裏我將不在討論RNN, 我建議大家看Andrej Karpathy’s的博客The Unreasonable Effectiveness of Recurrent Neural Networks。他成功的運用了RNN並且更加豐富和有趣。

然而,這些成功運用的關鍵之處是對“LSTM”的使用,這是一種非常特別的遞歸神經網絡。對於許多的任務,它比標準的RNN表現的更好。幾乎所有令人興奮的關於RNN的結果,都是由LSTM取得的。這篇論文也將主要討論LSTM。

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

RNNs一個需要引起注意點的是他們可以把前面的信息與當前任務連接起來,比如使用視頻前面的片段來理解當前片段的信息。如果RNNs能夠做到這些,那麼他將是非常有用的,但是,他可以嗎? 這存在很多依賴關係。

有時,我們僅僅需要知道最近的信息來執行當前的任務。例如,給定一個語言模型基於前面一個單詞嘗試去預測下一個單詞。如果我們嘗試去預測”the clouds are int the sky”這句話的最後一個單詞,我們並不需要任何上下文的內容–很顯然下一個單詞是sky。在這種情況下,相關信息和預測單詞的位置之間的間隔是非常小的。RNNs也可以學習先前的信息。 
這裏寫圖片描述

但是也存在我們需要更多的上下文信息的情況。假設我們嘗試去預測”I grew up in France… I speak fluent French”這句話的最後一個單詞。當前的信息表明接下來的單詞是很可能是語言的名字。但是我們需要是哪種語言,我們就需要前面內容提到的離當前位置很遠的France的上下文信息。這就說明相關信息和當前預測詞的位置之間的間隔變得非常的大。 
不幸的是,隨着這間隔不斷的變大,RNNs就會失去學習連接如此遠的信息的能力。 
這裏寫圖片描述

在理論上,RNNs是絕對能夠有能力處理“長期依賴”問題。人們可以仔細的挑選哪些參數去解決這些問題的初級形式。實踐中,RNNs似乎並不能學習到這些知識。Hochreiter (1991) [German] 和 Bengio, et al. (1994) 更加具有深度的討論了這些問題,他們發現了爲什麼RNNs是很難去學習的一些最基本的原因。 
然而,幸運的是,LSTM並沒有這些問題!

LSTM網絡

長短期內存網絡(Long Short Term Memory networks) – 通常叫 “LSTMs”, 是一種特殊的RNN類型, 可以學習長期依賴關係。它首先是由Hochreiter & Schmidhuber (1997)提出來的,後來許多的人對它進行了改進和推廣。LSTMs對於許多的問題都取得了巨大的成功,並且也得到了廣泛的使用。

LSTMs 刻意的設計去避免長期依賴問題。記住長期的信息在實踐中RNN幾乎默認的行爲,但是卻需要很大的代價去學習這種能力。

所有的遞歸神經網絡都有重複神經網絡模塊的鏈式形式,在標準的RNNs中,重複模塊只有一個非常簡單的架構,比如只有一個tanh層 
LSTM

LSTM同樣也是這種鏈式結構,但是重複的模型擁有不同的結構,它與單個的神經網層不同,它有四個, 使用非常特別方式進行交互。 
LSTM

這裏不必擔心詳細的細節是什麼,我們將會一步一步的講解LSTM圖。現在,我們需要熟悉圖中使用的各種圖標代表什麼意思。 
這裏寫圖片描述

在上圖中,每一條黑線傳輸着一整個向量,從一個節點的輸出到其他節點的輸入。粉紅色的圓圈代表點乘操作(pointwise operations), 像向量的加法。而黃色的方框是學習到的神經網絡層,合在一起的線條表示向量的連接操作,分叉的線條表示他的內容被複制到了不同的位置。

LSTMs 背後的核心思想

LSTMs的關鍵就是細胞狀態(cell state), 水平線在這個圖的頂部上貫穿運行。

細胞轉態就像傳送帶一樣。直接在整個鏈上運行,只有一些少量的線性交互。信息這上面流動很容易使它保持不變。 
cell state

LSTM精心的設計了一種結構去移除或者添加元素到細胞狀態(cell state)上, 這種結構叫做門限(gates).

門限(gates)使得信息可以選擇性的通過。它是由一個sigmoid神經網絡層和一個點乘乘法操作組成 
gate

sigmoid層輸出0到1之間的數值,表示每個組件有多少量可以通過。0代表“所有的不能量通過”,而1代表“所有的量都可以通過”。

一個LSTM 有三個這樣的門限(gates),來保護和控制細胞狀態(cell state).

一步一步的講解LSTM怎麼工作的

LSTM的第一步是決定我們要從細胞狀態(cell state)中丟棄哪些信息。這個決定是由一個sigmoid層叫“忘記門限層”所決定的。它的輸入爲ht−1ht−1和xtxt, 輸出0到1間的數到細胞轉態(cell state)Ct−1Ct−1。其中1表示“完全的保留”而0表示“完全的放棄”。

讓我們回到前面語言模型基於前面所有的信息預測下一個單詞。對於這個問題,細胞狀態包含了當前主語的類別,因此這正確的代詞可以被選擇。當我們看到一個新的代詞時,可以忘記老的代詞。 
這裏寫圖片描述

下一步就是決定哪些新的信息需要存儲在細胞狀態中。這包含兩部分:第一部分,一個sigmoid層叫“輸入門限層”決定哪些值我們需要去更新。第二部分,一個tanh層,創建一個新的候選向量C^tC^t,會被加入到這狀態上。下一步,我們將組合這兩個部分產生一個新的更新狀態。

在我們的語言模型中,我們想添加這新代詞的主語類別到這細胞狀態,去取代我們要忘記的老的代詞。 
這裏寫圖片描述

現在是時候去更新老的細胞狀態Ct−1Ct−1, 到一個新的細胞狀態CtCt。前面的步驟已經決定了將要做什麼,我們僅僅需要去實現它。

我們將舊狀態與ftft相乘,需要丟棄的我們需要更早的丟棄。然後加上it∗C^tit∗C^t。 這就是這新的候選值,規格化了我們需要去決定有多少狀態值需要去更新。 
這裏寫圖片描述

最後,我們需要決定需要輸出什麼,輸出是基於我們的細胞狀態,但是也有一個過濾後的版本。首先,我們運行sigmoid層,這層決定細胞轉態哪些部分需要輸出。然後,我們把細胞狀態通過tanh(輸出-1到1之間的值)進行處理,然後再乘上sigmoid輸出。最後我們僅僅會輸出我們確定輸出的那部分。

在語言模型例子中,因爲它僅僅看到了一個代詞,也許我們想去輸出與動詞相關的信息,在這種情況下會發生什麼呢?例如,也許輸出是否這代詞時單數還是複數。如果是動詞的話,我也知道動詞是否需要進行詞形的變化。 
這裏寫圖片描述

LSTM的變體

到目前爲止,我們已經描述了相對正常的LSTM。但是並不是所有的LSTM都和上面講述的相同。事實上,每篇論文上涉及的LSTM都有一些稍微的不同。這個差異是很小的,但是有些確實值得提及。

一種很流行的LSTM變體是由Gers & Schmidhuber (2000)所介紹,它增加了“peephole connections”, 也就是說,讓門限層也接收細胞狀態的輸入。 
這裏寫圖片描述

在上圖中,對所有的門限都填加了peephoes。許多的論文,有些會添加peepholes ,但是也有些不會。

另外一種變體是使用couple forget 和 輸入門限(input gates)。不是明確地把需要丟棄什麼和需要添加新的信息分離開來, 而是把這些決策放在一起。我們僅僅丟棄當我們將要在當前位置輸入時。我們僅僅輸入新的值到我們已經忘記一些舊值上。 
這裏寫圖片描述

一種稍微變化大一點的LSTM變體是Gated Recurrent Unit, 或者GRU, 由 Cho, et al. (2014).提出來的,它組合了忘記和輸入門到一個“update gate”。它也合併了細胞狀態和隱含層狀態。和做了一些其他的改變。他的這個模型比標準的LSTM模型更加的簡單,也慢慢的流行起來了。 
這裏寫圖片描述

這僅僅列舉了部分流行的LSTM變體。還有很多其他的變體,比如,由Yao, et al. (2015)提出來的Depth Gated RNNs。也有一些與LSTM完全不同的方法去解決長期依賴問題的方法,比如由Koutnik, et al. (2014)提出的Clockwork RNNs。

那麼,哪種變體是最好的呢?這真的很重要嗎?Greff, et al. (2015)對所流行的變體做了一個比較,發現他們的結論都是相同的。Jozefowicz, et al. (2015)測試了超過1萬種RNN架構,發現在一些任務,RNN架構要比LSTM更好。

結論

剛開始時,我提及到通過RNNs取得了重大的結果,本質上所有的這些都可以使用LSTM實現。對於大部分的任務,它確實工作的更好。

寫了很多的等式,LSTM看起來讓人很費解。真心的希望,通過這篇文章一步一步的講解能夠使你更加清楚的理解LSTM。

LSTM是我們在完成RNNs的基礎上取得的成功,很自然的,我們也許會問:接下來,哪裏會有更大的突破呢?在研究員中最普遍的觀點是:“是的!下一步已經有了,它就是注意力!”(Yes! There is a next step and it’s attention!),這種想法讓RNN的每一步都從更大的信息集中挑選出信息。例如,你想使用RNN去描述一副圖片,它也許會選擇圖片中的一部分去尋找它輸出的每一個單詞。事實上,Xu, et al. (2015) 確實這樣子做了—如果你想更加深入的探索注意力,這也許就是一個很有趣的開始點。使用注意力,還有許多使用注意力令人興奮的結果,和它看起來無處不在。

在RNN的研究中,注意力並不是唯一令人興奮的研究方向。例如,Kalchbrenner, et al. (2015)所介紹的Grid LSTM似乎更有前景。使用RNNs生成模型–比如 Gregor, et al. (2015), Chung, et al. (2015), 或者 Bayer & Osendorfer (2015) –也非常的有趣。最近幾年,對於RNN一直是一個令人激動的時刻,接下來也將更加的如此。

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