《神經網絡與深度學習》-循環神經網絡


  全前饋神經網絡,信息單向傳遞,網絡易學習,但能力被減弱。網絡輸出只依賴於當前的輸入。輸入輸出維數固定。
  循環神經網絡,具有短期記憶能力。其中的神經元可接收其他神經元的信息和本身的信息。輸入輸出可不固定。參數學習可通過隨時間反向傳播算法學習。輸入序列較長時,錯誤信息向前傳遞過長,存在梯度爆炸梯度消失問題,即長程依賴問題,一種有效的改進方式:門控機制
  循環神經網絡易拓展到更廣義的記憶網絡模型:遞歸神經網絡圖網絡

1. 給網絡增加記憶能力

  時序數據處理需要歷史信息。前饋網絡無記憶能力。介紹三種方法給網絡增加記憶能力

1.1 延時神經網絡

  延時神經網絡通過在前饋網絡的非輸出層中都添加一個延時器,記錄神經元的最近幾次活性值,增加前饋網絡的短期記憶能力。在 tt 時刻,第 ll 層神經元的活性值依賴於第 l1l-1層神經元的最近 KK 個時刻的活性值:

ht(l)=f(ht(l1),ht1(l1),,htK(l1)) \pmb{h}_t^{(l)} = f(\pmb{h}_t^{(l-1)},\pmb{h}_{t-1}^{(l-1)},\cdot\cdot\cdot,\pmb{h}_{t-K}^{(l-1)})

其中 ht(l)RMl\pmb{h}_t^{(l)} \in \mathbb{R}^{ \pmb{M}_l } 表示第 ll 層神經元在時刻 tt 的活性值,MlM_l 爲第 ll 層神經元的數量。前饋神經網絡的活性值:

a(l)=fl(W(l)a(l1)+b(l)) \pmb{a}^{(l)} = f_l(\pmb{W}^{(l)}\pmb{a}^{(l-1)} + \pmb{b}^{(l)})

1.2 有外部輸入的非線性自迴歸模型

自迴歸模型 (AutoRegressive Model,AR)統計學上的時間序列模型,用一個變量 yt\pmb{y}_t 的歷史信息來預測自己:

yt=w0+k=1Kwkytk+ϵt \pmb{y}_t = w_0 + \sum_{k=1}^K w_k \pmb{y}_{t-k} + \epsilon_t

其中 KK 爲超參數,w0,,wKw_0, \cdot\cdot\cdot, w_K 爲可學習參數,ϵt\epsilon_t ~ N(0,σ2)N(0, \sigma^2) 爲第 tt 個時刻的噪聲,方差 σ2\sigma^2 與時間無關。

有外部輸入的自迴歸模型 (Nonlinear AutoRegressive with Exogenous Inputs Model,NARX),在每個時刻 tt 都有一個外部輸入 xt\pmb{x}_t, 產生一個輸出 yt\pmb{y}_t, NARX 通過一個延時器記錄最近 KxK_x次的外部輸入和最近KyK_y次的輸出,第 tt 個時刻的輸出yt\pmb{y}_t爲:

yt=f(xt,xt1,,xtKx,yt1,yt2,,ytKy) \pmb{y}_t = f(\pmb{x}_t,\pmb{x}_{t-1},\cdot\cdot\cdot,\pmb{x}_{t-K_x}, \pmb{y}_{t-1},\pmb{y}_{t-2},\cdot\cdot\cdot,\pmb{y}_{t-K_y})

其中 f()f(\cdot) 表示非線性函數,可以前饋網絡,KxK_xKyK_y 爲超參數。

1.3 循環神經網絡

循環神經網絡 (Recurrent Neural Network,RNN)通過使用帶自反饋的神經元處理任意長度的時序數據。
  給定輸入序列 x1:T=(x1,x2,...,xt,...,xT)\pmb{x}_{1:T} = (\pmb{x_1}, \pmb{x_2}, ... ,\pmb{x_t}, ..., \pmb{x_T}),RNN 這樣更新帶反饋邊的隱藏層的活性值 ht\pmb{h}_t

ht=f(ht1,xt) \pmb{h}_t = f(\pmb{h}_{t-1}, \pmb{x}_t)

其中h0=0\pmb{h}_0 = 0f()f(\cdot) 爲非線性函數。可謂前饋網絡。從數學上來說,該公式可看成動力系統,故隱藏層活性值 ht\pmb{h}_t 又被成爲狀態(State)或隱狀態(Hidden State)。
在這裏插入圖片描述

