3.2 LSTM和GRU循环神经网络
Posted 炫云云
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3.2 LSTM和GRU循环神经网络相关的知识,希望对你有一定的参考价值。
1、前言
长短期记忆(Long Short-Term Memory,LSTM)网络是循环神经网络的一个变体,可以有效地解决简单循环神经网络的梯度爆炸或消失问题。
门控循环单元(gated recurrent unit,GRU)是LSTM网络的一种效果很好的变体,它较LSTM网络的结构更加简单,而且效果也很好,因此也是当前非常流行的一种网络。GRU既然是LSTM的变体,因此也是可以解决RNN网络中的长依赖问题.
2、LSTM 网络
长短期记忆网络–通畅叫做”LSTMs”–是一种特殊的RNNs, 它能够学习长期依赖。LSTM由Hochreiter&Schmidhuber(1997)引入,被明确的设计用来解决长期依赖问题。
所有的递归神经网络都有重复神经网络本身模型的链式形式。在标准的RNN, 这个复制模块只有一个非常简单的结构,例如一个tanh层。
LSTMs 也有这种链式结构,但是这个重复模块与上面提到的RNN结构不同:LSTMs并不是只增加一个简单的神经网络层,而是四个,它们以一种特殊的形式交互。
首先简绍使用的符号表示方法:
在上图中,每条线表示一个向量,从一个输出节点到其他节点的输入节点。这个粉红色圆圈表示逐点式操作,就像向量加法。黄色的盒子是学习好的神经网络的层。线条合表示联结,相反,线条分叉表示内容被复制到不同位置。
3、LSTM的核心思想
LSTM的核心之处就是它的神经元状态,如下图中所示,上面那条贯穿整个结构的水平线。 神经元状态就像是一个传送带。它的线性作用很小,贯穿整个链式结构。信息很容易在传送带上传播,状态却并不会改变。
LSTM有能力删除或者增加神经元状态中的信息,这一机制是由被称为门的结构精心管理的。 门限是一种让信息选择性通过的方式,它们是由Sigmoid层和逐点相乘器做成的。
Sigmod层输出0~1之间的数字,描述了一个神经元有多少信息应该被通过。输出“0”意味着“全都不能通过”,输出“1”意味着“让所有都通过”。 一个LSTM有三个这样的门限,去保护和控制神经元状态。
3.1、遗忘门
LSTM的第一步就是决定什么信息应该被神经元遗忘。这是一个被称为“遗忘门”的Sigmod层组成的。
在下图就是 h t − 1 和 x t h_{t-1}和x_t ht−1和xt进行合并(concat)之后乘上权重和偏置,通过sigmoid函数,输出0-1之间的一个值,这个值会和前一次的细胞状态( C t − 1 C_{t-1} Ct−1)进行点乘,从而决定遗忘或者保留,“1”表示“完全保留这个”,“0”表示“完全遗忘这个”。
3. 2、输入门
下一步就是决定我们要在神经元细胞中保存什么信息,这包括两个部分。首先,一个被称为“输入门”的Sigmod层决定我们要更新的数值。然后,一个tanh层生成一个新的候选数值 C ~ t \\tilde{C}_t C~t ,它会被增加到神经元状态中。
下一步就是决定哪些新的信息会被保留,这个过程有两步:
- 一个被称为
输入门
的sigmoid 层决定哪些信息会被更新 tanh
会创造一个新的候选向量 C ~ t \\widetilde{C}_{t} C t,后续可能会被添加到细胞状态中
例如:
我昨天吃了苹果,今天我想吃菠萝
,在这个句子中,通过遗忘门可以遗忘苹果
,同时更新新的主语为菠萝
现在就可以更新旧的细胞状态 C t − 1 C_{t-1} Ct−1为新的 C t C_{ t } Ct 了。
更新的构成很简单就是:
- 旧的细胞状态和遗忘门 f t f_t ft的结果相乘,遗忘掉我们之前决定要遗忘的信息
- 然后加上 输入门和tanh相乘的结果
这是新的候选值,是由我们想多大程度上更新每个状态的值来度量的。
3.3、输出门
首先,我们使用Sigmod层决定哪一部分的神经元状态需要被输出;然后我们让神经元状态经过tanh(让输出值变为-1~1之间)层并且乘上Sigmod门限的输出,我们只输出我们想要输出的。
记忆循环神经网络中的隐状态 h 存储了历史信息,可以看作是一种记忆(Memory)。在简单循环网络中,隐状态每个时刻都会被重写,因此可以看作是一种短期记忆(Short-Term Memory)。在神经网络中,长期记忆(Long-Term Memory)可以看作是网络参数,隐含了从训练数据中学到的经验,其更新周期要远远慢于短期记忆。而在LSTM网络中,记忆单元 c c c 可以在某个时刻捕捉到某个关键信息,并有能力将此关键信息保存一定的时间间隔。记忆单元 c c c 中保存信息的生命周期要长于短期记忆 h h h ,但又远远短于长期记忆,因此称为长的短期记忆(Long Short-Term Memory)。
4.LSTM的变体
上面描述的都是常规的LSTM,但并不是所有的LSTM都是上面这种模式。实际上,几乎每篇包含LSTMs模型的论文中,LSTMs都有一些差异,这些差异非常微小,但是它值得提及一下。 Gers & Schmidhuber(2000)引入了一个流行的LSTM变体,他增加了一个“窥视孔连接”。这意味着我们让门监视神经元状态Ct。
上图中给每个门增加了窥视孔,但是有些论文,只给一部分门增加窥视孔,并不是全部都加上。
另外一个变体是使用组合遗忘和输入门。而不是分开决定哪些神经元需要遗忘信息,哪些需要增加新的信息,我们组合起来决定。我们只遗忘那些需要被放入新信息的状态,同样,我们只在旧的信息被遗忘之后才输入新的信息。
5、GRU
门控循环单元(Gated Recurrent Unit, GRU),由Cho, et al(2014),它组合遗忘们和输入门为一个“更新门”,它合并了神经元状态和隐层状态,并且还做了一些其他改变。最终这个模型比标准的LSTM模型简单一些,并且变得越来越流行。
GRU的前向传播公式:
r
t
=
σ
(
W
r
x
t
+
U
r
h
t
−
1
+
b
r
)
z
t
=
σ
(
W
z
x
t
+
U
z
h
t
−
1
+
b
z
)
h
^
t
=
t
a
n
h
(
W
h
x
t
+
U
h
(
r
t
⊙
h
t
−
1
)
+
b
h
)
h
t
=
z
t
⊙
h
t
−
1
+
(
1
−
z
t
)
⊙
h
^
t
r_t=\\sigma(W_rx_t+U_rh_{t-1}+b_r)\\\\ z_t=\\sigma(W_zx_t+U_zh_{t-1}+b_z) \\\\ \\hat{h}_t=tanh(W_hx_t+U_h(r_t\\odot h_{t-1})+b_h)\\\\ h_t=z_t \\odot h_{t-1} + (1- z_t) \\odot \\hat{h}_{t} \\\\
rt=σ(Wrxt+Urht−1+br)zt=σ(Wzxt+Uzht−1+bz)h^t=tanh(Whxt+Uh(rt⊙ht−1)+bh)ht=zt⊙ht−1+(1−zt)⊙h^t
- 重置门 r t r_t rt:用于控制前一时刻的隐藏状态有多大程度更新到当前记忆状态
- 更新门 z t ∈ [ 0 , 1 ] z_t\\in[0,1] zt∈[0,1]:用于控制前一时刻的隐藏状态有多大程度更新到当前隐藏状态
h t = z t ⊙ h t − 1 + ( 1 − z t ) ⊙ g ( x t , h t − 1 ; θ ) h_t=z_t\\odot h_{t-1}+(1-z_t)\\odot g(x_t,h_{t-1};\\theta) ht=zt⊙ht−1+(1−zt)⊙g(xt,ht−1;θ)
在LSTM网络中,输入门和遗忘门是互补关系,具有一定的冗余性,GRU直接使用一个门来控制输入和遗忘之间的平衡。当 z t = 0 z_t=0 zt=0 时,当前状态 h t h_t ht 和前一时刻的状态 h t − 1 h_{t-1} ht−1 之间为线性函数关系。
在GRU网络中,函数
g
(
x
t
,
h
t
−
1
;
θ
)
g(x_t,h_{t-1};\\theta)
g(xt,ht−1;θ) 的定义为:
h
~
t
=
t
a
n
h
(
W
h
x
t
+
U
h
(
r
t
⊙
h
t
−
1
)
+
b
h
)
\\tilde{h}_t=tanh(W_hx_t+U_h(r_t\\odot h_{t-1})+b_h)
h~t=tanh(Whxt+Pytorch Note36 循环神经网络的变式:LSTM和GRU