image caption筆記(一):RNN、LSTM和GRU的理解

循環神經網絡(Recurrent Neural Network)

人類針對每個問題的思考,一般不會是完全的從頭開始思考。正如當你閱讀這篇譯文的時候,你會根據已經閱讀過的內容來對後面的內容進行理解,你不會把之前的東西都丟掉從頭進行思考,你對內容的理解是貫穿的。

傳統的神經網絡做不到這一點,而這似乎是一個主要的缺點。 例如,假設您想對電影中的每個事件進行分類。我們無法想象傳統神經網絡如何能夠利用前面的場景去幹預後面的預測。

幸好循環神經網絡解決了這個問題, 它們是具有循環的網絡,允許信息持續存在,示意圖如下。

 

帶循環的遞歸神經網絡

在上圖中,一組神經網絡 A接收某些輸入xt,並輸出一個值ht。 循環允許信息從網絡的一個步驟傳遞到下一個。

這些循環使得循環神經網絡看起來很神祕。 然而,如果你再多考慮一下,你就會發現其實它和傳統的神經網絡並不是完全不同。 一個循環神經網絡可以被認爲是同一個網絡的多個副本,每一個都傳遞一個消息給後繼者。 我們考慮一下如果將循環展開會發生什麼:(示意如下)

循環神經網絡的展開式

 

            

 

 

長依賴存在的問題

RNN顯著的魅力是將以前的信息連接到當前任務的這種思路,例如使用先前的視頻幀可以有助於對當前幀的理解。 如果RNN可以做到這一點,這將非常有用。 但他可以嗎?這要看情況。

有時,爲了處理當前的任務,我們只需要查看最近的信息。 例如,考慮一種語言模型,該模型根據前面的詞語來預測下一個單詞。 如果我們試圖預測““the clouds are in the sky”的最後一個單詞,我們不需要任何其他的語境信息——下一個單詞顯然是sky。 在相關信息和需要該信息的距離較近的時候,RNN能夠學會去利用歷史信息。

但也有需要更多上下文的情況。 考慮嘗試預測文本中的最後一個單詞“I grew up in France… I speak fluent French.”。最近的信息表明,下一個單詞可能是一種語言的名稱,但如果我們想縮範圍確定那種語言,我們需要從前面獲取法國的背景。 相關信息和需要該信息的地方的距離變得非常大的情況是很可能的。

不幸的是,隨着距離的增加,RNN無法有效的利用歷史信息。

在理論上,RNN絕對有能力處理這樣的“長依賴”問題。人們可以仔細挑選參數來解決這種形式的問題。 可悲的是,在實踐中,RNN似乎無法學習到這些特徵。HochreiterBengio,曾經深入的研究過這個問題,他們發現一些根本性的原因,能夠解釋RNN爲什麼不work。

謝天謝地,LSTM沒有這個問題!

LSTM Networks

長短記憶神經網絡——通常稱作LSTM,是一種特殊的RNN,能夠學習長的依賴關係。 他們由Hochreiter&Schmidhuber引入,並被許多人進行了改進和普及。他們在各種各樣的問題上工作的非常好,現在被廣泛使用。

LSTM是爲了避免長依賴問題而精心設計的。 記住較長的歷史信息實際上是他們的默認行爲,而不是他們努力學習的東西。

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

標準RNN中的重複模塊的單層神經網絡

LSTM也擁有這種鏈狀結構,但是重複模塊則擁有不同的結構。與神經網絡的簡單的一層相比,LSTM擁有四層,這四層以特殊的方式進行交互。

LSTM中的重複模塊包含的四層交互神經網絡層

不要過早擔心細節問題, 稍後我們將一步一步地剖析LSTM。 現在,讓我們先熟悉一下我們將要使用的符號。

在上圖中,每一行都帶有一個向量,該向量從一個節點輸出到其他節點的輸入。 粉紅色圓圈表示點向運算,如向量加法、點乘,而黃色框是學習神經網絡層。 線的合併表示連接,而線的交叉表示其內容正在複製,副本將轉到不同的位置。

LSTM背後的核心理念

LSTM的關鍵是細胞狀態,表示細胞狀態的這條線水平的穿過圖的頂部。

細胞的狀態類似於輸送帶,細胞的狀態在整個鏈上運行,只有一些小的線性操作作用其上,信息很容易保持不變的流過整個鏈。

LSTM確實具有刪除或添加信息到細胞狀態的能力,這個能力是由被稱爲門(Gate)的結構所賦予的。

門(Gate)是一種可選地讓信息通過的方式。 它由一個Sigmoid神經網絡層和一個點乘法運算組成。

Sigmoid神經網絡層輸出0和1之間的數字,這個數字描述每個組件有多少信息可以通過, 0表示不通過任何信息,1表示全部通過

LSTM有三個門,用於保護和控制細胞的狀態。

一步步的拆解LSTM