2. 簡單循環網絡

  簡單循環網絡(SRN)只有一個隱藏層。在一個兩層的前饋神經網絡中,連接存在相鄰的層與層之間,隱藏層的節點之間無連接。簡單循環網絡增加了隱藏層到隱藏層的反饋連接。

  假設向量 xtRM\pmb{x}_t \in \mathbb{R}^M 表示在時刻tt時網絡的輸入, htDM\pmb{h}_t \in \mathbb{D}^M 表示隱藏層狀態(隱藏層神經元活性值), ht\pmb{h}_t和當前時刻輸入xt\pmb{x}_t、上一時刻隱藏層狀態ht1\pmb{h}_{t-1}相關。 SRN在t時刻更新公式爲:
在這裏插入圖片描述
在這裏插入圖片描述
其中zt\pmb{z}_t 爲隱藏層的淨輸入,URD×D\pmb{U} \in \mathbb{R}^{D \times D}狀態-狀態權重矩陣,WRD×D\pmb{W} \in \mathbb{R}^{D \times D}狀態-輸入權重矩陣,bRD\pmb{b} \in \mathbb{R}^{D}偏移向量, 其中 f()f(\cdot) 表示非線性函數,常爲Logistic函數或Tanh函數。
  若把每個時刻的狀態都看做前饋神經網絡的一層,循環神經網絡可看做在時間維度上權值共享的神經網絡。按時間展開的循環神經網絡:
在這裏插入圖片描述

2.1 循環神經網絡的計算能力

  前饋神經網絡可以模擬任何連續函數,而循環神經網絡可以模擬任何程序。定義一個完全連接的循環神經網絡。xt\pmb{x}_t 爲輸入, yt\pmb{y}_t 爲輸出, ht\pmb{h}_t 爲隱狀態, f()f(\cdot)爲非線性激活函數, U\pmb{U}W\pmb{W}b\pmb{b}V\pmb{V}爲網絡參數:
在這裏插入圖片描述

2.1.1 循環神經網絡的通用近似定理

  循環神經網絡的擬合能力也十分強大。一個完全連接的循環網絡是任何非線性動力系統的近似器。可用通用近似定理解釋:
在這裏插入圖片描述

2.1.2 圖靈完備

  圖靈完備(Turing Completeness)是指一種數據操作規則,比如一種編程語言,可以實現圖靈機(Turing Machine)的所有功能,解決所有的可計算問題。
在這裏插入圖片描述
  故一個完全連接循環神經網絡可以近似解決所有的可計算問題。

3. 應用到機器學習

  循環神經網絡可以應用到三種模式的機器學習任務::序列到類別模式、同步的序列到序列模式、異步的序列到序列模式。

3.1 序列到類別模式

  序列到類別模式主要用於序列數據的分類問題。比如文本分類任務,輸入爲單詞序列,輸出爲該文本類別。
  假設輸入序列 x1:T=(x1,x2,...,xt,...,xT)\pmb{x}_{1:T} = (\pmb{x_1}, \pmb{x_2}, ... ,\pmb{x_t}, ..., \pmb{x_T}),輸出爲一個類別 yy \in {1, … , C}。可將樣本 x\pmb{x} 按不同時刻輸入到循環神經網絡中,得到不同時刻的隱藏狀態:h1\pmb{h}_1, ......, hT\pmb{h}_T。可將 hT\pmb{h}_T看做整個序列的最終表示或特徵,輸入分類器 g()g(\cdot)

y^=g(hT) \hat{y} = g(\pmb{h}_T)

也可以將整個序列的所有狀態進行平均,做爲整個序列的表示:

y^=g(1Tt=1Tht) \hat{y} = g(\frac{1}{T}\sum_{t=1}^{T}\pmb{h}_t)

  兩種圖示:
在這裏插入圖片描述

3.2 同步的序列到序列模式

  同步的序列到序列模式主要用於序列標註(Sequence Labeling)任務,即每一時刻都有輸入輸出,輸入輸出序列長度相同。比如在詞性標註(Part-of-Speech Tagging)中,每一個單詞需要標註其詞性標籤
  假設輸入序列 x1:T=(x1,x2,...,xt,...,xT)\pmb{x}_{1:T} = (\pmb{x_1}, \pmb{x_2}, ... ,\pmb{x_t}, ..., \pmb{x_T}),輸出序列爲一個類別 y1:T=(y1,...,yT)y_{1:T} = (y_1, ... , y_T)。樣本 x\pmb{x} 按不同時刻輸入到循環神經網絡中,得到不同時刻的隱含態 h1\pmb{h}_1, …, hT\pmb{h}_T 。每個時刻的隱含態 ht\pmb{h}_t 代表了當前時刻和歷史的信息,作爲輸入:

