文 / Google Brain Team 的研究科学家 Stephan Gouws、阿姆斯特丹大学的 Mostafa Dehghani 博士生、谷歌研究实习生git
来源 | 谷歌开发者公众号github
去年,咱们发布了 Transformer,这是一种新的机器学习模型,相较现有的机器翻译算法和其余语言理解任务,成效卓著。 在 Transformer 以前,大多数基于神经网络的机器翻译方法依赖于循环运算的递归神经网络(RNN),它们使用循环(即每一步的输出都进入下一步)按递归顺序运行(例如,逐字翻译句中的单词)。 虽然 RNN 在建模序列方面很是强大,但它们的顺序性本质意味着它们训练起来很是缓慢,由于长句须要更多的处理步骤,而且其繁复循环的结构也使训练难上加难。算法
相较于基于 RNN 的方法,Transformer 不须要循环,而是并行处理序列中的全部单词或符号,同时利用自醒机制将上下文与较远的单词结合起来。 经过并行处理全部单词,并让每一个单词在多个处理步骤中处理句子中的其余单词,使 Transformer 的训练速度比起复制模型要快得多。 值得注意的是,与此同时其翻译结果也比 RNN 好得多。 然而,在更小、更结构化的语言理解任务中,或是简单的算法任务诸如复制字符串(例如,将 “abc” 的输入转换为 “abcabc”)上,Transformer 则表现欠佳。 相比之下,在这方面表现良好的模型,如神经 GPU 和神经图灵机,在大规模语言理解任务(如翻译)中溃不成军。markdown
在《Universal Transformer》一文中,咱们使用新颖高效的时间并行循环方式将标准 Transformer 扩展为计算通用(图灵完备)模型,从而可在更普遍的任务中产生更强的结果。咱们将模型创建在 Transformer 的并行结构上,以保持其快速的训练速度。可是咱们用单一的时间并行循环的变换函的屡次应用代替了 Transformer 中不一样变换函数的固定堆叠(即,相同的学习转换函数在多个处理步骤中被并行应用于全部符号,其中每一个步骤的输出馈入到下一个步骤中)。关键在于,RNN 逐个符号(从左到右)处理序列,而 Universal Transformer 同时处理全部符号(像 Transformer 同样),随后使用自醒机制在可变数量的状况下并行地对每一个符号的解释进行细化。 这种时间并行循环机制比 RNN 中使用的顺序循环更快,也使得 Universal Transformer 比标准前馈 Transformer 更强大。网络
在每一个步骤中,利用自醒机制将信息从每一个符号(例如,句中的单词)传递到其余符号,就像在原始 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 没法作到的事情,由于它是由只应用一次的学习变换块的固定堆叠组成。oop
尽管 Universal Transformer 在理论上更强大,但咱们也关心实验性能。咱们的实验结果证明,Universal Transformers 确实可以从样本中学习如何复制和反转字符串,以及如何比 Transformer 或 RNN 更好地执行整数加法(尽管不如神经 GPU 那么好)。此外,在各类具备挑战性的语言理解任务中,Universal Transformer 的泛化效果明显更好,且在 bAbI 语言推理任务和颇有挑战性的 LAMBADA 语言建模任务上达到了当前最优性能。但或许最使人感兴趣的是,Universal Transformer 在与基础 Transformer 使用相同数量的参数、训练数据以相同方式进行训练时,其翻译质量比后者提升了 0.9 个 BLEU 值。去年 Transformer 发布时,它的性能比以前的模型提升了 2 个 BLEU 值,而 Universal Transformer 的相对改进量是去年的 50%。性能
所以,Universal Transformer 弥补了大规模语言理解任务(如机器翻译)上具备竞争力的实际序列模型与计算通用模型(如神经图灵机或神经GPU)之间的差距,计算通用模型可以使用梯度降低来训练,用于执行随机算法任务。 咱们很高兴看到时间并行序列模型的最新进展,以及处理深度中计算能力和循环的增长,咱们但愿对此处介绍的基本 Universal Transformer 的进一步改进将有助于咱们构建更多,更强大的,更能高效利用数据的算法功能,泛化性能超越当前最优算法。学习
若是您想要亲身体验,能够在开源的 Tensor2Tensor 存储库中找到用于训练和评估 Universal Transformers 的代码。 注:代码连接 github.com/tensorflow/…
鸣谢 执行本项研究的人员 Mostafa Dehghani,Stephan Gouws,Oriol Vinyals,Jakob Uszkoreit 和 Łukasz Kaiser。 另外还要感谢来自 Ashish Vaswani,Douglas Eck 和 David Dohan 富有成效的意见建议和灵感。