循环神经网络
1. 序列数据
特点:
- 前后数据通常有关联性:
Cats average 15 hours of sleep a day.
例子:
- Speech Recognition
- Music Generation
- Sentiment Classification
- DNA Sequence Analysis
- Machine Translation
- Video Activity Recognition
- Name Entity Recognition: 识别一句话中的人名。
2. 语言模型
NLP中常把文本看成离散时间序列,一段长度为 T T T的句子
w 1 , . . . , w T w_1,...,w_T w1,...,wT, w t w_t wt称为一个time step。
语言模型要给出一个句子的概率
P ( w 1 , w 2 , . . , w T ) = Π t = 1 T P ( w t ∣ w 1 , . . . , w t − 1 ) P(w_1,w_2,..,w_T)=\Pi_{t=1}^T P(w_t| w_1,...,w_{t-1}) P(w1,w2,..,wT)=Πt=1TP(wt∣w1,...,wt−1)
如:P(厨房里的石油用完了)<P(厨房里的食油用完了)
缺点:
时间步t的词需要考虑t-1步的词,计算量大。
3. RNN-循环神经网络
- 三个矩阵:U,V,W。所有t的计算都用这三个矩阵。[减少参数]
- 用Hidden State来记录历史信息,有效的处理数据的前后关联性。
3.1 RNN与全联接神经网络对比
RNN:
- 当前状态 H t H_t Ht和历史信息 H t − 1 H_{t-1} Ht−1和 X t X_{t} Xt有关
- 激活函数使用Tanh,输出值域]-1,1[,防止数值呈指数级变化(比如考虑一个q<1的等比数列)。
3.2 文本生成的例子
一开始取 H 0 = 0 H_0=0 H0=0
特点:
- 隐藏状态可以捕捉截至
- 参数与时间无关
3.3 反向传播 [Backpropagation Through Time]
以下面这个时间步为3( T = 3 T=3 T=3)为例:有几条通路,就有几项相加。
Rq:
我们注意到
∂ L ∂ h t = ∑ i = t T ( W h h T ) T − i W q h T ∂ L ∂ O T + t − i \frac{\partial L}{\partial h_t}=\sum_{i=t}^T (W_{hh}^T)^{T-i}W_{qh}^{T} \frac{\partial L}{\partial O_{T+t-i}} ∂ht∂L=i=t∑T(WhhT)T−iWqhT∂OT+t−i∂L
W h h W_{hh} Whh有一个指数次方,这会导致梯度消失或梯度爆炸。这个解决方法就是GRU和LSTM。
4. GRU(门控循环单元)
Gated Recurrent Unit
- 与 H t − 1 H_{t-1} Ht−1和 X t X_t Xt有关:
R t = σ ( X t W x r + H t − 1 W h r + b r ) R_t = \sigma(X_tW_{xr}+H_{t-1}W_{hr}+b_r) Rt=σ(XtWxr+Ht−1Whr+br)
Z t = σ ( X t W x z + H t − 1 W h z + b z ) Z_t = \sigma(X_tW_{xz}+H_{t-1}W_{hz}+b_z) Zt=σ(XtWxz+Ht−1Whz+bz)
- 与 H t − 1 H_{t-1} Ht−1和 X t X_t Xt有关:
H ~ t = t a n h ( X t W x h + ( R t ⊙ H t − 1 ) W h h + b h ) \tilde{H}_{t} = tanh(X_tW_{xh}+(R_t \odot H_{t-1})W_{hh}+b_h) H~t=tanh(XtWxh+(Rt⊙Ht−1)Whh+bh)
H t = Z t ⊙ H t − 1 + ( 1 − Z t ) ⊙ H ~ t − 1 H_t = Z_t\odot H_{t-1} + (1-Z_t)\odot \tilde{H}_{t-1} Ht=Zt⊙Ht−1+(1−Zt)⊙H~t−1
4.1 具体解释
- 重置门:哪些信息需要遗忘,使用Sigmoid作为激活函数,0表示遗忘,1表示保留。与上一个时刻的隐藏状态和当前输入有关。
R t = σ ( X t W x r + H t − 1 W h r + b r ) R_t=\sigma(X_tW_{xr}+H_{t-1}W_{hr}+b_r) Rt=σ(XtWxr+Ht−1Whr+br) - 更新门:哪些信息需要注意。
Z t = σ ( X t W x z + H t − 1 W h z + b z ) Z_t=\sigma(X_tW_{xz}+H_{t-1}W_{hz}+b_z) Zt=σ(XtWxz+Ht−1Whz+bz)
候选隐藏状态: H t ~ \tilde{H_t} Ht~(重置门)
对上一时间步隐藏状态 H t H_t Ht进行选择性遗忘,从而对历史信息更好地选择。
GRU 公式1:
H t ~ = t a n h ( X t W x h + ( R t ⊙ H t − 1 ) W h h + b h ) \tilde{H_t}=tanh(X_tW_{xh}+(R_t\odot H_{t-1})W_{hh}+b_h) Ht~=tanh(XtWxh+(Rt⊙Ht−1)Whh+bh)
⊙ \odot ⊙表示逐个元素相乘。
对比简单的RNN:
H t = t a n h ( X t W x h + H t − 1 W h h + b h ) H_t = tanh(X_tW_{xh}+H_{t-1}W_{hh}+b_h) Ht=tanh(XtWxh+Ht−1Whh+bh)
隐藏状态:(更新门)
GRU 公式2:
H t = Z t ⊙ H t − 1 + ( 1 − Z t ) ⊙ H ~ t H_t = Z_t \odot H_{t-1}+(1-Z_t)\odot \tilde{H}_{t} Ht=Zt⊙Ht−1+(1−Zt)⊙H~t
GRU特点:
- 门机制采用Sigmoid函数,0表示遗忘,1表示保留。
- 如果更新从第一个时间步到t-1时间中,一直保持为 Z t = 1 Z_t=1 Zt=1,信息可有效传递到当前时间步,因此解决了梯度消失的问题。
H t = Z t ⊙ H t − 1 + ( 1 − Z t ) ⊙ H ~ t H_t = Z_t \odot H_{t-1}+(1-Z_t)\odot \tilde{H}_{t} Ht=Zt⊙Ht−1+(1−Zt)⊙H~t
而简单RNN的 H t H_t Ht一定和 H t − 1 H_{t-1} Ht−1有关:
H t = t a n h ( X t W x h + H t − 1 W h h + b h ) H_t = tanh(X_tW_{xh}+H_{t-1}W_{hh}+b_h) Ht=tanh(XtWxh+Ht−1Whh+bh)
5. LSTM(长短期记忆网络)
- 与 H t − 1 H_{t-1} Ht−1和 X t X_t Xt有关:
F t = σ ( X t W x f + H t − 1 W h f + b f ) F_t = \sigma(X_tW_{xf}+H_{t-1}W_{hf}+b_f) Ft=σ(XtWxf+Ht−1Whf+bf)
I t = σ ( X t W x i + H t − 1 W h i + b i ) I_t = \sigma(X_tW_{xi}+H_{t-1}W_{hi}+b_i) It=σ(XtWxi+Ht−1Whi+bi)
O t = σ ( X t W x o + H t − 1 W h o + b o ) O_t = \sigma(X_tW_{xo}+H_{t-1}W_{ho}+b_o) Ot=σ(XtWxo+Ht−1Who+bo)
- 与 H t − 1 H_{t-1} Ht−1和 X t X_t Xt有关:
C ~ t = t a n h ( X t W x c + H t − 1 W h c + b c ) \tilde{C}_t = tanh(X_tW_{xc}+H_{t-1}W_{hc}+b_c) C~t=tanh(XtWxc+Ht−1Whc+bc)
C t = F t ⊙ C t − 1 + I t ⊙ C ~ t − 1 C_t = F_t \odot C_{t-1} + I_t \odot \tilde{C}_{t-1} Ct=Ft⊙Ct−1+It⊙C~t−1
H t = O t ⊙ t a n h ( C t ) H_t = O_t \odot tanh(C_t) Ht=Ot⊙tanh(Ct)
5.1 具体解释:
3个门:
- 遗忘门 F t F_t Ft:有哪些信息需要遗忘,与上一时刻记忆细胞有关,类似于GRU中的 Z t Z_t Zt,0表示遗忘。
F t = σ ( X t W x f + H t − 1 W h f + b f ) F_t = \sigma(X_tW_{xf}+H_{t-1}W_{hf}+b_f) Ft=σ(XtWxf+Ht−1Whf+bf)
- 输入门 I t I_t It:哪些信息需要流入当前记忆细胞,与当前时刻候选记忆细胞 C ~ t \tilde{C}_t C~t有关。
I t = σ ( X t W x i + H t − 1 W h i + b i ) I_t = \sigma(X_tW_{xi}+H_{t-1}W_{hi}+b_i) It=σ(XtWxi+Ht−1Whi+bi)
- 输出门 O t O_t Ot:哪些记忆信息 C t C_t Ct流入隐藏状态 H t H_t Ht
O t = σ ( X t W x o + H t − 1 W h o + b o ) O_t = \sigma(X_tW_{xo}+H_{t-1}W_{ho}+b_o) Ot=σ(XtWxo+Ht−1Who+bo)
候选记忆细胞:
C t ~ = t a n h ( X t W x c + H t − 1 W h c + b c ) \tilde{C_t}=tanh(X_tW_{xc}+H_{t-1}W_{hc}+b_c) Ct~=tanh(XtWxc+Ht−1Whc+bc)
记忆细胞:特殊移除状态,存储历史时刻的信息。
C t = F t ⊙ C t − 1 + I t ⊙ C ~ t C_t=F_t\odot C_{t-1}+I_t\odot\tilde{C}_t Ct=Ft⊙Ct−1+It⊙C~t
隐藏状态:由输出门控制记忆细胞 C t C_t Ct流入 H t H_t Ht的信息。
H t = O t ⊙ t a n h ( C t ) H_t = O_t \odot tanh(C_t) Ht=Ot⊙tanh(Ct)