image caption笔记(一):RNN、LSTM和GRU的理解

循环神经网络(Recurrent Neural Network)

人类针对每个问题的思考,一般不会是完全的从头开始思考。正如当你阅读这篇译文的时候,你会根据已经阅读过的内容来对后面的内容进行理解,你不会把之前的东西都丢掉从头进行思考,你对内容的理解是贯穿的。

传统的神经网络做不到这一点,而这似乎是一个主要的缺点。 例如,假设您想对电影中的每个事件进行分类。我们无法想象传统神经网络如何能够利用前面的场景去干预后面的预测。

幸好循环神经网络解决了这个问题, 它们是具有循环的网络,允许信息持续存在,示意图如下。

 

带循环的递归神经网络

在上图中,一组神经网络 A接收某些输入xt,并输出一个值ht。 循环允许信息从网络的一个步骤传递到下一个。

这些循环使得循环神经网络看起来很神秘。 然而,如果你再多考虑一下,你就会发现其实它和传统的神经网络并不是完全不同。 一个循环神经网络可以被认为是同一个网络的多个副本,每一个都传递一个消息给后继者。 我们考虑一下如果将循环展开会发生什么:(示意如下)

循环神经网络的展开式

 

            

 

 

长依赖存在的问题

RNN显著的魅力是将以前的信息连接到当前任务的这种思路,例如使用先前的视频帧可以有助于对当前帧的理解。 如果RNN可以做到这一点,这将非常有用。 但他可以吗?这要看情况。

有时,为了处理当前的任务,我们只需要查看最近的信息。 例如,考虑一种语言模型,该模型根据前面的词语来预测下一个单词。 如果我们试图预测““the clouds are in the sky”的最后一个单词,我们不需要任何其他的语境信息——下一个单词显然是sky。 在相关信息和需要该信息的距离较近的时候,RNN能够学会去利用历史信息。

但也有需要更多上下文的情况。 考虑尝试预测文本中的最后一个单词“I grew up in France… I speak fluent French.”。最近的信息表明,下一个单词可能是一种语言的名称,但如果我们想缩范围确定那种语言,我们需要从前面获取法国的背景。 相关信息和需要该信息的地方的距离变得非常大的情况是很可能的。

不幸的是,随着距离的增加,RNN无法有效的利用历史信息。

在理论上,RNN绝对有能力处理这样的“长依赖”问题。人们可以仔细挑选参数来解决这种形式的问题。 可悲的是,在实践中,RNN似乎无法学习到这些特征。HochreiterBengio,曾经深入的研究过这个问题,他们发现一些根本性的原因,能够解释RNN为什么不work。

谢天谢地,LSTM没有这个问题!

LSTM Networks

长短记忆神经网络——通常称作LSTM,是一种特殊的RNN,能够学习长的依赖关系。 他们由Hochreiter&Schmidhuber引入,并被许多人进行了改进和普及。他们在各种各样的问题上工作的非常好,现在被广泛使用。

LSTM是为了避免长依赖问题而精心设计的。 记住较长的历史信息实际上是他们的默认行为,而不是他们努力学习的东西。

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

标准RNN中的重复模块的单层神经网络

LSTM也拥有这种链状结构,但是重复模块则拥有不同的结构。与神经网络的简单的一层相比,LSTM拥有四层,这四层以特殊的方式进行交互。

LSTM中的重复模块包含的四层交互神经网络层

不要过早担心细节问题, 稍后我们将一步一步地剖析LSTM。 现在,让我们先熟悉一下我们将要使用的符号。

在上图中,每一行都带有一个向量,该向量从一个节点输出到其他节点的输入。 粉红色圆圈表示点向运算,如向量加法、点乘,而黄色框是学习神经网络层。 线的合并表示连接,而线的交叉表示其内容正在复制,副本将转到不同的位置。

LSTM背后的核心理念

LSTM的关键是细胞状态,表示细胞状态的这条线水平的穿过图的顶部。

细胞的状态类似于输送带,细胞的状态在整个链上运行,只有一些小的线性操作作用其上,信息很容易保持不变的流过整个链。

LSTM确实具有删除或添加信息到细胞状态的能力,这个能力是由被称为门(Gate)的结构所赋予的。

门(Gate)是一种可选地让信息通过的方式。 它由一个Sigmoid神经网络层和一个点乘法运算组成。

