递归神经网络

人类不会每时每刻都开始思考。 当你阅读这篇文章时,你会根据你对之前单词的理解来理解每个单词。 你不要扔掉所有东西,然后再从头开始思考。 你的想法有持久性。

传统的神经网络无法做到这一点,这似乎是一个主要的缺点。 例如,假设您想要对电影中每个点发生的事件进行分类。 目前尚不清楚传统神经网络如何利用其对电影中先前事件的推理来告知后者。

循环神经网络解决了这个问题。 它们是带有循环的网络,允许信息持续存在。

递归神经网络具有循环。

在上图中,一块神经网络\(A \) ,查看一些输入\(x_t \)并输出一个值\(h_t \) 。 循环允许信息从网络的一个步骤传递到下一个步骤。

这些循环使得循环神经网络看起来有点神秘。 但是,如果你多想一点,事实证明它们与普通的神经网络并没有什么不同。 可以将循环神经网络视为同一网络的多个副本,每个副本都将消息传递给后继者。 考虑如果我们展开循环会发生什么:

展开的递归神经网络。

这种类似链的性质表明,递归神经网络与序列和列表密切相关。 它们是用于此类数据的神经网络的自然架构。

他们肯定会被使用! 在过去几年中,将RNN应用于各种问题取得了令人难以置信的成功:语音识别,语言建模,翻译,图像字幕......这个列表还在继续。 我将讨论使用RNNs可以实现的惊人壮举,以及Andrej Karpathy的优秀博客文章,回归神经网络的不合理有效性 。 但他们真的很棒。

这些成功的关键在于使用“LSTM”,这是一种非常特殊的递归神经网络,对于许多任务而言,它比标准版本好得多。 几乎所有基于递归神经网络的令人兴奋的结果都是用它们实现的。 这篇论文将探讨这些LSTM。

长期依赖问题

RNN的一个吸引力是他们可能能够将先前信息连接到当前任务,例如使用先前的视频帧可能通知对当前帧的理解。 如果RNN可以做到这一点,它们将非常有用。 但他们可以吗? 这取决于。

有时,我们只需要查看最近的信息来执行当前任务。 例如,考虑一种语言模型,试图根据之前的单词预测下一个单词。 如果我们试图预测“云在天空中”的最后一个词,我们不需要任何进一步的背景 - 很明显下一个词将是天空。 在这种情况下,如果相关信息与所需信息之间的差距很小,则RNN可以学习使用过去的信息。

但也有一些情况需要更多的背景。 考虑尝试预测文本中的最后一个词“我在法国长大......我说流利的法语 。”最近的信息表明,下一个词可能是一种语言的名称,但如果我们想缩小哪种语言,我们需要从更进一步的背景来看,法国的背景。 相关信息与需要变得非常大的点之间的差距是完全可能的。

不幸的是,随着差距的扩大,RNN无法学习连接信息。

理论上,RNN绝对能够处理这种“长期依赖性”。人类可以仔细挑选参数来解决这种形式的玩具问题。 遗憾的是,在实践中,RNN似乎无法学习它们。 Hochreiter(1991)[德国]和Bengio等人对该问题进行了深入探讨。 (1994) ,他找到了一些非常根本的原因,为什么它可能很难。

值得庆幸的是,LSTM没有这个问题!

LSTM Networks

长短期内存网络 - 通常只称为“LSTM” - 是一种特殊的RNN,能够学习长期依赖性。 它们由Hochreiter&Schmidhuber(1997)介绍 ,并在以下工作中被许多人提炼和推广。 1它们在各种各样的问题上运作得非常好,现在被广泛使用。

LSTM明确旨在避免长期依赖性问题。 长时间记住信息实际上是他们的默认行为,而不是他们难以学习的东西!

所有递归神经网络都具有神经网络重复模块链的形式。 在标准RNN中,该重复模块将具有非常简单的结构,例如单个tanh层。

标准RNN中的重复模块包含单个层。

