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. CF990B Micro-World 贪心 第十六

    Micro-World time limit per test 2 seconds memory limit per test 256 megabytes input standard input o ...

  2. html/css中相对定位relative和绝对定位absolute的用法

    一.相对定位(position:relative) 1.相对定位:将盒子的position属性设置为relative:可通过left.top.right.bottom设置偏移量. 相对定位基础用法示例 ...

  3. java1.8新特性(一)接口的默认方法

    一 简介 我们通常所说的接口的作用是用于定义一套标准.约束.规范等,接口中的方法只声明方法的签名,不提供相应的方法体,方法体由对应的实现类去实现. 在JDK1.8中打破了这样的认识,接口中的方法可以有 ...

  4. Disruptor中shutdown方法失效,及产生的不确定性源码分析

    版权声明:原创作品,谢绝转载!否则将追究法律责任. Disruptor框架是一个优秀的并发框架,利用RingBuffer中的预分配内存实现内存的可重复利用,降低了GC的频率. 具体关于Disrupto ...

  5. 【Offer】[59-2] 【队列的最大值】

    题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 请定义一个队列并实现函数max得到队列里的最大值,要求函数max.push_back和 pop_front 的时间复杂度都是0(1). ...

  6. python科学计算与可视化视频教程

    目录: 下载链接:https://www.yinxiangit.com/616.html 第一单元TVTK入门-1.mp4第一单元TVTK入门-2.mp4第一单元TVTK入门-3.mp4 第一单元TV ...

  7. PythonI/O进阶学习笔记_4.自定义序列类(序列基类继承关系/可切片对象/推导式)

    前言: 本文代码基于python3 Content: 1.python中的序列类分类 2. python序列中abc基类继承关系 3. 由list的extend等方法来看序列类的一些特定方法 4. l ...

  8. pageable多字段排序问题

    Sort sort = new Sort(Sort.Direction.DESC, "createdate") .and(new Sort(Sort.Direction.AES, ...

  9. C#中使用FilleStream实现视频文件的复制

    场景 C#中FileStream的对比以及使用方法: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100396022 关注公众号 ...

  10. python实现经典算法

    1,快速排序 题目形式:手写一下快速排序算法. 题目难度:中等. 出现概率:约50%.手写快排绝对是手撕代码面试题中的百兽之王,掌握了它就是送分题,没有掌握它就是送命题. 参考代码: def quic ...