一、原因
我们也介绍了循环神经网络很难训练的原因,这导致了它在实际应用中,很难处理长距离的依赖。在本文中,我们将介绍一种改进之后的循环神经网络:长短时记忆网络(Long Short Term Memory Network, LSTM),它成功的解决了原始循环神经网络的缺陷,成为当前最流行的RNN,在语音识别、图片描述、自然语言处理等许多领域中成功应用。但不幸的一面是,LSTM的结构很复杂,因此,我们需要花上一些力气,才能把LSTM以及它的训练算法弄明白。在搞清楚LSTM之后,我们再介绍一种LSTM的变体:GRU (Gated Recurrent Unit)。 它的结构比LSTM简单,而效果却和LSTM一样好,因此,它正在逐渐流行起来。
二、定义
1.LSTM的网络结构
RNN:有两个输入,两个输出。
LSTM:有三个输入,三个输出。
GRU:有两个输入,两个输出。
- 相比RNN传递一个网络状态h^t ,LSTM传递两个状态,一个 c t c^t ct(cell state)和一个 h t h^t ht(hidden state)
2.LSTM的三个门
- 输入门
- 遗忘门
- 输出门
(1).遗忘门
作用对象:细胞状态
作用:将细胞状态中的信息选择性的遗忘
例如公式:(5)
c
t
=
z
f
⊙
c
t
−
1
+
z
i
⊙
z
c^t=z^f⊙c^{t-1}+z^i⊙z
ct=zf⊙ct−1+zi⊙z 中
z
f
z^f
zf是对决定从cell状态中丢弃什么信息,
z
f
z^f
zf的范围[0,1],
让我们回到语言模型的例子中来基于已经看到的预测下一个词。在这个问题中,细胞状态可能包含当前主语的类别,因此正确的代词可以被选择出来。当我们看到新的主语,我们希望忘记旧的主语。
例如,他今天有事,所以我。。。当处理到‘’我‘’的时候选择性的忘记前面的’他’,或者说减小这个词对后面词的作用。
GRU对LSTM做了两个大改动。
(2).输入门
作用对象:细胞状态
作用:将新的信息选择性的记录到细胞状态中
例如公式:(5)
c
t
=
z
f
⊙
c
t
−
1
+
z
i
⊙
z
c^t=z^f⊙c^{t-1}+z^i⊙z
ct=zf⊙ct−1+zi⊙z 中
z
i
z^i
zi是对决定从当前z状态中选择多少信息进入当前
c
t
c^t
ct,
z
i
z^i
zi的范围[0,1],
在我们语言模型的例子中,我们希望增加新的主语的类别到细胞状态中,来替代旧的需要忘记的主语。
例如:他今天有事,所以我。。。。当处理到‘’我‘’这个词的时候,就会把主语我更新到细胞中去。
(3).输出门
在语言模型的例子中,因为他就看到了一个 代词,可能需要输出与一个 动词 相关的信息。例如,可能输出是否代词是单数还是负数,这样如果是动词的话,我们也知道动词需要进行的词形变化。
例如:上面的例子,当处理到‘’我‘’这个词的时候,可以预测下一个词,是动词的可能性较大,而且是第一人称。
会把前面的信息保存到隐层中去。
三、相关公式
1.模块内图
2. lstm的七个公式
(1)
z
f
=
s
i
g
m
o
i
d
(
w
f
∗
[
h
t
−
1
,
x
t
]
+
b
f
)
z^f=sigmoid(w_f*[h^{t-1},x^t]+b_f)
zf=sigmoid(wf∗[ht−1,xt]+bf) 遗忘门
(2)
z
i
=
s
i
g
m
o
i
d
(
w
i
∗
[
h
t
−
1
,
x
t
]
+
b
i
)
z^i=sigmoid(w_i*[h^{t-1},x^t]+b_i)
zi=sigmoid(wi∗[ht−1,xt]+bi) 输入门
(3)
z
o
=
s
i
g
m
o
i
d
(
w
o
∗
[
h
t
−
1
,
x
t
]
+
b
o
)
z^o=sigmoid(w_o*[h^{t-1},x^t]+b_o)
zo=sigmoid(wo∗[ht−1,xt]+bo) 输出门
(4)
z
=
t
a
n
h
(
w
∗
[
h
t
−
1
,
x
t
]
+
b
)
z=tanh(w*[h^{t-1},x^t]+b)
z=tanh(w∗[ht−1,xt]+b)
(5)
c
t
=
z
f
⊙
c
t
−
1
+
z
i
⊙
z
c^t=z^f⊙c^{t-1}+z^i⊙z
ct=zf⊙ct−1+zi⊙z 输出1
(6)
h
t
=
z
o
⊙
t
a
n
h
(
c
t
)
h^t=z^o⊙tanh(c^t)
ht=zo⊙tanh(ct) 输出2
(7)
y
t
=
s
o
f
t
m
a
x
(
w
′
h
t
)
y^t=softmax(w'h^t)
yt=softmax(w′ht) 输出3
四、激活函数
1.sigmoid 用在了各种gate上,产生0~1之间的值,这个一般只有sigmoid最直接了。
2.tanh 用在了状态和输出上,是对数据的处理,这个用其他激活函数或许也可以。
五、LSTM如何解决梯度消失梯度爆炸
参考:
https://zhuanlan.zhihu.com/p/136223550
LSTM变体GRU
将输入门、遗忘门、输出门变为两个门:更新门(Update Gate)和重置门(Reset Gate)。
将单元状态与输出合并为一个状态:
Gated Recurrent Unit (GRU)就是lstm的一个变态,这是由 Cho, et al. (2014) 提出。它将忘记门和输入门合成了一个单一的 更新门。同样还混合了细胞状态和隐藏状态,和其他一些改动。最终的模型比标准的 LSTM 模型要简单,也是非常流行的变体。