序列模型簡介——RNN, Bidirectional RNN, LSTM, GRU

摘要: 序列模型大集合——RNN, Bidirectional RNN, LSTM, GRU

既然我們已經有了前饋網絡和CNN,爲什麼我們還需要序列模型呢?這些模型的問題在於,當給定一系列的數據時,它們表現的性能很差。序列數據的一個例子是音頻的剪輯,其中包含一系列的人說過的話。另一個例子是英文句子,它包含一系列的單詞。前饋網絡和CNN採用一個固定長度作爲輸入,但是,當你看這些句子的時候,並非所有的句子都有相同的長度。你可以通過將所有的輸入填充到一個固定的長度來解決這個問題。然而,它們的表現仍然比RNN要差,因爲這些傳統模型不瞭解給定輸入的上下文環境。這就是序列模型和前饋模型的主要區別所在。對於一個句子,當看到一個詞的時候,序列模型試圖從在同一個句子中前面的詞推導出關係。當我們讀一個句子的時候,不會每次遇到一個新詞都會再從頭開始。我們會根據對所讀過單詞的理解來處理之後的每個單詞。

循環神經網絡(Recurrent Neural Network,RNN)

循環神經網絡

循環神經網絡如上圖所示。在一個時間步驟中的每個節點都接收來自上一個節點的輸入,並且這可以用一個feedback循環來表示。我們可以深入這個feedback循環並以下圖來表示。在每個時間步驟中,我們取一個輸入x_i和前一個節點的輸出a_i-1,對其進行計算,並生成一個輸出h_i。這個輸出被取出來之後再提供給下一個節點。此過程將一直繼續,直到所有時間步驟都被評估完成。

循環神經網絡

描述如何在每個時間步驟上計算輸出的方程式,如下所示:

在循環神經網絡中的反向傳播發生在圖2中所示箭頭的相反方向上。像所有其它的反向傳播技術一樣,我們評估一個損失函數,並獲取梯度來更新權重參數。循環神經網絡中有意思的部分是從右到左出現的反向傳播。由於參數從最後的時間步驟更新到最初的時間步驟,這被稱爲通過時間的反向傳播。

長短期記憶(Long Short-Term Memory)— LSTM網絡

循環神經網絡的缺點是,隨着時間步驟長度的增大,它無法從差得很遠的時間步驟中獲得上下文環境。

循環神經網絡

爲了理解時間步驟t+1的上下文環境,我們有可能需要了解時間步驟0和1中的表示。但是,由於它們相差很遠,因此它們所學的表示無法在時間步驟t+1上向前移動,進而對其起作用。“我在法國長大……我能說一口流利的法語”,要理解你說的法語,網絡就必須遠遠地往後查找。但是,它不能這麼做,這個問題可以歸咎於梯度消失的原因。因此,循環神經網絡只能記住短期存儲序列。

爲了解決這個問題,Hochreiter & Schmidhuber提出了一種稱爲長短期記憶網絡。

LSTM

LSTM網絡的結構與循環神經網絡保持一致,而重複模塊會進行更多的操作。增強重複模塊使LSTM網絡能夠記住長期依賴關係。讓我們試着分解每個操作,來幫助網絡更好地記憶。

1、忘記門操作

忘記操作

我們從當前時間步驟獲取輸入,並從前一時間步驟獲取學習的表示,之後將它們連接起來。我們將連接後的值傳遞給一個sigmoid函數,該函數輸出一個介於0和1之間的值(f_t)。我們在f_t和c_t-1之間做元素的乘積。如果一個值爲0,那麼從c_t-1中去掉,如果這個值爲1,則完全通過。因此,這種操作也被稱爲“忘記門操作”。

2、更新門操作

更新操作

上圖表示的是“更新門操作”。我們將來自當前時間步驟中的值和前一時間步驟中已學習的表示連接起來。將連接的值通過一個tanh函數進行傳遞,我們生成一些候選值,並通過一個sigmoid函數傳遞,從候選值中選擇一些值,所選的候選值將會被更新到c_t-1。

3、輸出門操作

更新值(左)和輸出操作(右)

我們將當前時間步驟的值和前一時間步驟已學習的表示連接起來,並經由一個sigmoid函數傳遞來選擇將要用作輸出的值。我們獲取單元狀態並請求一個tanh函數,然後執行元素方式操作,其只允許選定的輸出通過。

現在,在一個單一單元中要完成很多的操作。當使用更大的網絡時,與循環神經網絡相比,訓練時間將顯著地增加。如果想要減少你的訓練時間,但同時也使用一個能記住長期依賴關係的網絡,那麼還有另一個替代LSTM網絡的方法,它被稱爲門控循環單元。

門控循環單元(Gated Recurrent Unit ,GRU Network)

與LSTM網絡不同的是,門控循環單元沒有單元狀態,並且有2個門而不是3個(忘記、更新和輸出)。

門控循環單元

門控循環單元使用一個更新門和一個重置門。更新門決定了應該讓多少之前的信息通過,而重置門則決定了應該丟棄多少之前的信息。 在上面的圖中,z_t表示更新門操作,通過使用一個sigmoid函數,我們決定讓哪些之前的信息通過。h_t表示重置門操作,我們將前一時間步驟和當前時間步驟的連接值與r_t相乘。這將產生我們希望從前一時間步驟中所放棄的值。

儘管門控循環單元在計算效率上比LSTM網絡要高,但由於門的數量減少,它在表現方面仍然排在LSTM網絡之後。因此,當我們需要更快地訓練並且手頭沒有太多計算資源的情況下,還是可以選擇使用門控循環單元的。

雙向循環神經網絡

雙向RNN

所有上述雙向RNN網絡的一個主要問題是,它們從之前的時間步驟中學習表示。有時,你有可能需要從未來的時間步驟中學習表示,以便更好地理解上下文環境並消除歧義。通過接下來的列子,“He said, Teddy bears are on sale” and “He said, Teddy Roosevelt was a great President。在上面的兩句話中,當我們看到“Teddy”和前兩個詞“He said”的時候,我們有可能無法理解這個句子是指President還是Teddy bears。因此,爲了解決這種歧義性,我們需要往前查找。這就是雙向RNN所能實現的。

雙向RNN中的重複模塊可以是常規RNN、LSTM或是GRU。雙向RNN的結構和連接如圖10所示。有兩種類型的連接,一種是向前的,這有助於我們從之前的表示中進行學習,另一種是向後的,這有助於我們從未來的表示中進行學習。

正向傳播分兩步完成:

  • 我們從左向右移動,從初始時間步驟開始計算值,一直持續到到達最終時間步驟爲止;
  • 我們從右向左移動,從最後一個時間步驟開始計算值,一直持續到到達最終時間步驟爲止;

結論

將雙向循環神經網絡與LSTM模塊相結合可以顯著地提高性能,當將它們與監控機制相結合的時候,你可以在機器翻譯、情感化分析等實例中獲得最高水品的性能表現。希望本文對大家有幫助。



本文作者:【方向】

閱讀原文

本文爲雲棲社區原創內容,未經允許不得轉載。

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