LSTM 与 GRU

这篇具有很好参考价值的文章主要介绍了LSTM 与 GRU。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

RNN无法处理长距离依赖问题,通俗点就是不能处理一些较长的序列数据,那么今天就来介绍一下两个能处理长距离依赖问题地RNN变种结构,LSTM和GRU。

1. LSTM(Long short-term memory)

1.1 LSTM结构

LSTM 与 GRU,lstm,gru,rnn

上左图是普通RNN结构图,上右图是LSTM结构图。

从图中我们可以看出,普通的RNN在隐藏层中只传递一个状态值h,而LSTM不仅传递h,还新增了一个状态值C,每一层隐藏层中的每一个神经元都接收上一时刻传递的h{t-1}和c{t-1},经过计算得到h{t}和c{t}再传入下一时刻。

那么接下来咱们就来看看状态c和h究竟在LSTM的隐藏层中做了哪些计算又是怎么传递地。

LSTM 与 GRU,lstm,gru,rnn

上图是LSTM的某一隐藏层的局部结构,三个矩形为{t-1},{t},{t+1}三个时刻的神经元,中间显示的是t时刻神经元的内部结构图。说实话只是单单看图的话,反正我当时是一脸懵逼,这都是些啥?不过不要慌,接下来咱们一步一步慢慢说明。

首先LSTM是由三个门来控制信息传递状态地,分别是红色方框对应的”忘记门“,绿色方框对应的”输入门“,和紫色方框对应的”输出门“。这三个门中一共包含3个sigmoid函数和2个tanh函数。使用sigmoid函数的原因是sigmoid函数能够将输入映射到[0,1]空间中,那么咱们就可以根据映射之后的概率对于上一时刻传递的信息进行有选择的去除,保留和输出。比如sigmoid函数的值为1也就是门的全开状态,则代表所有的信息都被保留,如果sigmoid函数为0也就是门的全闭状态,则代表所有的信息都不被保留。使用tanh函数是为了对数据进行处理,映射到[-1,1]的空间,当然也可以使用其他的激活函数,比如ReLU,至于效果谁好谁坏,我没有深究过,有研究表明在LSTM层数比较少的时候使用tanh比ReLU效果好。知道了这些之后,接下来咱们就来将这三个门一步一步拆解来讲讲具体这三个门中怎么计算。
忘记门

LSTM 与 GRU,lstm,gru,rnn

上图就是”忘记门“的结构,以及计算公式。说白了就是把t-1时刻传入的h{t-1}与t时刻的输入Xt进行拼接,然后通过权值矩阵Wf转换后,加上偏置bf,再由sigmoid函数映射到[0,1]空间中。就形成了这个”忘记门“。

然后通过”忘记门“ft对于上一时刻传入的C{t-1}进行有选择的忘记,将C{t-1}与ft进行点乘,得到去除一些信息后的”忘记门的输出“
LSTM 与 GRU,lstm,gru,rnn

输入门:

LSTM 与 GRU,lstm,gru,rnn

上图是”输入门“的结构,与”忘记门“类似,首先把t-1时刻传入的h{t-1}与t时刻的输入Xt进行拼接,然后通过权值矩阵Wi转换后,加上偏置bi,再由sigmoid函数映射到[0,1]空间中形成了这个”输出门“。然后得到输入数据,输入数据是把t-1时刻传入的h{t-1}与t时刻的输入Xt进行拼接,然后通过权值矩阵WC转换后,加上偏置bC,再有激活函数tanh映射到[-1,1]空间,得到输入数据Ct’。然后将"输入门"it与Ct’进行点乘,就能得到"输入门"的输出了。
LSTM 与 GRU,lstm,gru,rnn

得到Ct:

然后将”忘记门“的输出值与”输入门“的输出值加起来,就得到了t时刻的Ct值。

LSTM 与 GRU,lstm,gru,rnn

Ct中保留了t-1传入的部分信息和t时刻传入的经过筛选后的信息。得到了Ct,那咱们就只剩下计算t时刻的ht了,计算ht由”输出门“来完成。

输出门:

LSTM 与 GRU,lstm,gru,rnn

可以看到上图中的”输出门“的结构和计算公式,把t-1时刻传入的h{t-1}与t时刻的输入Xt进行拼接,然后通过权值矩阵Wo转换后,加上偏置bo,再由sigmoid函数映射到[0,1]空间中形成了这个”输出门“。
然后将上一步计算得到的Ct经过tanh函数缩放,映射到[-1,1]空间中,再与”输出门“点乘,就能得到输出门的输出值ht了。
LSTM 与 GRU,lstm,gru,rnn

