Understanding LSTM Networks

来源:互联网 发布:用友软件 t系列 编辑:程序博客网 时间:2024/06/05 21:13

  对RNN网络中的LSTM结构学习下。翻译篇非常好的博客,原文地址附后面。
Recurrent Neural Network
  人们从不会随意地开始自己的思考,当你在读这篇博文的时候,你根据之前所读的文字来理解现在每个词。并且,你也不会将前面的内容都丢掉,然后从新开始理解现在的内容,人的思路是具有延续性的。
  传统的神经网络是没法做到上述事情的,这是一个很大的缺陷。举个栗子,假设你想要对电影里的某个时间点正在发生什么事情做判断。对传统神经网络来说,无法使用之前的发生的事情来推断后续发生的事情。
  循环神经网络则可以解决这类问题,这种网络带有自循环结构,使得信息可以保存延续到下个时刻。  

Recurrent Neural Networks have loops.
  在上图中,A+循环构成一簇网络集合,A的输入输出分别为xtht。其中ht又作为A的输入,该循环,允许信息从本网络传递到下一网络。
  这里面的循环,让循环神经网络看起来很难以理解。但是当你想得更深入一些时,你会发现它们与一般的神经网络是一致的。循环神经网络可以看做是相同网络的多次拷贝,每一个网络都将信息传递到下一个网络。我们可以将循环网络的循环展开如下所示:  

An unrolled recurrent neural network.
  这种链式的属性表明循环神经网络与序列和列表是密切相关的,这种结构很自然地适合该类型数据。
  在最近的几年里,RNN在许多难题上都获得了难以置信的成功,比如语音识别、语言模型、机器翻译、图像捕捉等。Andrej Karpathy的一篇博客Unreasonable Effectiveness of Recurrent Neural Networks里详细介绍了RNN的许多优异表现。

The Problem of Long-Term Dependencies

  RNN吸引注意的一个特性是,RNN可以将之前的信息与当前的任务联系起来。比如,使用之前的视频画面可以帮助理解现在的视频画面。RNN能做到如此境地么,答案是:可以,但是有依赖条件。
  有时, 我们只需要处理最近的信息来解决当前的问题。比如,当语言模型尝试依赖之前的词来预测下一个词时,预测“the clouds are in the sky”的最后一个词时。我们不需要进一步的上下文,很明显下一个词时“sky”。在这个例子中,相关信息和所需预测位置的距离很近,RNNs可以学习使用之前的信息。  


  但是,也存在其他需要更多上下文信息的例子。比如预测“I grew up in France… I speak fluent French”的最后一个词时,根据上下文下一个词应该是一种语言。如果我们想要缩减语言的范围,就需要更靠前的上下文“France”。这个例子中,相关信息和所需预测位置的距离变得很大。
  不幸的是,当这个距离变大时,RNNs无法学习信息间的关系。  
  理论上,RNNs是完全可以胜任处理这种“long-term dependencies”的,使用者需要小心地选择参数来解决这类问题,但是实际中,RNNs不能够学习这样的参数。这类问题已经被Hochreiter(1991)和Bengio(1994)等人深入研究过,发现了为什么RNNs解决这类问题很困难的基本原因。
  谢天谢地的是,LSTM完全没有这种困扰。

LSTM Networks

  Long Short Term Memory Networks - 通常称之为“LSTMs”,它是一种特殊结构的RNN,能够学习long-term dependencies。在1997年由Hochreiter & Schmidhuber引入,后续被众多研究者改进和发扬1。LSTM结构在大量的复杂问题中,获得了惊人的成功,并被广泛应用。
  LSTMs设计之初是用来避免long-term dependency问题的,记忆长久的信息是该结构的默认行为,并不是要刻意去学习的。
  所有现行的循环神经网络具有神经网络的重复链式结构,标准的RNNs结构具有非常简单的结构,比如 tanh 层,如下:  

  
The repeating module in a standard RNN contains a single layer.
  LSTMs 也有这种链式结构,但是重复单元更复杂。不同于单一的神经层,而是拥有4个以特殊形式交互的复杂层。  
  
The repeating module in an LSTM contains four interacting layers.
  不要担心内部细节问题,稍后很快就要一步一步地讲解LSTM。现在,先认识下即将使用的一些符号。  
  在上图中,每条线都代表一个实体向量,从一个节点的输出流向其他节点的输入。粉色的圆圈代表pointwise计算,比如向量加法。黄色的方盒表示神经网络。线条合流表示串行,线条分支表示数据流复制并流向不同路径。

The Core Idea Behind LSTMs

  LSTMs的关键是cell状态,那条在结构图上侧的水平线。
  cell状态有点像是传送带,在整个链中从头流到尾,只有很少线性操作插入进来。对信息而言,可以很容易地通过它无损地流通。  

  LSTM通过称之为门的结构来控制将信息从cell状态中加入或者移除。门是种可选择地控制信息流通的方式,它们由sigmoid神经层和pointwise乘积操作组成。  
  sigmoid神经层输出介于0和1之间的值,描述了每个元素应该通过的比例。0意味着拒绝任何信息通过,1意味着让信息无损通过。一个LSMT有三个这种门,来保护和控制cell状态。

