理解LSTM

Understanding LSTM Networks

原文链接: Understanding LSTM Networks

循环神经网络(RNN)

人们不是每一秒都从零开始思考,当你阅读这篇博客时,你基于之前你理解的单词来理解当前单词。你是持续思考的,而不是丢弃之前的内容再重新思考。传统神经网络无法做到这一点,这是它的一大缺点。例如,如果你要对电影中的一个场景进行分类,传统神经网络很难利用之前发生的场景作为信息来预测当前场景。
递归神经网络 (RNN, Recurrent neural networks) 解决了这个问题。它们是带回路的网络,允许信息持续存在。网络结构:输入 X t X_t Xt ,输出 H t H_t Ht ,循环允许信息从网络的一个步骤传递到下一个步骤。

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

这种链式性质揭示了递归神经网络与序列和列表密切相关。它们是用于此类数据的神经网络的自然架构。它们当然被使用了!在过去的几年里,将RNN应用于各种问题取得了令人难以置信的成功:语音识别、语言建模、翻译、图像字幕……不胜枚举。

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

长期依赖问题

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

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

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

但是,随着差距的扩大,RNN无法学会连接信息。理论上,RNN绝对有能力处理这种“长期依赖性”。人类可以仔细地为它们选择参数来解决这种形式的玩具问题。遗憾的是,在实践中,RNN似乎无法学习它们。Hochreiter(1991)和Bengio等人(1994)对这个问题进行了深入探讨,他们发现了一些可能很困难的基本原因。LSTM没有这个问题!

LSTM网络

长短期记忆网络——通常只被称为“LSTM”——是一种特殊的RNN,能够学习长期依赖关系。它们是由Hochreiter&Schmidhuber(1997)介绍的,并在随后的工作中被许多人提炼和推广。它们在各种各样的问题上都非常有效,现在被广泛使用。

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

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

LSTM也具有这种链式结构,但重复模块具有不同的结构。有四个神经网络层,它们以一种非常特殊的方式相互作用,而不是只有一个单独的神经网络层。

不要担心发生了什么的细节。稍后我们将逐步浏览LSTM图。现在,让我们试着适应我们将要使用的符号。

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

LSTM背后的核心理念

LSTM的关键是单元格状态(细胞状态,ceil state),即通过图顶部运行的水平线。

单元格状态有点像传送带。它直接沿整个链条延伸,只有一些小线性相互作用。信息很容易沿着它不变。

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

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

Sigmoid层输出零和一个之间的数字,描述了每个组件应通过多少。零值表示“一无所获”,而一个值的值则表示“让一切通过!”

LSTM具有其中三个门,以保护和控制单元格状态。

LSTM流程

LSTM的第一步是决定我们将从细胞状态中丢弃什么信息。这个决定是由一个称为“遗忘门层”的S形层做出的。它输入 h t − 1 h_{t-1} ht1 x t x_t xt, 然后为单元格状态 C t − 1 C_{t-1} Ct1 输出0 到 1的值。1 表示“完全保留”,0 表示“完全遗忘”。

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

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

在我们的语言模型的例子中,我们想将新主体的性别添加到细胞状态中,以取代我们正在忘记的旧主体。

现在需要更新旧的单元格状态 C t − 1 C_{t-1} Ct1到新的单元格状态 C t C_t Ct 。首先将旧状态乘以 f t f_t ft, 来决定我们应该先忘记什么。之后我们加上 i t ∗ C ~ t i_t * \tilde{C}_t itC~t。这是新的候选值,根据我们决定更新每个状态值的程度进行缩放。

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

最后,我们需要决定我们要输出什么。此输出将基于我们的单元格状态,但将是经过过滤的版本。首先,我们运行一个S形层,它决定我们要输出细胞状态的哪些部分。然后,我们将细胞状态通过tanh(将值置于-1到1),然后乘以之前S形层的输出,所以我们只输出我们决定输出的。

对于语言模型示例,由于它只看到了一个主题,它可能希望输出与动词相关的信息,以防接下来会出现这种情况。例如,它可以输出主语是单数还是复数,这样我们就知道一个动词应该被共轭成什么形式,如果接下来是这样的话。
在这里插入图片描述

LSTM的变体

“窥视孔连接”。这意味着我们让栅极层观察细胞状态。

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

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

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

结论

早些时候,我提到了人们使用RNN所取得的显著成果。从本质上讲,所有这些都是使用LSTM实现的。他们在大多数任务中都能做得更好!

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

LSTM是我们使用RNN实现目标的一大步。人们很自然地会想:是否又迈出了一大步?研究人员的一个共同观点是:“是的!还有下一步,这就是关注!”这个想法是让RNN的每一步都从更大的信息集合中挑选信息。例如,如果您使用RNN创建描述图像的标题,它可能会选择图像的一部分来查看它输出的每个单词。事实上,徐等人(2015)正是这样做的——如果你想探索注意力,这可能是一个有趣的起点!利用注意力已经取得了许多非常令人兴奋的结果,而且似乎还有更多的结果即将到来…

注意力并不是RNN研究中唯一令人兴奋的线索。例如,Kalchbrenner等人的网格LSTM(2015)似乎非常有前景。在生成模型中使用RNN的工作——如Gregor等人(2015)、Chung等人(2015年)或Bayer&Osendorfer(2015)——似乎也非常有趣。对于递归神经网络来说,过去几年是一个激动人心的时刻,而未来的几年将更加如此!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值