LSTM论文翻译-《Understanding LSTM Networks》

1.     循环神经网络(RNNs)

人们并不是每一秒都重新开始新的思考的,就像你读这篇论文,你基于以前对词句的认知来理解每一个词,而不是丢掉以前所有的知识,重新开始构思新的想法。人们的思维是持续的。

传统的神经网络是不会持续思考的,这是它的主要短板,例如,想象你要区分一部电影在每个时间段发生那种事件,传统的神经网络(以下称NN)怎样合理的将电影前面发生的事件传递给后面的事件呢?这是不明的。

RNN的网络内部有很多环,可以让信息持续下去。

LSTM论文翻译-《Understanding LSTM Networks》_第1张图片

上面的框图中,神经网络A,其输入是xt,输出是ht,环可以让信息从一步通向网络的下一步。

只看上面的框图,环容易让人迷惑,但是往深处想想,其实,RNN和一般的NN并没有多大的不同。一个RNN可以看做是多个相同NN单元的拷贝连接,每个拷贝都传递一个信息给下一个拷贝。看看把环展开会发生什么:

LSTM论文翻译-《Understanding LSTM Networks》_第2张图片


这个链式的自然展开让RNN很容易变成了NN的序列和链表。它就是NN对每个daa的处理。

将前一个节点的信息传递给下一个的做法是很有效的,最近几年,RNN在不同的领域上都取得了可喜的效果:语音识别、语言模型、机器翻译、图像字幕…。可以看看Andrej Karpathy讨论RNN令人惊喜的成果的博文《The Unresonable Effectiveness of Recurrent Neural Network》。

取得这些成果的重点是,他们都用了LSTM,一种特殊的RNN,在很多应用上,它的效果都比标准的RNN好很多。这篇文章的重点也是将LSTM的。

 

2.    长序依赖问题

RNN被选择的一个重要原因是它可以连接前面的信息为当前节点所用,就像视频前面的帧可以输入到当前环节来预测或者理解当前帧。如果RNN能真正做到这样,那人它的确非常有用了,但是它真的能吗?实际上,这要视情况而定。

有时,我们只需要就近的一些信息就可以完成当前任务。例如,一个语言模型想要根据前面的词预测最后一个词,如要预测“the clouds are in the sky.”的最后一个词,我们不需要更多的上下文语境就能知道最后一个词是sky。在这个例子中,要用到的语境很简单,RNN可以很好的里面句子前面的词信息得到正确的答案。

LSTM论文翻译-《Understanding LSTM Networks》_第3张图片


但是,也有很多句子需要更多语境,如“I grew up in France. … I speak fluent French.”从临近的语境中可以知道,最后一个词应该是一种语言,但是要知道是哪种语言,必须要前面的“France”,要再往前推。需要的信息和当前点可能隔很远。

不幸的是,随着距离的增加,RNN并不能学习到有用的信息。

LSTM论文翻译-《Understanding LSTM Networks》_第4张图片


理论上,RNNs完全可以掌控“长句依赖”,我们可以人为的选择好的参数嘛。但实践证明,RNN基本不可能学习很长的句子。Hochreiter和Begnio对此有很深的研究,并且找到了根本原因。

而幸运的是,这个问题LSTM不会有。

 

3.    LSTM 网络

LSTM是一种特殊的RNN,可以解决长句依赖问题。它是由Hochreiter和Schnidhuber最先提出的,后来很多人用它解决了很多问题,现在被广泛的应用。

LSTM被明确的设计出来解决长句依赖问题的。记住长周期有用信息是它的基本功能。

标准的RNNs如下:

LSTM论文翻译-《Understanding LSTM Networks》_第5张图片


LSTM也是这种链式的结构,只是重复单元的内部结构不一样,它不是单独的NN层,而是4个NN,这4个相互影响。

LSTM论文翻译-《Understanding LSTM Networks》_第6张图片


其中,

LSTM论文翻译-《Understanding LSTM Networks》_第7张图片


