博客原文:Universal Transformers

作者:Mostafa Dehghani

感谢Stephan Gouws对本博客的编写和改进提供的帮助

最近,Transformers在一系列序列建模任务中成为替代RNNs的竞争者。它解决了RNNs的一个重大缺点,即其固有的顺序计算,这阻碍了输入序列元素的并行化,同时通过它的自注意力机制解决了梯度消失的问题。

实际上,Transformers完全依赖于自注意力机制来计算输入符号的一系列上下文相关的向量空间表示(参见这篇博客来了解Transformers的细节)。这就引出了Transformers的两个主要特性:

  • 直接并行化:和RNNs一样没有时间上的连接,每一个符号的计算可以完全并行。
  • 全局接受域:每个符号的表示都直接由其他符号的表示通知(相比之下,卷积架构通常只有有限的接受域)

虽然Transformers在许多任务中相继取得了重大的进步,但它也有一些缺点:

  • 没有循环归纳偏置:Transformer通过交换RNN的循环归纳偏置实现并行化。然而,循环归纳偏置对于推广不同复杂度的不同序列建模任务具有重要意义。例如,当需要为输入的层次结构建模,或训练和推理过程中输入长度分布不同时,即,当需要好的长度概括时。

  • Transformer不是图灵完备^1的:虽然Transformer执行的操作总数与输入大小成比例,但是顺序操作的数量是常量,与输入大小无关,仅由层数决定。假设精度有限,这意味着Transformer不能在计算上通用。一个直观的例子是,函数的执行需要对每个输入元素进行顺序处理。在这种情况下,对于任意给定的深度TT的选择,都可以构造一个长度为N>TN > T的输入序列,而Transformer无法正确处理:

  • 缺少有条件的计算:Transformer对所有输入(以及单个输入的所有部分)使用相同的计算量。然而,并非所有的输入需要相同的计算量,这应当由输入的复杂度来决定。

Universal Transformers (UTs) 解决了这些缺点。接下来的部分我们更多的讨论UT和它的性能。

Universal Transformer:一个并发的、循环的序列模型

Universal Transformer 是Transformer模型的扩展,它将Transformer模型的可并行性和全局接受域与RNN的循环归纳偏置结合了起来,似乎更适合于一系列算法和自然语言中理解序列-序列的问题。此外,顾名思义,与标准Transformer相比,在某些假设下,UT可以在计算上具有通用性。

UT如何工作?

标准的Transformer中有“固定的”Transformer堆栈块,每一个块都并行地应用于所有输入符号。在Universal Transformer中,层数是不固定的,我们反复使用Universal Transformer块(自注意机制,后跟一个循环转换)在任意步数中(因为循环的原因这是可行的)并行提炼序列中所有位置的表示。

Universal Transformer编码器。它利用自注意机制和递归转换函数,将来自不同位置的信息组合起来,对序列的每个位置重复细化一系列向量表示。箭头表示操作之间的依赖关系。

实际上,Universal Transformer是一个循环函数(不是在时间上,而是在深度上),并行的演化每个符号的隐藏状态,每一步又基于之前隐藏状态的序列。从这一点来说,UT在架构上和神经网络GPU与神经网络图灵机(NTM)相似。这使得UTs比原有的前馈Transformer模型在计算上更加高效,但是增加了RNN的循环归纳偏置。

注意,当运行固定步数时,UT和多层绑定参数的Transformer是等价的。

具有动态停机功能的UT

在序列处理系统中,某些符号(例如某些字或音素)通常比其他符号更模糊。因此,将更多的处理资源分配给这些更模糊的符号是合理的。

(未完待续)

参考资料

带你深入理解图灵机–什么是图灵机、图灵完备