AI 科技评论按:这篇文章非常经典,出自 Google Brain 科学家 Christopher Olah 的博客,小编保证这是相对通俗易懂的一篇入门介绍了,看不懂的话欢迎关注「AI 科技评论」私聊。
如果你对深度学习稍有些研究的话,相信你一定听说过 LSTM,AI 科技评论此前也编译过 LSTM 之父 Jürgen Schmidhuber 的访谈文章,他与 Sepp Hochreiter 在 1997 年发表的一篇论文中提出了 LSTM 的概念。
LSTM 能够提升神经网络接受输入信息及训练数据的记忆机制,让输出结果得到大幅度的提升。虽然因为当时的硬件限制不那么广为人知,但近年来包括谷歌在内的一系列公司都开始在深度学习中采用 LSTM。
那么 LSTM 到底是什么呢?AI 科技评论今天介绍的这篇文章出自 Google Brain 科学家 Christopher Olah 的博客,AI 科技评论在原文的基础上加入了一些自己的理解,尽量保证这是最简单的入门介绍了,看不懂的话欢迎关注「AI 科技评论」私聊。
在开始 LSTM 的入门前,别急,让我们先了解一下 RNN。如果你有一定的基础,雷锋网建议你直接跳过这一部分。
首先,人们在思考问题的时候,并不会从零开始,而是会凭借自己以往的一些经验与记忆做出判断。最简单的例子,就是你现在正在阅读的过程中,你不会孤立地理解所读的每一个词,而会结合前面所看到的词来理解意义。也就是说,你的思考具备连续性。
传统的神经网络可做不到这一点,而且这俨然是它的一个短板。举个例子,你想要对一部电影里的每个镜头进行分类,判断荧幕上都在演些什么。但是,传统神经网络可能只能孤立地看待每一帧,而无法把上一个镜头串联起下一秒发生的事情。
RNN(循环神经网络)就是为解决这个问题而生的,顾名思义,也就是能够让信息在网络中再次循环的网络。
含有「环」(loop)的循环神经网络
上图是 RNN 的一部分,A 的输入是 xt , 输出为值 ht. 这个循环能够让信息从神经网络中的一步传递到下一步。
这些环看起来让 RNN 变得有些难理解。但是,如果你再想一下,其实它与传统神经网络类似,只不过是把同一个网络多次复制,并将信息传递到下一个网络。如果将这个循环拆开,就能比较容易地理解了:
一个展开的 RNN
像链条一样的网络实际上也体现出 RNN 的一个特点:它与序列或列表有着紧密的联系,而它们是处理此类数据的重要架构(简直就是量身定制的一样!)。
而更重要的是,它们确实得以顺利应用。在过去的几年时间中,RNN 被成功应用于解决各种问题:语音识别、语言建模、机器翻译、为图像起标题等……而且它的应用领域还在不断扩展。它到底有多牛?我就不在这里赘述了。
这些成功的关键在于它们使用了 LSTM。LSTM 是 RNN 的一种特殊形式,而它的普适性比起传统的 RNN 要好得多。几乎所有激动人心的发现都是在 LSTM 上实现的,而这也是雷锋网在接下来的篇幅中所要讨论的内容。
RNN 的一大魅力在于它能够将此前的信息结合到当前的任务中,比如像我们刚才提及的电影例子一样,利用此前的帧信息理解当前的内容。如果 RNN 能实现这一点,那诚然非常有效。但事实是否如愿?不一定。
有时,我们只需要利用近期信息来处理当前任务。比如在一个语言模型中,如果我们尝试根据几个单词来预测下一个单词,像我们要猜出「the clouds are in the _____」,但是因为句义已经非常明显,我们不需要更多的上下文。在这种情况下,相关信息所隔的距离并不远,因此 RNN 能够学会使用此前的信息。
但是,就像我们做完型填空时,可能需要整合全文来填某一个句子,比如「I grew up in France….(雷锋网此处省略一万字)I speak fluent _____ .」。如果网络只知道邻近的几个单词,可能它会知道此处需要填写一门语言,但至于应该填什么,就需要找到更远前的信息,直到 找到 France 才行。这种需要寻找相距很远信息的情况,实际上非常常见。
而糟糕的是,距离增加时,RNN 能将相关信息串联起来的能力也就越弱。正如雷锋网云,世界上最遥远的距离不是生与死,而是明明在同一个段落里,却找不到相关联的词语。
理论上,RNN 是能够处理这种「遥远」的问题的。我们能够人为地挑选出一些参数,解决依赖问题中较为简单的任务。不过在实践中,RNN 并不能自主地处理这些任务。这个问题 Hochreiter (1991) [German] 与 Bengio, et al. (1994) 已经进行过探讨并找到了相关方法。
幸运的是,LSTM 不存在这个问题。
长短期记忆网络——通常也被简称为 LSTMs——是一种特殊类型的 RNN,能够学习长期的依赖关系。这个网络就像雷锋网所说的,由 Sepp Hochreiter 和 Jürgen Schmidhuber 在 1997 年提出,并加以完善与普及,LSTM 在各类任务上表现良好,因此也被广泛使用。
LSTM 就是为了解决长期依赖问题而生,也就是说,对信息的长期记忆是它们的自发行为,而不是刻意去学习的。
所有的 RNN 都具备重复性的链条形式,而在标准的 RNN 中,这个重复模式都有着一个简单的结构,比如单层的 tanh 层。
标准 RNN 的重复模块里都有一个单层网络
LSTM 也有这种结构化的链条,但重复性模块有着不同的结构。与 RNN 不同的是,LSTM 中有一个四层的网络,并以一种特殊的方式进行交互。
LSTM 网络的重复模块包含一个四层的交互网络
然而我们并不需要在意这些细节。接下来,请和雷锋网一起对 LSTM 图进行一步步的梳理。现在,让我们一起熟悉下接下来会用到的一些符号。
在上面所示的图中,
LSTMs 的核心所在是 cell 的状态(cell state),也就是下图这条向右的线。
Cell 的状态就像是传送带,它的状态会沿着整条链条传送,而只有少数地方有一些线性交互。信息如果以这样的方式传递,实际上会保持不变。
LSTM 通过一种名为「门」(gate)的结构控制 cell 的状态,并向其中删减或增加信息。
雷锋网注:你可以把门理解为一种控制信息通过的方式。门由一个 sigmoid 网络层与一个按位乘操作构成。
Sigmoid 层的输出值在 0 到 1 间,表示每个部分所通过的信息。0 表示「对所有信息关上大门」;1 表示「我家大门常打开」。
一个 LSTM 有三个这样的门,控制 cell 的状态。
首先,LSTM 的第一步需要决定我们需要从 cell 中抛弃哪些信息。这个决定是从 sigmoid 中的「遗忘层」来实现的。它的输入是 ht-1 和 xt,输出为一个 0 到 1 之间的数。Ct−1 就是每个在 cell 中所有在 0 和 1 之间的数值,就像我们刚刚所说的,0 代表全抛弃,1 代表全保留。
再拿刚才预测单词的语言模型来举例,cell 的状态可能会需要考虑主语的性别,这样才能找到正确的代词。因此如果我们设定,如果看到了一个新的主语,就「忘记」旧的主语所代表的性别。
下一步,我们需要决定什么样的信息应该被存储起来。这个过程主要分两步。首先是 sigmoid 层(输入门)决定我们需要更新哪些值;随后,tanh 层生成了一个新的候选向量 C`,它能够加入状态中。
最后,我们将这两个值结合起来,并更新 cell 的状态。
在 AI 科技评论方才提及的这个例子中,我们需要将新主语的性别信息加入 cell 的状态中,以替换要忘记的旧信息。
接下来,我们就可以更新 cell 的状态了。将旧状态与 ft 相乘,忘记此前我们想要忘记的内容,然后加上 C`。得到的结果便是新的候选值,依照我们决定的值进行缩放。
在这个语言模型中,这个过程就实现了我们所设想的目标:遇到一个新主语时,就忘记旧语言的性别。
最后,我们需要确定输出的内容。这个输出内容取决于我们的 cell 状态,但这是一个经过过滤的版本。
对于语言模型的例子,当它只看到一个主语时,就可能会输出与动词相关的信息。比如它会输出主语是单数还是复数。这样的话,如果后面真的出现了动词,我们就可以确定它的形式了。
目前我所提及的 LSTM,只是最最基本的形式,并不是所有的 LSTM 长得都一样一样的。实际上,所有提及 LSTM 的论文都有着小小的改动,这些改进虽然并不明显,但值得在这里一提。
时尚时尚最时尚的 LSTM 变体就是 Gers & Schmidhuber (2000) 提出的「猫眼连接」(peephole connections)的神经网络,也就是说,门连接层能够接收到 cell 的状态。
上图展示了全加上「猫眼」的效果,但实际上论文中并不会加这么多啦。
另一种变体就是采用一对门,分别叫遗忘门(forget)及输入门(input)。与分开决定遗忘及输入的内容不同,现在的变体会将这两个流程一同实现。我们只有在将要输入新信息时才会遗忘,而也只会在忘记信息的同时才会有新的信息输入。
一个比较惹眼的变体为 GRU(Gated Recurrent),由 Cho, et al. (2014) 提出。他将遗忘门与输入门结合在一起,名为「更新门」(update gate),并将 cell 状态与隐藏层状态合并在一起,此外还有一些小的改动。这个模型比起标准 LSTM 模型简单一些,因此也变得更加流行了。
当然,这里所列举的只是一管窥豹,还有很多其它的变体,比如 Yao, et al. (2015) 提出的 Depth Gated RNNs;或是另辟蹊径处理长期依赖问题的 Clockwork RNNs,由 Koutnik, et al. (2014) 提出。
哪个是最好的呢?而这些变化是否真的意义深远?Greff, et al. (2015) 曾经对比较流行的几种变种做过对比,发现它们基本上都差不多;而 Jozefowicz, et al. (2015) 测试了超过一万种 RNN 结构,发现有一些能够在特定任务上超过 LSTMs。
早些时候,我曾经提及很多人用 RNN 取得重要进步,而这些都是基于 LSTM 的网络。它们的确在大多数任务上表现颇佳!
在前文中,雷锋网小编贴出了好多公式呀,概念呀,算法呀,搞得 LSTM 好像有点吓人。但是呢,我们希望一步步的解读能让 LSTM 于你而言,不再是一头雾水的一个概念,让它变得更加有人味一些。
LSTM 对于 RNN 来说是一个大的进步。在有了 LSTMs 后,越来越多的任务都可用 RNN 来解决了。那么自然地,我们会想:是否还会有下一个 LSTM 式的飞跃呢?学界普遍的一个答案是,会的!下一步就是 attention 了。Attention 是什么?也就是说,从 RNN 的每一步中提取信息,并形成一个更大的信息集合。比如使用 RNN 产生能描述图片的标题时,它可能只选择图片的一部分进行关注。实际上,Xu, et al. (2015) 就是这样做的——这可能会成为你探索 attention 算法的一个切入口。目前采用 attention 的研究也已经取得了不少进展,可能已经走到了飞跃的十字路口吧……
除了 attention,RNN 领域中还有其它的研究方向,比如 Kalchbrenner, et al. (2015) 的 Grid LSTMs 前景不错,而生成模型中的 RNN 同样也令人印象深刻:比如 Gregor, et al. (2015)、 Chung, et al. (2015) 或是 Bayer & Osendorfer (2015) 的论文。
过去几年间,RNN 可谓是深度学习的宠儿,我也同样相信接下来的数年也会是这样。