这样咱们就计算出来t时刻的所有输出值,ht和Ct,然后ht和Ct又可以传入到下一时刻来进行循环操作了。
计算t时刻的输出yt:

LSTM 与 GRU,lstm,gru,rnn

1.2 LSTM 为什么能解决RNN的梯度消失问题?

好了,虽然上面说了那么多,可能小伙伴们也知道了LSTM的结构,但是我还是不明白啊,为什么这样的LSTM结构就能够缓解RNN中的梯度消失呢?(注意这里是缓解,并不是完美解决,LSTM层数过深时也还是有可能发生梯度消失问题)
先来回顾一下RNN导致梯度消失的原因,正是因为tanh和sigmoid函数的导数均小于1,一系列小于1的数连乘,连乘的数一多,连乘的结果就有很大概率为0,那么参数便不能进行更新了。
LSTM 与 GRU,lstm,gru,rnn

咱们类比到LSTM中:

LSTM 与 GRU,lstm,gru,rnn

为什么会是上述偏导连乘,其实可以通过数学公式推导,但是推导过程比较复杂,因为LSTM的参数太多了。

LSTM 与 GRU,lstm,gru,rnn

代入Ct中:

LSTM 与 GRU,lstm,gru,rnn

上面的公式看上去吓人,但仔细一看,后面的部分跟C{t-1}一点关系都没有,Ct对C{t-1}求偏导的话,后半边直接为0.
Ct对C{t-1}求偏导结果为:

LSTM 与 GRU,lstm,gru,rnn

上面的值地范围在0~1之间,但是在实际参数更新的过程中,可以通过控制bf较大,使得该值接近于1。这样即使在多次连乘的情况下,梯度也不会消失。
但是咱们回过头来再看看RNN:

LSTM 与 GRU,lstm,gru,rnn

虽然RNN也可以通过调整Ws来使得连乘接近于1,但是RNN是通过乘以Ws来调节,大家知道乘法数值变化较快,比较敏感,参数很难调,一不小心就超过了上界发生梯度爆炸,达不到下界不发生梯度消失。而LSTM是通过加上bf来调节,来降低梯度消失的风险,调节起来更容易,相对于RNN较好。所以之前也只是说了LSTM能相对于RNN缓解梯度消失的问题,并不能完全消除。

1.3 LSTM问题

OK,看到这,相信你对于LSTM的结构也已经有了清楚的认识。你有没有发现LSTM需要训练的参数好像有点多,Wf,Wi,Wo,Wc,bf,bi,bo,bc,V,9个参数。这是LSTM的优点也是缺点,优点是有更多的参数对于模型进行调节,结果更加精确,缺点是,参数太多了。

2. GRU(Gate Recurrent Unit)

GRU是一种也能达到LSTM相当效果,但是参数更少,相对更容易训练的算法,能够很大程度上提升训练效率,接下来咱们就来看看GRU的结构吧!

2.1 GRU结构

LSTM 与 GRU,lstm,gru,rnn

上图是GRU的整体结构图,发现跟普通的RNN没有区别,也就只有一条状态传递的通道,ht。那么接下来看看GRU中隐藏层的内部结构,到底是如何传递信息地。

LSTM 与 GRU,lstm,gru,rnn

上图就是GRU隐藏层的内部结构,先不要慌,虽然看上去很复杂,但是原理跟LSTM差不多,我来一步一步讲解。
LSTM有”忘记门“,”输入门“,”输出门“三个门来控制信息传递,GRU只有两个,一个是上图中的reset 重置门,一个是update 更新门。

reset 重置门:

LSTM 与 GRU,lstm,gru,rnn

rt就是”重置门“,计算公式还是跟LSTM一样,只是处理数据的方式不同,得到”重置门“rt后,将rt与上一时刻传入的h{t-1}进行点乘,得到重置之后的数据。

LSTM 与 GRU,lstm,gru,rnn

然后将得到的h{t-1}‘与Xt进行拼接。

LSTM 与 GRU,lstm,gru,rnn

这里的h’包含了输入信息Xt,和经过选择后的上一时刻的重要信息h{t-1}’,这样就达到了记忆当前状态信息的目的。
update 更新门:

LSTM 与 GRU,lstm,gru,rnn

Zt就是”更新门“,那么咱们来看看”更新门“是如何同时进行遗忘和记忆地。
先来看具体公式:

LSTM 与 GRU,lstm,gru,rnn

LSTM 与 GRU,lstm,gru,rnn

可以看到,这里的遗忘 z 和(1-z) 是联动的。也就是说,对于传递进来的维度信息,我们会进行选择性遗忘,则遗忘了多少权重 (z ),我们就会使用包含当前输入的 h’ 中所对应的权重进行弥补 (1-z) 。以保持一种”恒定“状态。

