深度模型(一):LSTM

本文翻译自Understanding LSTM Networks

循环神经网络

人类并不是每次都是从零开始去思考一个问题的。比如你在阅读这篇文章时,你对当前每个字的理解都是基于前面字的理解的,并不是孤立的去理解每个字的意思。

传统的神经网络做不到这点,者看起来是个很大的问题。比如,你想对电影里出现的事件进行分类,传统的神经网络就没办法用前面事件的信息和理解来推断后面事件的类型。

循环神经网络克服了这个问题。网络结构中存在着环路,允许信息得以保存。

在这里插入图片描述

上面图中神经网络A,查看当前时刻的输入 x t x_t ,以及上一时刻传递过来的信息,产生输出 h t h_t 。另外 t t 时刻网络A的信息传递到下一时刻的网络A。

以上的循环神经网络开展后,相当于下图右侧的网络结构:

在这里插入图片描述

从右侧展开后的网络结构可以看出,这样的网络结构与数据的顺序结构紧密相关,天生适合处理顺序结构数据。

在过去的几年里,RNN在很多领域获得了非常显著的效果,包括语音识别,语言模型,机器翻译,图片描述,等等。Andrej Karpathy在文章The Unreasonalble Effectiveness of Recurrent Neural Networks里讨论了RNN的很多炫酷的特性,这里就不展开了。不过它们确实非常令人惊奇。

RNN在上述的领域内取得的成功,离不开一种称为LSTM循环神经网络,在很多任务上,它的效果远远好于普通的循环网络。本文将重点讨论LSTM的结构和特性。

长期依赖的问题

RNN的呼声来自于这样一个思想:RNN可能会将前面的信息传递到当前的任务,比如利用电影里前面画面的信息来理解当前画面。如果能做到这点,那将非常有用。RNN能做到吗?结果是得具体情况具体分析。

有时我们在预测当前任务的时候只需要查看最近的信息。例如,考虑这样一个语言模型:基于前置单词来预测当前单词。如果我们需要预测语句"the clouds are in the sky"的最后一个单词"sky",我们不需要更多的上下文信息了,依据前面的"the clouds are in the"很明显可以预测出最后一个单词是"sky".这种情况下,信息与信息需要使用的地方的间隔比较小,RNN可以学习到过去的信息。

在这里插入图片描述

但是也存在这样的情况:我们需要更多的上下文信息。我们考虑这样一句话"I grew up in France,…,I speak fluent French".同样我们还是预测最后一个单词"French".最近的上文信息提示我们,最后一个单词可能是一种语言。但是要确定具体是哪种语言,我们需要更加靠前的上文信息,“France”。也就是,相关信息出现的点与需要信息的点,可能相隔的较大。

不幸的是,随着间隔的增大,RNN学习难度也在增大。

在这里插入图片描述

理论上,RNN是绝对可以处理这种"长期依赖"的问题。比如可以通过人工挑选参数的方式处理例子中的问题。但是实际当中,RNN不太能自动学习到这些参数。Hochreiter和Bengio曾深入的研究过此问题,发现了一些造成学习困难的基本层面的原因。

幸好,LSTM没有这个问题。

LSTM

长短期记忆网络,是一种特殊的RNN,能够学习到长期的依赖信息。由Hochreiter & Schmidhuber提出,之后很多人进行了修改和改进。在很多问题上表现很好,广泛被使用。

普通是循环神经网络都由一种网络的链式结构组成,其中的网络结构比较简单,比如就是一个tanh层,如下图:

在这里插入图片描述

LSTM也是这种链式结构的,但是其中重复的网络结构不一样,结构比较复杂:

在这里插入图片描述

不用担心网络结构的细节,接下来我会一一讲解。讲解之前,我们来先来熟悉一下一些符号的含义:

在这里插入图片描述

LSTM核心思想

