深度學習筆記——RNN(LSTM、GRU、雙向RNN)學習總結

RNN( Recurrent Neural Networks迴圈神經網路)

迴圈神經網路的主要用途是處理和預測序列資料,在全連線神經網路或卷積神經網路中,網路結果都是從輸入層到隱含層再到輸出層,層與層之間是全連線或部分連線的,但每層之間的結點是無連線的。考慮這樣一個問題,如果要預測句子的下一個單詞是什麼,一般需要用到當前單詞以及前面的單詞,因為句子中前後單詞並不是獨立的,比如,當前單詞是“很”,前一個單詞是“天空”,那麼下一個單詞很大概率是“藍”。迴圈神經網路的來源就是為了刻畫一個序列當前的輸出與之前資訊的關係。從網路結果上來說,RNN會記憶之前的資訊,並利用之前的資訊影響後面的輸出。也就是說,RNN的隱藏層之間的結點是有連線的,隱藏層的輸入不僅包括輸入層的輸出,還包含上一時刻隱藏層的輸出。

典型的RNN結構如下圖所示,對於RNN來說,一個非常重要的概念就是時刻,RNN會對於每一個時刻的輸入結合當前模型的狀態給出一個輸出,從圖中可以看出,RNN的主體結構A的輸入除了來自輸入層的Xt,還有一個迴圈的邊來提供當前時刻的狀態。同時A的狀態也會從當前步傳遞到下一步。

我們將這個迴圈展開,可以很清晰地看到資訊在隱藏層之間的傳遞:

鏈式的特徵揭示了 RNN 本質上是與序列和列表相關的。他們是對於這類資料的最自然的神經網路架構。
並且 RNN 也已經被人們應用了!在過去幾年中,應用 RNN 在語音識別,語言建模,翻譯,圖片描述等問題上已經取得一定成功,並且這個列表還在增長。

RNN的隱藏層的計算是一個全連線,

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

RNN 的關鍵點之一就是他們可以用來連線先前的資訊到當前的任務上,例如使用過去的視訊段來推測對當前段的理解。如果 RNN 可以做到這個,他們就變得非常有用。但是真的可以麼?答案是,還有很多依賴因素。
有時候,我們僅僅需要知道先前的資訊來執行當前的任務。例如,我們有一個語言模型用來基於先前的詞來預測下一個詞。如果我們試著預測 “the clouds are in the sky” 最後的詞,我們並不需要任何其他的上下文 —— 因此下一個詞很顯然就應該是 sky。在這樣的場景中,相關的資訊和預測的詞位置之間的間隔是非常小的,RNN 可以學會使用先前的資訊。

但是同樣會有一些更加複雜的場景。假設我們試著去預測“I grew up in France… I speak fluent French”最後的詞。當前的資訊建議下一個詞可能是一種語言的名字,但是如果我們需要弄清楚是什麼語言,我們是需要先前提到的離當前位置很遠的 France 的上下文的。這說明相關資訊和當前預測位置之間的間隔就肯定變得相當的大。
不幸的是,在這個間隔不斷增大時,RNN 會喪失學習到連線如此遠的資訊的能力。

在理論上,RNN 絕對可以處理這樣的 長期依賴 問題。人們可以仔細挑選引數來解決這類問題中的最初級形式,但在實踐中,RNN 肯定不能夠成功學習到這些知識。如果序列過長會導致優化時出現梯度消散的問題。
然而,幸運的是,LSTM 並沒有這個問題!

LSTM 網路

Long Short Term Memory 網路—— 一般就叫做 LSTM ——是一種特殊的 RNN 型別,可以學習長期依賴資訊。LSTM 由Hochreiter & Schmidhuber (1997)提出,並在近期被Alex Graves進行了改良和推廣。在很多問題,LSTM 都取得相當巨大的成功,並得到了廣泛的使用。

LSTM 通過刻意的設計來避免長期依賴問題。記住長期的資訊在實踐中是 LSTM 的預設行為,而非需要付出很大代價才能獲得的能力!
所有 RNN 都具有一種重複神經網路模組的鏈式的形式。在標準的 RNN 中,這個重複的模組只有一個非常簡單的結構,例如一個 tanh 層。
LSTM 同樣是這樣的結構,但是重複的模組擁有一個不同的結構。不同於 單一神經網路層,這裡是有四個,以一種非常特殊的方式進行互動。LSTM是一種擁有三個“門”結構的特殊網路結構。

LSTM 靠一些“門”的結構讓資訊有選擇性地影響RNN中每個時刻的狀態。所謂“門”的結構就是一個使用sigmod神經網路和一個按位做乘法的操作,這兩個操作合在一起就是一個“門”結構。之所以該結構叫做門是因為使用sigmod作為啟用函式的全連線神經網路層會輸出一個0到1之間的值,描述當前輸入有多少資訊量可以通過這個結構,於是這個結構的功能就類似於一扇門,當門開啟時(sigmod輸出為1時),全部資訊都可以通過;當門關上時(sigmod輸出為0),任何資訊都無法通過。

如上圖所示,我們用以下幾個公式來描述LSTM一個迴圈體的結構組成:

輸入門:

遺忘門:

候選記憶單元:

當前時刻記憶單元:

輸出門:

輸出:

GRU網路

GRU可以看成是LSTM的變種,GRU把LSTM中的遺忘門和輸入們用更新門來替代。 把cell state和隱狀態ht進行合併,在計算當前時刻新資訊的方法和LSTM有所不同。 下圖是GRU更新ht的過程:

重置門:

更新門:

候選記憶單元:

當前時刻記憶單元:

雙向RNN

在經典的迴圈神經網路中,狀態的傳輸是從前往後單向的。然而,在有些問題中,當前時刻的輸出不僅和之前的狀態有關係,也和之後的狀態相關。這時就需要雙向RNN(BiRNN)來解決這類問題。例如預測一個語句中缺失的單詞不僅需要根據前文來判斷,也需要根據後面的內容,這時雙向RNN就可以發揮它的作用。

雙向RNN是由兩個RNN上下疊加在一起組成的。輸出由這兩個RNN的狀態共同決定。

從上圖可以看出,雙向RNN的主題結構就是兩個單向RNN的結合。在每一個時刻t,輸入會同時提供給這兩個方向相反的RNN,而輸出則是由這兩個單向RNN共同決定(可以拼接或者求和等)。

同樣地,將雙向RNN中的RNN替換成LSTM或者GRU結構,則組成了BiLSTM和BiGRU。