GRU只有两个门,相应地参数也就比LSTM要少,效率要高,但是结果并没有多大的区别。


原文链接:https://blog.csdn.net/Tink1995/article/details/104881633文章来源地址https://www.toymoban.com/news/detail-719041.html

到了这里,关于LSTM 与 GRU的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 算法项目(2)—— LSTM、RNN、GRU(SE注意力)、卡尔曼轨迹预测

    项目运行的方式(包教会) 项目代码 LSTM、RNN、GRU(SE注意力)、卡尔曼四种算法进行轨迹预测. 各种效果图 运行有问题? csdn上后台随时售后. 本文实现了三种深度学习算法加传统算法卡尔曼滤波进行轨迹预测, 预测效果图 首先看下不同模型的指标: 模型 RMSE LSTM 0.00288479607870

    2024年02月21日
    浏览(31)
  • 深度学习RNN,GRU,LSTM文本生成解码器的训练损失讲解(附代码)

    以下以GRU为例讲解RNN作为解码器时如何根据用户、商品特征信息 hidden 生成评价。 解码器部分代码如下: 在训练时,解码器会有两个输入:一是编码器提取的用户、商品特征,二是用户对商品的评价。 评价是文字,在训练开始前已经转换成了Token ID, 比如 I love this item , 每个

    2024年04月12日
    浏览(28)
  • Python深度学习026:基于Pytorch的典型循环神经网络模型RNN、LSTM、GRU的公式及简洁案例实现(官方)

    循环神经网络(也有翻译为递归神经网络)最典型的三种网络结构是: RNN(Recurrent Neural Network,循环神经网络) LSTM(Long Short-Term Memory,长短期记忆网络) GRU(Gate Recurrent Unit,门控循环单元) 理解参数的含义非常重要,否则,你不知道准备什么维度的输入数据送入模型 先

    2023年04月22日
    浏览(29)
  • LSTM 与 GRU

    RNN无法处理长距离依赖问题,通俗点就是不能处理一些较长的序列数据,那么今天就来介绍一下两个能处理长距离依赖问题地RNN变种结构,LSTM和GRU。 上左图是普通RNN结构图,上右图是LSTM结构图。 从图中我们可以看出,普通的RNN在隐藏层中只传递一个状态值h,而LSTM不仅传递

    2024年02月08日
    浏览(29)
  • pytorch学习——LSTM和GRU

    参考书籍:https://zh-v2.d2l.ai/chapter_recurrent-modern/lstm.html 参考论文: https://colah.github.io/posts/2015-08-Understanding-LSTMs/         LSTM(长短期记忆网络)和GRU(门控循环单元)是两种常用的改进型循环神经网络(RNN),用于解决传统RNN中的长期依赖性和梯度消失/梯度爆炸等问题。

    2024年02月09日
    浏览(32)
  • 深度学习 | DRNN、BRNN、LSTM、GRU

    1.1、基本思想          能捕捉数据中更复杂模式并更好地处理长期依赖关系。         深度分层模型比浅层模型更有效率。         Deep RNN比传统RNN表征能力更强。         那么该如何引入深层结构呢? 传统的RNN在每个时间步的迭代都可以分为三个部分:   

    2024年02月03日
    浏览(34)
  • 循环神经网络的变体模型-LSTM、GRU

    长短时记忆网络(Long Short-Term Memory,LSTM)是一种深度学习模型,属于循环神经网络(Recurrent Neural Network,RNN)的一种变体。LSTM的设计旨在解决传统RNN中遇到的长序列依赖问题,以更好地捕捉和处理序列数据中的长期依赖关系。 下面是LSTM的内部结构图 LSTM为了改善梯度消失,

    2024年01月21日
    浏览(23)
  • 【长短时记忆网络(LSTM)和门控循环单元(GRU)】

    长短时记忆网络(LSTM)和门控循环单元(GRU)都是为了解决传统循环神经网络(RNN)在处理长序列数据时遇到的梯度消失问题而设计的。它们通过引入门控机制,有效地保持长期依赖信息,同时避免了梯度在时间反向传播过程中消失的问题。 LSTM通过使用三个门(输入门、遗

    2024年04月09日
    浏览(32)
  • 基于深度学习的轴承寿命预测实践,开发CNN、融合LSTM/GRU/ATTENTION

    关于轴承相关的项目之前做的大都是故障识别诊断类型的,少有涉及回归预测的,周末的时候宅家发现一个轴承寿命加速实验的数据集就想着拿来做一下寿命预测。 首先看下数据集如下: 直接百度即可搜到,这里就不再赘述了。 Learning_set为训练集 Test_set为测试集 我这里为了

    2024年02月02日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包