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

这篇文章是Understanding LSTM Networks博客的翻译,仅用于学习和理解。因为个人水平有限,翻译上难免有错误和不当,仅为了自己加深理解和记忆。如果想深入学习,强烈建议阅读原文,原文博客地址:http://colah.github.io/posts/2015-08-Understanding-LSTMs/

递归神经网络

人类在思考的时候,不会每秒都从头开始。当你阅读这篇文章的时候,根据对前面单词的理解你理解每个单词的意思。你不会想着每看一个单词就忘掉前面的然后重新思考。你的想法有持续性。

传统的神经网络无法做到这一点,这似乎已经成为一个主要的缺点。举个例子,想象你想分类一个电影中每个关键点发生了什么事。目前还不清楚传统神经网络如何利用其对电影中的先前事件的推理来传递给后面的事件。

递归神经网络解决了这个问题。这种网络是自身带有循环的,让信息能够持续传递下去。

上面的图是一块神经网络,我们称为A,输入是XtXtX_t,输出是hthth_t。A循环允许信息能够从网络的一个步骤传递到下一个步骤。

这些循环让递归神经网络看起来变得非常神秘复杂。但是,如果你仔细考虑,它和正常的神经网络并没有太大的不同。一个递归神经网络可以看作是相同网络单元的多次拷贝,每个单元传递消息给后继者。如果我们将图展开,更容易理解。考虑下发生了什么:

这种链式相连的结构的揭示了递归神经网络与序列和列表密切相关的本质。它是处理序列数据的最合适的架构。

事实上确实如此。在过去的几年里,递归神经网络RNNs在各种问题的应用上取得了惊人的成功:语音识别,语言建模,翻译,图像描述等等,而且应用领域还在持续增加中。我贴出一个讨论RNNs应用的优秀博客,The Unreasonable Effectiveness of Recurrent Neural Networks.它真的太棒了。

这些应用成功的关键是使用“LSTMs”,一共特殊的递归神经网络。LSTMs可以适用于许多任务,并且都取得了比标准RNNs好的多的成绩。几乎所有基于递归神经网络架构取得的惊人成绩都可以使用LSTMs来获得。这边文章也将主要探讨LSTMs。

长期依赖问题

RNNs最吸引人的地方在于,它提出了一种思想,即可以将数据中的以前的信息与当前的任务联系起来。例如,一个视频的前一帧内容可能有助于理解视频当前帧的内容。如果RNNs可以做到这一点,那么RNNs将会非常有用。但是它可以做到吗?这要看情况而定。

有些情况下,我们仅需要看看最近的信息来执行当前的任务。举例来说,我们构建一个语言模型,使用前面的单词来预测下一个单词是什么。如果我们试着预测句子“the clouds are in the skyskysky”的最后一个单词,我们不需要知道更多的内容—-很明显下一个单词应该是sky。在这种情况下,相关信息与需要处理的地方距离很小,RNNs可以学习使用过去的信息。

但是也有一些情况,我们需要知道更多的内容才能够进行预测。考虑我们要预测一段话”I grew up in France… I speak fluent FrenchFrenchFrench.”的最后一个单词。最近的信息表明下一个单词应该是一种语言的名称,但是假如我们想确认是哪种语言,我们需要从更远的前面获取France的内容。此时,相关信息与需要处理的地方之间的距离完全可能变得非常远。

不幸的是,随着距离增大,RNNs变得没有能力去学习连接信息。

理论上来说,RNNs绝对能够解决“长短依赖问题”.。人们可以通过仔细调整参数来解决这种形式的”toy problems”。不幸的是,从实际操作来看,RNNs似乎没有能力去学习解决这种问题的能力。这个问题被 Hochreiter (1991) German] 和 Bengio, et al. (1994)在论文中详细讨论过,感兴趣的可以阅读原始论文,他们从根本上解释了造成这种情况的可能原因。

值得庆幸的是,LSTMs不存在这个问题!

LSTM神经网络

