长短时间记忆网络
RNN的反馈特性使得它能记住短时间的信息,但不能记忆较远时间的信息,LSTM可以
LSTM分为记忆门,遗忘门,输出门,
如图所示:
遗忘门:
f
t
=
σ
(
W
f
[
h
t
−
1
,
x
t
]
+
b
f
)
f_{t}=\sigma(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}=\sigma(W_{i}[h_{t-1},x_{t}]+b_{i})
it=σ(Wi[ht−1,xt]+bi)
C
t
∼
=
tanh
(
W
c
[
h
t
−
1
,
x
t
]
+
b
c
)
C^{\sim}_{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}*C^{\sim}_{t}
Ct=ft∗Ct−1+it∗Ct∼
输出门:
O
t
=
σ
(
W
o
[
h
t
−
1
,
x
t
]
+
b
o
)
O_{t}=\sigma(W_{o}[h_{t-1},x_{t}]+b_{o})
Ot=σ(Wo[ht−1,xt]+bo)
h
t
=
o
t
∗
tanh
(
C
t
)
h_{t}=o_{t}*\tanh(C_{t})
ht=ot∗tanh(Ct)
为什么分别使用sigma与tanh?
sigmoid函数用于门的开关控制,tanh函数用于生成候选值
在门上增加窥视孔
这是2000年Gers和Schemidhuber教授提出的一种LSTM变体。图中,在传统的LSTM结构基础上,每个门(遗忘门、记忆门和输出门)增加了一个“窥视孔”(Peephole),有的学者在使用时也选择只对部分门加入窥视孔。
整合遗忘门和输入门
与传统的LSTM不同的是,这个变体不需要分开来确定要被遗忘和记住的信息,采用一个结构搞定。在遗忘门的输出信号值(0到1之间)上,用1减去该数值来作为记忆门的状态选择,表示只更新需要被遗忘的那些信息的状态。
GRU
改进比较大的一个LSTM变体叫Gated Recurrent Unit (GRU),目前应用较多。结构图如下
GRU主要包含2个门:重置门和更新门。GRU混合了细胞状态和隐藏状态为一个新的状态,使用
h
t
h_{t}
ht来表示。该模型比传统的标准LSTM模型简单。
重置门:
r
t
=
σ
(
W
r
[
h
t
−
1
,
x
t
]
)
r_{t}=\sigma(W_{r}[h_{t-1},x_{t}])
rt=σ(Wr[ht−1,xt])
h
t
∼
=
tanh
(
W
h
[
r
t
−
1
∗
h
t
−
1
,
x
t
]
)
h^{\sim}_{t}=\tanh(W_{h}[r_{t-1}*h_{t-1},x_{t}])
ht∼=tanh(Wh[rt−1∗ht−1,xt])
更新门:
z
t
=
σ
(
W
z
[
h
t
−
1
,
x
t
]
)
z_{t}=\sigma(W_{z}[h_{t-1},x_{t}])
zt=σ(Wz[ht−1,xt])
h
t
=
(
1
−
z
t
)
∗
h
t
−
1
+
z
t
∗
h
t
∼
h_{t}=(1-z_{t})*h_{t-1}+z_{t}*h^{\sim}_{t}
ht=(1−zt)∗ht−1+zt∗ht∼