LSTM的第一步是決定我們要從細胞狀態中丟棄什麼信息。 該決定由被稱爲“忘記門”的Sigmoid層實現。它查看ht-1(前一個輸出)和xt(當前輸入),併爲單元格狀態Ct-1(上一個狀態)中的每個數字輸出0和1之間的數字。1代表完全保留,而0代表徹底刪除。

讓我們回到語言模型的例子,試圖根據以前的語料來預測下一個單詞。 在這樣的問題中,細胞狀態可能包括當前主題的性別,從而決定使用正確的代詞。 當我們看到一個新主題時,我們想要忘記舊主題的性別。

下一步是決定我們要在細胞狀態中存儲什麼信息。 這部分分爲兩步。 首先,稱爲“輸入門層”的Sigmoid層決定了我們將更新哪些值。 接下來一個tanh層創建候選向量Ct,該向量將會被加到細胞的狀態中。 在下一步中,我們將結合這兩個向量來創建更新值。

在我們的語言模型的例子中,我們希望將新主題的性別添加到單元格狀態,以替換我們忘記的舊對象。

現在是時候去更新上一個狀態值Ct−1了,將其更新爲Ct。簽名的步驟以及決定了應該做什麼,我們只需實際執行即可。

我們將上一個狀態值乘以ft,以此表達期待忘記的部分。之後我們將得到的值加上 it∗C̃ t。這個得到的是新的候選值, 按照我們決定更新每個狀態值的多少來衡量.

在語言模型的例子中,對應着實際刪除關於舊主題性別的信息,並添加新信息,正如在之前的步驟中描述的那樣。

最後,我們需要決定我們要輸出什麼。 此輸出將基於我們的細胞狀態,但將是一個過濾版本。 首先,我們運行一個sigmoid層,它決定了我們要輸出的細胞狀態的哪些部分。 然後,我們將單元格狀態通過tanh(將值規範化到-1和1之間),並將其乘以Sigmoid門的輸出,至此我們只輸出了我們決定的那些部分。

對於語言模型的例子,由於只看到一個主題,考慮到後面可能出現的詞,它可能需要輸出與動詞相關的信息。 例如,它可能會輸出主題是單數還是複數,以便我們知道動詞應該如何組合在一起。

LSTM的變種

到目前爲止,所描述的是一個很正常的LSTM。 但並不是所有的LSTM都與上述相同。 事實上,似乎幾乎每一篇涉及LSTM的論文都使用了一個略有不同的版本,差異很小,但有一些值得一看。

一個比較流行的LSTM變種是由Gers & Schmidhuber (2000)提出的,添加“peephole connections”。這意味着,我們允許gate層去看細胞的狀態。

上面的圖中所有的Sigmoid層都增加了窺視,但許多論文實現不是針對所有都增加窺探,而是有針對性的增加。

另一種變化是使用耦合的忘記和輸入門,而不是單獨決定要忘記什麼、添加什麼,這個決定需要一起做。 只有當需要輸入某些信息的時候,我們纔會忘記這個位置的歷史信息。只有當我們忘記一些歷史信息的時候,我們纔在狀態中添加新的信息。

LSTM的一個稍微更顯着的變化是由Cho介紹的門控循環單元(或GRU)。 它將忘記和輸入門組合成一個單一的“更新門”。它還將單元格狀態和隱藏狀態合併,並進行了一些其他更改。 所得到的模型比標準LSTM模型更簡單,並且越來越受歡迎。

這些只是最顯着的LSTM變體中的幾個, 還有很多其他的,比如Depth Gated RNNs,還有一些完全不同的處理長期依賴的方法,例如Clockwork。哪些變體最好、差異的重要性等, Greff做一個很好的變體的比較,發現他們都差不多。 Jozefowicz測試了大量的RNN架構,發現一些RNN結構在某些任務上要比LSTM更好。

 

最後介紹GRU

GRU即Gated Recurrent Unit。前面說到爲了克服RNN無法很好處理遠距離依賴而提出了LSTM,而GRU則是LSTM的一個變體,當然LSTM還有有很多其他的變體。GRU保持了LSTM的效果同時又使結構更加簡單,所以它也非常流行。

GRU模型如下,它只有兩個門,分別爲更新門和重置門,即圖中的zt和rt。

z是更新門,介於0到1之間。z越小,更新的信息就越少。當爲0的時候,直接使用上一個狀態的隱藏態。

r是重置門,介於0到1之間,r越小,新添加的信息裏包含的前面的信息就越少,當爲0的時候,新添加的信息只與當前時刻的輸入有關係。我覺得叫保留門更好一點。

GRU和LSTM在很多情況下實際表現上相差無幾,那麼爲什麼我們要使用新人GRU(2014年提出)而不是相對經受了更多考驗的LSTM(1997提出)呢?

選擇GRU是因爲它的實驗效果與LSTM相似,但是更易於計算。(門少啊~!)

 


 

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