全面解析LSTM(RNN,GRU)及其前向传播过程

LSTM简介

LSTM(Long Short-Term Memory)长短期记忆网络,RNN的升级款,主要解决RNN中长时序列中的梯度消失问题。在长时间序列中,原始的RNN由于梯度的乘性问题,前面的序列的影响近乎为0,LSTM将其修正为加性问题。

LSTM原理

先上原理图:

image-20210302114321174

在LSTM中,第一阶段是遗忘门,遗忘层决定哪些信息需要从细胞状态中被遗忘,下一阶段是输入门,输入门确定哪些新信息能够被存放到细胞状态中,最后一个阶段是输出门,输出门确定输出什么值。 下面我们分析这三个门以及中间计算过程。

遗忘门

20180705154117297

遗忘门是将上一时间点输出 h t − 1 h_{t-1} ht1和当前时间点的数据 x t x_t xt作为输入,通过 s i g m o i d sigmoid sigmoid激活函数,得到 f t f_t ft的过程。由于 s i g m o i d sigmoid sigmoid函数的输出在 [ 0 , 1 ] [0, 1] [0,1]区间,即 f t f_t ft [ 0 , 1 ] [0, 1] [0,1]区间,因此 f t f_t ft可以表示上一层细胞状态被遗忘的概率, 1 1 1是“完全保留“, 0 0 0是”完全舍弃“。

计算公式及解释

遗忘门计算公式如下:

f t = σ ( W f ⋅ [ h t − 1 , x t ] + b f ) f_t = \sigma(W_f\cdot[h_{t-1}, x_t] + b_f) ft=σ(Wf[ht1,xt]+bf)

公式解释: 首先将 h t − 1 h_{t-1} ht1 x t x_t xt拼接为一个长的输入向量;然后对输入向量进行全连接计算,权重矩阵为 W f W_f Wf;在结果中加入偏置 b f b_f bf得到隐层向量;最后对隐层向量做 s i g m o i d sigmoid sigmoid激活,得到遗忘概率 f t f_t ft

在实际编码时,还可以按如下公式描述的进行编码,即不拼接 h t − 1 h_{t-1} ht1 x t x_t xt,而是拆开 W f W_f Wf

f t = σ ( W i f ⋅ x t + W h f ⋅ h t − 1 + b f ) f_t=\sigma(W_{if}\cdot x_t + W_{hf}\cdot h_{t-1}+b_f) ft=σ(Wifxt+Whfht1+bf)

输入门

20180705154140100

输入门包含一个和遗忘门相同的结构,输出为 i t i_t it,表示当前时间点有多+少输入信息被保留,另一部分是对输入信息的处理,输出为 C t ~ \tilde{C_t} Ct~

计算公式及解释

输入门计算公式有两个,分别如下:

i t = σ ( W i ⋅ [ h t − 1 , x t ] + b i ) i_t=\sigma(W_i\cdot[h_{t-1},x_t]+b_i) it=σ(Wi[ht1,xt]+bi)

C t ~ = tanh ⁡ ( W c ⋅ [ h t − 1 , x t ] + b c ) \tilde{C_t}=\tanh(W_c\cdot[h_{t-1},x_t]+b_c) Ct~=tanh(Wc[ht1,xt]+bc)

公式解释: 该公式格式和遗忘门相同,计算过程也是相同的,解释参考遗忘门。

细胞状态更新

计算了输入门和输出门之后,就可以对当前时刻细胞状态进行更新。

20180705154157781

上图中的X+都是pointwise操作,逐元素操作。先计算 f t f_t ft和前一时刻细胞状态 C t − 1 C_{t-1} Ct1的外积,遗忘掉部分前一时刻的细胞状态;然后计算 i t i_t it C t ~ \tilde{C_t} Ct~的外积,保留部分本时刻的输入;最后将两部分向量做加法得到本时刻的细胞状态 C t C_t Ct。这一部分计算公式如下:

C t = f t ∗ C t − 1 + i t ∗ C t ~ C_t=f_t*C_{t-1}+i_t*\tilde{C_t} Ct=ftCt1+itCt~

输出门

20180705154210768

输出门决定当前时刻细胞状态被过滤程度。首先是和输入门相同的结构,计算得到输出被过滤概率 o t o_t ot,然后将细胞状态 C t C_t Ct使用tanh函数激活;最后使用 o t o_t ot过滤激活结果得到当前时刻输出 h t h_t ht。其计算公式如下:

