Recurrent Models學習筆記

主要是自己學習Recurrent Neural Network過程中的知識梳理。

涉及到的資料來源:

Primary RNN

傳統的神經網絡往往只關注於當前結點,不能處理時序信息。例如在任務型問答系統的slot filling任務中,要識別出某一詞對應於哪個slot:

a: 幫我訂明天晚上北京的機票。

b: 幫我訂明天晚上北京出發的機票。

a、b兩句話都包含兩個slot,其中“明天晚上”均爲”Time“,而a中的”北京“應識別爲”Destination“,b中的”北京“應識別爲”Place of departure“。

如果使用傳統的神經網絡結構,可以建模爲對每個詞分別進行分類的任務。這種情況下,每個詞是分別進行預測的,相互之間獨立。”明天晚上“預測爲”Time“,”到“將會被預測爲”Other“,”北京“預測爲”Destination“還是”Place of departure“就無從判斷了。

因此需要一種能保留時序信息的模型,判斷當前詞的類別時考慮前面的信息,這樣就能根據”到“或”從“來判斷出到底是出發地還是目的地了。

簡單RNN的網絡結構如下圖所示。RNN允許信息的持久化,對當前的狀態保留記憶(以隱變量的方式存在,即圖中的h_t)。


X_t 表示當前詞的輸入word vector,當前時刻的輸出 y_t 由 X_t 和上一時刻的狀態 h_{t-1} 共同決定。


需要注意的是,

  • 每一時刻的參數W是相同的。
  • 在時刻t0,狀態h0由隨機初始化得到。
  • 設 x 的word vector維度爲d,隱藏層的維度爲 D_{h} ,預測類別的個數爲C,即 x\in R^{d \times 1} , h_{t} \in R^{D_{h} \times 1} , \tilde{y}\in R^{|C|\times1} ,那麼 W^{(hh)}\in R^{D_{h} \times D_{h}} , W^{(hx)}\in R^{D_{h} \times d}, W^{(S)}\in R^{|C| \times D_{h}}

另一個更爲直觀的圖示:

更爲通用的情況下,RNN的輸入和輸出個數並不是固定的,可以隨特定的任務而變化,滿足不同任務的需求。例如,在情感分類任務中,輸入是很多的詞序列,而輸出只有一個;在機器翻譯任務中,輸入是一系列的詞,輸出也是一系列詞,而它們之間並不是一一對應的;在詞性標註任務中,每一個詞對應一個分類結果,輸入和輸出是一一對應的。如下圖:


以上我們討論的是最簡單的情況,RNN內部只有一層隱藏層,且只考慮正向的序列信息。很多情況下當前詞之後的信息對當前詞的預測也會產生影響,此時可以擴展爲雙向RNN:


而類似於傳統神經網絡,RNN同樣也可以增加隱藏層的個數,擴展爲多層:


簡單RNN存在的最大問題就是梯度消失梯度爆炸。解決梯度爆炸問題很簡單,可以用較爲trick的方法:clipping gradient,即如果梯度的範數大於某個給定的閾值,將梯度同比收縮。而解決梯度消失問題,就要用到下面的LSTM了。

LSTM


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