本文内容主要翻译自:Illustrated Guide to LSTM’s and GRU’s: A step by step explanation

本文首先从直觉上了解一下LSTM和GRU;然后再介绍LSTM和GRU的内部机制。

短期记忆问题

RNN网络会受到短期记忆问题的影响。如果一个输入序列足够长,那么RNN很难将早期的信息传送到之后的时间步上。如果你正在尝试处理一段文字来进行预测,RNN可能会丢失掉起始部分的重要信息。

在反向传播过程中,RNN网络会遇到梯度消失问题。反向传播过程中计算的梯度用于对权重参数进行更新。梯度消失问题是指梯度随着时间的推移而逐渐减小[或者说由于链式的法则,梯度值从后往前越来越小],如果梯度值变得非常小,那么权重参数就不再更新。

所在RNN网络中,获得小梯度的网络层将终止学习过程,通常这些网络层为模型的前几层。因为这些网络层停止学习,RNN可能会忘记在长序列中看到的信息,因此具有短期记忆。

解决方法:LSTM & GRU

LSTM和GRU的提出是为了解决传统RNN遇到的短期记忆问题,它们内部具有称为“门”的机制,可以调节信息的流动。

这些“门”可以通过学习知道输入数据序列中那部分是重要的需要保留,那部分可以丢弃。通过这样的“门”,相关信息可以沿序列的长链传递下去从而进行预测。几乎所有基于递归神经网络的技术成果都是通过这两个网络实现的。LSTM和GRU可以用于语音识别、语音合成以及文本生成,甚至可以用它们来为视频生成字幕。

下面,我们通过图示对这两种网络进行介绍,在介绍过程中会避免大量的数学计算;通过图示,我们能对这两种网络的内部机制有清晰的了解。

本质

我们先开始做一个小实验。假设你想要在网上买一份麦片,首先你会阅读购买用户的商品评价进而决定是否购买。

当你阅读上述评论时,大脑会下意识地只记住那些关键词,如“amazing","perfectly balanced breakfast",对”this“,”gave“,”all“,”should“等词并不会太过关注。如果你朋友第二天问题评论的内容,你可能不会一字不差地记住评论内容,可能只记得关键信息,像”will definitely be buying again“.而不记得其他词汇。

这基本上就像是LSTM和GRU所做的事情,它们可以学习只保留相关信息来进行预测,并忘记不相关的数据信息。在这个例子中,你记得的词汇信息可以帮助你判断这个商品是否值得购买。

RNN回顾

为了了解LSTM和GRU的实现原理,我们先回顾一下RNN。RNN的工作原理:首先将单词转换成机器能理解的向量形式,然后将向量依次送到网络中进行处理。

在处理过程中,RNN网络将前一个时间步的隐藏状态传送到当前时间步。RNN的隐藏状态的作用类似于神经网络的"记忆",保存着它处理过的从起始到当前位置的所有数据信息。

让我们聚焦到RNN的单个单元来看一下隐藏状态是如何计算的。首先,将输入数据和前一个隐藏状态聚合,形成一个向量。这个向量拥有当前输入和以前所有的输入信息。这个聚合向量通过一个tanh激活函数,其输出结果即为新的隐藏状态,或者说网络的“记忆”。

Tanh激活函数

tanh激活函数用于帮助调节流经网络的值。tanh网络将输出结果的取值范围限制到(-1, 1).

当向量流过神经网络时,由于各种数学运算,它会经历许多变换。我们假设变化过程为:一个值连续乘以3.通过下面的gif,你可以看到某些值如何爆炸并成为天文数字,从而导致其他值显得微不足道。

tanh激活函数能够将数据的输出范围压缩到-1到1之间,从而达到调整神经网络输出结果的目的。你可以通过下图看到相同的输入数据经过tanh激活函数后的数据变化过程。

这就是RNN的计算过程。RNN的内部计算很少,在恰当的情境下工作效果非常好(如处理短文本序列)。RNN使用的计算资源比它的变体LSTM和GRU都少。

LSTM

LSTM和RNN具有类似的数据控制流,它在前向传播时处理流经单元的数据。两者的不同之处在于LSTM的内部数据操作不同。

这些操作可以保证LSTM对信息的保留和丢弃。下面我们逐步介绍LSTM单元的内部操作。

核心概念

LSTM的核心概念在于细胞状态以及各种门。细胞状态充当信息传输公路,它将相关信息沿着序列链进行传递,你可以将它看做是网络模型的“记忆”。理论上,细胞状态可以在整个序列处理过程中携带相关信息。因此,尽管是早期的信息也能被携带到之后的时间步的细胞中,进而能减缓短期记忆的问题。随着细胞状态的变化,信息通过“门”机制添加或删除到细胞状态中。“门”是一种神经网络,可以决定哪部分信息添加到细胞状态中。这些“门”可以通过学习知道在训练过程中哪些信息需要保留哪些信息需要忘记。

