【深度學習】 LSTM模型

循環神經網絡(Recurrent Neural Networks)

人對一個問題的思考不會完全從頭開始。比如你在閱讀本片文章的時,你會根據之前理解過的信息來理解下面看到的文字。在理解當前文字的時候,你並不會忘記之前看過的文字,從頭思考當前文字的含義。

傳統的神經網絡並不能做到這一點,這是在對這種序列信息(如語音)進行預測時的一個缺點。比如你想對電影中的每個片段去做事件分類,傳統的神經網絡是很難通過利用前面的事件信息來對後面事件進行分類。

而循環神經網絡(下面簡稱RNNs)可以通過不停的將信息循環操作,保證信息持續存在,從而解決上述問題。RNNs如下圖所示


1.png

可以看出A是一組神經網絡(可以理解爲一個網絡的自循環),它的工作是不停的接收x_{t}並且輸出h_{t}。從圖中可以看出A允許將信息不停的再內部循環,這樣使得它可以保證每一步的計算都保存以前的信息。

這樣講可能還是有點暈,更好的理解方式,也是很多文章的做法,將RNNs的自循環結構展開,像是將同一個網絡複製並連成一條線的結構,將自身提取的信息傳遞給下一個繼承者,如下圖所示。


2.png

這種鏈式的結構揭示了RNNs與序列和列表類型的數據密切相關。好像他們生來就是爲了處理序列類型數據的。

誰說不是呢!在過去的幾年裏,RNNs在語音識別、文字建模、翻譯、字幕等領域有很成功的應用。在Andrej Karpathy寫的博客 The Unreasonable Effectiveness of Recurrent Neural Networks中討論了RNNs取得的驚人成果,這裏就不詳細討論了。

很對成功的案例都有一個共性,就是都用了一種叫LSTMs的特殊的RNNs網絡結構。下面就來看看什麼是LSTMs。

長依賴存在的問題

從之前的描述可以看出來,RNNs理論上是可以將以前的信息與當前的任務進行連接,例如使用以前的視頻幀來幫助網絡理解當前幀。如果RNNs能做到這一點,那將會是非常的有用。但是他們能做到這點嗎?答案是不一定。

有時候我們需要利用近期的信息來執行來處理當前的任務。例如,考慮用一個語言模型通過利用以前的文字信息來預測下一個文字。如果我們需要預測“the clouds are in the sky”這句話的最後一個字,我們不需要其他的信息,通過前面的語境就能知道最後一個字應該是sky。在這種情況下,相關信息與需要該信息的位置距離較近,RNNs能夠學習利用以前的信息來對當前任務進行相應的操作。如下圖所示通過輸入的x_{1}、x_{2}信息來預測出h_{3}

3.png

假設現在有個更爲複雜的任務,考慮到下面這句話“I grew up in France… I speak fluent French.”,現在需要語言模型通過現有以前的文字信息預測該句話的最後一個字。通過以前文字語境可以預測出最後一個字是某種語言,但是要猜測出French,要根據之前的France語境。這樣的任務,不同之前,因爲這次的有用信息與需要進行處理信息的地方之間的距離較遠,這樣容易導致RNNs不能學習到有用的信息,最終推導的任務可能失敗。如下圖所示。


4.png

理論上RNNs是能夠處理這種“長依賴”問題的。通過調參來解決這種問題。但是在實踐過程中RNNs無法學習到這種特徵。Hochreiter (1991) [German]Bengio, et al. (1994)深入研究過爲什麼RNNs沒法學習到這種特徵。

幸好LSTMs這種特殊的RNNs是沒有這個問題的。

LSTM 網絡

Long Short Term Memory networks(以下簡稱LSTMs),一種特殊的RNN網絡,該網絡設計出來是爲了解決長依賴問題。該網絡由 Hochreiter & Schmidhuber (1997)引入,並有許多人對其進行了改進和普及。他們的工作被用來解決了各種各樣的問題,直到目前還被廣泛應用。

所有循環神經網絡都具有神經網絡的重複模塊鏈的形式。 在標準的RNN中,該重複模塊將具有非常簡單的結構,例如單個tanh層。標準的RNN網絡如下圖所示


5.png

LSTMs也具有這種鏈式結構,但是它的重複單元不同於標準RNN網絡裏的單元只有一個網絡層,它的內部有四個網絡層。LSTMs的結構如下圖所示。


6.png

在解釋LSTMs的詳細結構時先定義一下圖中各個符號的含義,符號包括下面幾種


7.png

圖中黃色類似於CNN裏的激活函數操作,粉色圓圈表示點操作,單箭頭表示數據流向,箭頭合併表示向量的合併(concat)操作,箭頭分叉表示向量的拷貝操作

LSTMs的核心思想

LSTMs的核心是細胞狀態,用貫穿細胞的水平線表示。

細胞狀態像傳送帶一樣。它貫穿整個細胞卻只有很少的分支,這樣能保證信息不變的流過整個RNNs。細胞狀態如下圖所示


8.png

LSTM網絡能通過一種被稱爲門的結構對細胞狀態進行刪除或者添加信息。

門能夠有選擇性的決定讓哪些信息通過。其實門的結構很簡單,就是一個sigmoid層和一個點乘操作的組合。如下圖所示


9.png