y^t=g(ht),t[1,T] \hat{y}_t = g(\pmb{h}_t), \forall t \in [1, T]

在這裏插入圖片描述

3.3 異步的序列到序列模式

  異步的序列到序列模式 又稱編碼器-解碼器(Encoder-Decoder)模型,即輸入序列和輸出序列不需具有嚴格的對應關係,也不需相同長度。比如機器翻譯任務中,輸入爲源語言單詞序列,輸出爲目標語言單詞序列。
   假設輸入爲 x1:T=(x1,x2,...,xT)\pmb{x}_{1:T} = (\pmb{x_1}, \pmb{x_2}, ..., \pmb{x_T}),輸出爲 y1:M=(y1,y2,...,xM)\pmb{y}_{1:M} = (\pmb{y_1}, \pmb{y_2}, ... ,\pmb{x_M}) 異步的序列到序列模式 一般通過先編碼後解碼的方式來實現。先將樣本 xx 按不同時刻輸入到一個RNN(編碼器)中,得到其編碼 hT\pmb{h}_T 。然後再使用另外一個RNN(解碼器),得到輸出序列 y^1:M\hat{y}_{1:M} ,爲建立輸出序列之間的依賴關係,在解碼器中通常使用非線性的自迴歸模型:
在這裏插入圖片描述
其中 f1()f_1(\cdot)f2()f_2(\cdot) 分別作爲編碼器和解碼器,g()g(\cdot) 爲分類器,y^t\hat{\pmb{y}}_t 爲預測輸出 y^t\hat{y}_t 的向量表示。
   異步的序列到序列模式示例如下圖,其中⟨𝐸𝑂𝑆⟩ 表示輸入序列的結束,虛線表示將上一個時刻的輸出作爲下一個時刻的輸入:
在這裏插入圖片描述

4. 參數學習

   可用梯度下降學習RNN中的參數。以隨機梯度下降爲例。給定樣本 (x,y)(\pmb{x}, \pmb{y}) ,其中輸入爲 x1:T=(x1,x2,...,xT)\pmb{x}_{1:T} = (\pmb{x_1}, \pmb{x_2}, ..., \pmb{x_T}),輸出爲 y1:T=(y1,y2,...,xT)\pmb{y}_{1:T} = (\pmb{y_1}, \pmb{y_2}, ... ,\pmb{x_T}) 每個時刻t,都有一個監督信息yty_t ,定義時刻 t 的損失函數爲:

Lt=L(yt,g(ht)) L_t = L(y_t, g(\pmb{h}_t))

其中 g(ht)g(\pmb{h}_t) 爲 t 時刻的輸出,L爲可微分的損失函數,如交叉熵。整個序列的損失函數爲:

Lt=t=1TLt L_t = \sum_{t=1}^{T}{L_t}

   整個序列的損失函數 L 爲關於參數 U 的梯度爲每個時刻損失 L_t 對參數U的偏導數之和:

LU=t=1TLtU \frac{\partial{L}}{\partial{\pmb{U}}} = \sum_{t=1}^{T}\frac{\partial{L}_t}{\partial{\pmb{U}}}

   RNN中存在提個遞歸調用的 f()f(\cdot) ,因此計算參數梯度的方式不同於計算前饋網絡,主要有兩種::隨時間反向傳播(BPTT)算法和實時循環學習(RTRL)算法.

4.1 隨時間反向傳播算法

  隨時間反向傳播算法類似前饋網絡的錯誤反向傳播算法
  BPTT 算法將RNN看做展開的多層前饋網絡,其中的“每一層”對應RNN中的“每個時刻”:
在這裏插入圖片描述
這樣,RNN就可按照前饋網絡中的反向傳播算法計算參數梯度。在展開的前饋網絡中,所有層參數共享,參數的真實梯度是所有“展開層”的參數梯度之和。

計算偏導數LU\frac{\partial{L}}{\partial{\pmb{U}}} 先計算時刻 t 的損失對參數U的偏導 LU\frac{\partial{L}}{\partial{\pmb{U}}}
  參數 U 和隱藏層淨輸入 zk=Uhk1+Wxk+b\pmb{z}_k = \pmb{Uh}_{k-1} + \pmb{Wx_k} + b 有關,故 t 時刻的損失 LtL_t 關於參數 uiju_{ij} 的梯度爲:
