首页 > 其他分享 >理解 LSTM 网络

理解 LSTM 网络

时间:2022-12-26 16:37:16浏览次数:69  
标签:状态 RNN 网络 神经网络 理解 LSTM 我们 循环


 

发表于 2015 年 8 月 27 日

 

循环神经网络

人类不会每一秒都从头开始思考。当你阅读这篇文章时,你会根据对之前单词的理解来理解每个单词。您不会扔掉所有东西并重新从头开始思考。你的思想有恒心。

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

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



理解 LSTM 网络_神经网络


循环神经网络具有循环。


 

在上图中,一大块神经网络, 一种一种,看一些输入 X吨X吨 并输出一个值 H吨H吨. 循环允许信息从网络的一个步骤传递到下一个步骤。

这些循环使循环神经网络看起来有点神秘。然而,如果你多想一想,就会发现它们与普通的神经网络并没有什么不同。循环神经网络可以被认为是同一个网络的多个副本,每个副本都向后继者传递一条消息。考虑如果我们展开循环会发生什么:


理解 LSTM 网络_网络_02


一个展开的循环神经网络。


 

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

他们肯定会被使用!在过去几年中,将 RNN 应用于各种问题取得了令人难以置信的成功:语音识别、语言建模、翻译、图像字幕……不胜枚举。我会将关于使用 RNN 可以实现的惊人壮举的讨论留给 Andrej Karpathy 的优秀博客文章​​The Unreasonable Effectiveness of Recurrent Neural Networks​​。但他们真的很了不起。

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

长期依赖问题

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

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


理解 LSTM 网络_机器学习_03


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

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


理解 LSTM 网络_神经网络_04


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

幸运的是,LSTM 没有这个问题!

LSTM 网络

长短期记忆网络——通常简称为“LSTM”——是一种特殊的 RNN,能够学习长期依赖关系。它们由​​Hochreiter & Schmidhuber (1997)​​​引入,并在后续工作中被许多人提炼和普及。​​1​​它们在处理各种各样的问题时效果非常好,现在被广泛使用。

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

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


理解 LSTM 网络_机器学习_05



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


 


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


理解 LSTM 网络_python_06


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


 


不要担心正在发生的事情的细节。稍后我们将逐步介绍 LSTM 图。现在,让我们试着熟悉一下我们将使用的符号。


理解 LSTM 网络_人工智能_07


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

LSTM 背后的核心思想

LSTM 的关键是细胞状态,即贯穿图表顶部的水平线。

细胞状态有点像传送带。它直接沿着整个链条运行,只有一些轻微的线性交互。信息很容易沿着它流动而不改变。


理解 LSTM 网络_神经网络_08


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

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


理解 LSTM 网络_人工智能_09


sigmoid 层输出 0 到 1 之间的数字,描述应该让每个组件通过的数量。零值表示“不让任何东西通过”,而值一表示“让一切都通过!”

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

循序渐进的 LSTM 演练

LSTM 的第一步是决定我们要从细胞状态中丢弃哪些信息。这个决定是由一个称为“忘记门层”的 sigmoid 层做出的。它看着Ht − 1H吨-1 和 X吨X吨,并输出之间的数字 00 和 11 对于细胞状态中的每个数字 Ct − 1C吨-1. 一种11 代表“完全保留这个”,而 00 代表“彻底摆脱这个”。

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


理解 LSTM 网络_神经网络_10


下一步是决定我们将在细胞状态中存储哪些新信息。这有两个部分。首先,称为“输入门层”的 sigmoid 层决定我们将更新哪些值。接下来,tanh 层创建一个新的候选值向量,C~吨C~吨,这可以添加到状态。在下一步中,我们将结合这两者来创建状态更新。

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


理解 LSTM 网络_神经网络_11


现在是时候更新旧的细胞状态了, Ct − 1C吨-1, 进入新的细胞状态 C吨C吨. 前面的步骤已经决定了要做什么,我们只需要实际去做。

我们将旧状态乘以 F吨F吨,忘记我们之前决定忘记的事情。然后我们添加一世吨*C~吨一世吨*C~吨. 这是新的候选值,按我们决定更新每个状态值的程度进行缩放。

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


理解 LSTM 网络_网络_12


最后,我们需要决定我们要输出什么。此输出将基于我们的细胞状态,但将是一个过滤版本。首先,我们运行一个 sigmoid 层,它决定我们要输出细胞状态的哪些部分。然后,我们把细胞状态通过tanhtanh (将值推到 − 1-1 和 11) 并将其乘以 sigmoid 门的输出,以便我们只输出我们决定的部分。

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


理解 LSTM 网络_神经网络_13


长短期记忆的变体

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

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


理解 LSTM 网络_神经网络_14


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

另一种变体是使用耦合的遗忘门和输入门。我们不是单独决定要忘记什么以及我们应该向什么添加新信息,而是一起做出这些决定。我们只会忘记什么时候我们要在它的位置输入一些东西。我们只在忘记旧的东西时才向状态输入新值。


理解 LSTM 网络_python_15


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


理解 LSTM 网络_神经网络_16


这些只是一些最著名的 LSTM 变体。还有很多其他的,比如​​Yao 等人的​​​Depth Gated RNNs ​​。​​​​(2015)​​​。还有一些完全不同的方法来解决长期依赖关系,比如​​Koutnik 等人的​​​Clockwork RNNs ​​。​​​​(2014)​​。

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

结论

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

写成一组方程,LSTM 看起来很吓人。希望通过在本文中一步一步地了解它们,可以使它们更加平易近人。

LSTM 是我们可以用 RNN 完成的一大步。很自然地想知道:还有另一个大步骤吗?研究人员普遍认为:“是的!还有下一步,就是注意力!” 这个想法是让 RNN 的每一步都从一些更大的信息集合中挑选要查看的信息。例如,如果您使用 RNN 创建描述图像的标题,它可能会选择图像的一部分来查看它输出的每个单词。事实上,​​徐等人。(2015)​​正是这样做的——如果你想探索注意力,这可能是一个有趣的起点!使用注意力已经有许多非常令人兴奋的结果,而且似乎还有更多的结果即将到来……

注意力并不是 RNN 研究中唯一令人兴奋的线索。例如,​​Kalchbrenner等人的​​Grid LSTMs ​​​​(2015)​​​似乎非常有希望。在生成模型中使用 RNN 工作——例如​​Gregor等。(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​​。​​↩​

 


更多帖子


理解 LSTM 网络_人工智能_17

​注意和增强循环神经网络​

蒸馏时


理解 LSTM 网络_网络_18

​网络​

模块化视角


理解 LSTM 网络_人工智能_19

​神经网络、流形和拓扑​


理解 LSTM 网络_网络_20

​深度学习、NLP 和表示​


 

 

 

 

 

 

 

标签:状态,RNN,网络,神经网络,理解,LSTM,我们,循环
From: https://blog.51cto.com/xfxuezhang/5969314

相关文章