谷歌 Transformer 模型再进化,「图灵完备」版已上线
雷锋网 AI 科技评论按:NLP 任务中具有标杆意义的 Transformer 模型喜提新升级,不仅翻译表现进一步提升,更成为了图灵完备的通用计算模型。
在过去的两三年中,注意力机制(Attention Mechanism)逐渐进入深度学习研究人员们的视野中,并开始变得热门。去年 6 月,谷歌大脑在论文 《Attention Is All You Need》 中提出了一个完全基于注意力机制的编解码器模型 Transformer ,它完全抛弃了之前其它模型引入注意力机制后仍然保留的循环与卷积结构,然后在任务表现、并行能力和易于训练性方面都有大幅的提高。Transformer 从此也成为了机器翻译和其它许多文本理解任务中的重要基准模型。一年多之后的今天,谷歌大脑团队在新的论文 arxiv.org/abs/1807.03819 中提出了 Transformer 的升级模型「Universal Transformer」,并在博客撰文对其作了介绍。雷锋网 (公众号:雷锋网) AI 科技评论把博文内容编译如下。
在 Transformer 出现之前,基于神经网络的机器翻译模型多数都采用了 RNN(循环神经网络)的模型架构,它们依靠循环功能(每一步的输出都要作为下一步的输入)进行有序的序列操作(句子中的单词按照顺序一个接一个地被翻译)。虽然 RNN 架构有较强的序列建模能力,但它们有序操作的天然属性也意味着它们训练起来很慢、越长的句子就需要越多的计算步骤,而且循环的架构也给它们留下了流传千里的「很难训练好的」坏名声。
与这些基于 RNN 的方法形成鲜明对比的是,Transformer 模型中没有任何循环结构。它的设计是把序列中的所有单词或者符号并行处理,同时借助自注意力机制可以从距离较远的词中提取含义。由于 Transformer 并行处理所有的词,以及每个单词都可以在多个处理步骤内与其他单词之间产生联系,它的训练速度也要比 RNN 模型快多了。尤其值得一提的是,它在翻译任务中的表现要比 RNN 模型好很多。然而,在更小、更结构化的语言理解任务中,甚至更简单的算法任务中,比如复制一个字符串(输入字符串「abc」,要求输出「abcabc」), Transformer 的表现就不怎么好。在这些任务中表现较好的模型,比如 Neural GPU 和 Neural Turing Machine ,反倒是在翻译这样的大规模语言理解任务中表现糟糕。
在新论文 「Universal Transformers」 中,谷歌大脑的研究人员们对标准的 Transformer 模型进行了拓展,让它具有 通用计算能力(也就是「图灵完备」 )。他们使用了一种新型的、注重效率的时间并行循环结构,并在更多任务中取得了有力的结果。他们保留了 Transformer 模型原有的并行结构,以便保持它的高训练速度,然后把 Transformer 一组几个各异的固定的变换函数替换成了一组由单个的、时间并行的循环变换函数构成的结构(也就是说,在多个处理步骤中,同一个学到的变换函数可以并行作用于序列内的所有符号,同时每一步的输出都成为下一步的输入)。其中有个关键点是,相比于 RNN 处理序列的方式是一个符号接着一个符号从左至右依次处理,Universal Transformer 和 Transformer 一样地一次同时处理所有的符号,但 Universal Transformer 接下来会 根据自我注意力机制对每个符号的解释做数次并行的循环处理修饰 。Universal Transformer 中时间并行的循环机制不仅比 RNN 中使用的串行循环速度更快,也让 Universal Transformer 比标准的前馈 Transformer 更加强大。
Universal Transformer 会并行反复修饰序列中每个位置的向量表征(图中 h 1 到 h m ),这个过程借助自我注意力机制从不同的位置综合收集信息,而且应用了一个循环变换函数。图中箭头表示的是不同操作之间的依赖关系。
在每个步骤中,每一个符号(比如句子中的一个词)的信息都可以借助自我注意力机制与所有其他的符号进行沟通,就和原本的 Transformer 一样。不过,要对每个符号应用几次这种变换(也就是循环步骤的数目)可以预先手工设置为某个值(比如设置为定制,或者设置与输入长度相关),也可以由 Universal Transformer 自己在执行中动态地选择。为了能够达到后一种效果,谷歌大脑的研究人员们为每个位置加入了一个自适应计算机制,它可以为意义较为模糊的、或者需要更多计算次数的符号分配更多的处理步骤。
要展示这种设计为什么很有用,可以看一个很直观的例子。考虑翻译这个句子「I arrived at the bank after crossing the river」(我穿过小河以后来到了河岸边/银行)。在这个例子中,相比于意义较为明确的「I」和「river」,需要较多的语义上下文才能推测出「bank」在这里到底是指什么。当标准的 Transformer 对这个句子进行编码的时候,计算量不作区分地等量分给了每一个词。现在在 Universal Transformer 中,它的自适应计算机制可以让模型 仅在意义较为模糊的词上进行更多的计算 ,比如用更多的步骤把辨析「bank」需要的语义上下文信息集合起来,同时也有可能让意义比较明确的词消耗的计算步骤减少。
仅仅允许 Universal Transformer 模型在输入上反复执行一种学到的转换函数,第一眼看上去似乎是个比较大的限制,尤其是标准的 Transformer 可以学习如何应用一组各有不同的固定转换函数。不过实际上,学习如何重复应用一种转换函数意味着应用的次数(处理步骤数目)现在是可变的了,而这就带来了巨大的区别。这不仅让 Universal Transformer 可以在意义模糊的符号上花费更多的更多计算,就像上面的例子那样,它还可以进一步地让模型根据输入的总长度拓展转换函数的应用次数(更长的序列可以做更多步骤),或者也可以根据训练中学到的一些其他序列性质动态决定输入序列中的任意部分是否需要应用转换函数。理论上来讲,这样的设定让 Universal Transformer 有更强的能力,因为它可以 高效地学习到为输入中的不同部分应用不同的变换 。这就是标准的 Transformer 做不到的了,就是因为其中包含的一组固定的变换模块只可以应用一次。
理论上能够增加模型能力当然是好的,实证表现当然也是要关心的。谷歌大脑的实验表明 Universal Transformer 确实可以在序列复制、倒序输出、整数加法之类的任务中取得比 Transformer 以及 RNN 好得多的表现(虽然比 Neural GPU 模型还是要差那么一点)。更进一步地,在一组各有不同的有挑战的语言理解任务中,Universal Transformer 的泛化性有大幅提升,在 bAbl 语言学推理任务和极具挑战的 LAMBADA 语言建模任务中都取得了新的最好成绩记录。当然了,最有意思的大概还是在语言翻译任务中,相比于具有同样参数数目、同样训练方式、同样训练数据的基准 Transformer,Universal Transformer 的翻译质量可以 提高 0.9 BLEU 。0.9 BLEU的提升具体是多大呢,当原本的 Transformer 去年发表的时候,它相比更早的模型就有 2.0 BLEU 的表现提升,这基本上就是把提升的分数继续增加了 50%。
那么,Universal Transformer 就这样兼具了大规模语言理解任务上的实用序列处理模型(比如机器翻译模型)以及 Neural GPU 和 Neural Turing Machine 这样的通用计算模型(它们可以通过梯度下降训练用来执行任意的算法任务)的优点。谷歌大脑对于时间并行序列处理模型的近期发展抱有充分的热情,且,除了拓展模型的计算容量以及在高深度的处理中增加循环之外,他们也希望更多的研究人员可以对这次提出的 Universal Transformer 的基础结构提出更多的改进,整个社区共同构建出更强大、更数据高效、在当前的成绩之外取得更多泛化成果的模型。
Universal Transformer 的训练和评估代码已开源在 Tensor2Tensor 目录: http://t.cn/RkvRgjU
论文地址: https://arxiv.org/abs/1807.03819
via ai.googleblog.com ,雷锋网 AI 科技评论编译
雷锋网版权文章,未经授权禁止转载。详情见。