Step-by-Step LSTM Walk Through

  LSTM的第一步是决定什么信息将要从cell状态中丢掉。这一决定由sigmoid组成的“forget gate”来搞定,它输入ht1xt,输出与cell状态Ct1同维度的0/1向量。
  再回头想下前面的语言模型预测的例子,cell状态可能包含当前主题的性别,所以当前代称可以正确地判断出来。当看到一个新的主题时,我们想遗忘掉旧主题的性别信息。  

  下一步是决定哪些新信息要被存储到cell状态中。分两部分,第一,由sigmoid组成“input gate”决定哪些维度将要被更新;第二,由tanh生成心得可以被加入到cell状态中的候选值向量Ct~。然后,将这两个向量合并生成对cell状态更新的向量。
  在语言模型预测的那个例子中,我们将增加新主题的性别信息到cell状态中,以替换掉旧的性别信息(被忘掉的那个)。  
  现在,将旧的cell状态Ct1更细为Ct,上面几步已经给出了要做的事情。
  首先,将旧cell状态乘以ft,忘掉我们决定要遗忘掉的内容;然后,叠加itCt~,那是我们决定要追加的更新内容。
在语言预测模型的例子中,上述动作对应实际要丢弃的关于旧主题的性别信息,并增加新的信息。  

  最后,我们需要决定输出什么,这个输出基于cell状态的,但是个过滤后的版本。先用sigmoid(“output gate”)决定cell状态的哪些部分是将要输出的,以及对应的输出比例;再用tanh将cell状态投射到[-1,1]之间;再将两者乘积得到我们想要输出的结果。
  对语言预测例子而言,当LSTM刚看到一个主题,它想输出动词相关的信息时,比如,它可能输出单数/复数形式的主题,所以需要知道什么类型的动词的格式应该被对应地加入后续要发生的动作中。  

Variants on Long Short Term Memory

  到目前为止介绍的都是普通的LSTM,实际上,并不是所有的LSTMs都是上述结构,基本每篇论文涉及到的LSTMs都会有轻微地改动。通常改动都很小,但是也有必要提起。
  一个非常流行的LSTM版本,是Gers & Schmidhuber(2000)提出的,加入了“peephole connections”。这意味着我们每个门都能将cell状态作为输入。  

  上图结构中,所有的门都加上了“peepholes”,但在许多论文中有些门加有些门不加的。
  另外一个变种是,使用组合的“forget gate”和“input gate”。不同于单独决定遗忘什么和添加什么,将这两个决策放到一起搞。只有当某维度上有输入时,才忘掉该维度的旧信息;只有某维度忘掉旧信息时,才更新信息到cell状态的该维度内。  
  LSTM的一个非常赞的版本是Gated Recurrent Unit or GRU,由Cho(2014)提出。它将“forget gate”和“input gate”混合成一个“update gate”,并且将cell状态和隐状态合并起来,还做了些其他改变。GRU比LSTM在结构上更为简单,并且广受欢迎。  
  上述这些只是一小部分LSTM的变种,其他的还有像Depth Gated RNNs(Yao 2015)。还有完全不同的处理“long-term dependencies”的方法,比如Clockwork RNNs by Koutnik(2014)。
  哪种更好呢?这些不同之处有影响么?Greff, et al(2015) 对流行的变种做了非常好地对比,发现他们都是一致的。Jozefowicz, et al(2015) 测试了多大1万多种RNN结构之后,发现了某些版本在某些任务中,表现比LSTM要好点(这篇论文非常值得一看)。

Conclusion

  更早些的时候,我提到RNN所能达到的一些让人惊艳的结果,本质上都可以用LSTM达到同样的效果,实际上对大多数任务来说LSTM工作地更好。
  LSTM的公式看起来很吓人,但是本文一步一步地解析使得它们更方便理解。
  LSTM是RNNs的一个巨大进步,很自然地想知道,是否还存在另外一大步?在研究者总的普遍共识是:Yes,确实有下一步,那就是“attention”模型!其思想是让RNN的每一步从更大的采集信息集中筛选信息。比如,使用RNN来给图片生成标题,它可能选择部分图片内容来查找输出的每个词。实际上,Xu, et al.(2015)做了这块内容,如果你想展开探索attention的话这是个很好地开端。另外也有不少使用attention的很好的工作,但是看起来更像是围绕着比较偏僻的问题。
  Attention并不是RNN研究的唯一分支。比如,Grid LSTM (Kalchbrenner 2015)看着也很promising。在生成模型中使用RNN,比如Gregor (2015), Chung (2015), Bayer & Osendorfer(2015) 看着也非常有意思。最近几年将是RNN的惊喜之年,会有更多的promise出现。
原文链接

In addition to the original authors, a lot of people contributed to the modern LSTM. A non-comprehensive list is: Felix Gers, Fred Cummins, Santiago Fernandez, Justin Bayer, Daan Wierstra, Julian Togelius, Faustino Gomez, Matteo Gagliolo, and Alex Graves

原创粉丝点击