深度丨目前最受欢迎的 LSTM 教程:谷歌大脑科学家亲解

x
用微信扫描二维码
分享至好友和朋友圈

  

  编者按:

  这篇文章非常经典,出自 Google Brain 科学家 Christopher Olah 的博客,小编保证这是相对通俗易懂的一篇入门介绍了。如果你对深度学习稍有些研究的话,相信你一定听说过 LSTM, LSTM 之父 Jürgen Schmidhuber 与 Sepp Hochreiter 在 1997 年发表的一篇论文中提出了 LSTM 的概念。LSTM 能够提升神经网络接受输入信息及训练数据的记忆机制,让输出结果得到大幅度的提升。虽然因为当时的硬件限制不那么广为人知,但近年来包括谷歌在内的一系列公司都开始在深度学习中采用 LSTM。

  那么 LSTM 到底是什么呢?

  今天介绍的这篇文章出自 Google Brain 科学家 Christopher Olah 的博客,编者在原文的基础上加入了一些自己的理解,尽量保证这是最简单的入门介绍了。

  首先,了解一下 RNN 吧

  在开始 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 不存在这个问题。

  LSTM 网

  长短期记忆网络——通常也被简称为 LSTMs——是一种特殊类型的 RNN,能够学习长期的依赖关系。这个网络由 Sepp Hochreiter 和 Jürgen Schmidhuber 在 1997 年提出,并加以完善与普及,LSTM 在各类任务上表现良好,因此也被广泛使用。

  LSTM 就是为了解决长期依赖问题而生,也就是说,对信息的长期记忆是它们的自发行为,而不是刻意去学习的。

  所有的 RNN 都具备重复性的链条形式,而在标准的 RNN 中,这个重复模式都有着一个简单的结构,比如单层的 tanh 层。

  

  标准 RNN 的重复模块里都有一个单层网络

  LSTM 也有这种结构化的链条,但重复性模块有着不同的结构。与 RNN 不同的是,LSTM 中有一个四层的网络,并以一种特殊的方式进行交互。

  

  LSTM 网络的重复模块包含一个四层的交互网络

  然而我们并不需要在意这些细节。接下来,我们对 LSTM 图进行一步步的梳理。现在,让我们一起熟悉下接下来会用到的一些符号。

  

   在上面所示的图中,

  

黄块表示神经网络层;
粉圈代表按位操作(pointwise operations),如向量加法;
每条线代表着一整个向量(vector),用来表示从一个节点的输出到另一个节点的输入;
合并的线代表连接(concatenate);
分叉的线表示复制(copy)。

  LSTMs 的核心

  LSTMs 的核心所在是 cell 的状态(cell state),也就是下图这条向右的线。

  Cell 的状态就像是传送带,它的状态会沿着整条链条传送,而只有少数地方有一些线性交互。信息如果以这样的方式传递,实际上会保持不变。

  

  LSTM 通过一种名为「门」(gate)的结构控制 cell 的状态,并向其中删减或增加信息。

  注:你可以把门理解为一种控制信息通过的方式。门由一个 sigmoid 网络层与一个按位乘操作构成。

  

  Sigmoid 层的输出值在 0 到 1 间,表示每个部分所通过的信息。0 表示「对所有信息关上大门」;1 表示「我家大门常打开」。

  一个 LSTM 有三个这样的门,控制 cell 的状态。

  解读 LSTM:一个关于“遗忘”的故事

  首先,LSTM 的第一步需要决定我们需要从 cell 中抛弃哪些信息。这个决定是从 sigmoid 中的「遗忘层」来实现的。它的输入是 ht-1 和 xt,输出为一个 0 到 1 之间的数。Ct1 就是每个在 cell 中所有在 0 和 1 之间的数值,就像我们刚刚所说的,0 代表全抛弃,1 代表全保留。

  再拿刚才预测单词的语言模型来举例,cell 的状态可能会需要考虑主语的性别,这样才能找到正确的代词。因此如果我们设定,如果看到了一个新的主语,就「忘记」旧的主语所代表的性别。

  

  下一步,我们需要决定什么样的信息应该被存储起来。这个过程主要分两步。首先是 sigmoid 层(输入门)决定我们需要更新哪些值;随后,tanh 层生成了一个新的候选向量 C`,它能够加入状态中。

  最后,我们将这两个值结合起来,并更新 cell 的状态。

  在 方才提及的这个例子中,我们需要将新主语的性别信息加入 cell 的状态中,以替换要忘记的旧信息。

  

  接下来,我们就可以更新 cell 的状态了。将旧状态与 ft 相乘,忘记此前我们想要忘记的内容,然后加上 C`。得到的结果便是新的候选值,依照我们决定的值进行缩放。

  在这个语言模型中,这个过程就实现了我们所设想的目标:遇到一个新主语时,就忘记旧语言的性别。

  

  最后,我们需要确定输出的内容。这个输出内容取决于我们的 cell 状态,但这是一个经过过滤的版本。

  