Sigmoid神经网络层输出0和1之间的数字,这个数字描述每个组件有多少信息可以通过, 0表示不通过任何信息,1表示全部通过

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

一步步的拆解LSTM

LSTM的第一步是决定我们要从细胞状态中丢弃什么信息。 该决定由被称为“忘记门”的Sigmoid层实现。它查看ht-1(前一个输出)和xt(当前输入),并为单元格状态Ct-1(上一个状态)中的每个数字输出0和1之间的数字。1代表完全保留,而0代表彻底删除。

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

下一步是决定我们要在细胞状态中存储什么信息。 这部分分为两步。 首先,称为“输入门层”的Sigmoid层决定了我们将更新哪些值。 接下来一个tanh层创建候选向量Ct,该向量将会被加到细胞的状态中。 在下一步中,我们将结合这两个向量来创建更新值。

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

现在是时候去更新上一个状态值Ct−1了,将其更新为Ct。签名的步骤以及决定了应该做什么,我们只需实际执行即可。

我们将上一个状态值乘以ft,以此表达期待忘记的部分。之后我们将得到的值加上 it∗C̃ t。这个得到的是新的候选值, 按照我们决定更新每个状态值的多少来衡量.

在语言模型的例子中,对应着实际删除关于旧主题性别的信息,并添加新信息,正如在之前的步骤中描述的那样。

最后,我们需要决定我们要输出什么。 此输出将基于我们的细胞状态,但将是一个过滤版本。 首先,我们运行一个sigmoid层,它决定了我们要输出的细胞状态的哪些部分。 然后,我们将单元格状态通过tanh(将值规范化到-1和1之间),并将其乘以Sigmoid门的输出,至此我们只输出了我们决定的那些部分。

对于语言模型的例子,由于只看到一个主题,考虑到后面可能出现的词,它可能需要输出与动词相关的信息。 例如,它可能会输出主题是单数还是复数,以便我们知道动词应该如何组合在一起。

LSTM的变种

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

一个比较流行的LSTM变种是由Gers & Schmidhuber (2000)提出的,添加“peephole connections”。这意味着,我们允许gate层去看细胞的状态。

上面的图中所有的Sigmoid层都增加了窥视,但许多论文实现不是针对所有都增加窥探,而是有针对性的增加。

另一种变化是使用耦合的忘记和输入门,而不是单独决定要忘记什么、添加什么,这个决定需要一起做。 只有当需要输入某些信息的时候,我们才会忘记这个位置的历史信息。只有当我们忘记一些历史信息的时候,我们才在状态中添加新的信息。

LSTM的一个稍微更显着的变化是由Cho介绍的门控循环单元(或GRU)。 它将忘记和输入门组合成一个单一的“更新门”。它还将单元格状态和隐藏状态合并,并进行了一些其他更改。 所得到的模型比标准LSTM模型更简单,并且越来越受欢迎。

这些只是最显着的LSTM变体中的几个, 还有很多其他的,比如Depth Gated RNNs,还有一些完全不同的处理长期依赖的方法,例如Clockwork。哪些变体最好、差异的重要性等, Greff做一个很好的变体的比较,发现他们都差不多。 Jozefowicz测试了大量的RNN架构,发现一些RNN结构在某些任务上要比LSTM更好。

 

最后介绍GRU

GRU即Gated Recurrent Unit。前面说到为了克服RNN无法很好处理远距离依赖而提出了LSTM,而GRU则是LSTM的一个变体,当然LSTM还有有很多其他的变体。GRU保持了LSTM的效果同时又使结构更加简单,所以它也非常流行。

GRU模型如下,它只有两个门,分别为更新门和重置门,即图中的zt和rt。

z是更新门,介于0到1之间。z越小,更新的信息就越少。当为0的时候,直接使用上一个状态的隐藏态。

r是重置门,介于0到1之间,r越小,新添加的信息里包含的前面的信息就越少,当为0的时候,新添加的信息只与当前时刻的输入有关系。我觉得叫保留门更好一点。

GRU和LSTM在很多情况下实际表现上相差无几,那么为什么我们要使用新人GRU(2014年提出)而不是相对经受了更多考验的LSTM(1997提出)呢?

选择GRU是因为它的实验效果与LSTM相似,但是更易于计算。(门少啊~!)

 


 

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值