在這裏插入圖片描述
其中 +zkuij\frac{\partial^{+}z_k}{\partial{\pmb{u}_{ij}}} 表示直接偏導數zk=Uhk1+Wxk+b\pmb{z}_k = \pmb{Uh}_{k-1} + \pmb{Wx}_k + b 中保持 hk1\pmb{h}_{k-1} 不變,對 uiju_{ij} 進行求偏導,得到:
在這裏插入圖片描述
其中 [hk1]j[\pmb{h}_{k-1}]_j 爲第 k-1 時刻隱狀態的第 j 維;Ii(x)\mathbb{I}_i(x) 爲除了第 i 行爲 x 外,其餘部分爲 0 的行向量。
  定義誤差項爲第 t 時刻的損失對第 k 時刻隱藏神經層的淨輸入zk\pmb{z}_k 的導數,則當 1kt1 \leq k \leq t時:
在這裏插入圖片描述
由以上可得到:
在這裏插入圖片描述
其矩陣形式:
在這裏插入圖片描述
參數梯度 得到整個序列的損失函數 L 關於參數 U、權重W、偏置b 的梯度:
在這裏插入圖片描述
在這裏插入圖片描述
計算複雜度 在BPTT 算法中,參數的梯度需要在一個完整的“前向”計算和“反向”計算後才能得到並進行參數更新。

4.2 實時循環學習算法

  與反向傳播的BPTT不同,實時循環學習(Real-Time Recurrent earning,RTRL)是通過前向傳播的方式來計算梯度。
  假設RNN的第 t+1t+1時刻的狀態 ht+1\pmb{h}_{t+1} 爲:
在這裏插入圖片描述
其中關於參數 uiju_{ij} 的偏導數爲:
在這裏插入圖片描述
  RTRL算法從第1個時刻開始,計算RNN的隱狀態,同時一次向前計算偏導數 h1uij\frac{\partial h_1}{\partial{\pmb{u}_{ij}}}h2uij\frac{\partial h_2}{\partial{\pmb{u}_{ij}}}h3uij\frac{\partial h_3}{\partial{\pmb{u}_{ij}}},…這樣第 t 時刻,可以實時計算損失 L_t 關於參數 U 的梯度,並更新參數。參數WWbb的梯度同理。

RTRL和BPTT算法比較 兩者都是基於梯度下降算法,分別通過前向模式和後向模式利用鏈式法則計算梯度。RNN中,一般網絡輸出維數原低於輸入維度,因此BPTT算法計算量更小,但要保存所有時刻的中間梯度,空間複雜度高。RTRL不需要梯度回傳,適合在線學習和無限序列任務。

5. 長程依賴問題

  RNN在學習過程中主要的問題是梯度消失或梯度爆炸。很難建模長時間間隔的狀態之間的依賴關係。
  將BPTT中的誤差項展開:
在這裏插入圖片描述
得到:
在這裏插入圖片描述
再定義:
在這裏插入圖片描述
得到:
在這裏插入圖片描述
  若 γ>1\gamma > 1, 當 tkt-k \rightarrow \infty 時,γtk\gamma^{t-k} \rightarrow \infty。當間隔 tkt - k 比較大時,梯度也變得很大,會造成系統不穩定,即梯度爆炸問題。
  若 γ<1\gamma < 1, 當 tkt-k \rightarrow \infty 時,γtk0\gamma^{t-k} \rightarrow 0。當間隔 tkt - k 比較大時,梯度也變得很小,會出現和深層前饋網絡類似的梯度爆炸問題。
注意:
在這裏插入圖片描述
  RNN常使用Logistic或Tanh函數作爲非線性激活函數,其導數值都小於1,權重矩陣 U||\pmb{U}|| 不會太大,故若時間間隔 tkt - k 過大,δt,k\delta_{t,k} 會趨於0,故出現梯度消失問題。
  RNN理論上可以建立長時間間隔的狀態之間的依賴關係,但由於梯度爆炸或消失問題,實際上只能學到短期的依賴關係。這樣,如時刻 t 的輸出 yty_t 依賴於時刻 k 的輸入 xk\pmb{x}_k,當間隔 tkt-k 較大時,簡單RNN難建模長距離依賴關係,成爲長程依賴問題

