是时候放弃递归神经网络了!

我们曾经很喜欢递归神经网络(RNN)、长短期记忆(LSTM)及它们的所有变体。现在是时候放弃它们了!

2014年,LSTM和RNN强势归来。我们都读过Colah的博客和Karpathy对RNN的颂歌。但那时我们都很年轻且没有经验。

一直以来,他们都是解决序列学习、序列翻译(seq2seq)的方法,这提高了语音转文本的效果,也造成了Siri、Cortana、Google语音助理Alexa这些应用的崛起。

另外,还有机器翻译(神经网络机器翻译系统),它能够将文档翻译成不同的语言,还可以将图像翻译成文本,由文字生成图像以及生成字幕视频等……

在接下来的2015-2016年,ResNet和Attention出现了。这两者让人们更好地理解到LSTM是一种巧妙的旁路技术,同时注意力机制表明MLP网络是可以被受上下文向量影响的平均网络所取代。这些稍后再说。

虽然只用了2年时间,但今天我们可以肯定地说:

“扔掉你的RNN和LSTM,它们不好!“

这不仅仅是说说而已,有证据表明,谷歌,Facebook,Salesforce等越来越多地使用基于注意力的网络。所有这些公司已经用基于注意力的模型取代了RNN及其变体,而这只是一个开始。

由于RNN比Attention需要更多的资源来训练和运行,RNN在所有应用程序中存活的时间有限。这篇报道提供了更多信息。

但是为什么呢?

请注意RNN、LST及其变体主要是随着时间的推移使用顺序处理。请参阅下图中的水平箭头:

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

这个箭头意味着长距离信息必须在到达当前处理单元之前顺序穿过所有单元。这表示它可以很容易地被小于0的数相乘很多次而损坏。这就是梯度消失的原因。

为了解决这个问题, LSTM模型出现了,它可以被看作是多个开关门,有点像ResNet,它可以绕过单元节点从而记住更长的时间步骤。因此,LSTM可以消除一部分的梯度消失问题。

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

但这不是全部,正如你从上图所看到的那样。尽管如此,我们仍然有一条从旧单元到新单元的序列路径。事实上,这条路径更加复杂,因为它具有增加和遗忘分支连接。

毫无疑问,LSTM、GRU及其变体能够学习大量更长期的信息!可以在这里查看结果; 但他们只可以记住100s的序列,而不是1000s或10000s或更多。

RNN的一个问题是它们不是硬件友好的。这里解释一下:它需要很多我们没有的资源来快速训练这些网络。同样在云中运行这些模型也需要大量资源,并且由于语音转文本的需求正在迅速增长,云是不可扩展的。

我们需要在边缘进行处理,然后直接进入Amazon Echo! 有关更多详情,请参阅后面的注解。

我们应该做什么?

如果要避免序列处理,那么我们可以找到“前进”或“回溯”的单元,因为大部分情况我们处理的是实时因果数据,我们知道过去并希望影响未来的决定。

但是在翻译句子或分析录制的视频时并非如此,例如,我们拥有所有数据并可以花更多的时间来推理。这样的回溯/前进单元正是神经注意力模型,我们之前在这里解释过。

为了解决这个问题,我们结合多个神经注意力模块,如下图所示的“分层神经注意力编码器”:

Hierarchical neural attention encoder

查看过去的更好方法是使用注意力模块将所有过去的编码向量汇总到上下文向量Ct中。

请注意,这里有一个分层注意力模块结构,与分层神经网络的结构非常相似。这也类似于下面的注3中的时域卷积网络(TCN)。

在分层神经注意力编码器中,多层注意力可以查看过去的最近一小部分,比如说100个向量,而上面的层可以查看这100个注意力模块,有效地整合100 x 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及其变体与硬件加速不太匹配,我们在这里和这里讨论了这个问题。 一个解决方案是在内存设备中进行计算,正如我们使用FWDNXT。

注解

注解1:

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

注解2:分层神经注意力模型也可以是双向的。

注解3:这里是一篇比较CNN和RNN的论文。时域卷积网络(TCN)“在不同范围的任务和数据集上优于经典的循环网络,如LSTM,同时展示出更长的有效记忆。”

注解4:与这个主题相关的是,我们对人脑如何学习和记忆序列知之甚少。“我们经常用小片段来学习和回忆长序列,例如记忆电话号码858 534 22 30为四个片段。

行为实验表明,人类和一些动物采用这种在各种任务中将认知或行为序列分解为块的策略”——这些小片段让我想起小卷积或像小序列上的网络那样的注意力机制,然后有层次的串在一起,就如在分层神经注意力编码器和时域卷积网络(TCN)中一样。

更多的研究使我思考工作记忆与使用复发性真实神经网络的RNN网络类似,并且其容量非常低。另一方面,皮质和海马层使我们有能力记住一系列长步骤(例如:5天前我在机场停车的位置),这表明在回忆长序列时可能会涉及到更多的平行途径,其中注意力机制在与最终目标或任务无关的序列部分中关闭重要的块和强制跳跃。

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

-END-

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180626B1DG7300?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券