LSTM的关键点在于网络状态,被称为细胞状态(cell state),横向贯穿整个网络的一条线,表示细胞状态的传递和变化。细胞状态就像一条传送带,贯穿整个网络,并且只有较少的线性交互。信息很容易通过这条传送带传输下去。
在这里插入图片描述

通过一种称为门的网络结构,LSTM可以往细胞状态里添加和移除信息。

门是一种控制信息通过的方法。它由sigmoid网络层的输出和点乘操作组成。

在这里插入图片描述
sigmoid的输出在0到1之间,控制信息的通过量。0表示不让信息信息通过,1表示让全部信息通过。

LSTM有三种门,控制细胞状态的变化和传递。

LSTM结构

LSTM的第一个步就是决定从细胞状态里丢弃掉哪些信息。这步通过"遗忘门"来实现。遗忘门输入为 h t 1 h_{t-1} x t x_t ,为细胞状态 C t 1 C_{t-1} 的每个数输出一个0到1之间的数,1表示保留全部信息,0表示全部丢弃。

回到我们的语言模型的例子:预测一句话中的最后一个单词。这个问题中,细胞状态可能会包含当前主语性别的信息。当遇到一个新主语的时候,我们需要遗忘掉旧主语的性别信息。

在这里插入图片描述

第二步是要决定往细胞状态里添加哪些信息。通过两步计算废除,首先称为输入门的sigmoid网络决定更新哪些信息。然后,tanh层输出一个新的候选值 C ~ t \tilde C_t 。最后结合二者输出一个更新值。

在这里插入图片描述

现在是时候更新旧的细胞状态 C t 1 C_{t-1} 了,我们将旧的状态 C t 1 C_{t-1} 乘以 f t f_t ,遗忘掉需要遗忘的信息。然后加上 i t C ~ t i_t*\tilde C_t ,这是新的候选细胞状态,乘以需要更新的量。

在这里插入图片描述

最后,我们需要决定输出什么。输出基于当前的细胞状态,但是细胞状态值要经过一次过滤。首先通过一个sigmoid网络学习细胞状态的哪些部分需要输出,然后我们让细胞状态通过tanh网络层(使得输出在-1到1之间)之后,与sigmoid网络输出进行点乘运算。

回到语言模型的例子:预测语句最后一个单词的例子,我们可能需要输出主语关于谓词的相关信息。比如需要输出主语是单数还是复数的信息,决定谓词用单数形式还是复数形式:

在这里插入图片描述

##LSTM的变体网络

目前为止我描述的都是普通的LSTM。并不是所有的LSTM都跟上文书描述的结构一模一样的。实际上,所有涉及LSTM的论文中,都对LSTM做了写改动。差别不是很大,但是也很值得一提。

Ger & Schmidhuber提出的一种LSTM的变体,是比较流行的变体之一。与普通LSTM相比,添加了偷窥连接(peehole connections).也就是让遗忘门、输入门、输出门看到细胞状态:
在这里插入图片描述

一些论文里也会只给其中某几个门添加偷窥连接,而不是全部添加。

另一个变体是使用成对的遗忘和输入门。一起决定遗忘和输入门的值,而不是分开决定。我们只遗忘需要添加的信息,我们只添加需要遗忘的信息:
在这里插入图片描述

另一个引人注目的变体是GRU(Gated Recurrent Unit),由Cho 2014年提出。将遗忘门和输入门结合到一起,称为更新门。并且结合了细胞状态和输出状态值。最后的模型比标准的LSTM简单:
在这里插入图片描述

以上是少数最著名的LSTM变体。还有很多其他变体,并且还有很多其他克服长期依赖问题的模型。

哪种模型最好呢?他们之间的差异关键吗?Greff 2015年对流行的变体做了一个比较,发现他们效果相差无几。Jozefowicz 2015测试了超过1万种RNN的结构,发现在特征的任务上某些模型优于LSTM模型。

发布了52 篇原创文章 · 获赞 105 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/gaofeipaopaotang/article/details/97270571