抛弃 RNN 和 LSTM 吧,它们不好!

2018 年 4 月 16 日 云头条

作者简介:Eugenio Culurciello是FWDNXT的CTO兼总裁,在神经网络领域(包括软硬件)有着近20年的从业经验。



长期以来我们迷恋循环神经网络(RNN)、长短期记忆(LSTM)及其所有衍生版本。现在是时候抛弃它们了!


2014 年,RNN和LSTM起死回生,打了场漂亮的翻身仗。我们都读过Colah的博文《了解LSTM网络》


(http://colah.github.io/posts/2015-08-Understanding-LSTMs/)


和 Karpathy 对RNN大唱赞歌的文章《效果无比出色的循环神经网络》


(http://karpathy.github.io/2015/05/21/rnn-effectiveness/)


此后几年,RNN和LSTM是解决序列到序列学习(seq2seq)转换的方法,这还促使语音到文本理解方面取得了出色的成果,并直接促成了Siri、Cortana、谷歌语音助理和 Alexa大行其道。此外别忘了机器翻译或神经机器翻译,不仅能够将文档翻译成不同的语言,还能够将图像翻译成文本、将文本翻译成图像以及将视频翻译成自然语言等,RNN和LSTM的流行程度想必你也有数了。


在随后几年(2015年至2016 年),出现了ResNet:


(https://arxiv.org/abs/1512.03385)


和Attention:


(注意力,https://arxiv.org/abs/1502.03044)


我们因此有了更深入的认识,LSTM是一种巧妙绕过的技术。基于注意力的模型也表明,可以对受上下文向量(context vector)影响的网络求平均值(averaging),以此取代MLP网络。下文会详细讨论这方面。


才过了两年多的时间,现在我们可以肯定地说:

“抛弃你的RNN和LSTM吧,它们不好!”


不要只听我们的一面之词,不妨看看表明基于注意力的模型被谷歌、Facebook和Salesforce等巨头越来越多地使用的迹象。所有这些公司将RNN及衍生版本换成了基于注意力的模型,而这只是个开始。RNN在各种应用场景下时日无多,因为相比基于注意力的模型,RNN需要更多的资源来训练和运行。请参阅以下文章可了解更多信息。


(https://towardsdatascience.com/memory-attention-sequences-37456d271992)


但原因何在?


要知道,RNN、LSTM 及衍生版本使用的主要是顺序处理。参阅下图中的水平箭头:


RNN中的顺序处理,来自http://colah.github.io/posts/2015-08-Understanding-LSTMs/。


这个箭头意味着,长期信息到达当前处理单元之前,要按顺序通过之前的所有单元。这意味着长期信息很容易因< 0的小数多次相乘而受到损坏。这就是梯度消失的根源。


为此,LSTM模块应运而生,如今可以将它视为多个转换门(switch gate)。有点像ResNet,它可以绕过一些单元,因而记忆更长的时间步。因此,LSTM有方法可以消除一些梯度消失问题。


LSTM 中的顺序处理,来自http://colah.github.io/posts/2015-08-Understanding-LSTMs/。


但不能解决所有梯度消失问题,如上图所示。我们仍存在一条从旧的过去单元到当前单元的顺序路径。实际上,现在这条路径来得还要复杂,因为添加分支和遗忘分支连接在路径上。毫无疑问,LSTM、GRU及衍生版本能够学习大量的长期信息!参见此处的结果(http://karpathy.github.io/2015/05/21/rnn-effectiveness/),但是它们只能记住上百个字符,而不是上千或上万个字符。


http://karpathy.github.io/2015/05/21/rnn-effectiveness/


RNN的一个问题是,它们很耗费硬件资源。容我解释一下:快速训练RNN需要大量的资源,而我们没有这这么多资源。在云端运行这种模型同样需要大量资源;考虑到市场对语音到文本的需求迅猛增长,云无法灵活扩展。我们需要在边缘处理,甚至直接在Amazon Echo端处理!


你该如何是好?


如果要避免顺序处理,那么我们得找到“向前预测”或“向后回顾”的单元,因为大多数时候我们处理的是实时因果数据:我们知道过去的情况,想要影响未来的决策。这与翻译句子或分析录制视频时不一样:我们拥有所有数据,可以对它推理多次。这种向前预测和后向回顾的单元是神经注意力模块,我们之前在此作过解释(https://medium.com/@culurciello/neural-networks-building-blocks-a5c47bcd7c8d)。



这时候,“层次型神经注意力编码器”应运而生,结合了多个神经注意力模块,如下图所示:


层次型神经注意力编码器


想了解过去,一种更好的方法是,使用注意力模块将所有过去的编码向量总结为上下文向量Ct。


请注意:这里有注意力模块的层次体系,非常类似神经网络的层次体系。这还类似时间卷积网络(TCN),文末附注3有介绍。


在层次型神经注意力编码器中,多层注意力模块可查看最近过去的一小部分,比如100个向量,而上面层可查看100个这样的注意力模块,实际上整合了100×100个向量的信息。这将层次型神经注意力编码器的能力扩大到10000个过去的向量。


这就是回顾更多过去信息、预测未来的一种方法。


但更重要的是看一下将表示向量传播到网络输出所需要的路径长度:在层次型网络中,它与log(N)成正比,其中N是指层次体系的层数。这与RNN需要执行的T步骤形成了对照,其中T是需要记住的顺序的最大长度,而T >> N。


如果你跳3次至4次,而不是跳100次,更容易记住顺序!


这种架构类似神经图灵机,但是让神经网络通过注意力决定从记忆中读取什么。这意味着,实际的神经网络将决定过去的哪些向量对未来的决策很重要。


但存储到记忆方面怎么样?不像神经图灵机,上面的架构将所有之前的表示存储在记忆中。这可能效率相当低:设想一下存储一段视频中每个帧的表示――大多数时候,表示向量并不逐帧改变,所以我们其实在存储太多的相同信息!我们能做的是,添加另一个单元以防止关联数据存储起来,比如不存储与之前存储的向量太相似的向量。但这其实是一种改动,最好的方法还是让应用程序指导哪些向量应保存、哪些不应保存。这是当前研究领域的重点。


所以总之,忘了RNN及衍生版本。使用注意力模块。你需要的其实是注意力模块!


把这告诉你的朋友们!让人非常惊讶的是,那么多公司仍在使用RNN/LSTM用于语言到文本的处理,许多公司没有意识到这些网络效率非常低下、无法灵活扩展。让他们有空读一读本文。


补充信息


关于RNN/LSTM训练:RNN和LSTM训练起来很难,因为是它们需要受内存带宽限制的计算,这对硬件设计师来说是最可怕的,最终限制了神经网络解决方案的适用性。简而言之,LSTM需要每个单元4个线性层(MLP层),以便每个顺序时间步运行一次。线性层需要大量的内存带宽才能执行计算;常常由于系统没有足够的内存带宽将数据馈送到计算单元,实际上它们无法使用许多计算单元。添加更多的计算单元很容易,但添加更多的内存带宽却很难(芯片上要有足够多的线路,从处理器到存储器要有长长的连线,等等)。因而,RNN/LSTM及衍生版本对硬件加速而言不是很搭,我们之前探讨过这个问题(https://medium.com/@culurciello/computation-and-memory-bandwidth-in-deep-neural-networks-16cbac63ebd5和https://towardsdatascience.com/memory-attention-sequences-37456d271992)。一种解决方案就是在存储器设备中执行计算。


附注


附注1:层次型神经注意力类似WaveNet中的想法。但我们不使用卷积神经网络,而是使用层次型注意力模块。


附注2:层次型神经注意力也可能是双向的。


附注3:这篇论文(https://arxiv.org/abs/1803.01271)比较了CNN和RNN。时间卷积网络(TCN)“在面对一系列广泛的任务和数据集时比典型的循环网络(比如LSTM)更胜一筹,同时展现了更出色的长期记忆。”

附注4:与这个话题有关的一点是,我们对人脑如何学记顺序信息知之甚少。“我们常常学记和回忆小片段的长顺序信息,比如将电话号码858 534 22 30分四个片段来记。行为实验表明,人类和一些动物在处理众多任务时采用这种策略,将认知或行为顺序分解成小块。”――这些小块让我想到了小型卷积或注意力网络处理小顺序信息,然后按照层次体系串联起来,就像层次型神经注意力编码器和时间卷积网络(TCN)中那样。更多的研究使我认为,工作记忆(working memory)类似使用循环真实神经元网络的RNN网络,它们的容量非常低。另一方面,皮质和海马让我们能够记住顺序很长的步骤(比如:5天前我将车子停在机场的哪个位置),这表明可能需要用到更多的平行路径才能记起顺序很长的步骤。



附注5:上述证据表明我们并不按顺序阅读,实际上我们将字符、单词和句子作为一组来解读。基于注意力的模块或卷积模块可以感知这个顺序,并将这种表示投射在大脑中。如果我们按顺序处理这些信息,就不会误读!我们会停下来,注意到不一致的地方!


欢迎加入行业交流群,群主微信:aclood(备注任职单位+职位,否则不予通过)


相关阅读:

神经网络、AI 很简单!所以......别再装逼、佯称自己是个天才!

AI 天生自带 Bug !

硅谷 90% 的 AI 初创公司已被 IT 巨头收购 !


登录查看更多
2

相关内容

RNN:循环神经网络,是深度学习的一种模型。
【ICML2020-西电】用于语言生成的递归层次主题引导RNN
专知会员服务
21+阅读 · 2020年6月30日
【ICML2020-华为港科大】RNN和LSTM有长期记忆吗?
专知会员服务
74+阅读 · 2020年6月25日
【ICML2020】小样本目标检测
专知会员服务
90+阅读 · 2020年6月2日
一份循环神经网络RNNs简明教程,37页ppt
专知会员服务
172+阅读 · 2020年5月6日
【MIT深度学习课程】深度序列建模,Deep Sequence Modeling
专知会员服务
77+阅读 · 2020年2月3日
【强化学习】深度强化学习初学者指南
专知会员服务
179+阅读 · 2019年12月14日
金融时序预测中的深度学习方法:2005到2019
专知会员服务
166+阅读 · 2019年12月4日
注意力机制介绍,Attention Mechanism
专知会员服务
168+阅读 · 2019年10月13日
基于LSTM深层神经网络的时间序列预测
论智
21+阅读 · 2018年9月4日
基于 Keras 用 LSTM 网络做时间序列预测
R语言中文社区
21+阅读 · 2018年8月6日
一文详解LSTM网络
论智
18+阅读 · 2018年5月2日
学界 | 神奇!只有遗忘门的LSTM性能优于标准LSTM
机器之心
7+阅读 · 2018年4月27日
放弃 RNN/LSTM 吧,因为真的不好用!望周知~
人工智能头条
19+阅读 · 2018年4月24日
关于序列建模,是时候抛弃RNN和LSTM了
数盟
7+阅读 · 2018年4月20日
深度学习基础之LSTM
全球人工智能
28+阅读 · 2017年12月18日
RNN | RNN实践指南(1)
KingsGarden
21+阅读 · 2017年4月4日
Do RNN and LSTM have Long Memory?
Arxiv
19+阅读 · 2020年6月10日
Arxiv
19+阅读 · 2018年10月25日
Symbolic Priors for RNN-based Semantic Parsing
Arxiv
3+阅读 · 2018年9月20日
Arxiv
5+阅读 · 2018年5月5日
Arxiv
7+阅读 · 2018年1月30日
Arxiv
5+阅读 · 2017年9月8日
Arxiv
4+阅读 · 2015年8月25日
VIP会员
相关VIP内容
【ICML2020-西电】用于语言生成的递归层次主题引导RNN
专知会员服务
21+阅读 · 2020年6月30日
【ICML2020-华为港科大】RNN和LSTM有长期记忆吗?
专知会员服务
74+阅读 · 2020年6月25日
【ICML2020】小样本目标检测
专知会员服务
90+阅读 · 2020年6月2日
一份循环神经网络RNNs简明教程,37页ppt
专知会员服务
172+阅读 · 2020年5月6日
【MIT深度学习课程】深度序列建模,Deep Sequence Modeling
专知会员服务
77+阅读 · 2020年2月3日
【强化学习】深度强化学习初学者指南
专知会员服务
179+阅读 · 2019年12月14日
金融时序预测中的深度学习方法:2005到2019
专知会员服务
166+阅读 · 2019年12月4日
注意力机制介绍,Attention Mechanism
专知会员服务
168+阅读 · 2019年10月13日
相关资讯
基于LSTM深层神经网络的时间序列预测
论智
21+阅读 · 2018年9月4日
基于 Keras 用 LSTM 网络做时间序列预测
R语言中文社区
21+阅读 · 2018年8月6日
一文详解LSTM网络
论智
18+阅读 · 2018年5月2日
学界 | 神奇!只有遗忘门的LSTM性能优于标准LSTM
机器之心
7+阅读 · 2018年4月27日
放弃 RNN/LSTM 吧,因为真的不好用!望周知~
人工智能头条
19+阅读 · 2018年4月24日
关于序列建模,是时候抛弃RNN和LSTM了
数盟
7+阅读 · 2018年4月20日
深度学习基础之LSTM
全球人工智能
28+阅读 · 2017年12月18日
RNN | RNN实践指南(1)
KingsGarden
21+阅读 · 2017年4月4日
相关论文
Do RNN and LSTM have Long Memory?
Arxiv
19+阅读 · 2020年6月10日
Arxiv
19+阅读 · 2018年10月25日
Symbolic Priors for RNN-based Semantic Parsing
Arxiv
3+阅读 · 2018年9月20日
Arxiv
5+阅读 · 2018年5月5日
Arxiv
7+阅读 · 2018年1月30日
Arxiv
5+阅读 · 2017年9月8日
Arxiv
4+阅读 · 2015年8月25日
Top
微信扫码咨询专知VIP会员