RNN的先天缺陷
由于RNN的BPTT机制,使得RNN先天具有以下两个问题:
- 时间步较小 --> 出现梯度爆炸问题 --> 应对办法:梯度裁剪
- 时间步较大 --> 出现梯度衰减问题 --> 应对办法:?
为了解决"?",先来在实际场景中理解这个问题,举个栗子:
“I grew up in France… I speak fluent _____(French).”
这就需要结合上下文背景才能填空,也就是相关信息和所需信息之间的差距(时间步)可能非常大,这样经过多阶段的误差反向传播后出现梯度消失(推导下BPTT可知)
LSTM
能够选择性地“忘记”,选择性地“记住”的单元结构
输入门、遗忘门和输出门
![]()
三个门的激活函数都是sigmoid函数,所以三个门的值域均为[0,1](起到了控制作用),计算如下:
(输入门)It=σ(XtWxi+Ht−1Whi+bi)(遗忘门)Ft=σ(XtWxf+Ht−1Whf+bf)(输出门)Ot=σ(XtWxo+Ht−1Who+bo)
其中,Wxi,Wxf,Wxo∈Rd×h和Whi,Whf,Who∈Rh×h是权重参数,bi,bf,bo∈R1×h
是偏差参数。
候选记忆细胞
![]()
激活函数为tanh函数,值域为[−1,1],计算如下:
(候选记忆细胞)Ct=tanh(XtWxc+Ht−1Whc+bc)
其中,Wxc∈Rd×h和Whc∈Rh×h是权重参数,bc∈R1×h
是偏差参数。
记忆细胞
- 应对循环神经网络中的梯度衰减问题,并更好地捕捉时间序列中时间步距离较大的依赖关系
![]()
当前时间步记忆细胞Ct∈Rn×h的计算组合了上一时间步记忆细胞和当前时间步候选记忆细胞的信息,其中通过遗忘门和输入门来控制信息流动。
Ct=Ft⊙Ct−1+It⊙Ct
如果遗忘门一直近似1且输入门一直近似0,过去的记忆细胞将一直通过时间保存并传递至当前时间步。
隐藏状态
![]()
Ht=Ot⊙tanh(Ct)
当输出门近似1时,记忆细胞信息将传递到隐藏状态供输出层使用;当输出门近似0时,记忆细胞信息只自己保留。
GRU
GRU效果与LSTM相当,而且更易于计算(贫穷限制了我们的计算能力…)
重置门和更新门
- 重置门:丢弃与预测无关的历史信息,有助于捕捉时间序列里短期的依赖关系
- 更新门:控制隐藏状态应该如何被包含当前时间步信息的候选隐藏状态所更新,有助于捕捉时间序列里长期的依赖关系
![]()
假设隐藏单元个数为h,给定时间步t的小批量输入Xt∈Rn×d(样本数为nn,输入个数为dd)和上一时间步隐藏状态Ht−1∈Rn×h。重置门Rt∈Rn×h和更新门Zt∈Rn×h中每个元素的值域都是[0,1],计算如下:
Rt=σ(XtWxr+Ht−1Whr+br)Zt=σ(XtWxz+Ht−1Whz+bz)
候选隐藏状态
![]()
将当前时间步重置门的输出与上一时间步隐藏状态做按元素乘法(重置门中元素值接近0,意味着丢弃上一时间步的隐藏状态;元素值接近1,则表示保留上一时间步的隐藏状态)。然后,将按元素乘法的结果与当前时间步的输入连结,再通过含激活函数tanh的全连接层计算出候选隐藏状态,其所有元素的值域为[−1,1]。
Ht=tanh(XtWxh+(Rt⊙Ht−1)Whh+bh)
隐藏状态
- 应对循环神经网络中的梯度衰减问题,并更好地捕捉时间序列中时间步距离较大的依赖关系
![]()
Ht=Zt⊙Ht−1+(1−Zt)⊙Ht
假设更新门在时间步t′到t(t′<t)之间一直近似1。那么,在时间步t′到t之间的输入信息几乎没有流入时间步t的隐藏状态Ht。实际上,这可以看作是较早时刻的隐藏状态Ht′−1一直通过时间保存并传递至当前时间步t。
深度循环神经网络
- 隐藏状态的信息不断传递至当前层的下一时间步和当前时间步的下一层,使得特征表征能力更强
注意:并不是越深的网络效果越好,层数的加深会导致模型的收敛变得困难,DeepRNN一般2~3层就行了
![]()
Ht(1)=ϕ(XtWxh(1)+Ht−1(1)Whh(1)+bh(1))Ht(ℓ)=ϕ(Ht(ℓ−1)Wxh(ℓ)+Ht−1(ℓ)Whh(ℓ)+bh(ℓ))Ot=Ht(L)Whq+bq
双向循环神经网络
- 瞻前顾后,其在每个时间步的隐藏状态同时取决于该时间步之前和之后的子序列(包括当前时间步的输入)
![]()
HtHt=ϕ(XtWxh(f)+Ht−1Whh(f)+bh(f))=ϕ(XtWxh(b)+Ht+1Whh(b)+bh(b))
Ht=(Ht,Ht)(连结)
Ot=HtWhq+bq