长短期记忆神经网络—-通常叫做“LSTMs”—-是一种特殊的RNN,能够学习长期依赖问题。它由 Hochreiter & Schmidhuber (1997)于1997年提出,并在接下来的时间里被更多的人改进和推广。它在各种各样的问题中都工作的非常好,所以现在被广泛使用。

LSTMs的提出,正是为了明确解决长期依赖问题。对于LSTMs来说,长期记住一些信息是一种天生行为,不需要刻意去学习。

对于所有的递归神经网络来说,它们都有着标准的形式:一条重复的神经网络模块链。在标准RNNs中,这种重复的模块有着非常简单的结构,比如一个单一的tanh层。

LSTMs从整体上看也有类似的链式结构,但是有不同的重复模块。不像RNNs的一个单一的神经网络层,LSTMs有四种,以某种特殊的方式进行交互。

暂时不用担心细节上的问题。稍后我们将逐步解释LSTM的结构。现在,让我们先熟悉一下我们要使用的符号:

在上图种,每条线表示一个向量,这个向量从输出节点指向其他输入节点,如上图的3、4、5。粉色圆圈代表点乘操作(pointwise operations),比如向量加法,同时黄色方框代表学习到的神经网络层。箭头合并(上图第四个)表示向量的连接操作,而箭头分叉(上图第五个)代表它的信息被复制成两份,这两份流向不同的地方。

LSTMs背后的核心思想

LSTMs的关键在于单元状态(cell state),即前面给出的图中上部的水平线信息流动过程中的状态。单元状态就像一条传送带,它贯穿整个神经网络链,并且仅进行一些次要的线性操作,信息很容易以不变的方式流过整个链路。

LSTM当然有能力增加或删除单元状态中的信息,这由叫做“门”(gates)的结构控制。

“门结构”是决定信息是否通过、通过多少的一种方式。它们由sigmoid神经网络层和向量乘法运算组成。

sigmoid层输出0-1之间的数,代表了每个组件通过信息的多少。0代表“全部不通过”,1代表“全部通过”。

一个LSTM有三种门,来保护和控制单元状态。

逐步解释LSTM

我们的LSTM的第一步是决定从单元状态中扔掉什么信息。这个决定可以通过一个由sigmoid层组成的叫做“遗忘门”的来实现。它输入ht−1ht−1h_{t-1}和xtxtx_t,输出0-1之间的数到单元状态Ct−1Ct−1C_{t-1}。1代表完全保留,0代表全部丢弃。

让我们回到前面举的那个试图基于前面单词预测最后一个单词的语言模型的例子。在这种问题中,单元状态包含了当前主语的类别,所以选择出正确的代词。当我们看到一个新的主语,我们便想忘记旧的主语的类别。

下一步是决定在单元状态中存储什么信息。这包括两个部分。第一部分,一个叫”输入层“的sigmoid层决定我们会更新哪部分的值。第二部分,一个tanh层创建新的候选值向量,记为C˜tC~t\widetilde{C}_t,这个向量可能会被加到单元状态上。接下来,我们合并这两部分然后更新单元状态。

在我们的语言模型的例子中,我们想增加一个新主语类别到单元状态,来取代我们将要忘记的旧的。

现在是时候将旧的单元状态C˜t−1C~t−1\widetilde{C}_{t-1} 更新为C˜tC~t\widetilde{C}_t。前面的几步已经决定了该做什么,我们只要做就好了。

我们用ftftf_t乘以旧的单元状态值(忘记我们早先决定要忘记的东西),然后我们加上it∗C˜tit∗C~ti_t * \widetilde{C}_{t}。结果是一个新的候选值,可以根据我们更新每个单元状态的值的比例进行缩放。

在语言模型的例子中,我们丢掉了关于旧主语类别的信息并添加了新的信息,与我们的先前步骤一样。

最后,我们需要决定我们将要输出什么。输出结果基于我们的单元状态,但会进行一些过滤处理。首先,运行一个sigmoid层决定单元状态的哪部分会被输出。然后,将单元状态送进tanh(将值缩放到-1到1之间)并且将其乘以sigmoid门的输出,所以我们只输出了我们原本输出的一部分。

