GRU原理
GRU是LSTM网络的一种变体,它较LSTM网络的结构更加简单,而且效果也很好。GRU 有两个门,一个是重置门(reset gate),另一个是更新门(update gate)。重置门决定了如何将新的输入信息与前面的记忆相结合,更新门定义了前面记忆保存到当前时间步的量。如果我们将重置门设置为 1,更新门设置为 0,那么我们将再次获得标准 RNN 模型。
我们先来看下两个门的输出:
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
=
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\bigodot{H}_{t-1})W_{hh}+b_h)
H~t=tanh(XtWxh+(Rt⨀Ht−1)Whh+bh)
更新门帮助模型决定到底要将多少过去的信息传递到未来。极端情况下,当
R
t
R_t
Rt里面全是0代表这一时刻起前面的信息都不要。另一个极端情况
R
t
R_t
Rt里面全是1时就相当于把前面的信息拿来用,等价于RNN是如何算隐层状态的。
隐状态:
H
t
=
Z
t
⨀
H
t
−
1
+
(
1
−
Z
t
)
⨀
H
~
t
H_t=Z_t\bigodot{H_{t-1}+(1-Z_t)\bigodot{\tilde{H}_t}}
Ht=Zt⨀Ht−1+(1−Zt)⨀H~t
(
1
−
Z
t
)
⨀
H
~
t
(1-Z_t)\bigodot{\tilde{H}_t}
(1−Zt)⨀H~t表示对包含当前节点信息的
H
~
t
{\tilde{H}_t}
H~t进行选择性”记忆“,
Z
t
⨀
H
t
−
1
Z_t\bigodot{H_{t-1}}
Zt⨀Ht−1表示对原本隐藏状态的
H
t
−
1
H_{t-1}
Ht−1 选择性“遗忘”,忘记维度中一些不重要的信息。
假设
Z
t
=
1
Z_t=1
Zt=1,
H
t
=
H
t
−
1
H_t=H_{t-1}
Ht=Ht−1,等于不更新过去状态,忽略掉这个元素。