LSTM也具有这种类似链的结构,但重复模块具有不同的结构。 有四个,而不是一个神经网络层,以一种非常特殊的方式进行交互。

LSTM中的重复模块包含四个交互层。

不要担心发生了什么的细节。 我们将逐步介绍LSTM图。 现在,让我们试着对我们将要使用的符号感到满意。

在上图中,每一行都携带一个整个向量,从一个节点的输出到其他节点的输入。 粉色圆圈表示逐点运算,如矢量加法,而黄色框表示神经网络层。 行合并表示连接,而行分叉表示其内容被复制,副本将转移到不同的位置。

LSTM背后的核心理念

LSTM的关键是单元状态,水平线贯穿图的顶部。

电池状态有点像传送带。 它直接沿着整个链运行,只有一些次要的线性交互。 信息很容易沿着它不变地流动。

LSTM确实能够移除或添加信息到细胞状态,由称为门的结构精心调节。

盖茨是一种可选择通过信息的方式。 它们由S形神经网络层和逐点乘法运算组成。

sigmoid层输出0到1之间的数字,描述每个组件应该通过多少。 值为零意味着“不让任何东西通过”,而值为1则意味着“让一切都通过!”

LSTM具有三个这样的门,用于保护和控制电池状态。

一步一步的LSTM走过

我们的LSTM的第一步是确定我们将从细胞状态中丢弃哪些信息。 这个决定是由一个叫做“忘记门层”的sigmoid层决定的。它看着\(h_ {t-1} \)和\(x_t \) ,并在\(0 \)和\(1之间输出一个数字\)对于单元格状态中的每个数字\(C_ {t-1} \) 。 \(1 \)表示“完全保留此”,而\(0 \)表示“完全摆脱这个”。

让我们回到我们的语言模型示例,试图根据以前的所有单词预测下一个单词。 在这样的问题中,细胞状态可能包括当前受试者的性别,因此可以使用正确的代词。 当我们看到一个新主题时,我们想要忘记旧主题的性别。

下一步是确定我们将在单元状态中存储哪些新信息。 这有两个部分。 首先,称为“输入门层”的sigmoid层决定我们将更新哪些值。 接下来,tanh层创建一个新候选值的向量, \(\ tilde {C} _t \) ,可以添加到状态。 在下一步中,我们将结合这两个来创建状态更新。

在我们的语言模型的例子中,我们想要将新主题的性别添加到单元格状态,以替换我们忘记的旧主题。

现在是时候将旧单元状态\(C_ {t-1} \)更新为新单元状态\(C_t \) 。 之前的步骤已经决定要做什么,我们只需要实际做到这一点。

我们将旧状态乘以\(f_t \) ,忘记我们之前决定忘记的事情。 然后我们添加\(i_t * \ tilde {C} _t \) 。 这是新的候选值,根据我们决定更新每个州的值来缩放。

在语言模型的情况下,我们实际上放弃了关于旧主题的性别的信息并添加新信息,正如我们在前面的步骤中所做的那样。

最后,我们需要决定我们要输出的内容。 此输出将基于我们的单元状态,但将是过滤版本。 首先,我们运行一个sigmoid层,它决定我们要输出的单元状态的哪些部分。 然后,我们将单元格状态通过\(\ tanh \) (将值推到\( - 1 \)和\(1 \)之间 )并将其乘以sigmoid门的输出,这样我们只输出我们决定的部分。

对于语言模型示例,由于它只是看到一个主题,它可能想要输出与动词相关的信息,以防接下来会发生什么。 例如,它可能输出主语是单数还是复数,以便我们知道动词应该与什么形式共轭,如果接下来的话。

长期记忆的变种

到目前为止我所描述的是一个非常正常的LSTM。 但并非所有LSTM都与上述相同。 事实上,似乎几乎所有涉及LSTM的论文都使用略有不同的版本。 差异很小,但值得一提的是其中一些。

由Gers&Schmidhuber(2000)引入的一种流行的LSTM变体是添加“窥视孔连接”。这意味着我们让栅极层看到单元状态。