Sigmoid

“门”结构中包含sigmoid激活函数。Sigmoid激活函数和tanh激活函数类似:tanh激活函数将数据的输出范围限制到(-1, 1), sigmoid则将范围限制到(0,1)。这有助于更新和忘记信息,因为任何数字乘以0得0,进而实现信息的“忘记”;任何数字乘以1得原数字,进而实现信息的“保留”。神经网络可以学习指导哪部分数据不重要可以忘记,哪些数据重要需要保留

下面我们看看LSTM中各种门结构。LSTM包括三种用于控制信息流动的门结构,分别是:忘记门、输入门和输出门。

忘记门

忘记门用于决定信息的保留或丢失。前一个神经元的隐藏状态和当前输入传递到sigmoid函数中。输出结果在0至1之间。越接近0表示信息需要被丢弃(忘记),越接近1表示信息需要保留。

输入门

输入门用于更新细胞状态。首先,我们将前一个神经元的隐藏状态和当前输入传送带sigmoid函数中。sigmoid将输出调整到0~1之间,0表示信息不重要,1表示信息重要。此外,将隐藏状态和当前输入传送到tanh函数中得到一个候选状态。然后,将候选状态和sigmoid计算结果进行相乘。sigmoid计算结果用于决定tanh的输出结果哪部分是重要的需要保存。

细胞状态

至此,我们有了充足的信息可以用来更新细胞状态。首先,细胞状态和忘记向量逐元素相乘,如果和一个接近0的值进行相乘,则有可能丢弃细胞状态中元素的值;然后将这个值与输入门的输出结果进行逐元素相加,将神经网络发现的相关信息添加到细胞状态中。这样,我们就完成了细胞状态的更新。

输出门

输出门可以用于确定下一个隐藏状态的值。隐藏状态包含先前的输入信息,同时也可以用于做预测。首先,我们将前一个神经元的隐藏状态和当前输入传送到sigmoid函数中;然后我们将更新后的细胞状态送到tanh激活函数中;最后将tanh函数的输出与sigmoid函数的输出进行相乘,进而确定隐藏状态携带的信息,这个计算结果就是新的隐藏状态值。最后,将新的细胞状态和隐藏状态传送到下一个时间步的神经元中。

让我们来回顾一下,忘记门决定先前时间步的信息哪些信息的相关的需要保留。输入门决定当前时间步开始需要添加的相关信息。输出门决定下一个隐藏状态应该是什么。

运算伪代码

  1. 将前一个的隐藏状态和当前输入进行拼接得到一个新的输入,我们称之为combine
  2. 将combine传送到忘记门中,这一步用于移除不相关的信息
  3. 将combine传送到候选层中创建一个候选状态。候选状态保存着可能添加到细胞状态的信息
  4. 将combine传送到输入门中,这一步用于确定候选状态中哪些信息需要添加到新的候选状态中
  5. 使用忘记门、候选状态和输入门的计算结果,结合先前的细胞状态和候选状态计算新的细胞状态
  6. 计算当前细胞的输出
  7. 将输出门和输出相乘得到新的隐藏状态

LSTM网络的控制流就是几个张量计算以及一个for循环。你可以使用隐藏状态做预测。通过这些机制,LSTM在序列处理过程中可以决定哪部分信息需要忘记,哪些数据需要遗忘。

GRU

了解了LSTM的工作原理,我们来简单介绍一个GRU。GRU是RNN的一个新变体,工作原理和LSTM很相似。GRU没有细胞状态,只有一个隐藏状态用于传送信息。它只有两个门结构:重置门和更新门。

更新门

更新门和LSTM中的遗忘门和输入门功能类似。它可以决定哪部分信息需要遗忘哪些信息需要被添加。

重置门

重置门用于决定先前的信息哪些部分需要遗忘。

GRU内部的张量计算更少,因此GRU的训练速度比LSTM更快。但是很难确定两者之间孰优孰劣。研究者和算法工程师通常会都尝试一下,然后决定到底是用哪一个。

总结

RNN 用于处理序列数据来进行预测,但容易受到短期记忆的制约。LSTM 和 GRU 采用门结构来克服短期记忆的影响。门结构是一种神经网络,可以调节流经序列链的信息流。LSTM和GRU可以用于语音识别,语音合成,自然语言理解等任务中。


关注公众号,一起交流成长~

