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 ht1xt进行合并(concat)之后乘上权重和偏置,通过sigmoid函数,输出0-1之间的一个值,这个值会和前一次的细胞状态( C t − 1 C_{t-1} Ct1)进行点乘,从而决定遗忘或者保留,“1”表示“完全保留这个”,“0”表示“完全遗忘这个”。

3. 2、输入门

下一步就是决定我们要在神经元细胞中保存什么信息,这包括两个部分。首先,一个被称为“输入门”的Sigmod层决定我们要更新的数值。然后,一个tanh层生成一个新的候选数值 C ~ t \\tilde{C}_t C~t ,它会被增加到神经元状态中。

下一步就是决定哪些新的信息会被保留,这个过程有两步:

  1. 一个被称为输入门的sigmoid 层决定哪些信息会被更新
  2. tanh会创造一个新的候选向量 C ~ t \\widetilde{C}_{t} C t,后续可能会被添加到细胞状态中

例如:

我昨天吃了苹果,今天我想吃菠萝,在这个句子中,通过遗忘门可以遗忘苹果,同时更新新的主语为菠萝

现在就可以更新旧的细胞状态 C t − 1 C_{t-1} Ct1为新的 C t C_{ t } Ct 了。

更新的构成很简单就是:

  1. 旧的细胞状态和遗忘门 f t f_t ft的结果相乘,遗忘掉我们之前决定要遗忘的信息
  2. 然后加上 输入门和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。

上图中给每个门增加了窥视孔,但是有些论文,只给一部分门增加窥视孔,并不是全部都加上。

另外一个变体是使用组合遗忘和输入门。而不是分开决定哪些神经元需要遗忘信息,哪些需要增加新的信息,我们组合起来决定。我们只遗忘那些需要被放入新信息的状态,同样,我们只在旧的信息被遗忘之后才输入新的信息。

img

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+Urht1+br)zt=σ(Wzxt+Uzht1+bz)h^t=tanh(Whxt+Uh(rtht1)+bh)ht=ztht1+(1zt)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=ztht1+(1zt)g(xt,ht1;θ)

在LSTM网络中,输入门和遗忘门是互补关系,具有一定的冗余性,GRU直接使用一个门来控制输入和遗忘之间的平衡。当 z t = 0 z_t=0 zt=0 时,当前状态 h t h_t ht 和前一时刻的状态 h t − 1 h_{t-1} ht1 之间为线性函数关系。

在GRU网络中,函数 g ( x t , h t − 1 ; θ ) g(x_t,h_{t-1};\\theta) g(xt,ht1;θ) 的定义为:
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

循环神经网络RNN之LSTM和GRU

NLP循环神经网络

几种常见的循环神经网络结构RNN、LSTM、GRU

3.5 tensorflow 中LSTM和GRU模块使用意境级讲解

RNN - LSTM - GRU