上面的图表为所有门增加了窥视孔,但许多论文会给一些窥视孔而不是其他的。

另一种变化是使用耦合的遗忘和输入门。 我们不是单独决定忘记什么以及应该添加新信息,而是共同做出这些决定。 我们只会忘记当我们要在其位置输入内容时。 当我们忘记旧事物时,我们只向州输入新值。

LSTM稍微有点戏剧性的变化是由Cho等人引入的门控循环单元(GRU) 。 (2014年) 。 它将遗忘和输入门组合成一个“更新门”。它还合并了单元状态和隐藏状态,并进行了一些其他更改。 由此产生的模型比标准LSTM模型简单,并且越来越受欢迎。

这些只是最着名的LSTM变种中的一小部分。 还有很多其他的东西,比如Yao等人的 Depth Gated RNNs 。 (2015年) 。 还有一些完全不同的解决长期依赖关系的方法,如Koutnik等人的 Clockwork RNNs 。 (2014年) 。

哪种变体最好? 差异是否重要? 格雷夫等人。 (2015)对流行的变种做了很好的比较,发现它们都差不多。 Jozefowicz,et al。 (2015)测试了超过一万个RNN架构,找到了一些在某些任务上比LSTM更好的架构。

结论

早些时候,我提到了人们使用RNN取得的显着成果。 基本上所有这些都是使用LSTM实现的。 对于大多数任务来说,它们确实工作得更好!

写下来作为一组方程式,LSTM看起来非常令人生畏。 希望在这篇文章中逐步走过它们,使它们更加平易近人。

LSTM是我们通过RNN实现的重要一步。 很自然地想知道:还有另一个重要的步骤吗? 研究人员的共同观点是:“是的! 下一步是它的注意力!“我们的想法是让RNN的每一步都从一些更大的信息集中选择信息。 例如,如果您使用RNN创建描述图像的标题,则可能会选择图像的一部分来查看其输出的每个单词。 实际上, 徐等人。 (2015)做到这一点 - 如果你想探索注意力,它可能是一个有趣的起点! 使用注意力已经取得了许多非常令人兴奋的结果,而且似乎还有很多事情即将来临......

注意力不是RNN研究中唯一激动人心的线索。 例如, Kalchbrenner 等人的 Grid LSTMs (2015)似乎非常有希望。 在生成模型中使用RNN的工作 - 例如Gregor, et al。 (2015) , Chung, et al。 (2015年) ,或Bayer&Osendorfer(2015年) - 似乎也很有趣。 过去几年对于递归神经网络来说是一个激动人心的时刻,即将到来的神经网络承诺只会更加激动人心!

致谢

我很感谢很多人帮助我更好地理解LSTM,评论可视化,并对这篇文章提供反馈。

我非常感谢Google的同事提供的有用反馈,尤其是Oriol Vinyals , Greg Corrado , Jon Shlens , Luke Vilnis和Ilya Sutskever 。 我也很感谢许多其他朋友和同事花时间帮助我,包括Dario Amodei和Jacob Steinhardt 。 我特别感谢Kyunghyun Cho关于我的图表的非常周到的信件。

在这篇文章之前,我在神经网络教授的两个研讨会系列中练习解释LSTM。 感谢所有参与这些活动的人,感谢他们对我的耐心和反馈。


  1. 除了原作者之外,很多人都对现代LSTM做出了贡献。 一个非全面的名单是:Felix Gers,Fred Cummins,Santiago Fernandez,Justin Bayer,Daan Wierstra,Julian Togelius,Faustino Gomez,Matteo Gagliolo和Alex Graves 。 ↩


http://colah.github.io/posts/2015-08-Understanding-LSTMs/