对于语言模型的例子,既然它看到一个代词,它可能想输出关于一个动词的信息,这种情况下会发生什么呢?也许输出这代词是单数还是复数,如果是动词我也可以知道动词词行的变化。

LSTM的变体

到目前为止,我所讲的是标准的LSTM。但不是所有的LSTM都像前面说的那样。事实上,几乎每一篇设计LSTMs的论文都有自己略有不同的版本。这种差异不大,但是有一些还是值得说道的。

一种比较流行的LSTM变体,由 Gers & Schmidhuber (2000)提出,增加了”peephole connections“。这是说,让所有的门控层与单元状态连接,即门控层也接受单元状态的输入。

上图就是对于所有的门控层增加了”peepholes“。许多论文会增加”peepholes“,但有些也不会。

其他的变体是使用耦合的”遗忘门“和”输入门“。不是分开决定遗忘什么信息和增加什么新信息,而是将这些决策放在一起。我们只在需要放一些信息到它该放的地方的时候进行遗忘操作。我们只在需要遗忘一些旧信息的时候输入新值。

一种变化比较大的LSTM的变体是门控循环单元,即GRU,由Cho, et al. (2014)提出。它将”遗忘门“和”输入门“合并成一个单一的”更新门“。它也将单元状态和隐藏状态合并,并做了一些其他的修改。最终的模型比LSTM模型更简单,并且逐渐变得更加流行。

上面介绍的这些仅仅是最流行的几个LSTM变体。还有许多其他的模型,比如深度门控递归神经网络(Depth Gated RNNs),它由 Yao, et al. (2015)提出。还有一些其他完全不同的方法来解决长期依赖问题,比如 Clockwork RNNs ,由Koutnik, et al. (2014)提出。

结论

早些时候,我提到了人们使用RNN实现的显著成果。实质上他们是使用LSTM取得这些成果的。它在大部分任务上都能工作的更好!

写下一组方程,让LSTM看起来很吓人。希望在这篇文章中逐步解释LSTM能让它更加容易被理解。

LSTM是我们可以使用RNNs去完成某些任务的重要一步。我们很自然的想知道:是否还会有其他比较大的突破?在研究领域有一个常识,那就是是的!这就是注意力机制(attention)!它的核心思想是让RNN的每一步都从更大的信息集合中挑选信息。例如,如果你想使用RNN来创建一个图片的描述,它可能会选择图像的一部分来查看输出的每个单词。实际上, Xu, et al.(2015) 已经做过此类工作—-如果你想深入了解注意力机制,这将是一个有趣的起点!使用注意力机制已经有大量非常令人兴奋的结果,而且似乎还有很多东西可以探寻。

注意力机制的研究不是RNN研究中唯一令人兴奋的线索。例如,由Kalchbrenner, et al. (2015)提出的grid LSTMs看起来非常有前景。在生成模型中使用RNNs—-例如Gregor, et al. (2015), Chung, et al. (2015), 或者Bayer & Osendorfer (2015)也很有趣。过去的几年对递归神经网络来说是一个蓬勃发展其,未来的发展也会更加有前景!

此人在Youtube发布了很多视频,连接如下:https://www.youtube.com/user/BrandonRohrer

再次贴出原博客链接:http://colah.github.io/posts/2015-08-Understanding-LSTMs/,建议阅读原文。