lstm原理_通俗易懂的方式介绍LSTMGRU(动图)相关推荐

  1. 24小时轮播怎么实现的_四种方式实现轮播图

    不论是app,还是网站,基本上都会出现轮播图,今天和大家分享几种不同工具实现轮播图的几种方式. 轮播图的基本样式和功能就不需要解释了,相信能根据题目选择看文章的话都知道啥是轮播图,如果哪位读者老爷真的 ...

  2. git如何选择性合并_小姐姐用 10 张动图,教会你 Git 命令使用

    优质文章,第一时间送达! 来源:机器之心 git merge.git rebase.git reset.git revert.git fetch.git pull.git reflog--你知道这些 ...

  3. 使用pil读取gif图有些位置为黑色_使用 Pillow 快速创建 GIF 动图

    后台回复[入门资料] 送你十本Python电子书 之前有篇推文分享了如何在 Matplotlib 中生成 GIF 可视化图表,有一定的限制.本文将介绍如何用 Pillow 创建 GIF,可以将任意多张 ...

  4. 计算机数据传输通信电路工作原理,数据通信的结构原理_数据通信传输方式

    一.前言 数字通信(digital telecommunications)是用数字信号作为载体来传输消息,或用数字信号对载波进行数字调制后再传输的通信方式.它可传输电报.数字数据等数字信号,也可传输经 ...

  5. 商城系统功能需求分析_免费搭建方式介绍_OctShop

    现今"互联网+电商"的快速发展与膨胀的年代里,智能设备与手机,APP.微信公众号.小程序.社交平台等数据流量暴增,互联网数据流量市场的蛋糕越来越大,每个企业或商家都想争得一份数据流 ...

  6. 类结构表示方式介绍:类图(Class Diagram)

    类图(Class Diagram): 类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性.操作.关系的对象集合的总称. 类一般由三部分组成: 类名(Class):每个类都必须 ...

  7. 事态升级是什么意思_第602期搞笑gif动图:不好意思,腿太长了,来个歪打正着...

    1.被迫体验了滑雪的感觉. 2.不好意思,腿太长了,来个歪打正着! 3.不能平衡的平衡车买了有什么用! 4.差点就能靠翻车拿第二了! 5.车跑得太快了我也没想到! 6.导演麻烦把最后剪了吧! 7.翻船 ...

  8. Java元宵趣图_模仿百度首页“元宵节汤圆”动图(js的定时任务:setInterval)

    request.setAttribute("ctxpath", ctxPath);//项目根路径 %> --%> 首页 setInterval("tangyu ...

  9. c语言pwm调制方式,pwm调制原理同步调制_几种pwm调制方式介绍 - 全文

    PWM简介 脉冲宽度调制是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量.通信到功率控制与变换的许多领域中. 脉冲宽度调制是一种模拟控制方式,其根据相应载荷的变化来调 ...

最新文章

  1. Knowledge Point 20180305 数据在计算机中的表示
  2. [Js-Spring]Spring与IoC(控制反转,Inversion of Control)
  3. 自动装箱与自动拆箱的一些问题
  4. 为什么开了数据不能上网_Doinb和LCK选手双排为什么不能开语音?Doinb深夜道出实情...
  5. pc端jquery左右按钮控制带缩略图的图片切换代码_Web开发实用的图片预览插件,简单零依赖——PhotoSwipe...
  6. visual c语言编译运行结果,Visual Studio 2015编译运行C语言文件问题小结
  7. zabbix无效监控项_使用zabbix模板监控tomcat-解决模板部分监控项不生效问题
  8. 80年代的海外经典动画片引进25周年纪念【转】
  9. ubuntu前置耳机孔没声音的解决办法
  10. 笔记本电脑华硕N56VZ的几种螺丝规格
  11. 爱自己,实现财务自由
  12. Android自定义WebView实现Youtube网络视频播放控件
  13. # SIGPROC --- 脉冲星信号处理程序-详解
  14. iframe例子 (
  15. 微型计算机音节,二年级微机下册教案
  16. plsql检测不到oracle,64位ORACLE客户端上plsql无法识别ORACLE_HOME解决方案
  17. J - Trust Nobody
  18. android 语言切换过程分析
  19. 【Matlab编程】新手入门第三天
  20. 用PS制作旋转按钮图标,UI设计教程

热门文章

  1. html流动布局,自适应css布局——流动布局新时代
  2. 综合实例_管线综合支吊架施工实例赏析,工艺流程全面
  3. 计算机组成原理 位宽,数据总线宽度一般为存储单元位宽的整数倍 这怎么理解哦...
  4. C语言 函数的封装示例(允许存在同名但形参不同函数)
  5. 【今日头条】头条号图文发布页面的“扩展链接”是干嘛用的?
  6. numpy矩阵计算GPU加速库:cupy
  7. pytorch torch.item()(返回此张量的值作为标准Python数字。 这仅适用于具有一个元素的张量。)
  8. 程序的格式框架语法元素的名称(Python)
  9. PyQt4编程之自定义插槽
  10. ua获取手机型号_无牌山寨手机的数据提取解决方案