【译】深入理解LSTM网络相关推荐

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

    前言:其实之前就已经用过 LSTM 了,是在深度学习框架 keras 上直接用的,但是到现在对LSTM详细的网络结构还是不了解,心里牵挂着难受呀!今天看了 tensorflow 文档上面推荐的这篇博文 ...

  2. 从Tensorflow代码中理解LSTM网络

    目录 RNN LSTM 参考文档与引子 缩略词  RNN (Recurrent neural network) 循环神经网络  LSTM (Long short-term memory) 长短期记忆人 ...

  3. 从任务到可视化,如何理解LSTM网络中的神经元 By 机器之心2017年7月03日 14:29 对人类而言,转写是一件相对容易并且可解释的任务,所以它比较适合用来解释神经网络做了哪些事情,以及神经网

    从任务到可视化,如何理解LSTM网络中的神经元 By 机器之心2017年7月03日 14:29 对人类而言,转写是一件相对容易并且可解释的任务,所以它比较适合用来解释神经网络做了哪些事情,以及神经网络 ...

  4. TensorFlow2.0(十一)--理解LSTM网络

    理解LSTM网络 前言 1. 循环神经网络 2. 长期依赖问题 3. LSTM网络 4. LSTM背后的核心思想 5. 单步解析LSTM网络结构 5.1 遗忘门结构 5.2 输入门结构 5.3 输出门 ...

  5. 理解LSTM网络+Python实现

    文章目录 前言 一.传统RNN 二.RNN带来的缺陷 1.梯度爆炸和梯度弥散 2.memory记忆不足 三.LSTM理解 1.LSTM原理 2.LSTM公式 前向传播 反向传播 四.LSTM实践(Py ...

  6. 理解LSTM网络(翻译)

    Translated on December 19, 2015 本文为博客<Understanding LSTM Networks>的翻译文章 原文链接: http://colah.git ...

  7. 理解LSTM 网络Understanding LSTM Networks

    Recurrent Neural Networks Humans don't start their thinking from scratch every second. As you read t ...

  8. TensorFlow2.0(十二)--实现简单RNN与LSTM网络

    实现简单RNN与LSTM网络 前言 1. 导入相应的库 2. 加载与构建数据集 2.1 加载数据集 2.2 构建词表 2.3 处理数据 3. 构建简单的RNN模型 3.1 单向RNN模型 3.2 双向 ...

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

    如何从RNN起步,一步一步通俗理解LSTM 前言 提到LSTM,之前学过的同学可能最先想到的是ChristopherOlah的博文<理解LSTM网络>,这篇文章确实厉害,网上流传也相当之广 ...

最新文章

  1. 上拉加载下拉刷新了解下
  2. Tensorflow: 保存和复原模型(save and restore)
  3. python形参实参
  4. 实时操作系统主流调度方法RMS
  5. c语言程序设计现代方法(2th)第12章答案(自己胡乱编写的答案,持续更新)
  6. element中el-upload和vue-cropper结合实现上传头像裁剪大小
  7. linux shell 求绝对值
  8. [导入].Net 中处理Word(2007)文档的一种方法
  9. django 1.8 官方文档翻译: 2-6-4 数据库访问优化
  10. 【Elasticsearch】Elasticsearch之别名
  11. 机房收费系统个人重构版:软工文档中那些图
  12. 用UCenter Home启动一个垂直的SNS社区
  13. 前端进阶(1)Web前端性能优化
  14. 第三届上海市大学生网络安全大赛 流量分析
  15. 关于Windows api 多屏幕显示器识别ID问题。未解决
  16. php微信 api,PHP微信API接口类
  17. UVM—virtual sequencer and virtual sequence详解
  18. 用pcDuino来做电子相框
  19. 美国〈国家地理〉镜头中的极致之地
  20. HTML中overflow的作用

热门文章

  1. BZOJ 1412 [ZJOI2009]狼和羊的故事(最小割)
  2. xcode7,AFN不能使用的问题
  3. VMware linux虚拟机在线识别新添加磁盘
  4. PHP 设计模式 笔记与总结(8)策略模式
  5. IIS没有.net版本选择标签问题
  6. 图像中值处理MATLAB实现
  7. PyTorch torchvision.models小结
  8. CPU所含有的寄存器
  9. Linux 动态库的显示调用
  10. otsu阈值分割算法原理_大津二值化算法OTSU的理解