循环神经网络RNN
(尤其是 LSTM
、GRU
网络)已经牢牢地被确定为序列建模和转导transduction
问题的 state-of-the-art
方法。此后,许多努力继续推动循环语言模型 recurrent language model
和 encoder-decoder
的发展。
循环模型通常沿输入序列和输出序列的 symbol position
来考虑计算。将 position
和 step
在计算期间对齐 aligning
,这些模型生成一系列 hidden state
hidden state
input
的函数。这种固有的序列性质 sequential nature
阻止了训练样本内的并行化,而这种样本内的并行化在更长的序列长度下变得至关重要,因为内存约束限制了样本之间的 batching
。最近的工作通过分解factorization
和条件计算 conditional computation
显著提高了计算效率,同时在后者的 case
中(即,条件计算)也提高了模型性能。然而,序列计算sequential computation
的基本约束仍然存在。
注意力机制已经成为各种任务中引人注目的序列建模和转导模型 sequence modeling and transduction model
的组成部分,它允许建模依赖性而无需考虑这些相互依赖的项在 input
序列或 output
序列中的距离。然而,除了少数情况之外,这种注意力机制与RNN
结合使用。
在论文 《Attention Is All You Need》
中,作者提出了 Transformer
,这是一种避免循环 recurrence
的模型架构。Transformer
完全依赖注意力机制来抽取 input
和 output
之间的全局依赖关系。Transformer
可以实现更高的并行化,并且在八个 P100 GPU
上经过短短 12
个小时的训练后就可以在翻译质量方面达到新的 state-of-the-art
。
背景:
减少序列计算这一目标也构成了 Extended Neural GPU
、ByteNet
、ConvS2S
的基础,它们都使用卷积神经网络作为基础构建块 basic building block
,并行地为所有 input position
和 output position
来计算 hidden representation
。在这些模型中,联系 relate
来自两个任意 input position
或 output position
的信号所需操作的数量,随着 position
之间的距离而增加:对于 ConvS2S
呈线性增加,而对于 ByteNet
则呈对数增加。这使得学习远距离位置之间的依赖性变得更加困难。
在 Transformer
,这种数量被降低到常数级(effective resolution
为代价(由于attention-weighted
加权平均 ),但是我们使用多头注意力 Multi-Head Attention
来抵消这种影响。
自注意力self-attention
(有时被称作 intra-attention
)是一种将单个序列的不同位置关联起来从而计算序列的 representation
的注意力机制。自注意力已经成功应用于各种任务,包括阅读理解reading comprehension
、抽象摘要abstractive summarization
、文本蕴含textual entailment
、学习任务无关的 sentence representation
。
端到端记忆网络memory network
基于循环注意力机制 recurrent attention mechanism
而不是序列对齐循环 sequence-aligned recurrence
,并且已被证明在简单的语言问题和语言建模任务中表现良好。
然而,据我们所知,Transformer
是第一个完全依赖自注意力来计算其 input
和 output
的 representation
而不使用 sequence-aligned RNN
或卷积的模型。在接下来部分中,我们将描述 Transformer
、自注意力的启发,并讨论它相对于 《Neural GPUs learn algorithms》
、《Neural machine translation in linear time》
、《Structured attention networks》
等模型的优势。
大多数有竞争力的神经序列转导模型 neural sequence transduction model
具有 encoder-decoder
结构。这里,encoder
将 symbol representation
的输入序列 continuous representation
的序列 symbol representation
(one-hot
向量),hidden representation
。 给定 decoder
然后生成 symbol
的一个输出序列 symbol representation
(one-hot
向量)。在每个 step
,模型都是自回归auto-regressive
的,在生成下一个输出symbol
时使用所有前面生成的 symbol
作为额外的输入。
Transformer
遵循这种整体架构,同时为 encoder
和 decoder
使用堆叠的 self-attention
的和 point-wise
的全连接层,分别如下图的左半部分和有半部分所示。
下图中的
attention
的三个输入中,最右侧为query
而其它两个输入分别为key,value
。注意,key
的数量和value
的数量相等。
Encoder
:encoder
由 multi-head self-attention mechanism
, 第二个子层是简单的、position-wise
的全连接前馈神经网络。我们在两个子层中的每个子层周围使用残差连接 residual connection
,然后进行 layer normalization
。即,每个子层的输出为:
其中:
为了有助于这些残差连接,模型中的所有子层以及 embedding layer
都会产生维度
注意,图中黄色框内的标注是
Add & Norm
,即Add
在前、Norm
在后,也就是LayerNorm
作用在残差连接之后。
Decoder
:decoder
也是由 decoder
的每个层包含三个子层,其中有两个子层与 encoder
子层相同,而第三个子层对 encoder stack
的输出执行 multi-head attention
。
与 encoder
类似,我们在每个子层周围使用残差连接,然后进行 layer normalization
。我们还修改了 decoder stack
中的 self-attention
子层,从而防止它关注后续的 position
(即,masked self-attention
)。这种 masking
确保对 position
注意力函数可以描述为:将一个 query
和一组 key-value pair
映射到 output
,其中 query, key, value, output
都是向量。output
被计算为 value
的加权和,其中每个 value
的权重是由一个函数来计算(即,注意力函数),该函数以 query, key
作为输入。
Scaled Dot-Product Attention
:我们称我们提出的注意力为 Scaled Dot-Product Attention
,如下图所示。输入由三部分组成:维度为 query
、维度为 key
、维度为 value
。我们将单个 query
和所有的 key
计算内积,然后内积的结果除以 softmax
函数从而获得 value
的权重。
这里要求
query
向量的维度和key
向量的维度相同,都是。
在实践中,我们同时计算一组 query
的注意力函数,其中将 query
打包到一个矩阵 key
和 value
也被打包到矩阵 output
矩阵计算为:
假设有
个 query
、个 key
、个 value
(要求key
的数量和value
的数量相同),则:
两种最常见的注意力函数为:加性注意力additive attention
、内积注意力dot-product (multiplicative) attention
。
内积注意力与我们的算法相同,除了我们使用了
因为维度越大,则内积中累加和的项越多,内积结果越大。很大的数值会导致
softmax
函数位于饱和区间,梯度几乎为零。
加性注意力通过具有单隐层的前馈神经网络来计算注意力函数。
additive attention
(也称作Bahdanau Attention
) 的原理为:其中:
为 attention
向量,为待学习的参数,为非线性函数。 为第 个 query
,为第 个 key
,为第 个 value
。将 query
向量映射到公共空间,将 key
向量映射到公共空间,因此query
向量和key
向量可以为不同的维度。它们都是待学习的权重。给出第 个 query
在各个position
的注意力权重,position
的数量为。
虽然这两种注意力在理论上的复杂度相同,但是内积注意力在实践中更快且更节省内存空间,因为它可以使用高度优化的矩阵乘法代码来实现。
Multi-Head Attention
:与执行单个注意力函数 attention function
(具有 query, key, value
)不同,我们发现将 query, key, value
线性投影 query, key, value
分别投影到
然后,在每个 query, key, value
的投影后的版本上,我们并行执行注意力函数,每个注意力函数产生 output
。这些 output
被拼接起来并再次投影,产生 final output
,如上图右侧所示。
多头注意力multi-head attention
允许模型在每个position
联合地关注jointly attend
来自不同 representation
子空间的信息。如果只有单个注意力头single attention head
,那么平均操作会抑制这一点。
其中待学习的投影矩阵为:
在这项工作中,我们使用 attention head
。对于其中每个注意力头,我们使用 head
的维度减小,因此总的计算成本与完整维度的单头注意力single-head attention
相近。
注意力在 Transformer
中的应用:Transformer
以三种不同的方式使用多头注意力:
encoder-decoder attention
层中,query
来自于前一个 decoder layer
,key
和 value
来自于 encoder
的输出。这允许 decoder
中的每个位置关注 input
序列中的所有位置。这模仿了 sequence-to-sequence
模型中典型的 encoder-decoder attention
注意力机制。encoder
包含自注意力层。在自注意力层中,所有的 query, key, value
都来自于同一个地方(在这个 case
中,就是 encoder
中前一层的输出)。encoder
中的每个位置都可以关注 encoder
上一层中的所有位置。decoder
中的自注意力层允许 decoder
中的每个位置关注 decoder
中截至到当前为止(包含当前位置)的所有位置。我们需要防止 decoder
中的信息向左流动,从而保持自回归特性。我们通过在 scaled dot-product attention
内部屏蔽掉 softmax input
的某些 value
来实现这一点(将这些 value
设置为 value
对应于无效连接illegal connection
。除了注意力子层之外,我们的 encoder
和 decoder
中的每一层还包含一个全连接的前馈神经网络,该网络分别且相同地应用于每个位置。该网络包含两个线性变换,中间有一个 ReLU
激活函数:
虽然线性变换在不同位置上是共享的(即,相同的参数),但是它们在层与层之间使用不同的参数。
该层的另一种描述是: kernel size = 1
的两个卷积,其中 input
和 output
的维度为
, 。这里采用膨胀的方式,选择 从而使得 representation
维度先增大再减小。
与其它序列转导模型类似,我们使用学到的 embedding
将 input token
和 output token
转换为维度 softmax
函数将 decoder output
转换为 next-token
的预测概率。
在我们的模型中,我们在两个 embedding layer
(输入层)和 pre-softmax
线性变换(输出层)之间(共计三个权重矩阵)共享相同的权重矩阵,类似于 《Using the output embedding to improve language models》
。在 embedding
层中,我们将这些权重乘以
这里有两个输入层,分别来自于
encoder input
和decoder input
。而输出层来自于decoder
。三个
embedding
矩阵共享的前提是:input symbol
空间和output symbol
空间是相同的,例如,输入是中文的文本,输出是中文摘要,那么input symbol
和output symbol
都是中文单词。否则,encoder
的embedding
矩阵无法和decoder
的 两个embedding
矩阵共享。但是无论如何,decoder
的两个embedding
矩阵之间可以共享。为什么要把
embedding
矩阵乘以?论文并未说明原因。有一种解释说是放大 embedding
使得它的量级和positional embedding
的量级相同。可以通过实验来验证。
由于我们的模型不包含递归和卷积,为了让模型利用序列的次序 order
,我们必须注入一些关于序列中 token
的相对位置或绝对位置的信息。为此,我们在 encoder stack
和 decoder stack
底部的 input embedding
中添加了 positional encoding
。positional encoding
与 embedding
具有相同的维度
positional encoding
有很多选择,可以选择固定的也可以选择可学习的。
这里我们选择固定的方式,采用不同频率的正弦函数和余弦函数:
其中:position
,positional encoding
的每个维度对应于一个正弦曲线,正弦曲线的波长从
我们选择这个函数是因为我们假设它可以让模型通过相对位置来轻松地学习关注 attend
,因为对于任意固定的偏移量
我们还尝试使用可学习的 positional embedding
,发现这两个版本产生了几乎相同的结果。我们选择了正弦版本,因为它可以让模型推断出比训练期间遇到的序列长度更长的序列。
正弦版本的
positional embedding
可以应用到训练期间unseen
的位置,而可学习的positional embedding
无法实现这一功能。
这里我们将自注意力层与循环层、卷积层进行各个方面的比较。这些层通常用于将一个可变长度的 symbol representation
序列 long-range dependency
的路径长度。
学习远程依赖是许多序列转导任务中的关键挑战。影响学习这种依赖的能力的一个关键因素是:前向传播信号和反向传播信号必须在网络中传输的路径长度。input
序列和 output
序列中任意位置组合之间的路径越短,那么就越容易学习远程依赖。因此,我们还比较了由不同类型的层组成的网络中,任意input
位置和 output
位置之间的最大路径长度。
如下表所示:
自注意力层在所有位置都关联一个
并行化指的是:为了计算指定位置的输出,模型需要依赖已经产生的多少个输出?
在计算复杂度方面,当序列长度 representation
维度 state-of-the-art
模型常见的 case
),self-attention
层比循环层更快。
为了提高涉及非常长序列(即
具有 kernel width
input position
和 output position
组成的所有的 pair
。如果希望连接所有的 input position
和 output position
,则需要堆叠 contiguous kernel
) 或 dilated convolution
),并且增加了网络中任意两个位置之间最长路径的长度。
卷积层通常比循环层更昂贵 expensive
(贵 point-wise feed-forward layer
的组合(这就是我们在 Transformer
模型中采用的方法)。
作为附带的好处,自注意力可以产生更可解释的模型。我们从 Transformer
模型中检查注意力的分布,并在下图中展示和讨论了示例。不仅单个注意力头清晰地学习执行不同的任务,而且许多注意力头似乎还表现出与句子的句法结构syntactic structure
和语义结构 semantic structure
有关的行为。
如下图所示为 encoder
六层自注意力层的第五层中,making
这个单词的多头自注意力分布(不同的颜色代表不同的头,颜色的深浅代表注意力大小)。making
这个单词的自注意力分布似乎倾向于构成短语 making ... more difficult
。
如下图所示为 encoder
六层自注意力层的第五层中的两个注意力头。上半部分为 head 5
的完全的注意力分布(每个单词),下半部分为单词 its
在 head 5
和 head 6
中的注意力分布。
如下图所示为 encoder
六层自注意力层的第五层中的两个注意力头。
Training Data and Batching
:
我们在由大约 450
万个 sentence pair
组成的标准 WMT 2014 English-German
数据集上进行了训练。句子使用 byte-pair encoding: BPE
(《Massive exploration of neural machine translation architectures》
) 进行编码,该编码有一个共享的 source-target vocabulary
,词典规模大约 37000
个 token
。
BPE
算法:
- 语料库中每个单词表示为字符的拼接,其中
</w>
表示词尾。- 将每个单词拆分为字符,并计算字符出现的次数。这些字符添加到词表
vocabulary
。- 寻找出现频次最高的
character pair
,合并它们并添加到词表。这些合并的character pair
称作word-piece
。- 重复执行上一步(即,“寻找--合并”),直到词表达到指定的规模。
对于 English-French
,我们使用了更大的 WMT 2014 English-French
数据集,该数据集由 3600
万个 sentence pair
组成。这些句子被拆分为 token
,并且使用大小为 32k
的 word-piece vocabulary
。
sentence pair
按照近似的序列长度被 batch
在一起。每个训练 batch
包含一组 sentence pair
,大约共计 25k
个 source token
和 25k
个 target token
。
硬件和 schedule
:我们在一台配备 8
个 NVIDIA P100 GPU
的机器上训练我们的模型。
base model
(使用我们在整篇论文中描述的超参数),每个 training step
大约需要 0.4
秒。我们对 base model
进行了总共 100k
步(即 12
小时)。big model
(如下表最后一行所示),每个 training step
大约需要 1.0
秒。我们对 base model
进行了总共 300k
步(即 3.5
天)。优化器:我们使用 Adam optimizer
优化器,其中
即:
warmup_steps
训练 step
中线性增加学习率。这里我们使用 warmup_steps = 4000
。step number
的平方根倒数来按比例降低学习率。为什么除以
?论文并未给出原因。这样做的效果是:模型越大则学习率越小。
正则化:在训练期间我们使用三种类型的正则化:
Residual Dropout
:
我们将 dropout
应用于每个子层的 output
,然后将其和子层的 input
相加(即残差连接)最后进行 layer normalization
。即:
此外,我们将 dropout
同时应用于 encoder stack
和 decoder encoder
中的 sum embedding
,这个 sum embedding
是 embedding
和 positional encoding
相加得到的。
对于 base model
,我们使用 dropout rate
为
Label Smoothing
:在训练期间,我们采用了 label smoothing
。这会损害 perplexity
指标,因为模型会变得更加不确定,但是会提高准确率指标和 BLEU
得分。
语言模型困惑度
perplexity
的定义为:其中
为一个序列, 为这个序列的概率。
配置(所有超参数是在对验证集进行实验之后再选择的):
base model
使用单个模型,该模型是通过平均最后 5
个 checkpoint
获得的,其中 checkpoint
是以 10
分钟的间隔写入的。 big model
也是会用单个模型,但是它平均了最后 20
个 checkpoint
。
checkpoint
平均指的是参数值取平均(而不是输出结果取平均)。
我们使用 beam size = 4
和 length penalty
beam search
。
在解码器的每个位置始终生成
beam size
个候选,直到出现结束标记。用于惩罚较短的生成序列: 其中
为序列 的长度。 越大则修正后的困惑度越小。
我们将推断期间的最大输出长度设置为 input length + 50
,但是在可能的情况下输出会提前结束。
下表总结了我们的结果,并将我们的翻译质量和训练成本,与文献中的其它模型架构进行了比较。我们通过将训练时间、使用的 GPU
数量、以及每个 GPU
的单精度浮点运算能力的估计值相乘,从而估计用于训练模型的浮点运算的数量。对于 K80, K40, M40, P100
,我们取它们的单精度浮点运算能力分别为 2.8, 3.7, 6.0, 9.5 TFLOPS
。
WMT 2014 English-to-German
翻译任务:big transformer model
比先前报告的最佳模型(包括 ensemble
模型)在 BLEU
指标上高出 2.0
以上,达到了一个新的 state-of-the-art
的 BLEU
得分 28.4
。big transformer model
在 8
个 P100 GPU
上训练耗时 3.5
天。
甚至我们的 base model
也超越了所有先前发布的模型和 ensembles
,并且 base model
的训练成本仅仅是任何其它有竞争力的模型的一小部分。
bilingual evaluation understudy: BLEU
评估机器翻译质量。其思想是:机器翻译结果越接近专业人工翻译的结果,则越好。其中:
BP
为句子简短惩罚Brevity Penalty
,迫使机器翻译的长度与参考翻译的长度接近。其中
为机器翻译的长度, 为参考翻译的长度。
代表机器翻译和参考翻译之间的 n-gram
匹配最大的n
值。通常1-gram
匹配结果代表有多少个单词被独立地翻译出来,而2-gram
以上的匹配结果代表翻译的流畅度。通常最大为 4
。
代表 n-gram
匹配结果的权重,通常选择。
衡量机器翻译和参考翻译之间 n-gram
匹配结果,即n-gram precision
:其中:
表示翻译的所有句子的集合, 表示某个翻译的句子, 表示某个 n-gram
项。
表示某个 n-gram
项在所有翻译结果中出现的次数。
表示某个 n-gram
项在所有翻译结果中出现的截断次数:而
为 n-gram
项在参考译文中出现的次数。因此这里的“截断”指的是被ground-truth
频次所截断。
WMT 2014 English-to-French
翻译任务:big transformer model
达到了 41.0
的 BLEU
得分,优于先前发布的所有单一模型,训练成本小于先前 state-of-the-art
模型的 1/4
。
注意:为 English-to-French
而训练的Transformer big model
使用 dropout rate
为 0.3
。
41.0
对不上?从下表结果来看应该是41.8
。
为了评估 Transformer
不同组件的重要性,我们以不同的方式改变了我们的 base model
,并衡量了验证集(newstest2013
)上 English-to-German
翻译性能的变化。我们使用了上一节中描述的 beam search
,但是没有使用 checkpoint
平均。实验结果如下表所示。
在 (A)
行中,我们改变了注意力头的数量以及注意力 key, value
的维度,并保持计算量不变。可以看到,虽然单头注意力要比最佳配置差 0.9 BLEU
,但是如果 head
数量过多效果也会下降。
在 (B)
行中,我们观察到降低注意力 key
的维度 compatibility function
并不容易确定,采用比内积更复杂的 compatibility function
可能是有益的。
compatibility function
就是计算未归一化注意力分的函数。 此外,降低
降低了模型容量(模型参数从 65M
降低到60M
和58M
)。
在 (C)
行中,我们观察到,正如预期的那样,更大的模型更好。
在 (D)
行中,我们观察到,dropout
和 label smoothing
有助于缓解过拟合,但是需要选取合适的 dropout rate
和 label smoothing rate
。
在 (E)
行中,我们用可学习的 positional embedding
代替固定的正弦 positional encoding
,并观察到与 base model
几乎相同的结果。
为了评估 Transformer
是否可以泛化到其它任务,我们对英语成分分析 English constituency parsing
任务进行了实验。这项任务提出了特定的挑战:output
受到强烈的结构性约束,并且明显比 input
更长。此外,RNN sequence-to-sequence model
无法在小数据领域获得 state-of-the-art
结果。
我们在Penn Treebank
的 Wall Street Journal: WSJ
部分(大约 40k
个训练句子)上训练了一个 4
层 transformer
。对于该任务,我们使用 16k token
的词典 vocabulary
。
我们还在半监督环境中训练了相同配置的 transformer
,使用来自大约 1700
万个句子的更大的 high-confidence
和 BerkleyParser
的数据集。对于该任务,我们使用 32k token
的词典。
我们仅在 Section 22
验证集上进行了少量实验来选择以下超参数:dropout
(attention
和 residual
上的 dropout
)、学习率、beam size
。所有其它超参数保持与 English-to-German base translation model
相同。在推断期间,我们将最大输出长度增加到 input length + 300
。对于 WSJ only
和半监督任务,我们都使用 beam size = 21
和
实验结果如下表所示,可以看到:
Recurrent Neural Network Grammar
之外的所有先前报告的模型得到了更好的结果。RNN sequence-to-sequence model
相比,即使仅在具有 40k
个句子的 WSJ
训练集上进行训练,Transformer
的性能也超越了 Berkeley- Parser
。像 Transformer
这样的 parallel-in-time
架构解决了RNN
的一个重要缺陷:RNN
固有的序列计算sequential computation
阻止了输入序列中各元素的并行化。同时 Transformer
也解决了序列较长时梯度消失的问题。Transformer
模型完全依靠自注意力机制。这种机制不仅可以直接并行化,而且由于每个symbol
的 representation
也直接访问到所有其他symbol
的 representation
,这导致了整个序列中有效的全局感受野 global receptive field
。
然而,值得注意的是,Transformer
具有固定数量的层,放弃了RNN
对学习迭代式转换 iterative transformation
或递归式转换recursive transformation
的归纳偏置 inductive bias
。我们的实验表明:这种归纳偏置可能对一些算法和语言理解任务至关重要,Transformer
不能很好地泛化到训练期间没有遇到的输入长度。
在论文 《Universal Transformer》
中,作者介绍了Universal Transformer: UT
,这是一个parallel-in-time
的递归的自注意力序列模型,它可以作为Transformer
模型的泛化,在广泛的具有挑战性的sequence-to-sequence
任务上产生提升的理论能力和改进的结果。 Universal Transformer
结合了像Transformer
这样的前馈序列模型的并行能力 parallelizability
和全局感受野、以及RNN
的循环归纳偏置,这似乎更适合一系列的算法和自然语言理解的sequence-to-sequence
问题。顾名思义,与标准的 Transformer
相比,在某些假设下,Universal Transformer
可以被证明是图灵完备的。
在每个recurrent step
中,Universal Transformer
使用自注意力机制并行地refine
序列中所有 symbol
的 representation
,然后跟着一个深度可分离卷积depth-wise separable convolution
或 position-wise fully-connected layer
(在所有position
和time-step
中共享),如下图所示。作者还添加了一个动态的逐位置停机机制 per-position halting mechanism
,允许模型动态选择每个symbol
所需的refinement step
数量,并首次表明这样的条件计算机制conditional computation mechanism
事实上可以提高几个较小的结构化的算法和语言推理任务的准确性(尽管它在机器翻译任务上的结果略有下降)。
论文强有力的实验结果表明:Universal Transformer
在广泛的任务中的表现优于 Transformer
和LSTM
。
相关工作:
当运行一个fixed
数量的 step
时,Universal Transformer
相当于一个跨所有层共享参数的 multi-layer Transformer
。这在一定程度上类似于Recursive Transformer
,它在不同的深度上共享了self-attention layer
的权重。
另一种可能更 informative
的描述,Universal Transformer
的方式是:作为一个并行的 RNN block
(每个symbol
一个RNN block
,共享参数)来同时演化每个symbol
的 hidden state
(通过在每个 step
关注前一个 step
的hidden state
序列来产生)。这样,它与 Neural GPU
和 Neural Turing Machine
等架构有关。因此,Universal Transformer
保留了原始 feed-forward Transformer
模型有吸引力的计算效率,但增加了RNN
的recurrent inductive bias
。此外,利用动态停机机制,Universal Transformer
可以根据输入数据自动选择 processing step
的数量。
Universal Transformer
和其他序列模型之间的联系从架构上看是显而易见的: 如果我们将recurrent step
限制为一个,它将是一个Transformer
。
但是,考虑 Universal Transformer
和 RNN
以及其他网络之间的关系更为有趣,在这些网络中,递归发生在时间维度上。表面上看,这些模型似乎密切相关,因为它们也是递归的。但有一个关键的区别:
RNN
这样的time-recurrent
模型不能在递归步骤中访问所有的记忆 memory
(只能访问最近的一个记忆)。这使得它们在计算上更类似于自动机automata
,因为在递归部分唯一可用的记忆是一个固定尺寸的状态向量fixed-size state vector
。Universal Transformer
可以关注整个previous layer
,允许它在recurrent step
中访问所有的记忆。给定足够的内存,Universal Transformer
在计算上是通用的,即它可以模拟任何图灵机Turing machine
,从而解决了标准Transformer
模型的一个缺陷。
除了在理论上有吸引力外,我们的结果表明:这种增加的表达性也导致了在几个具有挑战性的序列建模任务上的准确性的提高。这缩小了在机器翻译等大规模任务上与Neural Turing Machine
或Neural GPU
等模型之间的差距。
为了说明这一点,我们可以将 Universal Transformer
简化为一个 Neural GPU
。忽略decoder
并将 self-attention
模块(即带有残差连接的self-attention
)简化为恒等映射,并且假设转移函数是卷积。如果我们将循环step
的总数 Neural GPU
。
Universal Transformer
和 Neural Turing Machine
之间也存在类似的关系。Neural Turing Machine
每个 step
的single read/write
操作可以由 Universal Transformer
的全局的、并行的representation revision
来表达。
另一个相关的模型架构是端到端记忆网络Memory Network
。然而,与端到端记忆网络相比,Universal Transformer
使用的 memory
对应于与其输入或输出的individual position
对齐的状态。此外,Universal Transformer
遵循 encoder-decoder
的配置,在大规模 sequence-to-sequence
的任务中实现了有竞争力的性能。
Universal Transformer
将以下关键属性结合到一个模型中:
Weight sharing
:我们用一种简单的权重共享形式来扩展Transformer
,从而在inductive bias
和模型表达力之间取得了有效的平衡。
由于权重共享,所以
Universal Transformer
的模型大小要远远小于标准的Transformer
。
Conditional computation
:我们为Universal Transformer
配备了动态停机能力。与固定深度的 Universal Transformer
相比,它显示了更强的结果。
Universal Transformer
是基于常用的encoder-decoder
架构,它的encoder
和decoder
都是通过将一个 RNN
分别应用于输入和输出序列的每个位置的 representation
来操作的,如下图所示。然而,与常规 RNN
不同,Universal Transformer
不是在序列中的 position
上递归(沿着宽度方向),而是在每个 position
的 depth
上递归(沿着高度方向)。
在每个 recurrent time-step
,每个位置的 representation
在两个 sub-step
中被并行地修改:
vector representation
,该 representation
是由前一个time step
的所有其他位置的representation
融合而来。position
和 time
共享)。由于递归可以应用任何次数,这意味着Universal Transformer
可以有可变的深度(per-symbol processing step
的数量)。相比之下,Transformer
和 stacked RNN
只有固定的深度。
更完整的架构如下图所示:
给定一个长度为 embedding
矩阵,它的第 symbol
的 embedding
向量 Universal Transformer
通过应用Transformer
的多头内积自注意力机制 multi-headed dot-product self-attention mechanism
,在 step
representation
transition function
。我们还在这些功能块function block
周围添加了残差连接,并应用了 dropout
和layer normalization
。
更具体地说,我们使用缩放的内积注意力:
其中
我们使用有
其中:
在 step
Universal Transformer
然后计算所有 representation
LayerNorm
作用在残差连接之后,而不是之前。
其中:
Transition
为转移函数。根据任务,我们使用两种不同的转移函数之一:要么是可分离的卷积、要么是前馈神经网络(由两个线性投影以及中间的的单个 Relu
激活函数组成,逐位置应用)。
coordinate embedding
,通过计算正弦的 position embedding
向量获得:
给出了位置维度的信息, 给出了时间维度的信息。
经过 step
(每个 step
并行地更新输入序列的所有位置),Universal Transformer encoder
的 final output
是
decoder
与 encoder
的基本递归结构相同。然而,在self-attention
函数之后,decoder
额外还使用多头内积注意力函数来关注 encoder
的 final representation
query
decoder representation
投影得到,而 key
value
encoder final representation
投影得到。
是否可以对
decoder
和encoder
应用不同的?理论上并没有约束强制要求 decoder
和encoder
迭代相同的次数。
像 Transformer
模型一样,Universal Transformer
是自回归的。
Universal Transformer
一次产生一个 symbol
的输出,其中 decoder
仅仅依赖已经产生的输出位置。decoder
的目标输出就是输入左移一个位置。最后,per-symbol target distribution
是通过应用线性变换 final decoder state
映射到 output vocabulary
softmax
进行按行的归一化: