获取更多资讯,赶快关注上面的公众号吧!

文章目录

  • 1. 循环神经网络
  • 2. 长期依赖问题
  • 3. LSTM 网络
  • 4. LSTM的核心思想
  • 5. 逐步看LSTM的工作原理
  • 6. LSTM的变体
  • 7. 结论

最近阅读了Bello, Irwan等(2016)的论文《Neural Combinatorial Optimization with Reinforcement Learning》,这篇论文算是开启了基于RNN和强化学习(RL)求解组合优化问题的新篇章。作者的博士研究课题是使用RL求解车间生产调度问题(job shop scheduling),由于车间调度本质上就是一种组合优化问题,因此是不是可以借用这篇论文的思想并将其应用于一个新的领域呢?所以在此整理了RNN和LSTM相关知识,为后面的研究和实现打下理论基础!

1. 循环神经网络

  人类不是每一秒都能从头开始思考的。当你阅读这篇文章时,你会基于你对前面单词的理解来理解每个单词,而不会把所有东西都扔掉,重新开始思考。人们的思维是持续的。

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

  循环神经网络解决了这个问题。它们是具有循环的网络,可以让信息持续下去。

循环神经网络有循环

  上面的图中,神经网络AAA,其输入是xtx_txt​,输出一个值hth_tht​,环可以让信息从一步通向网络传递到下一步。

  这些循环使得循环神经网络看起来有点神秘,但是往深处想想,其实RNN和一般的NN并没有多大的不同。一个RNN可以被认为是同一个网络的多个副本,每个副本都传递一个信息给下一个副本。考虑一下展开后的循环是什么样的:

展开的循环神经网络

  这个链式性质表明RNN是和序列和列表密切相关的。它们是用于处理此类数据的神经网络的自然结构。

  将前一个节点的信息传递给下一个的做法是很有效的,最近几年,RNN在不同的领域上都取得了可喜的效果:语音识别、语言模型、机器翻译、图像字幕…。可以看看Andrej Karpathy讨论RNN令人惊喜的成果的博文《The Unresonable Effectiveness of Recurrent Neural Network》。

  取得这些成果的重点是,他们都用了一种特殊的RNN——LSTM,在很多应用上,它的效果都比标准的RNN好很多。这篇文章的重点也是讲LSTM的。

2. 长期依赖问题

  RNN的一个吸引人之处是它可以将先前的信息与当前的任务联系起来,就像视频前面的帧可以输入到当前环节来预测或者理解当前帧。如果RNN能真正做到这样,那人它的确非常有用了,但是它真的能吗?实际上,这要视情况而定。

  有时,我们只需要就近的一些信息就可以完成当前任务。例如,一个语言模型想要根据前面的词预测最后一个词,如要预测“the clouds are in the (sky),”的最后一个词,我们不需要更多的上下文语境就能知道最后一个词是sky。在这个例子中,相关信息和需要它的地方之间距离很近,RNN可以学会使用过去的信息。

X0、X1与h3距离较近

  但是,也有很多句子需要更多上下文信息,如“I grew up in France. … I speak fluent (French).”。从临近的语境中可以知道,最后一个词应该是一种语言,但是要知道是哪种语言,必须要前面的“France”,要再往前推。需要的信息和当前点可能隔很远。

  不幸的是,随着距离的增加,RNN并不能学会将这些信息联系起来。

X0、X1可能与需要预测的位置ht+1距离很远

  理论上,RNNs完全可以掌控“长期依赖”,我们可以人为地选择好的参数。但实践证明,RNN基本不可能学习很长的句子。Hochreiter(1991德国)和Begnio(1994)对此有很深的研究,并且找到了根本原因。

  而幸运的是,LSTM不会存在这个问题。

3. LSTM 网络

  LSTM是一种特殊的RNN,可以解决长期依赖问题。它是由Hochreiter和Schnidhuber(1997)最先提出的,后来很多人用它解决了很多问题,现在被广泛地应用。

  LSTM是专门设计出来解决长期依赖问题的。记住长周期有用信息是它的基本功能,而不用去努力学习得到。

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

仅有一个tanh层的RNN

  LSTM也是这种链式的结构,只是重复模块的内部结构不一样,它不是单独的NN层,而是4个相互影响的NN。

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

在上图中,每一行都将一个完整的向量从一个节点的输出传递到其他节点的输入。粉色的圆圈代表点态操作,比如向量加法,而黄色方框是学习到的神经网络层。线合并表示连接,线分叉表示复制的内容和复制到不同位置。

  其中各个符号的意义如下:

LSTM中各符号的意义

4. LSTM的核心思想

  LSTM的重点是单元状态(cell state),即下面这条从图中最上面穿过的水平线。

  cell state有点像传送带,它沿着整个链往下延伸,只有微弱的线性交互作用,很容易让信息保持不变地沿着其流动。

单元状态流动

  依靠称为门(gates)的结构的精细管理,LSTM确实有能力从单元状态删除或者向单元状态增加信息。

  门是一种选择性地让信息通过的方式。门由sigmoid神经网络层和一个点乘运算组成。

门的组成:sigmoid层和点乘

  Sigmoid层的输出介于0和1之间,描述了可以允许每个组件有多少可以通过。输出为0表示信息完全不通过,输出为1表示信息全部通过。

一个LSTM有3个这样的门来保护和控制单元状态。

5. 逐步看LSTM的工作原理

  LSTM的第一步是决定从单元状态中丢弃哪些信息,这个决策是由包含sigmoid层的遗忘门(forget gate layer)制定的。遗忘门以ht−1h_{t-1}ht−1​和xtx_txt​,针对单元状态Ct−1C_{t-1}Ct−1​中的每个值都输出一个介于0和1的值,1表示完全保留,0表示完全丢掉。

  让我们回到基于前面的所有词预测下一个词的语言模型示例中,单元状态可能包含现在主语的性别,这样就可以使用正确的代词。而当看到一个新的主语时,我们就希望忘记旧主语的性别。

遗忘门

  下一步就是决定存储哪些新的信息到单元状态中。这由两部分构成,一是由sigmoid层构成的输入门(input gate layer),它用来决定要更新哪些值。另一个是由tanh层创建的新候选值向量C~t\tilde{C}_{t}C~t​,该向量会被添加到单元状态里。

  例如语言模型中,希望将新主语的性别添加到单元状态中,以替换我们忘记的旧的性别。

输入门/center>

  现在是时候将旧单元状态Ct−1C_{t-1}Ct−1​更新到新单元状态CtC_tCt​里了。前面已经决定了要做什么,这里只需要一次完成就好。

  将旧状态与ftftft,从而忘记先前决定要遗忘的信息,然后加上it∗C~ti_{t} * \tilde{C}_{t}it​∗C~t​,该值为根据更新每个状态值的程度缩放后的新的候选值。

  在语言模型的示例中,这是我们实际删除旧主语的性别信息并添加新信息的地方,正如在前面的步骤中所决定的那样。

单元状态更新

  最后决定要输出什么。这个输出基于单元状态,但会有一个滤波过程。首先,一个sigmoid层决定输出哪些单元状态,然后将单元状态通过tanh层(将值压缩在-1到1之间),再与sigmoid门的输出相乘,得到最后的输出。

  对于语言模型示例,由于只看到了一个主语,因此它可能希望输出与动词相关的信息。例如,它可以输出主语是单数还是复数,这样我们就可以知道如果一个动词接在后面,它应该变成什么形式。比如刚看到一个人称代词he或they(单元状态已经存储),而下一个词可能是一个动词,那么我们从人称代词(cell状态)就可以看出下一个动词的形式,比如(makes, make),he对应makes,they对应make。

输出门

6. LSTM的变体

  上面描述的是最常见的标准LSTM,但是不是所有LSTM都是这样子的。事实上,每篇致力于LSTMs的paper所用的版本都有微小的差别,这些差别真的很小,但是其中一些是值得一提的。

  其中一种流行的变体由Gers和Schmidhuber(2000)提出,加入了窥视孔连接(peephole connections)。这意味着,单元状态也输入到所有门中来判别哪些丢,哪些加。

所有门都输入单元状态

  上图在所有的门中都加入了单元状态,但有很多paper只部分加入。

  另一种变体是使用耦合的遗忘门和输入门,不去分开决定遗忘什么输入什么,而是一起做决定,只有在代入信息时才会忘记,也只有在忘记旧值时才向状态输入新值。

耦合的遗忘门和输入门

  还有一种稍微不同的变体是GRU(Gated Recurrent Unit),由cho(2014)提出。它将遗忘门和输入门合并为一个更新门(update gate),同时还合并了单元状态和隐层状态。该模型比LSTM简单,并且越来越流行。

GRU

  以上只是一小部分的LSTM变体,还有很多其他可用的,如Yao(2015)的Depth Gated RNNs,还有一些完全不同的消除长期依赖的,如koutaik(2014)提出的 Clockwork RNNs。

这些变体中哪一个是最好的呢?这些差异重要吗?Greff等人(2015)对流行的变体做了一个很好的比较,发现它们都差不多。Jozefowicz等人(2015)测试了超过一万种RNN架构,发现有些架构在某些任务上比LSTMs工作得更好。

7. 结论

  前面我提到了人们用RNNs取得的显著成果。实际上所有这些都是通过LSTMs实现的。在大多数任务中,它们确实工作得更好!

  将LSTMs写成一组方程,看起来相当吓人。希望在这篇文章中,通过一步一步地讲解,可以更容易地理解其原理。

  LSTMs是我们可以通过RNNs完成的一大步。人们自然会想:是否还有更大的进步?研究人员普遍认为:是的!还有下一步,那就是注意力机制!其思想是让RNN的每一步都从一些更大的信息集合中挑选信息。例如,如果使用RNN创建描述图像的标题,它可能会选择图像的一部分来查看输出的每个单词。事实上,Xu等人(2015)正是这么做的,如果你想探究注意力,这可能是一个有趣的起点!使用注意力已经有了许多令人兴奋的结果,而且似乎还有更多的结果即将出现……

  注意力并不是RNN研究中唯一令人兴奋的线索。例如,Kalchbrenner等(2015)的网格(Grid) LSTMs似乎非常有前途。在生成模型中使用RNNs,如Gregor, et al. (2015), Chung, et al.(2015),或Bayer & Osendorfer(2015)也很有趣。过去的几年对于循环神经网络来说是一个激动人心的时期,而接下来的几年更将是有过之而无不及!

Understanding LSTM Networks(理解LSTM网络-colah‘s blog)相关推荐

  1. 【译】深入理解LSTM网络

    递归神经网络 人类不会每时每刻都开始思考. 当你阅读这篇文章时,你会根据你对之前单词的理解来理解每个单词. 你不要扔掉所有东西,然后再从头开始思考. 你的想法有持久性. 传统的神经网络无法做到这一点, ...

  2. 读书笔记--《Understanding LSTM Networks》

    Understanding LSTM Networks Understanding LSTM Networks 一文是Colah的一篇博客,是描述LSTM十分详细的文章,对了解LSTM有很大的帮助,建 ...

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

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

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

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

  5. 理解LSTM 网络Understanding LSTM Networks

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

  6. 理解LSTM神经网络 ---- 翻译 Understanding LSTM Networks

    理解LSTM神经网络 -- 翻译 Understanding LSTM Networks 这篇文章是Understanding LSTM Networks博客的翻译,仅用于学习和理解.因为个人水平有限 ...

  7. LSTM:《Understanding LSTM Networks》的翻译并解读

    LSTM:<Understanding LSTM Networks>的翻译并解读 目录 Understanding LSTM Networks Recurrent Neural Netwo ...

  8. 理解LSTM网络(翻译)

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

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

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

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

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

最新文章

  1. Apache Spark 介绍的演讲ppt (slice),全英文
  2. 漫谈时序设计(3)走进时序约束的大门!
  3. python中表示换行的符号_对Python字符串中的换行符和制表符介绍
  4. java8中的Lamba表达式
  5. 优雅且高效的使用Chrome Developer Tools
  6. 通过Java Api与HBase交互(转)
  7. 【渝粤教育】广东开放大学 数据结构 形成性考核 (30)
  8. Mysql处理海量数据时的一些优化查询速度方法
  9. 201521123035《Java程序设计》第八周学习总结
  10. 学习ActiveMQ(一):安装与启动
  11. Linux 7 关闭、禁用防火墙服务
  12. java ab与ab的区别 a|b与a||b的区别 break、continue、return
  13. CentOS图形界面和命令行切换
  14. Redis 源码分析之故障转移
  15. Java自动化测试框架-09 - TestNG之依赖注入篇 (详细教程)
  16. 租房系统代码java_基于Java的租房管理系统的设计及实现.doc
  17. 安卓怎么把一个按钮设计成梯形_常闭触点输入信号处理的电路图及PLC梯形图
  18. 【HDU 5869】Different GCD Subarray Query【区间不同 gcd 个数】
  19. bios刷写工具_蓝天P750/P751编程器刷BIOS
  20. 程序猿崛起2——互联网时代下的新潮流和新活法

热门文章

  1. 18. 树的子结构(C++版本)
  2. linux批量创建ftp用户密码,批量在LINUX下建立很多FTP用户
  3. 三菱plc pwm指令_2020福建三菱PLCFX3GA60MT回收回收厂家回收气动元件回收
  4. mybatis-plus修改操作(自动填充)
  5. yum在linux安装mysql数据库_linux安装mysql(yum安装,比较简单)
  6. matlab基于模型的测试与验证,基于模型的测试和验证工具——Reactis
  7. 剑三哪些插件是必备的_日常学习、办公必备的浏览器插件丨附安装教程(三)...
  8. mybatis mysql upsert_SpringBoot2.3.4+Mybatis+Phoenix操作HBase2.0.6
  9. Java面试题300道
  10. CVPR 新规严禁审稿期间公开宣传论文,可发 arXiv,LeCun:疯了吧!