colah的一篇讲解LSTM比较好的文章,翻译过来一起学习,原文地址:http://colah.github.io/posts/2015-08-Understanding-LSTMs/ ,Posted on August 27, 2015。

Recurrent Neural  Networks

人类思维具有连贯性。当你看这篇文章时,根据你对前面词语的理解,你可以明白当前词语的意义。即是由前面的内容可以帮助理解后续的内容,体现了思维的连续性。

传统的神经网络(RNN之前的网络)在解决任务时,不能做到像人类思维一样的具有连续性,这成为它的一个主要不足。比如你想对电影不同时刻发生的故事情节进行事件的分类,就无法利用传统的神经网络,根据电影中前面时刻发生的剧情去推理后续的情节。RNN可以解决此类与连续性有关的问题,它们具有循环结构的网络,可以使信息在其中持续保存。

RNN具有循环结构

上图中的神经网络结构A,接收输入X,输出ht 。A具有的循环结构使得信息可以从上一个时间步(timestep,t)传到下一时间步(t+1)。带有箭头的循环网络A看起来很复杂,把循环结构展开之后就会比较清晰,从下图的展开结构可以看出循环网络与普通网络的差别也没有那么大。循环神经网络RNN可以看成是同一个网络的复制了几份而已,然后再把这复制的几个网络按照先后顺序排列起来,使得前一个网络的输出刚好作为下一个网络的输入。

RNN的展开示意图

这种类似链式的性质表明RNN与序列数据和列表数据有自然地联系,这种结构是神经网络利用序列数据的天然结构。事实也是如此。过去几年里,RNN成功应用于各种问题中:语音识别,语言模型,(机器)翻译,给图像加说明文字等等。Andrej Karpathy的blog讨论了RNN的各种神奇的效果:The Unreasonable Effectiveness of Recurrent Neural Networks。RNN的成功运用得益于一种特殊的循环神经网络结构:LSTM。在循环神经网络的运用领域,几乎所有的令人激动的成果都是基于LSTM做出来的,它远比标准的RNN结构要好得多。本文接下来就是要讨论这些LSTM结构。

长期依赖的问题(The Problem of Long-Term Dependencies)

RNN中的一个引人注意的想法就是它们也许能够将当前的问题与以前的信息联系起来,比如利用电影中前面一些帧的内容也许能够帮助理解后面的电影内容。RNN能否解决这个信息长期依赖的问题,取决于具体的情况。

有时我们只需要查询最近的信息来解决当前的问题,比如一个语言模型基于前面的几个词来预测下一个单词,我们要预测一句话的最后一个词 " the clouds are in the sky ",仅凭sky之前的词,不需要其他更多的信息即可预测到 sky,这种情况下预测位置与相关信息的距离很近,RNN能够学会利用这种之前的信息。

但是还有另外的一些情况RNN无法处理。比如要预测一大段话中最后一个词" I grew up in France.... I speak fluent French. "。最近的信息暗示最后一个词可能是一种语言,但是如果要确定是 French 就得需要远处的France这个上下文的信息。这种情况,FranceFrench距离可能会比较的远,RNN就无法学会将这些信息关联起来。

理论上RNN是可以处理这种“长期依赖”问题的,人们可以手工的仔细选择RNN的参数来解决小问题,但是实际中RNN还是无法学到“长期依赖”的解决方法, Hochreiter (1991) [German] 和 Bengio, et al. (1994) 深入研究过RNN无法工作的一些主要原因。LSTM没有这样的问题。

LSTM

LSTM(Long Short Term Memory)网络是一种特殊的RNN网络,能够解决“长期依赖”(long-tern dependencies)的问题,由Hochreiter & Schmidhuber (1997)提出的,它在许多问题的表现效果都很好,至今也在广泛应用。

LSTM被明确的设计为可以解决“长期依赖”问题,所以能够记住长期的信息是它们的默认一种属性。

在标准RNN结构中,循环的网络模块中结构比较简单,比如仅有一层tanh层。

RNN中循环模块只有简单的一层网络

LSTM也有与RNN相似的循环结构,但是循环模块中不再是简单的网络,而是比较复杂的网络单元。LSTM的循环模块主要有4个单元,以比较复杂的方式进行连接。

LSTM的循环模块中包含4个网络层

先提前熟悉一下将要用到的标记,下面会一步一步的讲解LSTM。

LSTM的主要思想(The Core Idea Behind LSTMs)

每个LSTM的重复结构称之为一个细胞(cell),在LSTM中最关键的就是细胞的状态,下图中贯穿的那条横线所表示的就是细胞状态。

LSTM能够给细胞状态增加或者删除信息,是由一种叫做“门”的结构来控制的,门主要起到开关的作用,它可以选择性的让信息通过,门是由一个sigmoid层与一个点乘操作组成的。