因爲sigmoid層的輸出是0-1的值,這代表有多少信息能夠流過sigmoid層。0表示都不能通過,1表示都能通過。

一個LSTM裏面包含三個門來控制細胞狀態。

一步一步理解LSTM

前面提到LSTM由三個門來控制細胞狀態,這三個門分別稱爲忘記門、輸入門和輸出門。下面一個一個的來講述。

LSTM的第一步就是決定細胞狀態需要丟棄哪些信息。這部分操作是通過一個稱爲忘記門的sigmoid單元來處理的。它通過查看h_{t-1}x_{t}信息來輸出一個0-1之間的向量,該向量裏面的0-1值表示細胞狀態C_{t-1}中的哪些信息保留或丟棄多少。0表示不保留,1表示都保留。忘記門如下圖所示。

10.png

下一步是決定給細胞狀態添加哪些新的信息。這一步又分爲兩個步驟,首先,利用h_{t-1}x_{t}通過一個稱爲輸入門的操作來決定更新哪些信息。然後利用h_{t-1}x_{t}通過一個tanh層得到新的候選細胞信息\tilde C_{t},這些信息可能會被更新到細胞信息中。這兩步描述如下圖所示。

11.png

下面將更新舊的細胞信息C_{t-1},變爲新的細胞信息C_{t}。更新的規則就是通過忘記門選擇忘記舊細胞信息的一部分,通過輸入門選擇添加候選細胞信息\tilde C_{t}的一部分得到新的細胞信息C_{t}。更新操作如下圖所示

12.png

更新完細胞狀態後需要根據輸入的h_{t-1}x_{t}來判斷輸出細胞的哪些狀態特徵,這裏需要將輸入經過一個稱爲輸出門的sigmoid層得到判斷條件,然後將細胞狀態經過tanh層得到一個-1~1之間值的向量,該向量與輸出門得到的判斷條件相乘就得到了最終該RNN單元的輸出。該步驟如下圖所示

13.png

還是拿語言模型來舉例說明,在預測動詞形式的時候,我們需要通過輸入的主語是單數還是複數來推斷輸出門輸出的預測動詞是單數形式還是複數形式。

LSTM的變種

之前描述的LSTM結構是最爲普通的。在實際的文章中LSTM的結構存在各種變式,雖然變化都不會太大,但是也值得一提。
其中一個很受歡迎的變式由Gers & Schmidhuber (2000)提出,它在LSTM的結構中加入了“peephole connections.”結構,peephole connections結構的作用是允許各個門結構能夠看到細胞信息,具體如下圖所示。

14.png

上圖描繪的是所有門都能看到細胞信息,還有一些變式是在其中的某些門引入細胞信息。

還有一種變式是在忘記門與輸入門之間引入一個耦合。不同於之前的LSTM結構,忘記門和輸入門是獨立的,這個變式是在忘記門刪除歷史信息的位置加入新的信息,在加入新信息的位置刪除舊信息。該結構如下圖所示。


15.png

一種比其他形式變化更爲顯著的LSTM變式是由 Cho, et al. (2014)提出的門循環單元(GRU)。它將忘記門和輸入門合併成一個新的門,稱爲更新門。GRU還有一個門稱爲重置門。如下圖所示

16.png

其中重置門爲上圖中前面那個門,決定了如何將新的輸入信息與前面的記憶相結合。更新門爲上圖中後面那個門,定義了前面記憶保存到當前時間步的量。由於該變式的簡單有效,後來被廣泛應用。

這裏介紹的只是一些較爲有名的LSTM變式,關於LSTM的變式其實還有很多種,像 Yao, et al. (2015)提出的Depth Gated RNNs。還有其他用於解決長依賴問題的方法,如由 Koutnik, et al. (2014)提出的 Clockwork RNNs。

至於哪種變式效果最好?各種差異對LSTM的影響有多少?這些問題 Greff, et al. (2015)做了一些對比,結論是他們基本是一樣的。 Jozefowicz, et al. (2015)測試了一萬多種RNN結構,發現在某些指定任務上有些變式還是由於標準LSTMs的。

總結

之前也提到過RNNs取得了不錯的成績,這些成績很多是基於LSTMs來做的,說明LSTMs適用於大部分的序列場景應用。
一般文章寫法會堆一堆公式嚇唬人,希望本文一步一步的拆分能有助於大家的理解。
LSTMs對於RNNs的使用是一大進步。那麼現在還有個問題,是否還有更大的進步?對於很多研究者來說,但是是肯定的,那就是attention的問世。attention的思想是讓RNN在每一步挑選信息的時候都能從更大的信息集裏面挑選出有用信息。例如,利用RNN模型爲一幀圖片生成字母,它將會選擇圖片有用的部分來得到有用的輸入,從而生成有效的輸出。事實上, Xu, et al.(2015) 已經這麼做了,如果你想更深入的瞭解attention,這會是一個不錯的開始。attention方向還有一些振奮人心的研究,但還有很多東西等待探索......

在RNN領域attention並不是唯一一個可以研究的點。比如Kalchbrenner, et al. (2015)提出的Grid LSTMs,Gregor, et al. (2015), Chung, et al. (2015), 和 Bayer & Osendorfer (2015)將RNNs用於生成模型的研究都非常有意思。
在過去幾年RNNs方面的研究非常的多,相信以後的研究成果也會更爲豐富。

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