GRU
GRU中含有更新门和重置门(计算中得到的最后形式是向量,通过将输入或隐状态相乘,重置门决定了如何把新的输入与之前的记忆相结合,更新门决定多少先前的记忆起作用。),重置门和更新门能够起到解决梯度消失问题的作用。
更新门:
z
t
=
σ
(
W
(
z
)
x
t
+
U
(
z
)
h
t
−
1
)
z_t=\sigma(W^{(z)}x_t+U^{(z)}h_{t-1})
zt=σ(W(z)xt+U(z)ht−1)
重置门:
r
t
=
σ
(
W
(
r
)
x
t
+
U
(
r
)
h
t
−
1
r_t=\sigma(W^{(r)}x_t+U^{(r)}h_{t-1}
rt=σ(W(r)xt+U(r)ht−1
LSTM(Long Short-term Memory/长短期记忆)
原理:
门:输入门、遗忘门、输出门
δ
\delta
δ:
S
i
g
m
o
i
d
Sigmoid
Sigmoid函数,值域为【0,1】,用于决定遗忘多少信息,0:全部遗忘,1:全部记住。
h
t
h_t
ht:细胞的输出
x
t
x_t
xt:当前输入
C
t
C_t
Ct:细胞状态
W
W
W:学习到的权值矩阵
第一步:决定从细胞状态忘记什么信息:
f
t
=
δ
(
W
f
[
h
t
−
1
,
x
t
]
+
b
f
)
f_t=\delta(W_f[h_{t-1},x_t]+b_f)
ft=δ(Wf[ht−1,xt]+bf)
第二步:决定让多少新的信息加入细胞状态中:
i
t
=
δ
(
W
i
[
h
t
−
1
,
x
t
]
+
b
i
)
i_t=\delta(W_i[h_{t-1},x_t]+b_i)
it=δ(Wi[ht−1,xt]+bi)
t
a
n
h
tanh
tanh用来生成一个向量,即备选的用来更新的内容:
C
t
~
=
t
a
n
h
(
W
c
[
h
t
−
1
,
x
t
]
+
b
C
)
\widetilde{C_t}=tanh(W_c[h_{t-1},x_t]+b_C)
Ct
=tanh(Wc[ht−1,xt]+bC)
第三步:更新细胞状态
C
t
=
f
t
∗
C
t
−
1
+
i
t
∗
C
t
~
C_t=f_t*C_{t-1}+i_t*\widetilde{C_t}
Ct=ft∗Ct−1+it∗Ct
第四步:确定输出(过滤后版本)
o
t
=
δ
(
W
o
[
h
t
−
1
,
x
t
]
+
b
o
)
o_t=\delta(W_o[h_{t-1},x_t]+b_o)
ot=δ(Wo[ht−1,xt]+bo)
h
t
=
o
t
∗
t
a
n
h
(
C
t
)
h_t=o_t*tanh(C_t)
ht=ot∗tanh(Ct)