首先,我们会运行一个 sigmoid 层决定 cell 状态输出哪一部分。
随后,我们把 cell 状态通过 tanh 函数,将输出值保持在-1 到 1 间。
之后,我们再乘以 sigmoid 门的输出值,就可以得到结果了。

  对于语言模型的例子,当它只看到一个主语时,就可能会输出与动词相关的信息。比如它会输出主语是单数还是复数。这样的话,如果后面真的出现了动词,我们就可以确定它的形式了。

  

  LSTM 的各种「变体」

  目前我所提及的 LSTM,只是最最基本的形式,并不是所有的 LSTM 长得都一样一样的。实际上,所有提及 LSTM 的论文都有着小小的改动,这些改进虽然并不明显,但值得在这里一提。

  时尚时尚最时尚的 LSTM 变体就是 Gers & Schmidhuber (2000) 提出的「猫眼连接」(peephole connections)的神经网络,也就是说,门连接层能够接收到 cell 的状态。

  

  上图展示了全加上「猫眼」的效果,但实际上论文中并不会加这么多啦。

  另一种变体就是采用一对门,分别叫遗忘门(forget)及输入门(input)。与分开决定遗忘及输入的内容不同,现在的变体会将这两个流程一同实现。我们只有在将要输入新信息时才会遗忘,而也只会在忘记信息的同时才会有新的信息输入。

  

  一个比较惹眼的变体为 GRU(GatedRecurrent),由 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 可谓是深度学习的宠儿,我也同样相信接下来的数年也会是这样。

  转载声明:本文转载自「AI科技评论」,搜索「aitechtalk」即可关注。

  本周三我们即将迎来机器翻译的课程,大家在课前认真读一下这篇文章,提前预习一下 LSTM 的知识。

  相关阅读:

  【 深度学习 】 用CNN、LSTM、RNN搭建人工智能小作家

  关注集智AI学园公众号

  获取更多更有趣的AI教程吧!

  搜索微信公众号:swarmAI

  集智AI学园QQ群:426390994

  学园网站:campus.swarma.org

  

   商务合作|zhangqian@swarma.org

  投稿转载|wangjiannan@swarma.org

特别声明:本文为网易自媒体平台“网易号”作者上传并发布,仅代表该作者观点。网易仅提供信息发布平台。

跟贴 跟贴 6 参与 109
© 1997-2019 网易公司版权所有 About NetEase | 公司简介 | 联系方法 | 招聘信息 | 客户服务 | 隐私政策 | 广告服务 | 网站地图 | 意见反馈 | 不良信息举报

集智俱乐部

科普人工智能相关知识技能

头像

集智俱乐部

科普人工智能相关知识技能

1073

篇文章

1267

人关注

列表加载中...
请登录后再关注
x

用户登录

网易通行证/邮箱用户可以直接登录:
忘记密码