上面框图中,每一行将一个节点的整个向量输出传递到下一个结点做输入。

 

4.    LSTM的核心

LSTM的重点是cell state,下面水平这条线从架构的最上面走,cell state就是传送带,整个系统就像一条长直链,只有一些线性关系,信息往下传而不会改变。

LSTM论文翻译-《Understanding LSTM Networks》_第8张图片


LSTM能删去或者增加信息,依靠的而是门结构。门是信息选择性通过的一种手段,门由sigmoid神经层和一个点乘单元组成。

LSTM论文翻译-《Understanding LSTM Networks》_第9张图片


Sigmoid层的输出介于0和1之间,输出为0表示信息完全不通过,输出为1表示信息全部通过。一个LSTM有3个这样的二门来控制和保护cell state。

 

5.    一步一步看LSTM的工作原理

LSTM的第一步是决定哪些信息丢掉,这个动作是由包含sigmoid层的“forget gate layer”来做的。和输入门中,输出一个介于0和1的值,作用于(前一个cell state),1表示完全保留,0表示完全丢掉。

回到基于前面的词预测最后一个词的语言模型中,如果这个cell state包含有前一个话题的特征,那么正确的代词会被用到(?),如果从一个新的话题开始,那么旧话题的特征将被遗忘掉。

LSTM论文翻译-《Understanding LSTM Networks》_第10张图片


下一步决定哪些新的信息将被加入cell state。这由两部分构成,一是由sigmoid层构成的输入门,它用来决定哪些值要更新。另一个是tanh层构成的新候选值的向量生成器,可能会被输入到cell state里面。

例如,语言模型中,想要把新话题加入到cell state中替换旧话题。

LSTM论文翻译-《Understanding LSTM Networks》_第11张图片


接下来,前一个cellstate(输入到当前cell state)中,前面已经决定了要做什么,这里只需要一次完成就好。

乘(前面讲到的forget gate的输出),然后加上,旧状态加新的候选信息,组成当前cellstate.

在语言模型中,旧话题的某些特征丢掉,加入新话题的一些特征就组成了当前的话题。

LSTM论文翻译-《Understanding LSTM Networks》_第12张图片


最后决定要输出什么。这个输出基于cell state,但会有一个滤波过程。首先,一个sigmoid层决定哪些cell state输出,同时将cell state输入到tanh层,乘sigmoid门的输出,得到最后的输出。

对于语言模型,通过输出信息去关联一个词,这个词就是句子的最后一个词。例如,这个输出指向单话题,还是复合话题,以此来决定下一个词是否成对出现(?)。

LSTM论文翻译-《Understanding LSTM Networks》_第13张图片


 

6.    LSTM的变体

上面描述的是最常见的标准LSTM,但是不是所有LSTM都是这样子的。事实上,每篇致力于LSTMs的paper所用的版本都有微小的差别,这些差别真的很小,但是其中一些是值得一提的。

其中一种流行的变体由Gers和Schmidhuber提出,加入了“peepholeconnections”。这意味着,cell state也输入到门中来判别哪些丢,哪些加。

LSTM论文翻译-《Understanding LSTM Networks》_第14张图片

上面的框图把所有的门中都加入cell state,但有很多paper只部分加入。

另一种变体用一对互斥的forget和input门,而不是独立决定丢和加。丢和加倍同时决定,也就是丢弃的值用新的输入信息替代。

LSTM论文翻译-《Understanding LSTM Networks》_第15张图片


还有一种更有趣的变体是GRU(GatedRecurrent Unit),由cho提出,它结合forget和input门为一个“update”门。并将cell state和hidden state合并,整个模型比LSTM简单,它也正慢慢流行起来。

LSTM论文翻译-《Understanding LSTM Networks》_第16张图片

以上只是一小部分的LSTM变体,还有很多其他可用的,如Depth Gated RNNs,还有一些完全不同的消除长句依赖的,如koutaik提出的cl

你可能感兴趣的:(NLP)