门的组成结构

sigmoid层输出的是0-1之间的数字,表示着每个成分能够通过门的比例,对应位数字为0表示不通过,数字1表示全通过。比如一个信息表示为向量[1, 2, 3, 4],sigmoid层的输出为[0.3, 0.5, 0.2, 0.4],那么信息通过此门后执行点乘操作,结果为[1, 2, 3, 4] .* [0.3, 0.5, 0.2, 0.4] = [0.3, 1.0, 0.6, 1.6]。

LSTM共有3种门,通过这3种门控制与保护细胞状态。

逐步详解LSTM(Step-by-Step LSTM Walk Through)

第一步是LSTM决定哪些信息需要从细胞状态中丢弃,由“遗忘门”(sigmoid层)来决定丢弃哪些信息。遗忘门接收上一时刻的输出ht-1 与这一时刻的输入xt,然后输出遗忘矩阵f,决定上一时刻的细胞状态Ct-1 的信息通过情况。

遗忘门

第二步是决定从新的信息中存储哪些信息到细胞状态中去。首先输入门(也是sigmoid层)接收ht-1 xt,产生决定我们要更新哪些数字。接下来一个tanh层产生候选状态值 \tilde{C}_t 。再联合待更新的数值与候选状态值,对旧的状态Ct-1 进行更新。如下图,

接着是更新旧的状态,如下图,ft 是遗忘矩阵, Ct-1是上一时刻的状态(旧状态),it 是决定要更新哪些数字,~C是候选状态。

最后一步是决定输出哪些信息。首先利用输出门(sigmoid层)产生一个输出矩阵Ot,决定输出当前状态Ct的哪些部分。接着状态Ct通过tanh层之后与Ot相乘,成为输出的内容ht 。如下图。

LSTM的变种

目前讨论的都是普通的LSTM,并非所有的LSTM网络结构都是这样的。

Gers & Schmidhuber (2000) 提出了一个比较流行的LSTM模型,加入了“peephole connections”,也就是增加了细胞状态与3个控制门的直接连接。如下图,

另一个LSTM变种模型是利用耦合的遗忘门与输入门。遗忘门决定哪些状态需要遗忘,输入门决定哪些输入信息加入新的状态,将这个两个分离的过程联合起来,共同做决定。只在要输入新状态的部分对旧的状态进行丢弃,或者只在被遗忘的状态部分输入新的状态。见下图,

另一个更加动态的LST是由 Cho, et al. (2014) 提出的GRU(Gated Recurrent Unit),GRU将遗忘门与输入门整合成一个单独的更新门,还整合了细胞状态与隐藏状态等,结果是GRU比标准的LSTM模型更加的简单。

还有其他的一些变种如Yao, et al. (2015) 提出的Depth Gated RNNs。还有采用其他方法解决长期依赖问题的方案如 Koutnik, et al. (2014) 提出的 Clockwork RNNs。

Greff, et al. (2015) 对比了这些变种发现它们都是一样的,其中的差别并没有太多的影响。 Jozefowicz, et al. (2015) 测试了测试了成千上万的RNN结果,发现有些RNN在某些特定任务上表现比LSTM要好。

结论

LSTM在绝大多数任务上的表现确实比RNN要好。LSTM是一个很大的进步,但是另外一个大的进步是什么呢?研究人员的一个共识就是注意力机制(Attention),注意力机制就是让RNN在每一步的训练都从大的信息集合中挑选需要的信息,类似于注意力集中在某一部分的信息上面。使用注意力机制有很多令人兴奋的成果出来,还有更多的成果即将出现。

注意力机制不是RNN领域唯一的,还有Kalchbrenner, et al. (2015) 的Grid LSTMs,还有 Gregor, et al. (2015)Chung, et al. (2015), or Bayer & Osendorfer (2015) 等人在生成式模型方面利用RNN。

致谢

省略...

