最近,Google又在论文题目上口出狂言:One Model To Learn Them All,一个模型什么都能学。
非营利研究机构OpenAI的研究员Andrej Karpathy在Twitter上评论说,Google在把自己整个变成一个大神经网络的路上,又前进了一步。
这个题目,可以说继“Attention Is All You Need”之后,再为标题党树立新标杆,量子位作为媒体自愧不如。
这篇最近预发表在Arxiv上的论文说,深度学习挺好,但是每解决一个问题都得建一个模型,还要花好长时间调参、训练,太讨厌了。
于是,他们搞出了一个在各种领域的很多问题上效果都不错的模型MultiModel。
他们现在在训练这个神经网络识别ImageNet图像、进行多种语言的翻译、在COCO数据集上根据图片生成文字说明、做语音识别、做英文语法分析。
这个德智体美劳全面发展的模型,包含卷积层、注意力机制、稀疏门控层。
上面提到的每个计算模块,都会在某些类任务中发挥着关键作用,但有意思的是,就算在那些发挥不了关键作用的任务中,这些模块也没捣乱,大多数时候还稍微有点用……
在数据比较少的任务上,用这个模型和其他任务联合训练效果尤其好。虽然有时候大型任务的性能会下降,也只是降了一点点。
摘要就讲了这些,接下来我们看看论文的详细内容:
多任务模型这个问题,并不是谷歌突发奇想开始研究的,以前也有不少相关论文。但是原来的模型都是一个模型训练一类任务:翻译的归翻译,识图的归识图。
也有那么一两篇用一个模型训练多种不相关任务的,但效果都不怎么好。
于是,Google Brain的同学们就搞了个MultiModel,用一个模型,可以同时学习不同领域的多个任务。
现在,MultiModel就同时在8个数据集上进行训练:
(1) 《华尔街日报》语音语料库
(2) ImageNet数据集
(3) COCO图片说明数据集
(4) 《华尔街日报》句法分析数据集
(5) WMT英-德翻译预料库
(6) WMT德-英翻译预料库
(7) WMT英-法翻译预料库
(8) WMT法-英翻译预料库
论文作者们说,模型在这些任务上的表现都不错,虽然算不上顶尖水平,但也比最近很多研究强。
下图举例展示了MultiModel模型的学习成果:
为了在不同维度、大小、类型的数据上进行训练,MultiModel由多个特定模式的子网络对这些输入数据进行转换,并放进一个共同的表示空间。这些子网络叫做“模式网络(modelity nets)”。
如上图所示,MultiModel由几个模式网络、一个编码器、I/O混合器、一个自回归解码器构成。
这个模型的主体,包含多个卷积层、注意力机制、和稀疏门控专家混合层(sparsely-gated mixture-of-experts layers),论文中对这三个部分分别做了说明。
这个模块的作用是发现局部模式,然后将它泛化到整个空间。
这个卷积模块包含三个组件:线性整流函数(ReLU)、SepConv和归一层。
如图所示,这个模型用了四个卷积层,前两层有3×1个卷积核,后两层有15×1个卷积核,每层最后加了40%的dropout。
MultiModel模型中所用注意力机制和谷歌之前发布的标题党典范论文Attention Is All You Need中差不多。
如图所示,注意力层的输入包括两个张量,一个来源张量(source)和一个目标张量(target),形式都是[batch size,sequence length, feature channels]。
本文的注意力模块和以前的主要区别在于是定时信号,定是信号的加入能让基于内容的注意力基于所处的位置来进行集中。
MultiModel中的稀疏阵列混合专家层,由一些简单的前馈神经网络(专家)和可训练的门控网络组成,其选择稀疏专家组合处理每个输入。
详情见这篇论文:
Krzysztof Maziarz, Andy Davis, Quoc Le, Geoffrey Hinton, Jeff Dean, Noam Shazeer, Azalia Mirhoseini. Outrageously large neural networks: The sparsely-gated mixture-of-experts layer. arXiv preprint 1701.06538, 2017.
因为MultiModel里的专家混合模块基本是完全照搬。
本文的模型在同时训练8个问题时,用了240个“专家”,训练单个问题时用了60个“专家”。
MultiModel的主体由3部分组成:仅处理输入的编码器、将编码输入与先前输出(自动回归部分)混合的混合器、以及处理输入和混合以产生新输出的解码器。
编码器、混合器和解码器的结构类似于以前的完全卷积序列到序列模型,如ByteNet或WaveNet,但使用的计算模块不同。
上图描绘了它们的架构。从图中可以看出,编码器由6个重复的卷积模块组成,中间有一个专家混合层。
混合器由注意力模块和2个卷积模块组成。解码器由四个卷积和注意力模块组成,中间有专家混合层。关键的是,混合器和解码器中的卷积填充在左边,所以他们将来永远不会访问任何信息。这让模型是自回归的,并且这种卷积自回归生成方案在输入和过去的输出上提供大的感受野,这能够建立长期依赖性。
为了让解码器即便在相同的模态下,也能为不同任务生成输出,我们总是使用命令令牌开始解码,例如To-English或To-Parse-Tree。我们在训练期间学习一个与每个令牌相对应的嵌入矢量。
我们有4种模态网络,分别对应:语言(文本数据)、图像、音频和分类数据。
2.5.1 语言模式网络
我们将基于语言的数据用和8k subword-units相同的词汇进行标记化。语言输入模式是到终止令牌结束的一系列token。在输出端,语言模式通过解码器进行输出,并执行学到的线性映射和Softmax,生成令牌词汇的概率分布。
2.5.2 图像模式网络
图像输入模式类似于Xception进入流。 输入图像的特征深度使用残差卷积块逐渐加深,我们称之为ConvRes,并定义如下:
网络深度为d(我们使用了d=1024)的图像模态的输入流定义为:
2.5.3 分类模式网络
分类输出模式类似于Xception退出流。 如果网络的输入是诸如图像或光谱音频数据的二维数据,则来自模型体的一维输出首先被重构成二维,然后是逐行下采样:
2.5.4 音频模式网络
我们以一维波形或者二维频谱图的形式接受音频输入,这两种输入模式都使用来上面提到的8个ConvRes块的堆栈。
我们使用TensorFlow实现了上述MultiModel架构,并在多种配置中对其进行了训练。
在下面提到的所有训练中,我们使用了一组相同的超参数和带有梯度裁剪的Adam优化器。我们会把这个实现以及所有的设置和超参数细节进行开源。我们聚焦于实验来回答以下问题:
(1) 基于8个任务同时训练的MultiModel与最先进的结果差距有多大?
(2) 在8个任务上同时训练,与单个进行训练有何不同?
(3) 上述不同的计算模块,如何影响不同的任务?
在回答上述问题时,我们并不总是考虑所有8个问题。特别是4个翻译问题的行为非常相似,所以我们决定不把它们全部包含在每个比较中,但是我们专注于更多样化的问题。
为了回答问题(1),我们将8个问题的MultiModel的性能与最先进的结果进行了比较,见表1。我们没有花费太多时间调整MultiModel的超参数,我们认为更多的调教能把二者的差距降低到很小。我们实现的结果类似于没有进行大量调教的任务特定模型。
为了回答问题(2),在共同对8个任务进行训练时,我们还用相同的参数在进行了每个任务进行了单独的训练。在进行单独训练时,我们使用了一个worker来完成相似的步骤。从表2的结果可以看出,8个任务联合训练的模型,性能和单独训练的模型非常接近,而且有时候效果更好。
考虑到翻译任务中的大量文本数据,表2中所看到的巨大改进并不令人惊讶。那么在ImageNet上的表现会怎样?从表3可以看出,性能的差异比较明显,由于同时使用了dropout和early stopping,我们推测这与过拟合无关。相反,看起来不同任务之间似乎有着共享的计算原语,即使像ImageNet和句法分析这样看似无关的任务之间,也可以存在一些迁移学习。
为了回答问题(3),我们比较了如果没有混合专家层或没有注意力机制的训练,会如何影响不同问题的表现。由于这两种机制都是为机器翻译设计的,所以我们比较了英文 - 法文翻译。但是我们用了ImageNet进行比较,因为这是从这些块中获益最少的问题。实际上,如果这些模块真的没用,那么去掉之后也不会影响在ImageNet上的表现。相比之下,我们在表4中看到,这些模块不会影响或稍微提高性能。这导致我们得出结论,混合不同的计算块实际上是改善各种任务性能的好方法。
我们首次证明,单一的深度学习模式可以从多个领域中共同学习一些大型任务。
成功的关键在于设计一种多模式架构,其中共享尽可能多的参数,并将不同领域的计算模块一起使用。
我们相信,这将为未来研究更通用的深度学习架构开辟一条有趣的道路,特别是我们的模型显示出,基于大量数据训练而成的任务,可以迁移学习应用在数据有限的任务上。
论文作者:Lukasz Kaiser, Aidan N. Gomez, Noam Shazeer, Ashish Vaswani, Niki Parmar, Llion Jones, Jakob Uszkoreit
【完】