LSTM和GRU都是特殊的RNN架构,都是为了解决梯度消失问题而生。GRU可以认为是简化版本的LSTM。
二者的核心概念:
当前记忆 = 过去记忆 + 记忆增量。
1、LSTM网络
LSTM具有三个门结构,输入门,输出门和遗忘门。
记忆增量是当前输入和过去输出的加权和。
遗忘门控制过去记忆的量,输入门控制记忆增量的量。
输出门控制当前记忆对当前输出的影响。
遗忘门:
f
=
σ
(
U
1
x
t
+
W
1
h
t
−
1
)
f=\sigma(U_1x_t+W_1h_{t-1})
f=σ(U1xt+W1ht−1)
输入门:
i
=
σ
(
U
2
x
t
+
W
2
h
t
−
1
)
i=\sigma(U_2x_t+W_2h_{t-1})
i=σ(U2xt+W2ht−1)
当前记忆:
c
t
=
f
⊙
c
t
−
1
+
i
⊙
t
a
n
h
(
U
3
x
t
+
W
3
h
t
−
1
)
c_{t}=f\odot c_{t-1}+i\odot tanh(U_3x_t+W_3h_{t-1})
ct=f⊙ct−1+i⊙tanh(U3xt+W3ht−1)
输出门:
o
=
σ
(
U
3
x
t
+
W
3
h
t
−
1
)
o=\sigma(U_3x_t+W_3h_{t-1})
o=σ(U3xt+W3ht−1)
当前输出:
h
t
=
o
⊙
t
a
n
h
(
c
t
)
h_t=o\odot tanh(c_{t})
ht=o⊙tanh(ct)
2、GRU网络
GRU具体两个门结构:重置门 和更新门。
记忆增量(或者说候选状态)由当前输入信息和过去记忆(或者说过去状态)累加形成,而重置门控制着过去记忆在当前记忆增量中的重要性。
而更新门控制过去记忆与当前记忆增量的比例。
重置门:
r
t
=
σ
(
U
1
x
t
+
W
1
h
t
−
1
)
r_t=\sigma(U_1x_t+W_1h_{t-1})
rt=σ(U1xt+W1ht−1)
更新门:
z
t
=
σ
(
U
2
x
t
+
W
2
h
t
−
1
)
z_t=\sigma(U_2x_t+W_2h_{t-1})
zt=σ(U2xt+W2ht−1)
记忆增量:
h
~
=
t
a
n
h
(
U
3
x
t
+
W
3
(
h
t
−
1
⊙
r
t
)
)
\tilde{h}=tanh(U_3x_t+W_3(h_{t-1}\odot r_t))
h~=tanh(U3xt+W3(ht−1⊙rt))
当前记忆:
h
t
=
(
1
−
z
t
)
⊙
h
t
−
1
+
z
t
⊙
h
~
h_t=(1-z_t)\odot h_{t-1}+z_t\odot\tilde{h}
ht=(1−zt)⊙ht−1+zt⊙h~
可以看出GRU和LSTM非常类似,实际上性能也类似。只是GRU参数比LSTM少,训练速度更快。