1. 程式人生 > >CS231n-2017 第10講 迴圈神經網路

CS231n-2017 第10講 迴圈神經網路

一、迴圈神經網路與應用場景

考察一個輸入序列 x 1 , x 2 ,

  , x n x_1, x_2, \cdots, x_n ,迴圈神經網路每次會結合上一次的網路狀態 h t
1 h_{t-1}
和本次輸入 x t x_t
,更新網路狀態為 h t h_t ,並根據需要輸出結果 y t y_t 。迴圈神經網路的前向傳播的數學表達如下:

h t = f W ( h t 1 , x t ) = t a n h ( W h h h t 1 + W x h x t ) , y t = W h y h t h_t = f_W(h_{t-1}, x_t) = \mathrm{tanh}(W_{hh}h_{t-1}+W_{xh}x_t), \quad y_t = W_{hy}h_t

其結構和應用情形如下。

1. 一(輸入)對多(輸出):影象標註,即輸入一幅影象,輸出關於這幅影象的描述。
圖 1. 迴圈神經網路之一對多
2. 多對一:情感分析。
圖 2. 迴圈神經網路之多對一 ###### 3. 多對多:機器翻譯。 圖 3. 迴圈神經網路之多對多 ###### 4. 多對多:視訊分類。 圖 4. 迴圈神經網路之多對多

二、迴圈神經網路的反向傳播

迴圈神經網路的反向傳播過程有幾種不同的方式,視輸入序列的長度而定。

  1. 利用全序列計算損失函式,計算梯度,然後進行反向傳播。
  2. 將整個序列劃分為小段,對每一小段計算前向與反向傳播的結果。每小段輸入時都重置網路狀態。
  3. 將整個序列劃分為小段,但針對每小段處理時,不重置網路狀態,而沿用上一小段產生的狀態。

三、影象標註

  1. 由卷積網路生成影象特徵向量,用作迴圈卷積網路的狀態初始值。然後使用起始識別符號<START>作為第一個字詞,啟動網路,每次生成一個用於描述影象的詞(從事先給定的相簿中選取),並將該詞替代起始識別符號,作為迴圈網路層的輸入。

  2. 使用注意力模型的影象標註:使用卷積神經網路產生一組與影象相關的特徵向量,每一個可能與影象的某部分相關。迴圈神經網路每一次輸出,除了輸出用於描述影象的單詞外,還會輸出在那組特徵向量上的概率分佈,依據概率分佈對影象的那組特徵進行加權,所得結果作為下一步的輸入。

四、迴圈神經網路的改進:長短時記憶網路

考慮迴圈神經網路的反向傳播過程。對於隱藏狀態求導,由於每一層的梯度流都會引入一個係數矩陣 W W 的相乘操作,因此很容易出現梯度爆炸或梯度消失的現象。

  • 對於梯度爆炸,可採用梯度截斷方法,即當梯度超過一定門限後,強制使得梯度不在增大。
  • 對於梯度消失,則需要改進迴圈神經網路的結構——即引入門控制單元的長短時記憶網路。
圖 5. 對隱藏狀態求導會引入係數矩陣的相乘

長短時記憶網路的一個單元模組中包含四個控制門,由之來控制單元狀態 c t c_t 和網路狀態 h t h_t

  • f(oget)-gate: 遺忘門,控制著是否消除本次單元狀態 c t c_t 的影響。
  • i(nput)-gate: 輸入門,標識著本次輸入。
  • g(ate)-gate: 門(原諒這個奇怪的命名,課程的講授者也不清楚這個字元具體的指代),控制著本次輸入的影響程度。
  • o(utput)-gate: 輸出門,標識著輸出。

該網路前向傳播的數學表達為:

[ i f o g ] = [ σ σ σ tanh ] W [ h t 1 x t ] c t = f c t 1 + i g h t = o tanh ( c t ) \begin{array}{lll} \left[ \begin{array}{c} i \\ f \\ o \\ g \end{array} \right] &amp; = &amp; \left[ \begin{array}{c} \sigma \\ \sigma \\\sigma \\ \tanh \end{array} \right]W\left[ \begin{array}{c} h_{t-1} \\x_t \end{array} \right]\\ \\ c_t &amp;=&amp; f\odot c_{t-1}+i\odot g\\ \\ h_t &amp;=&amp; o\odot \tanh(c_t) \end{array}

對單元狀態求導時,只會包含一個與f-gate的輸出的逐元素的相乘操作,不會引入矩陣相乘操作,會極大緩解梯度消失的現象。

圖 6. 對單元狀態求導的梯度流圖示