5.1 改進方案

  爲避免梯度爆炸或梯度消失,一種直接方式:選取合適參數,使用非飽和激活函數,儘量使 diag(f(z))UT1diag(f^{'}(\pmb{z})) \pmb{U}^T \approx1。這種方式依賴於人工調參經驗,限制模型的廣泛應用。一種有效方式:通過改進模型優化方法

梯度爆炸 RNN的梯度爆炸更易解決,常通過權重衰減梯度截斷
  權重衰減通過給參數增加 l1l1l2l2 範數的正則化,來限制參數取值範圍,從而使 γ1\gamma \leq 1 。梯度截斷是另一種有效的啓發式方法,梯度的模大於閾值時,將其截斷爲及較小的數。

梯度消失 RNN的主要問題。解決方式:一是用優化技巧;二是改變模型(更有效),如讓 U=I\pmb{U} = \pmb{I} ,同時令 htht1=I\frac{\partial \pmb{h}_t}{\partial \pmb{h}_{t-1}} = \pmb{I} 爲單位矩陣,即:

ht=ht1+g(xt;θ) \pmb{h}_t = \pmb{h}_{t-1} + g(\pmb{x}_t; \theta)

  其中 hth_tht1h_{t-1} 之間爲線性依賴關係,權重係數爲1,不存在梯度爆炸或消失問題,但是,丟失了神經元在反饋邊上的非線性激活的性質,故降低了模型的表示能力。更有效的改進策略:

ht=ht1+g(xt,ht1;θ) \pmb{h}_t = \pmb{h}_{t-1} + g(\pmb{x}_t, \pmb{h}_{t-1}; \theta)

  這樣 hth_tht1h_{t-1} 既有線性關係,也有非線性關係,並可緩解梯度消失問題。仍存在問題:

  • 梯度爆炸:令 zk=Uhk1+Uxk+b\pmb{z}_k = \pmb{Uh}_{k-1} + \pmb{Ux}_k + \pmb{b}kk 時刻 g()g(\cdot) 的輸入,在誤差項計算中: 在這裏插入圖片描述
    梯度可能過大,存在梯度爆炸問題。
  • 記憶容量:隨着 ht\pmb{h}_t不斷累積存儲新的輸入信息,會發生飽和。 假設 g()g(\cdot) 爲 Logistic 函數,則隨着時間 t 的增長,ht\pmb{h}_t 會變得大,從而導致 h\pmb{h} 變得飽和。即隱狀態ht\pmb{h}_t可存儲信息有限,隨着記憶單元存儲內容增多,其丟失信息也增多。
      利用門控機制改進模型,解決這兩個問題。

6. 基於門控的循環神經網絡

  爲改善RNN的長程依賴問題,在公式:

ht=ht1+g(xt,ht1;θ) \pmb{h}_t = \pmb{h}_{t-1} + g(\pmb{x}_t, \pmb{h}_{t-1}; \theta)

上引入門控機制來控制信息積累速度,包括有選擇地加入新的信息,並有選擇地遺忘之前累積的信息。這類網絡叫做 基於門控的循環神經網絡 (Gated RNN)。

6.1 長短期記憶網絡(LSTM)

  長短期記憶網絡(Long Short-Term Memory Network,LSTM)是RNN的一變體,可有效解決RNN的梯度爆炸或梯度消失問題。在以下公式上,進行兩方面的改進:

ht=ht1+g(xt,ht1;θ) \pmb{h}_t = \pmb{h}_{t-1} + g(\pmb{x}_t, \pmb{h}_{t-1}; \theta)

新的內部狀態 LSTM引入新的內部狀態(internal state)ctRD\pmb{c}_t \in \mathbb{R}^D 專門進行線性的循環信息傳遞,同時非線性地輸出信息給隱藏層的外部狀態 htRD\pmb{h}_t \in \mathbb{R}^D。內部狀態 ct\pmb{c}_t 這樣計算:
在這裏插入圖片描述
其中 ft[0,1]D\pmb{f}_t \in [0,1]^Dit[0,1]D\pmb{i}_t \in [0,1]^Dot[0,1]D\pmb{o}_t \in [0,1]^D爲三個門(gate)來控制信息傳遞的路徑;\bigodot 爲向量元素乘積;ct1\pmb{c}_{t-1}爲上一個時刻的記憶單元;c^tRD\hat{\pmb{c}}_t \in \mathbb{R}^D 是通過非線性函數得到的候選狀態
在這裏插入圖片描述
在每個時刻 t ,LSTM 網絡的內部狀態 ct\pmb{c}_t 記錄了到當前時刻爲止的歷史信息。

門控機制 數字電路中,門爲二值變量 {0,1},0代表關閉,不需信息通過。LSTM引入門控機制(Gating Mechanism),控制信息傳遞的路徑。公式:
在這裏插入圖片描述
中有三個門:ft[0,1]D\pmb{f}_t \in [0,1]^D爲遺忘門、it[0,1]D\pmb{i}_t \in [0,1]^D爲輸入門、ot[0,1]D\pmb{o}_t \in [0,1]^D 爲輸出門。三個門的作用:

  • ft[0,1]D\pmb{f}_t \in [0,1]^D爲遺忘門,控制上一個時刻的內部狀態 ct1\pmb{c}_{t-1} 需要遺忘多少信息。
  • it[0,1]D\pmb{i}_t \in [0,1]^D爲輸入門,控制當前時刻的候選狀態 c^t\hat{\pmb{c}}_t 需要保存多少信息。
  • ot[0,1]D\pmb{o}_t \in [0,1]^D爲輸出門,控制當前時刻的內部狀態 ct\pmb{c}_t 有多少信息需要輸出給外部狀態 ht\pmb{h}_t

  當 ft=0it=1\pmb{f}_t = 0,\pmb{i}_t = 1 時,記憶單元將歷史信息清空,將候選狀態寫入,但此時記憶單元 ct\pmb{c}_t 依然和上一時刻的歷史信息相關。
  當 ft=1it=0\pmb{f}_t = 1,\pmb{i}_t = 0 時,記憶單元將複製上一時刻的內容,不寫入新的信息。
  LSTM的“門”是“軟門”,取值在 (0,1) 之間,並以一定的比例通過信息,三種門的計算如下,其中 σ()\sigma(\cdot) 爲 Logistic函數,其輸出區間爲 (0,1),xt\pmb{x}_t 爲當前時刻的輸入,ht1\pmb{h}_{t-1} 爲上一時刻的外部狀態:
在這裏插入圖片描述

  LSTM的循環單元結構如圖:
在這裏插入圖片描述
其計算過程爲:

  1. 利用上一時刻的外部狀態 ht1\pmb{h}_{t-1} 和當前時刻的輸入 xt\pmb{x}_t ,計算出三個門ft\pmb{f}_tit\pmb{i}_tot\pmb{o}_t,和候選狀態c^t\pmb{\hat{c}}_t
  2. 結合遺忘門 ft\pmb{f}_t、輸入門 it\pmb{i}_t 更新記憶單元 ct\pmb{c}_t
  3. 結合輸出門 ot\pmb{o}_t ,將內部狀態的信息傳遞給外部狀態 ht\pmb{h}_{t}

  通過LSTM循環單元,整個網絡可以建立較長距離的時序依賴關係。給出以上LSTM循環單元公式的簡潔描述:
在這裏插入圖片描述
其中 xtRM\pmb{x}_t \in \mathbb{R}^M 爲當前時刻的輸入,WR4D×(D+M)\pmb{W} \in \mathbb{R}^{4D \times (D+M)}bR4D\pmb{b} \in \mathbb{R}^{4D} 是網絡參數。

記憶 循環神經網絡的隱狀態 hh 存儲了歷史信息,可以看做是一種 記憶
  在簡單RNN中,隱狀態 hh 每個時刻都會被重寫,看做短期記憶(Short-Term Memory)。
  在神經網絡中,長期記憶(Long-Term Memory)可看做是網絡參數,隱含從訓練數據中學到的經驗,更新週期遠慢於短期記憶
  而在LSTM中,記憶單元 cc 可以在某個時刻捕捉到某個關鍵信息,並有能力將此關鍵信息保存一定的時間。記憶單元cc 中保存信息的生命週期要長於短期記憶 hh ,短於長期記憶,因此稱爲長短期記憶(Long Short-Term Memory)。
在這裏插入圖片描述

6.2 LSTM網絡的各種變體

  主流的LSTM用三個門動態控制內部狀態遺忘歷史信息、輸出信息、輸入信息的數量。對門控機制修改,得到LSTM變體。

無遺忘門的LSTM 最早的LSTM是沒有遺忘門的,內部狀態的更新爲:
在這裏插入圖片描述
記憶單元 cc 會不斷增大。輸入序列很長時,記憶單元容量飽和,大大降低LSTM的性能。

peephole 連接 三種門不但依賴於輸入 xt\pmb{x}_t 和上一個時刻的隱狀態 ht1\pmb{h}_{t-1},也依賴於上一個時刻的記憶單元 ct1\pmb{c}_{t-1}:
在這裏插入圖片描述
其中 ViVfVo\pmb{V}_i、\pmb{V}_f、\pmb{V}_o 爲對角矩陣。

耦合輸入門和遺忘門 LSTM的輸入門和輸出門有些互補關係,同時使用兩個門較冗餘,爲減少LSTM的計算複雜度,將輸入門輸出門合併,令 ft=1it\pmb{f}_t = 1 - \pmb{i}_t ,內部狀態更新方式:
在這裏插入圖片描述

6.3 門控循環單元網絡

   門控循環單元(Gated Recurrent Unit,GRU)網絡比LSTM更簡單。
   GRU網絡引入門控機制控制信息更新方式,不同LSTM,GRU不引入額外的記憶單元,在公式:

ht=ht1+g(xt,ht1;θ) \pmb{h}_t = \pmb{h}_{t-1} + g(\pmb{x}_t, \pmb{h}_{t-1}; \theta)

上,引入一個更新門控制當前狀態需從歷史狀態中保留多少信息,需從候選狀態中接受多少新信息:

ht=ztht1+(1zt)g(xt,ht1;θ)zt=σ(Wzxt+Uzht1+bz) \pmb{h}_t = \pmb{z}_t \bigodot \pmb{h}_{t-1} + (1-\pmb{z}_t) \bigodot g(\pmb{x}_t, \pmb{h}_{t-1}; \theta) \\ \pmb{z}_t = \sigma(\pmb{W}_z \pmb{x}_t + \pmb{U}_z \pmb{h}_{t-1} + \pmb{b}_z)

其中 zt[0,1]D\pmb{z}_t \in [0,1]^D 爲更新門。在LSTM中,輸入輸出互補,具有冗餘性,GRU用更新門平衡輸入和遺忘之間的平衡:

  • zt=0\pmb{z}_t = 0時,當前狀態 ht\pmb{h}_t 和前一時刻的狀態ht1\pmb{h}_{t-1} 之間爲非線性函數關係;
  • zt=1\pmb{z}_t = 1時, ht\pmb{h}_tht1\pmb{h}_{t-1} 之間爲線性函數關係。

  在GRU中,函數 g(xt,ht1;θ)g(\pmb{x}_t, \pmb{h}_{t-1}; \theta)的定義爲:
在這裏插入圖片描述

其中 h^t\pmb{\hat{h}_t} 表示當前時刻的候選狀態, rt[0,1]D\pmb{r}_t \in [0,1]^D 爲重置門:
在這裏插入圖片描述

用來控制候選狀態 h^t\pmb{\hat{h}_t} 的計算是否依賴上一個時刻的狀態 ht1\pmb{h}_{t-1}

  • rt=0\pmb{r}_t = 0時,候選狀態 h^t=tanh(Wcxt+b)\pmb{\hat{h}_t} = tanh(\pmb{W}_c\pmb{x}_t + \pmb{b} ) 只和當前輸入 xt\pmb{x}_t 相關,和歷史狀態無關。
  • rt=1\pmb{r}_t = 1時,候選狀態 h^t=tanh(Wcxt+Uhht1+b)\pmb{\hat{h}_t} = tanh(\pmb{W}_c\pmb{x}_t + \pmb{U}_h\pmb{h}_{t-1} +\pmb{b} ) 和當前輸入 xt\pmb{x}_t 、歷史狀態 ht1\pmb{h}_{t-1} 相關,和簡單RNN一致。

  綜上,GRU網絡的狀態更新方式爲:

ht=ztht1+(1zt)h^t \pmb{h}_t = \pmb{z}_t \bigodot \pmb{h}_{t-1} + (1-\pmb{z}_t) \bigodot \pmb{\hat{h}}_t

  • zt=0r=1\pmb{z}_t = 0,\pmb{r} = 1 時,GRU退化爲簡單RNN;
  • zt=0r=0\pmb{z}_t = 0,\pmb{r} = 0 時,當前狀態 ht\pmb{h}_t 和當前輸入 xt\pmb{x}_t 相關,和歷史狀態ht1\pmb{h}_{t-1} 無關;
  • zt=1\pmb{z}_t = 1 時,當前狀態 ht=ht1\pmb{h}_{t} = \pmb{h}_{t-1},和當前輸入 xt\pmb{x}_t 無關。

  GRU網絡的循環單元結構:
在這裏插入圖片描述

7. 深層循環神經網絡

  如果將深度定義爲網絡中中信息傳遞路徑長度的話,RNN可以看作是既“深”又“淺”的網絡。因爲,把RNN按時間展開,長時間間隔的狀態之間的路徑很長,RNN可以看作是一個非常深的網絡;而果同一時刻網絡輸入到輸出之間的路徑xtyt\pmb{x}_t → \pmb{y}_t,這個RNN網絡是非常淺的。
  故,可增加RNN的深度來增強RNN的能力,即增加同一時刻網絡輸入到輸出的路徑xtyt\pmb{x}_t → \pmb{y}_t,比如增加隱狀態到輸出的路徑 htyt\pmb{h}_t → \pmb{y}_t,以及輸入xtht\pmb{x}_t → \pmb{h}_t到隱狀態的路徑深度。

7.1 堆疊循環神經網絡

  常見的簡單做法,將多個RNN堆疊起來,稱爲堆疊循環神經網絡(Stacked Recurrent Neural Network,SRNN)。一個堆疊的簡單循環網絡(Stacked SRN) 也稱爲循環多層感知器(Recurrent Multi-Layer Perceptron,RMLP)。按時間展開的SRNN如下:
在這裏插入圖片描述
ll 層網絡的輸入是 l1l-1 層網絡的輸出。定義,ht(l)\pmb{h}_t^{(l)} 爲在時刻 tt 時第 ll 層的隱狀態:
在這裏插入圖片描述

其中U(l)\pmb{U}^{(l)}W(l)\pmb{W}^{(l)}b(l)\pmb{b}^{(l)} 爲權重矩陣和偏置向量,ht(0)=xt\pmb{h}_t^{(0)} = \pmb{x}_t

7.2 雙向循環神經網絡

  特定任務中,一個時刻的輸出不但和過去時刻的信息有關,也和後續時刻的信息有關。比如給定句子,其中一個詞的詞性由它的上下文決定。因此,在這些任務中,可以增加一個按時間的逆序來傳遞信息的網絡層,以增強網絡的能力。
  雙向循環神經網絡(Bidirectional Recurrent Neural Network,Bi-RNN)由兩層循環神經網絡組成,他們的輸入相同,只是信息傳遞的方向不同。
  假設第1 層按時間順序,第2 層按時間逆序,在時刻tt時的隱狀態定義爲 ht(1)\pmb{h}_t^{(1)}ht(2)\pmb{h}_t^{(2)} ,則:
在這裏插入圖片描述
其中\bigoplus 爲向量拼接操作。
在這裏插入圖片描述

8. 拓展到圖結構

  如果將RNN按時間展開,每個時刻的隱狀態ht\pmb{h}_t看作一個節點,那麼這些節點構成一個鏈式結構,每個節點tt都收到其父節點的消息(Message),更新自己的狀態,並傳遞給其子節點。而鏈式結構是一種特殊的圖結構,我們可以比較容易地將這種消息傳遞(Message Passing)的思想擴展到任意的圖結構上。

8.1 遞歸神經網絡

  遞歸神經網絡(Recursive Neural Network,RecNN)是RNN在有向無循環圖上的拓展,常爲樹樁層次結構:
在這裏插入圖片描述
  三個隱藏層 h1\pmb{h}_1h2\pmb{h}_2h3\pmb{h}_3,其中h1\pmb{h}_1由兩個輸入層x1\pmb{x}_1x2\pmb{x}_2計算得到。
  對一個節點hi\pmb{h}_i,他可以接受來自父節點集合 πi\pi_i 中所有節點的消息,並更新自己的狀態:

hi=f(hπi) \pmb{h}_i = f(\pmb{h}_{\pi_i})

其中hπi\pmb{h}_{\pi_i}表示集合 πi\pi_i中所有節點狀態的拼接,ff 是一個和節點位置無關的非線性函數,可以爲一個單層的前饋神經網絡。遞歸神經網絡一般結構可以寫成:
在這裏插入圖片描述
  當遞歸神經網絡的結構退化爲線性序列結構(圖b),遞歸神經網絡等價於簡單RNN。
  遞歸神經網絡主要用來建模自然語言句子的語義。
  同樣,可用門控機制來改進遞歸神經網絡中的長距離依賴問題,比如樹結構的長短期記憶模型(Tree-Structured LSTM),就是將LSTM模型的思想應用到樹結構的網絡中,來實現更靈活的組合函數。

8.2 圖神經網絡

  實際中很多數據是圖結構的,比如知識圖譜、社交網絡、分子網絡等。而前饋網絡和反饋網絡很難處理圖結構的數據。圖神經網絡(Graph Neural Network,GNN)是將消息傳遞的思想擴展到圖結構數據上的神經網絡,可用來處理圖數據。
  對一個任意的圖結構 G(V,ϵ)G(V,\epsilon) 。圖中每個節點 v 都用一組神經元來表示狀態 h(v)\pmb{h}^{(v)},初始狀態可以爲節點 v 的輸入特徵 x(v)\pmb{x}^{(v)}。每個節點可收到來自相鄰節點的消息,並更新自己的狀態:
在這裏插入圖片描述
其中 N(v)N(v) 表示節點 v 的鄰居,mt(v)\pmb{m}_t^{(v)}表示在第 t 時刻節點 v 收到的信息,e(u,v)\pmb{e}^{(u,v)} 爲邊e(u,v)e^{(u,v)}上的特徵。
  該公式是同步的更新方式,所有結構同時接受信息並更新自己的狀態。對有向圖,異步更新更有效,如RNN或遞歸神經網絡。整個圖更新後T此後,可通過一個讀出函數 gg 來得到整個網絡的表示:
在這裏插入圖片描述

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