o t = σ ( W o ⋅ [ h t − 1 , x t ] + b o ) o_t=\sigma(W_o\cdot[h_{t-1},x_t]+b_o) ot=σ(Wo[ht1,xt]+bo)

h t = o t ∗ tanh ⁡ ( C t ) h_t=o_t*\tanh(C_t) ht=ottanh(Ct)


LSTM的细胞状态 C t C_t Ct变动缓慢,表示长期记忆; h t h_t ht变动较快,表示短期记忆。另外,每一层的 W f , b f W_f,b_f Wf,bf W i , b i W_i,b_i Wi,bi W c , b c W_c,b_c Wc,bc以及 W o , b o W_o,b_o Wo,bo都是层内共享的

LSTM优缺点

  • 优点:有效解决了RNN梯度消失问题。对于长时序列能较好拟合。
  • 缺点:LSTM虽然部分解决了rnn梯度消失问题,但是信息在过远的距离传播中损失很厉害;另外,其无法很好的并行(工业上影响很大)。

双向LSTM

双向LSTM,由两个普通LSTM组成,能够同时利用过去和未来时刻的信息,推导当前时刻的信息。下图是其结构。

20180713200802779

多层LSTM

20200218164924456

LSTM变体

image-20210308091259528

image-20210308091316540

GRU

GRU是LSTM最流行的一个变体,其结构如下:

5480235-68c6da22ebd29964

GRU取消了LSTM中的cell state,只使用了hidden state,并且使用update gate更新门来替换LSTM中的输入们和遗忘门,取消了LSTM中的输出门,新增了reset gate重置门,图中的 z t z_t zt r t r_t rt分别表示更新门和重置门。更新门用于控制前一时刻的状态信息被带入到当前状态中的程度,更新门的值越大说明前一时刻的状态信息带入越多。重置门控制前一状态有多少信息被写入到当前的候选集 h t ~ \tilde{h_t} ht~上,重置门越小,前一状态的信息被写入的越少。这样做的好处是在达到LSTM相近的效果下,GRU参数更少,训练的计算开销更小,训练速度更快。

后记

标准RNN结构如下:

quesbase64155693985278218659

该结构和LSTM对比起来非常好理解。但是实际使用场景中,有根据问题域不同,也有不同的使用结构。下图是一些RNN的实际使用场景下的结构。

RNN-muli-oneo

2021-03-02-RNN-onei-mulo

将上面两图结合就是Encoder-Decoder模型,也可以称之为Seq2Seq模型。

2021-03-02-RNN-seq2seq

LSTM和RNN一样,根据使用场景不同,LSTM可能有单输入多输出,多输入单输出,多输入多输出等输入输出结构。

参考资料

Understanding LSTM Networks

长短期记忆网络(Long Short-Term Memory,LSTM)及其变体双向LSTM和GRU

LSTM输入输出理解

如何从RNN起步,一步一步通俗理解LSTM

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LSTM(长短期记忆网络)和GRU(门控循环单元)都是循环神经网络(RNN)的变种,用于处理和建模时间序列数据。这两种模型是为了解决传统RNN的缺点而提出的。 LSTM 是Hochreiter和Schmidhuber于1997年提出的一种RNN的变种。LSTM引入了三个门机制:输入门、遗忘门和输出门,通过这些门机制来控制信息的流动。输入门决定了新的信息要流进到记忆细胞中的量,遗忘门决定了旧的信息要流出记忆细胞的量,输出门决定了要根据当前的记忆细胞输出多少信息。这种机制可以有效地解决传统RNN中的梯度消失和梯度爆炸的问题,同时还能够更好地捕捉长期依赖关系。 GRU 是Cho等人于2014年提出的一种改进的RNN模型。相比于LSTMGRU只有两个门简化了LSTM中的结构。GRU包含了一个重置门和一个更新门,重置门控制了旧的隐藏状态的多少信息被忽略,更新门控制了新的输入信息和旧的隐藏状态更新的权重。GRU具有和LSTM相似的表现能力,但参数更少,计算复杂度更低。 综上所述,LSTMGRU都是RNN模型的改进版本,用于解决传统RNN中的梯度消失和梯度爆炸的问题。LSTM通过引入三个门机制来实现信息的流动控制,而GRU则通过重置门和更新门来实现类似的功能。两者在建模长期依赖关系时表现出色,但GRU具有更简化的结构和计算复杂度。根据具体的任务需求,可以选择适合的模型来应用于时间序列数据的建模和预测。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值