1. 程式人生 > >深度學習之迴圈神經網路

深度學習之迴圈神經網路

迴圈神經網路或RNN是一類用於處理序列資料的神經網路。

展開計算圖

考慮一個又外部訊號x(t)驅動的動態系統,
s(t)=f(s(t1),x(t);θ)
當前狀態包含了整個過去序列的資訊。
這裡寫圖片描述
我們可以用一個函式g(t)代表t步展開後的迴圈:

h(t)=g(t)(x(t),x(t1),x(t2),...,x(2),x(1))=f(h(t1),x(t);θ)

迴圈神經網路

這裡寫圖片描述
迴圈神經網路中一些重要的設計模式包括以下幾種:
1. 每個時間步都有輸出,並且隱藏單元之間有迴圈連線的迴圈網路如圖10.3。
2. 每個時間步都產生一個輸出,只有當前時刻的輸出到下個時刻的隱藏單元之間有迴圈連線的迴圈網路,如圖10.4。
3. 隱藏單元之間存在迴圈連線,但讀取整個序列後產生的單個輸出的迴圈網路,如圖10.5。
這裡寫圖片描述


這裡寫圖片描述

現在研究圖10.3的RNN的前向傳播公式。假設隱藏單元使用雙曲正切啟用函式。從t=1t=τ的每個時間步,應用以下更新方程:

a(t)h(t)o(t)y(t)^=b+Wh(t1)+Ux(t)=tanh(at)=c+Vh(t)=softmax(o(t))

關於各個引數計算這個損失函式的梯度是計算成本很高的操作。梯度計算涉及執行一次前向傳播,接著是由右到左的反向傳播。執行時間是O(τ),並且不能通過並行化降低,因為前向傳播圖是固有順序的。前向傳播中的各個狀態必須儲存,直到它們反向傳播中被再次使用,因此記憶體代價也是O(τ)。應用於展開圖且代價為O(τ)的反向傳播演算法稱為通過時間反向傳播

(BPTT)。

基於上下文的RNN序列建模

這裡寫圖片描述

雙向RNN

前面所說的神經網路都有一個“因果”結構,意味著在時刻t的狀態只能從過去的序列x1,...xt1以及當前的輸入x(t)捕獲資訊。然而在許多應用中,我們要輸出的y(t)的預測可能依賴於整個輸入序列
雙向RNN滿足了這種需要,他在需要雙向資訊的應用中非常成功,如手寫識別,語音識別等。
這裡寫圖片描述

基於編碼解碼的序列到序列架構

現在介紹一種能夠將輸入序列對映到不一定等長的輸出序列,這在許多場景都有應用,如語音識別,機器翻譯或問答,其中訓練集的輸入和輸出序列的長度通常不同。
架構特點如下
- 編碼器處理輸入序列,輸出上下文C(通常是最終隱藏狀態的簡單函式)
- 解碼器以固定長度的向量為條件產生輸出序列。

編碼器RNN的最後一個狀態hnx通常被當作輸入的表示C並作為解碼器RNN的輸入。
這裡寫圖片描述

此架構的一個明顯不足是,編碼器RNN輸出的上下文C的維度太小而難以使當地概括一個長序列。通過讓C稱為可變長度的序列,而不是一個固定大小的向量解決。還可以引入將序列C的元素和輸出序列的元素相關聯的注意力機制。(attention)

遞迴神經網路

遞迴神經網輪被構造為深的樹狀結構而不是RNN的鏈狀結構,因此是不同型別的計算圖。
遞迴網路的一個明顯優勢是,對於具有相同長度τ的序列,深度可以急劇地從τ減小為O(logτ),這可能有助於解決長期依賴。

長期依賴的挑戰

長期記憶和其他門控RNN

LSTM

引入自迴圈的巧妙構思,以產生梯度長時間持續流動的路徑是初始LSTM模型的核心貢獻。其中一個關鍵擴充套件是使自迴圈的權重視上下文而定,而不是固定的。門控此自迴圈(由另一個隱藏單元控制)的權重,累積的時間尺度可以動態地改變。
LSTM迴圈網路除了外部的RNN迴圈外,還具有內部的LSTM細胞迴圈(自環)。
這裡寫圖片描述
這裡寫圖片描述

GRU

GRU與LSTM主要區別是,單個門控單元同時控制遺忘因子和更新狀態單元的決定。
這裡寫圖片描述

優化長期依賴

截斷梯度

梯度告訴我們,圍繞當前引數的無窮小區域內最速下降的方向。
截斷梯度(clipping the gradient)。

  • 在引數更新之前,逐元素地截斷小批量產生的引數梯度。
  • 引數更新之前截斷梯度g的範數||g||
    if||g||g>vgv||g||
    其中v是範數上屆,g用來更新引數。因為所有引數的梯度被單個因子聯合重整化,所以後一方法的優點是保證了每個步驟仍然是在梯度方向上的。

截斷每小批量梯度範數不會改變單個小批量的梯度方向。然而,許多小批量使用範數截斷梯度後的平均值不等於截斷真實梯度(使用所有的例項所形成的梯度)的範數。

引導資訊流的正則化

這裡寫圖片描述

參考資料

《深度學習》第10章