理解LSTM神经网络 ---- 翻译 Understanding LSTM Networks相关推荐

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

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

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

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

  3. 理解深度神经网络——DNN(Deep Neural Networks)

    深度神经网络--DNN 是深度学习的基础. 要理解DNN最好先搞清楚它的模型.本篇博文主要对DNN的模型与前向传播算法做一个易于理解的总结. 1.从感知机到神经网络的理解. 感知机是这么一种模型:一个 ...

  4. 递归神经网络RNN网络 LSTM

    转自: https://blog.csdn.net/Jerr__y/article/details/61195257 @author: huangyongye 前言: 根据我本人学习 TensorFl ...

  5. 《LSTM神经网络和双色球预测例子》

    前言: 书接上回,通过把历年来的双色球蓝球数据爬取,可以看出,每期双色球蓝球之间并无任何关系,但仍存在问题: 决定蓝球数字可能并非取决于上一期蓝球的数据,可能取决于当期红球的数据,我们可能需要通盘考虑 ...

  6. 神经网络通俗理解和理解,卷积神经网络通俗理解

    通俗易懂:彻底明白什么是神经网络 想象一个黑箱子,你给它输入(样本),它给你输出(实际输出),但是输出和你想要的结果有偏差,于是你事先告诉它你想要的结果(期望输出),它做一些调整(调整内部权值和阈值) ...

  7. LSTM论文翻译-《Understanding LSTM Networks》

    1.     循环神经网络(RNNs) 人们并不是每一秒都重新开始新的思考的,就像你读这篇论文,你基于以前对词句的认知来理解每一个词,而不是丢掉以前所有的知识,重新开始构思新的想法.人们的思维是持续的 ...

  8. 图像分类经典卷积神经网络—ZFNet论文翻译(中英文对照版)—Visualizing and Understanding Convolutional Networks(可视化和理解卷积网络)

    图像分类经典论文翻译汇总:[翻译汇总] 翻译pdf文件下载:[下载地址] 此版为中英文对照版,纯中文版请稳步:[ZFNet纯中文版] Visualizing and Understanding Con ...

  9. 理解长短期记忆(LSTM) 神经网络

    声明:本文翻译自colah的博客,原文地址:Understanding LSTM NETWORK 递归神经网络 人类并不是从混沌状态开始他们的思考.就像你读这篇文章时,你是建立在你之前对文字的理解上. ...

最新文章

  1. 清空memcached中缓存的数据的方法
  2. mxnet可视化模型中间层feature map输出
  3. Spring AOP + AspectJ Annotation Example---reference
  4. Linux mysql设置密码
  5. LAMP环境下动态网站许愿墙的搭建
  6. python的内存回收机制_关于python的变量使用回收机制
  7. 立志10天学会C++基础应用—day02 代码清晰易懂 涉及数据结构算法的知识 写完了~我也麻了
  8. Lecture_2_4 线性回归中的系数,衡量了什么?
  9. sql语句分组mysql_以数据库字段分组显示数据的sql语句(详细介绍)
  10. k2p 官方固件纯净版
  11. lammps建模_lammps建模方法,即生成data文件
  12. RTP协议全解析(H264码流和PS流)
  13. 沙场秋点兵(完整版)
  14. 还原 对于 服务器“DESKTOP-BNNIISU\SQLEXPRESS”失败。  (Microsoft.SqlServer.SmoExtended)
  15. CC2530基础实验二 外部中断实验
  16. 转载:Docker入门只需看这一篇就够了
  17. matlab导入表格画图,matlab从excel表格导入数据画图-在matlab上如何导入excel表格然后画图...
  18. vvebo源码学习(一)
  19. 混合波束成形|进阶:深入浅出混合波束赋形
  20. java reuse_SO_REUSEADDR和SO_REUSEPORT的行为发生了变化?

热门文章

  1. chrome Web Speech API 简单的语音识别实现 win10 开启立体声混音
  2. VB实现BMP图像文件的读取、显示与存储
  3. MATLAB 时间变量 和 常用时间处理函数 datetime datestr datevec datenum
  4. 四旋翼无人机学习第14节--PCB Editor简单绘制封装-自动生成封装
  5. J2ME结构与相关规范介绍(转)
  6. 5、frida进阶-Android逆向之旅---Hook神器家族的Frida工具使用详解
  7. J1939协议中CAN ID 与PGN互换--遇到了广播报文
  8. python中time模块中的倒计时_python中的计时器timeit的使用方法
  9. 免费分享SPSS 17.0 软件
  10. 软件开发过程中的QA与QC