RNN,GRU,LSTM及其變種詳解


參考Coursera-Sequence Models
https://www.coursera.org/learn/nlp-sequence-models/notebook/X20PE/building-a-recurrent-neural-network-step-by-step

1. 普通神經網絡的缺點

  • 對於不同的樣本,輸入輸出的長度可能不同
  • 無法共享序列中不同位置的信息

2. RNN的基本結構與數學表達

輸入層的維數是(nx,m,Tx)(n_x,m,T_x),其中nxn_x是每個訓練樣本的維數,例如輸入詞one-hot向量的大小,也即詞典大小;mm是一個batch的大小;TxT_x是輸入序列的長度。

輸出層的維數是(ny,m,Ty)(n_y,m,T_y),其中nyn_y是輸出預測向量的維數;mm是一個batch的大小;TyT_y是輸出序列的長度。

我們先研究輸入向量和輸出向量相等,即nx=nyn_x=n_y的情況。
在這裏插入圖片描述

圖2.1 RNN基本結構-輸入輸出維數相等

上下標說明:a5(2)[3]<4>a_5^{(2)[3]<4>}表示第2個訓練樣本,第3層,第4個時刻,激活函數輸出向量的第5維。
在這裏插入圖片描述

圖2.2 RNN的一個基本單元

注意,輸出y^\hat y是狀態向量aa經過線性變換再經過softmax變換得到的。

at=tanh(Waxxt+Waaat1+ba)y^t=softmax(Wyaat+by)(2-1) \begin{aligned} a^{\langle t\rangle}&=tanh\left(W_{ax}x^{\langle t\rangle}+W_{aa}a^{\langle t-1\rangle}+b_a\right)\\ \hat y^{\langle t\rangle}&=softmax\left(W_{ya}a^{\langle t\rangle}+b_y\right)\\ \tag{2-1} \end{aligned}

3. GRU(Gated Recurrent Unit)

GRU的提出是爲了解決RNN難以學習到輸入序列中的長距離信息的問題。
GRU引入一個新的變量——記憶單元,簡稱CCCtC^{\langle t\rangle}其實就是ata^{\langle t\rangle}
CC的表達式不是一步到位的,首先定義CC的候選值C~\tilde C:
C~t=tanh(Wc[Ct1,xt]+bc) \tilde C^{\langle t\rangle}=tanh\left(W_c[C^{\langle t-1\rangle},x^{\langle t\rangle}]+b_c\right)
更新門:
Γu=σ(Wu[Ct1,xt]+bu) \Gamma_u=\sigma\left(W_u[C^{\langle t-1\rangle},x^{\langle t\rangle}]+b_u\right)
在實際訓練好的網絡中Γ\Gamma要麼很接近1要麼很接近0,對應着輸入序列裏面有些元素起作用有些元素不起作用。
Ct=ΓuC~t+1ΓuCt1 C^{\langle t\rangle}=\Gamma_u*\tilde C^{\langle t\rangle}+(1-\Gamma_u)* C^{\langle t-1\rangle}

也即輸入序列的有些元素,記憶單元不需要更新,有些元素需要更新。

The cat, which already ate …, was full
cat後面的詞直到was之前,都不需要更新CC,直接等於cat對應的CC
可以解決梯度消失的問題.輸出層的梯度可以傳播到cat處

注:CCΓ\Gamma都可以是想聊,它們在相乘時採用的是element-wise的乘法。當爲向量時,與cat的單複數無關的詞對應的Γ\Gamma可能有些維度爲零,有些維度不爲零。爲零的維度,是用來保留cat的單複數信息的;不爲零的維度可能是保留其他語義信息的,比如是不是food呀之類的
目前討論的是簡化版的GRU,結構圖如下
在這裏插入圖片描述

完整的GRU:

C~t=tanh(Wc[ΓrCt1,xt]+bc)Γu=σ(Wu[Ct1,xt]+bu)Γr=σ(Wr[Ct1,xt]+br)Ct=ΓuC~t+1ΓuCt1at=Ct(3-1) \begin{aligned} \tilde C^{\langle t\rangle}&=tanh\left(W_c[\Gamma_r*C^{\langle t-1\rangle},x^{\langle t\rangle}]+b_c\right)\\ \Gamma_u&=\sigma\left(W_u[C^{\langle t-1\rangle},x^{\langle t\rangle}]+b_u\right)\\ \Gamma_r&=\sigma\left(W_r[C^{\langle t-1\rangle},x^{\langle t\rangle}]+b_r\right)\\ C^{\langle t\rangle}&=\Gamma_u*\tilde C^{\langle t\rangle}+(1-\Gamma_u)* C^{\langle t-1\rangle}\\ a^{\langle t\rangle}&=C^{\langle t\rangle}\\ \tag{3-1} \end{aligned}
Γr\Gamma_r表示了C~t\tilde C^{\langle t\rangle}Ct1C^{\langle t-1\rangle}之間的相關程度

4 LSTM(Long Short-Term Memory)

沒有了Γr\Gamma_r,將1Γu1-\Gamma_uΓf\Gamma_f代替
C~t=tanh(Wc[at1,xt]+bc)Γu=σ(Wu[at1,xt]+bu)Γf=σ(Wf[at1,xt]+bf)Γo=σ(Wo[at1,xt]+bo)Ct=ΓuC~t+ΓfCt1at=Γotanh(Ct)y~t=softmax(at)(4-1) \begin{aligned} \tilde C^{\langle t\rangle}&=tanh\left(W_c[a^{\langle t-1\rangle},x^{\langle t\rangle}]+b_c\right)\\ \Gamma_u&=\sigma\left(W_u[a^{\langle t-1\rangle},x^{\langle t\rangle}]+b_u\right)\\ \Gamma_f&=\sigma\left(W_f[a^{\langle t-1\rangle},x^{\langle t\rangle}]+b_f\right)\\ \Gamma_o&=\sigma\left(W_o[a^{\langle t-1\rangle},x^{\langle t\rangle}]+b_o\right)\\ C^{\langle t\rangle}&=\Gamma_u*\tilde C^{\langle t\rangle}+\Gamma_f* C^{\langle t-1\rangle}\\ a^{\langle t\rangle}&=\Gamma_o*tanh\left(C^{\langle t\rangle}\right)\\ \tilde y^{\langle t\rangle}&=softmax(a^{\langle t\rangle})\\ \tag{4-1} \end{aligned}
(注意公式裏面的Γu\Gamma_u等價於圖片中的Γi\Gamma_i)
在這裏插入圖片描述

圖4.1 LSTM的一個基本單元

在這裏插入圖片描述

圖4.2 標準LSTM模型-輸入維數等於輸出維數]

4.1. peephole連接

在這裏插入圖片描述

圖4.3 LSTM變種-peephole

5. RNN的反向傳播

dL/di=dL/dada/dzdz/di dL/di=dL/da\cdot da/dz\cdot dz/di

5. RNN實戰技巧

5.1. 對梯度的範圍進行限制

在反向傳播的過程中,爲了避免梯度爆炸,可以對梯度的值進行限制,具體來說,可以給定一個區間[-a,a],小於-a的值強行定爲-a,大於a的值強行定爲a

5.2. 對輸出值進行採樣

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