RNN会有梯度消失这样的问题,对于远距离无法进行梯度更新,因此更新主要集中在临近区域。
GRU和LSTM都是为了处理RNN梯度消失问题而设计的,可以学习到长距离依赖。
GRU引入了两个门,分别是update gate和reset gate:
- update gate:
zt=sigmoid(Wzxt+Uzht−1)
reset gate:
rt=sigmoid(Wrxt+Urht−1)
st=tanh(Wxt+rt⋅Uht−1)
, 候选值。
ht=(1−z)⋅st+z⋅ht−1
,此处的短路连接可以缓解梯度消失,当z=1时,
ht=ht−1
,信息得以保持。
重置门决定了如何将新的输入信息与前面的记忆相结合,更新门定义了前面的记忆保存到当前时间步的量。当重置门为1, 更新门为0的时候,即可获得RNN模型。
LSTM好的资料:https://www.jianshu.com/p/9dc9f41f0b29
https://zhuanlan.zhihu.com/p/28297161
LSTM比GRU更加复杂一些,有遗忘门,输入门,输出门。
- forget gate:
ft=sigmoid(Wfxt+Ufht−1)
- input gate:
it=sigmoid(Wixt+Uiht−1)
- output gate:
ot=sigmoid(Woxt+Uoht−1)
c^t=tanh(Wcxt+Ucht−1)
ct=ft⋅ct−1+it⋅c^t
此处的短路连接可以缓解梯度消失
ht=ot⋅tanh(ct)