去年,谷歌发布了一种新的机器学习模型 Transformer(参见:机器翻译新突破:谷歌实现完全基于 attention 的翻译架构),该模型在机器翻译及其他语言理解任务上的表现远远超越了现有算法。在 Transformer 之前,多数基于神经网络的机器翻译方法依赖于循环神经网络(RNN),后者利用循环(即每一步的输出馈入下一步)进行顺序操作(例如,逐词地翻译句子)。尽管 RNN 在建模序列方面非常强大,但其序列性意味着该网络在训练时非常缓慢,因为长句需要的训练步骤更多,其循环结构也加大了训练难度。
与基于 RNN 的方法相比,Transformer 不需要循环,而是并行处理序列中的所有单词或符号,同时利用自注意力机制将上下文与较远的单词结合起来。通过并行处理所有单词,并让每个单词在多个处理步骤中注意到句子中的其他单词,Transformer 的训练速度比 RNN 快很多,而且其翻译结果也比 RNN 好得多。然而,在更小、更加结构化的语言理解任务或简单的算法任务中(如拷贝一个字符串(如将输入「abc」转换为「abcabc」)),Transformer 则表现欠佳。相比之下,在这些任务中表现良好的模型(如神经 GPU 和神经图灵机)在大型语言理解任务(如翻译)中表现不好。
谷歌研究人员在《Universal Transformers》一文中使用一种新型高效的时间并行循环(parallel-in-time recurrence)方式(可在更广泛任务上产生更强大的结果)把标准 Transformer 扩展为计算通用(图灵完备)模型。研究者将该模型建立在 Transformer 的并行结构上,以保持其快速的训练速度。但是他们用单一、时间并行循环的变换函数的多次应用代替了 Transformer 中不同变换函数的固定堆叠(即,相同的学习变换函数在多个处理步骤中被并行应用于所有符号,其中每个步骤的输出馈入下一个)。关键在于,RNN 逐个符号(从左到右)处理序列,而 Universal Transformer 同时处理所有符号(像 Transformer 一样),然后使用自注意力机制在循环处理步骤(步骤数量可变)上,对每个符号的解释进行改进。这种时间并行循环机制比 RNN 中使用的顺序循环(serial recurrence)更快,也使得 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 无法做到的,因为它由只应用一次的学习变换块(learned Transformation block)的固定堆叠组成。
尽管 Universal Transformer 在理论上更加强大,但研究人员仍关心实验性能。实验结果证明,Universal Transformer 确实能够从样本中学习如何复制和反转字符串,以及如何比 Transformer 或 RNN 更好地执行整数加法(尽管不如神经 GPU 效果好)。此外,在多项有难度的语言理解任务上,Universal Transformer 的泛化效果明显更好,且它在 bAbI 语言推理任务和很有挑战性的 LAMBADA 语言建模任务上达到了新的当前最优性能。但或许最令人感兴趣的是,Universal Transformer 在与基础 Transformer 使用相同数量参数、训练数据以相同方式进行训练时,其翻译质量比后者提高了 0.9 个 BLEU 值。在去年 Transformer 发布时,它的性能比之前的模型提高了 2.0 个 BLEU 值,而 Universal Transformer 的相对改进量是去年的近 50%。
因此,Universal Transformer 弥补了在大规模语言理解任务(如机器翻译)上具有竞争力的实际序列模型与计算通用模型(如神经图灵机或神经 GPU)之间的差距,计算通用模型可使用梯度下降来训练,用于执行随机算法任务。谷歌很高兴看到时间并行序列模型的近期进展,以及处理深度中计算能力和循环的增加,谷歌希望 Universal Transformer 可以帮助研究人员构建更加强大、更能高效利用数据的算法,泛化性能超越当前最优算法。
论文:Universal Transformers
论文链接:https://arxiv.org/pdf/1807.03819.pdf
Universal Transformer 代码:https://github.com/tensorflow/tensor2tensor/blob/master/tensor2tensor/models/research/universal_transformer.py
摘要:自注意力前馈序列模型已被证明在序列建模任务上效果显著,这些任务包括机器翻译 [31]、图像生成 [30] 和 constituency parsing [18],从而提供了可以替代循环神经网络(RNN)的令人信服的方案,尽管 RNN 至今仍是许多序列建模问题事实上的标准架构。然而,尽管取得了这些成功,像 Transformer [31] 这样的前馈序列模型却无法泛化至很多循环模型可以轻松处理的任务上(例如,在字符串或公式长度超过训练时模型观察到的类型时,复制字符串甚至简单的逻辑推断 [28])。此外,与 RNN 相比,Transformer 模型在计算上不通用,这限制了其理论表达能力。本论文提出了 Universal Transformer,它可以解决这些实践和理论缺陷。我们展示了它可以在多项任务中实现性能提升。Universal Transformer 不像 RNN 那样使用对句中单个符号的循环,而是使用每个循环步骤重复修改句子中所有符号的表征。为了结合句子不同部分的信息,该模型在每个循环步中都使用了自注意力机制。假设有充足的记忆,则其循环会使 Universal Transformer 成为计算通用模型。我们进一步使用自适应计算时间(adaptive computation time,ACT)机制,使模型动态调整句子中每个位置的表征被修改的次数。除了节省计算量以外,ACT 还能够提高模型的准确率。我们的实验结果表明,在许多算法任务及大量大规模语言理解任务中,Universal Transformer 的泛化性能大大增强,在机器翻译中的表现超越了基础 Transformer 及 LSTM,在 bAbI 语言推理及富有挑战性的 LAMBADA 语言建模任务中达到了新的当前最优性能。
参考链接:https://ai.googleblog.com/2018/08/moving-beyond-translation-with.html.