Abstract

  • 声明:本文只为我闲暇时候学习所做笔记,仅供我无聊时复习所用,若文中有错,误导了读者,敬请谅解!!!

    循环神经网络(Recurrent Neural Networks)

    人类不是从零开始思考的。当你读这篇文章时,你根据你对以前单词的理解来理解每个单词。你不会扔掉所有东西,重新开始思考。你的思想是坚持的。

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

    循环神经网络解决了这个问题。它们是具有循环的网络,允许信息持久化。
    Long Short Term Memory networks (LSTM) - 图1
    循环神经网络具有环路
    **
    在上图中,神经网络的一块A,查看一些输入_Ⅹ_t 并输出值 ht. 循环允许信息从网络的一个步骤传递到下一个步骤。

这些循环使循环神经网络看起来有点神秘。但是,如果您想得更多一些,结果证明它们与普通神经网络没有完全不同。可认为循环神经网络是同一网络的多个副本,每个副本将消息传递给后续网络。考虑如果我们展开循环会发生什么情况:
Long Short Term Memory networks (LSTM) - 图2
展开的循环神经网络

这种链状性质揭示了循环神经网络与序列和列表密切相关。它们是用于此类数据的神经网络的自然体系结构。

他们肯定被使用!在过去几年中,将RNN应用于各种问题取得了令人难以置信的成功:语音识别、语言建模、翻译、图像字幕…列表继续。我将离开讨论惊人的壮举,人们可以实现与RNN安德烈·卡帕西的优秀博客文章,经常性神经网络的不合理有效性(The Unreasonable Effectiveness of Recurrent Neural Networks)。但是他们真的非常惊人。

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

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

**
RNN 的吸引力之一是,它们可能能够将以前的信息连接到当前任务,例如使用以前的视频帧可能会告知对当前帧的理解。如果RNN能够做到这一点,它们将会非常有用。但是他们能吗?视情况而定。

有时,我们只需要查看最近的信息来执行当前任务。例如,考虑一个语言模型,尝试基于前面的单词预测下一个单词。如果我们试图预测”“the clouds are in the sky”我们不需要任何进一步的上下文——很明显,下一个词将是“sky”。在这种情况下,如果相关信息与所需位置之间的差距很小,RNN 可以学习使用过去的信息。

Long Short Term Memory networks (LSTM) - 图3

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

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

Long Short Term Memory networks (LSTM) - 图4

从理论上讲,RN绝对能够处理这种”长期依赖关系”。人类可以仔细挑选参数,以解决这种形式的玩具问题。可悲的是,在实践中,RNN似乎无法学习它们。霍赫雷特(1991年)[德国]本吉奥等人(1994年)深入探讨了这个问题,他们发现了一些相当基本的原因,为什么它可能是困难的。

谢天谢地,LSTM 没有此问题!

LSTM 网络(LSTM Networks)

Long Short Term Memory networks(通常简称为”LSTM”)是一种特殊的RNN,能够学习长期依赖关系。它们由霍奇赖特和施密德胡伯(1997年)介绍,并在后续工作中被许多人提炼和推广。它们在各种问题上工作得非常好,现在得到了广泛的应用。

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

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

Long Short Term Memory networks (LSTM) - 图5

准 RNN 中的重复模块包含单个层。
LSTM 也有这种链状结构,但重复模块具有不同的结构。而不是有一个单一的神经网络层,有四个,以一种非常特殊的方式交互。

Long Short Term Memory networks (LSTM) - 图6

LSTM 中的重复模块包含四个交互层。
不要担心事情的细节。稍后我们将逐步介绍 LSTM 图。现在,让我们试着去适应我们将使用的记号法。

Long Short Term Memory networks (LSTM) - 图7

在上图中,每行都携带一个完整的矢量,从一个节点的输出到其他节点的输入。粉红色圆圈表示按点操作,如矢量加法,而黄色框是学习神经网络图层。行合并表示串联,而行分叉表示要复制的内容和副本进入不同位置。

LSTM 背后的核心理念(The Core Idea Behind LSTMs)

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

细胞状态有点像传送带。它直线贯穿整个链,只有一些轻微的线性相互作用。信息很容易随信息一直流动不变。

Long Short Term Memory networks (LSTM) - 图8

LSTM 确实能够删除或向细胞状态添加信息,由称为门的结构仔细调节。

盖茨是一种让信息通过的方式。它们由 sigmoid 神经网络层和点乘法组成。

Long Short Term Memory networks (LSTM) - 图9

sigmoid 层输出介于零和一之间的数字,描述每个组件应允许通过多少。值为零表示”不放过任何东西”,而值值为 1 表示”让一切通过!

LSTM 具有三个这些门,用于保护和控制细胞状态。

分步 LSTM 演练(Step-by-Step LSTM Walk Through)

我们的 LSTM 的第一步是决定我们将从单元格状态中丢弃哪些信息。此决策由称为”忘记门层”的 sigmoid 层做出。它看起来Long Short Term Memory networks (LSTM) - 图10Long Short Term Memory networks (LSTM) - 图11,并输出一个介于0和1对于单元格状态中的每个数字Long Short Term Memory networks (LSTM) - 图12表示”完全保留这一点”,而0表示”完全摆脱这一点”。

让我们回到我们的语言模型的例子,该模型尝试基于前面的所有单词预测下一个单词。在此类问题中,单元格状态可能包括当前主题的性别,以便可以使用正确的代词。当我们看到一个新的主题,我们想忘记旧主题的性别。

