LSTM网络

之前和大家介绍了循环神经网络(RNN),RNN的魅力在于它能够很好地利用历史信息。例如,使用前一时刻的视频帧可以推测当前时刻的视频内容。在之前的文章中我们也谈到了,传统RNN不能学习连接相隔步长太远的信息。

有时候,我们仅仅需要前一时刻的信息来完成当前的任务,比如一个根据上文来预测下一个词语的语言模型。如果尝试预测“The clouds are in the sky”的最后一个词语,我们不需要更多的上下文信息,很明显最后一个词语应该是“sky”。在这种场景中,相关信息之间相隔的步长很小,RNN可以学习使用先前的信息。

但是,有很多场景需要较多的上下文信息才能够完成当前任务。还是同一个语言模型,如果尝试预测“I grew up in France….I speak fluent French”的最后一个词,当前信息提示了最后一个词是一门语言,但是要知道是什么语言就需要根据上文中的“France”,这相隔很远。而现实场景中,需要的相关信息和当前预测位置相隔很远是非常有可能的。

不幸的是,RNN无法学习连接相隔步长太远的信息,这个问题称为长短期依赖问题。Bengio等人也对该问题进行了深入的研究,使RNN训练变得困难的原因是梯度消失。

简析一刻:梯度消失的问题,本质上还是使用BP算法导致的,也就是激活函数导数小于1导致的。在使用RNN时,在每次输入进行优化计算梯度的时候,会侧重于考虑最近几次的输入,以此让损失减小,而比较远的输入,对于计算当前输入的梯度已经不起作用了。RNN可以等价于去调整参数,拟合最近的一些序列,比如说输入t时刻,那么可能当前的参数就调整为拟合t到t-p的时刻的序列,并且p会比较小,也即RNN的学习不会兼顾到很久以前的输入,就学习不到长距离信息。

LSTM这个模型缓解了梯度消失的问题,它可以对任意长度的序列进行建模。

LSTM Networks

“Long-Short-Term-Memory networks”简称为“LSTMs”,是一种特殊的RNN模型,可以学习连接长距离信息。LSTM由Hochreiter & Schmidhuber (1997)提出,并被Alex Graves进行了改良和推广,在很多问题上,LSTM都表现出色,有广泛的应用。

LSTM生来就是为了学习连接长距离信息,这是它的默认行为,而不是需要经过努力,付出代价才能获得的能力。(突然觉得,这些被设计的模型怎么这么像我们人类呢?有些人叫做天才,他的能力是普通人付出无数倍努力也无法企及的....)

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

LSTM也具有这种链状结构,但重复模块的结构不同。它不是单一的神经网络层,而是四个,并以一种特殊的方式进行交互。

看起来好像很复杂的样子,不用担心细节问题,我们将一一解析LSTM。先来了解一下文章中的图标。

在上面的图例中,每一条黑线传输一个完整的向量,从一个节点的输出到其他节点的输入。粉色的圈代表逐点运算,诸如向量的和,而黄色长方形就是学习到的神经网络层。合在一起的线表示向量的连接,分开的线表示内容被复制,然后分发到不同的位置。

LSTM的核心思想

LSTM的关键是细胞(cell)状态,即贯穿图表顶部的水平线。这很像一个传送带,信息沿着整个链条移动,只有一些小的线性作用,能够很好的保持信息不变。

LSTM有一种精心设计的称为门的结构,可以用来删除或添加信息到细胞,它是一种让信息选择式通过的方法,由一个sigmoid神经网络层和逐点运算组成。

sigmoid层输出0-1之间的数字,描述每个组件可以有多少量通过。0代表不允许任何量通过,1代表任何量可以通过。LSTM拥有3个这样的门,来保护和控制细胞状态。

逐步理解LSTM

在LSTM中第一步要决定从细胞中丢弃什么信息,这是由遗忘门决定的。该门会读取ht−1和xt,通过sigmoid层,得到保留多少比例Ct-1信息。“1”表示完全保留,“0”表示完全舍弃。

让我们回到预测下一个词语的语言模型中来。在这个问题中,细胞状态可能包含当前主语的属性,以便可以使用正确的代词。但当一个新的主语出现时,我们希望它忘掉前面主语的属性。

下一步则是考虑应该把什么新的信息存入细胞中。这需要两步,首先,有一个输入门决定更新什么值。然后,tanh层将创建一个新的候选值向量C̃ t,并把它加入到状态中。下一步,我们将结合这两者来创建状态更新。

在语言模型中,将新主语的属性添加到状态中以替换掉旧主语的属性。

把旧细胞状态Ct−1更新为新细胞状态Ct。把旧状态乘上ft,丢弃掉之前想要丢弃的信息,然后加上it∗C̃ t,这是新的候选值,根据我们决定更新每个状态的程度进行变化。

在语言模型中,根据前面的目标,丢弃掉旧代词的属性信息并添加新信息的地方。

最后,需要确定输出什么值。这个输出将会基于细胞状态,但是是经过筛选后的。首先,通过一个输出门它来决定输出细胞状态的哪个部分。接着,我们把细胞状态通过 tanh 进行处理(得到一个在 -1 到 1 之间的值)并将它乘以 输出门的输出,最终仅仅会输出我们确定输出的那部分。

在语言模型的例子中,因为模型只看到了一个代词,可能需要输出与一个动词相关的信息。例如,可能输出的代词是单数还是负数,这样如果输出动词的话,我们也知道动词需要进行的词性变化。

LSTM 是 RNN 研究中获得的重要成功。很自然地,研究人员也会考虑:哪里会有更加重大的突破呢?目前比较前沿的研究是关于“注意力”。这个想法让 RNN 的每一步都从更加大的信息集中挑选信息。例如,如果你使用 RNN 来产生一个图片的描述,可能会选择图片的一个部分,根据这部分信息来产生输出的词。实际上,Xu, et al.(2015)已经这么做了——如果你希望深入探索注意力可能这就是一个有趣的起点!还有一些使用注意力的相当振奋人心的研究成果,看起来有更多的东西亟待探索……

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180519A0993V00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券