理解LSTM网络--Understanding LSTM Networks(翻译一篇colah's blog)的更多相关文章

  1. 【翻译】理解 LSTM 网络

    目录 理解 LSTM 网络 递归神经网络 长期依赖性问题 LSTM 网络 LSTM 的核心想法 逐步解析 LSTM 的流程 长短期记忆的变种 结论 鸣谢 本文翻译自 Christopher Olah ...

  2. 基于 Keras 用 LSTM 网络做时间序列预测

    目录 基于 Keras 用 LSTM 网络做时间序列预测 问题描述 长短记忆网络 LSTM 网络回归 LSTM 网络回归结合窗口法 基于时间步的 LSTM 网络回归 在批量训练之间保持 LSTM 的记 ...

  3. (译)理解 LSTM 网络 (Understanding LSTM Networks by colah)

    @翻译:huangyongye 原文链接: Understanding LSTM Networks 前言:其实之前就已经用过 LSTM 了,是在深度学习框架 keras 上直接用的,但是到现在对LST ...

  4. 递归神经网络之理解长短期记忆网络(LSTM NetWorks)(转载)

    递归神经网络 人类并不是每时每刻都从头开始思考.正如你阅读这篇文章的时候,你是在理解前面词语的基础上来理解每个词.你不会丢弃所有已知的信息而从头开始思考.你的思想具有持续性. 传统的神经网络不能做到这 ...

  5. 理解长短期记忆网络(LSTM NetWorks)

    转自:http://www.csdn.net/article/2015-11-25/2826323 原文链接:Understanding LSTM Networks(译者/刘翔宇 审校/赵屹华 责编/ ...

  6. [译] 理解 LSTM 网络

    原文链接:http://colah.github.io/posts/2015-08-Understanding-LSTMs/ 吴恩达版:http://www.ai-start.com/dl2017/h ...

  7. [译] 理解 LSTM(Long Short-Term Memory, LSTM) 网络

    本文译自 Christopher Olah 的博文 Recurrent Neural Networks 人类并不是每时每刻都从一片空白的大脑开始他们的思考.在你阅读这篇文章时候,你都是基于自己已经拥有 ...

  8. [深度学习]理解RNN, GRU, LSTM 网络

    Recurrent Neural Networks(RNN) 人类并不是每时每刻都从一片空白的大脑开始他们的思考.在你阅读这篇文章时候,你都是基于自己已经拥有的对先前所见词的理解来推断当前词的真实含义 ...

  9. [转] 理解 LSTM 网络

    [译] 理解 LSTM 网络 http://www.jianshu.com/p/9dc9f41f0b29 Recurrent Neural Networks 人类并不是每时每刻都从一片空白的大脑开始他 ...

随机推荐

  1. lightoj 1226 - One Unit Machine(dp+大组合数去摸)

    题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1226 题解:由于这些任务完成是有先后的所以最后一个完成的肯定是最后一个任务的子 ...

  2. JavaScript中的Cookie 和 Json的使用

    JavaScript中的Cookie 和 Json的使用 JSON JSON(JavaScript Object Notation)是一种轻量级的数据交换格式.采用的是完全独立于编程语言的文本格式来存 ...

  3. Apache JMeter (一)环境的配置和操作

    JMeter是Apache组织的开放源代码项目,是一款优秀的开源测试工具,可以做功能测试和性能测试.是每个资深的测试工程师必须掌握的测试工具,熟悉JMeter可以大大提高工作效率. 1.下载Jmete ...

  4. 实验吧CTF练习题---WEB---猫抓老鼠解析

    实验吧web之猫抓老鼠     地址:http://www.shiyanbar.com/ctf/20 flag值:KEY: #WWWnsf0cus_NET#     解题步骤: 1.观察题意,说是猫抓 ...

  5. 连接池你用对了吗?一次Unexpected end of stream异常的排查

    能收获什么? 更加了解TCP协议 Redis与客户端关闭连接的机制 基于Apache Common连接池的参数调优 Linux网络抓包 情况简介 近期迁移了部分应用到K8s中,业务开发人员反馈说,会发 ...

  6. HTML连载37-边框属性(下)、边框练习

    一.边框属性 1.连写(分别设置四条边的边框) border-width:上 右 下 左: border-style:上 右 下 左: border-color:上 右 下 左: 注意点: (1)这三 ...

  7. Spring Boot 自定义 Banner 教程

    我们在启动 SpringBoot 时,控制台会打印 SpringBoot Logo 以及版本信息.有的时候我们需要自己弄个有个性的文本图片.Spring Boot 为我们提供了自定义接口. . ___ ...

  8. Genymotion模拟器的安装及脚本制作

    在上一篇博文中,讲到这一篇会介绍Genymotion的安装方式.大家都知道,Genymotion是一个模拟器,获取会质疑了,直接连接真机就好了,为何还要配置模拟器?我也是用真机实践后,才选择安装的模拟 ...

  9. selenium WebDriver 截取网站的验证码

    在做爬虫项目的时候,有时候会遇到验证码的问题,由于某些网站的验证码是动态生成的,即使是同一个链接,在不同的时间访问可能产生不同的验证码, 一 刚开始的思路就是打开这个验证码的链接,然后通过java代码 ...

  10. 一起看期待已久的.NET Core 3.0新的单文件部署特性,记在昨日VS2019更新后

    VS2019又又又迎来一次新的更新,这次的重点在.NET Core, 妥妥的更新好,默默地反选2.2,一切都在意料之中. 这次我们来看VS2019的新特性单文件部署: https://www.talk ...