Long Short Term Memory networks (LSTM) - 图13

下一步是决定我们将在单元格状态中存储哪些新信息。这有两个部分。首先,称为”输入门层”的 sigmoid 层决定我们将更新哪些值。接下来,tanh 图层将创建一个新的候选值的矢量,Long Short Term Memory networks (LSTM) - 图14,可以添加到状态。在下一步中,我们将合并这两个状态以创建状态的更新。

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

Long Short Term Memory networks (LSTM) - 图15

现在是时候更新旧的单元格状态了,Long Short Term Memory networks (LSTM) - 图16,进入新的单元格状态Long Short Term Memory networks (LSTM) - 图17前面的步骤已经决定了该做什么,我们只需要实际完成。

我们把旧状态乘以Long Short Term Memory networks (LSTM) - 图18 忘记我们决定忘记的事情。然后我们添加Long Short Term Memory networks (LSTM) - 图19 这是新的候选值,根据我们决定更新每个状态值的多少进行缩放。

在语言模型中,正如我们在前面的步骤中决定的那样,我们实际上将丢弃有关旧主题的性别的信息并添加新信息。

Long Short Term Memory networks (LSTM) - 图20

最后,我们需要决定要输出的内容。此输出将基于我们的单元格状态,但将是一个筛选的版本。首先,我们运行一个 sigmoid 层,它决定要输出的单元格状态的哪些部分。然后,我们把细胞状态通过坦赫坦赫(将值推到•1和1),并将其乘以 sigmoid 门的输出,以便我们只输出我们决定的零件。

对于语言模型示例,因为它只看到一个主题,它可能需要输出与谓词相关的信息,以防接下来出现这种情况。例如,它可能会输出主题是单数还是复数,以便我们知道动词应该结合成什么形式,如果这是接下来的事情。

Long Short Term Memory networks (LSTM) - 图21

长期短期记忆的变体(Variants on Long Short Term Memory)

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

Gers & Schmidhuber (2000)推出的一个流行的 LSTM 变体是添加”窥孔连接”。这意味着我们让门层查看单元格状态。

Long Short Term Memory networks (LSTM) - 图22

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

另一个变体是使用耦合忘记和输入门。我们不是单独决定忘记什么,我们应该向哪些内容添加新信息,而是一起做出这些决定。我们只忘记当我们要输入的东西,它的地方。我们仅在忘记旧事物时才向状态输入新值。

Long Short Term Memory networks (LSTM) - 图23

LSTM 的一个稍微更显著的变化是Cho 等人(2014 年)引入的封闭循环单元(GRU)。它将忘记和输入门合并到一个”更新门”中。它还合并单元格状态和隐藏状态,并进行一些其他更改。生成的模型比标准 LSTM 模型更简单,并且越来越受欢迎。

Long Short Term Memory networks (LSTM) - 图24

这些只是几个最显著的 LSTM 变体。还有很多其他,如深度门RNN由姚等人(2015年)。也有一些完全不同的方法来解决长期依赖,如时钟工作RNN由Koutnik等人(2014年)。

这些变体中哪一个最好?差异重要吗?Greff等人(2015年)对流行的变种做了很好的比较,发现它们都是一样的。Jozefowicz等人(2015年)测试了一万多个RNN架构,发现一些在某些任务中比LSTM效果更好。

结论(Conclusion)

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

作为一组方程,LSTM 看起来相当吓人。希望,在这篇文章中一步一步地走过它们,让他们更加平易近人。

LSTM 是我们能够在 RNN 上实现的一大步。很自然地想知道:还有一大步吗?研究人员的一个普遍观点是:”是的!有下一步,它的关注!其理念是让 RNN 的每个步骤都从一些较大的信息集合中选取信息。例如,如果使用 RNN 创建描述图像的标题,则可能会选择图像的一部分来查看它输出的每个单词。事实上,徐等人(2015年)正是这样做的——如果你想探索注意力,这可能是一个有趣的起点!有很多真正令人兴奋的结果使用注意力,它似乎还有更多是在拐角处…

注意力并不是RNN研究中唯一令人兴奋的线索。例如,Kalchbrenner等人(2015年)的网格LSTM似乎非常有前途。在生成模型中使用RNN的工作——如Gregor等人(2015年),钟等人(2015年),拜耳和奥森多夫(2015年)——似乎也很有趣。过去几年对于循环神经网络来说是一个激动人心的时刻,而未来的几年里,人们承诺只会更加如此!

致谢(Acknowledgments

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

我非常感谢我在谷歌的同事,特别是奥里奥尔·维尼亚尔斯,格雷格·科拉多,乔恩·施伦斯,卢克·维尔尼斯伊利亚·苏茨沃。我也感谢许多其他朋友和同事抽出时间帮助我,包括达里奥·阿莫迪雅各布·斯坦哈特。我特别感谢赵京贤关于我的图表的非常周到的通信。

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

除了原作者之外,很多人还为现代LSTM做出了贡献。一个非综合名单是:费利克斯·格斯、弗雷德·康明斯、圣地亚哥·费尔南德斯、贾斯汀·拜耳、丹·维尔斯特拉、朱利安·托格利乌斯、福斯蒂诺·戈麦斯、马特奥·加格里奥洛和亚历克斯·格雷夫斯。

参考文献

[1] Understanding LSTM Networks: http://colah.github.io/posts/2015-08-Understanding-LSTMs/
[2] The Unreasonable Effectiveness of Recurrent Neural Networks: http://karpathy.github.io/2015/05/21/rnn-effectiveness/