论文链接:Attention Is All You Need.
代码链接:Transformer.
主流的序列转换模型基于复杂的循环或卷积神经网络,包括编码器和解码器。性能最佳的模型还会通过注意机制连接编码器和解码器。我们提出了一种新的简单网络架构,Transformer,仅基于注意机制,完全不需要循环和卷积。在两个机器翻译任务上的实验表明,这些模型在质量上更优越,同时更易并行化,训练时间显著减少。我们的模型在WMT 2014英德翻译任务上达到了28.4 BLEU,相比现有最佳结果(包括集成模型),提高了2 BLEU以上。在WMT 2014英法翻译任务上,我们的模型在使用八个GPU训练了3.5天的情况下,取得了新的单模型BLEU得分的SOTA,达到41.8,训练成本仅为文献中最佳模型的一小部分。Transformer在其他任务上也具有很好的泛化能力,无论是使用大量或者有限的训练数据情况下,都可以将其应用于英语成分句法分析。
递归神经网络(RNN)、长短期记忆(LSTM)和门控递归神经网络(gated RNN)已经成为序列建模和转换问题(如语言建模和机器翻译)中的最先进方法。此后,许多工作一直在推动递归语言模型和编码器-解码器架构的发展边界。
递归模型通常将计算因子分解到输入和输出序列的符号位置上。将位置与计算时间步骤对齐,它们生成一系列隐藏状态ht,作为前一个隐藏状态ht−1和位置t的输入的函数。这种固有的顺序性质阻碍了在训练样本的并行化,这在较长的序列长度中变得至关重要,因为内存限制了跨样本的批处理。最近的工作通过分解技巧和条件计算在计算效率上取得了显著改进,同时在后者的情况下也提高了模型性能。然而,顺序计算的基本约束仍然存在。
注意机制已成为各种任务中序列建模和转换模型的重要组成部分,允许对输入或输出序列中的依赖关系进行建模,而不考虑它们之间的距离。然而大部分情况下,这种注意机制通常与递归网络一起使用。
在这项工作中,我们提出了Transformer,这是一种新的模型架构,它不使用递归,而是完全依赖于注意机制来建立输入和输出之间的全局依赖关系。Transformer可以实现更多的并行化,并且在使用8个P100 GPU,仅经过12小时的训练后,就能够达到新的翻译质量的最先进水平。
减少顺序计算的目标也是Extended Neural GPU、ByteNet和ConvS2S的基础,它们都使用卷积神经网络作为基本构建块,为所有输入和输出位置并行计算隐藏特征。在这些模型中,将两个任意位置输入或输出的信号相关联所需的操作数量,随着位置之间的距离增加而增加,对于ConvS2S是线性增长,对于ByteNet是对数增长。这使得学习远距离位置之间的依赖关系更加困难。在Transformer中,操作数量减少为常数,尽管平均注意加权降低了有效分辨率,但我们可以通过在第3.2节中描述的多头注意力机制来抵消这种影响。
自注意力,有时称为内部注意力,是一种关联单个序列的不同位置的注意机制,用于计算序列的表示。自注意力已成功应用于各种任务,包括阅读理解、抽象摘要、文本蕴含和学习任务无关的句子表示。
端到端记忆网络基于一种循环注意机制,而不是序列对齐的循环,并且在简单语言问答和语言建模任务上表现良好。
然而,Transformer是第一个完全依靠自注意力计算其输入和输出表示,而不使用序列对齐的RNN或卷积的转导模型。在接下来的章节中,我们将描述Transformer,解释自注意力的动机,并讨论它相对于其他模型的优势。
大多数效果好的神经序列转换模型都具有编码器-解码器结构。在这里,编码器将符号表示的输入序列(x1, …, xn)映射到连续表示的序列z = (z1, …, zn)。给定z,解码器随后逐个元素生成一个输出序列(y1, …, ym)的符号。在每一步中,模型是自回归的,也就是在生成下一个符号时,使用先前生成的符号作为额外的输入。
Transformer整体架构使用堆叠的自注意力和逐点全连接层作为编码器和解码器,分别显示在图1的左半部分和右半部分。
注意力函数可以被描述为将 Query 与一组键值对(Key-Value)映射到输出的函数,其中 Query、Key、Value和输出都是向量。输出是值的加权和,其中赋予每个值的权重是通过Query与Key的兼容性函数(compatibility function)计算得出的。
本文的attention称为缩放点积注意力(Scaled Dot-Product Attention),输入包括维度为 dk的queries 和 keys,维度为dv的values,计算每一个query和所有key的点积,除以,然后利用softmax 函数计算value的注意力权重。
实际上,本文同时对一组Query计算注意力函数,将其打包成矩阵Q 。Key和Value也打包到矩阵K和V中。我们计算输出矩阵如下:
与使用dmodel维度的key、value和query执行单个attention函数相比,通过不同的可学习的线性投影将query、key和value投影h次到dk、dk和dv维度,可以获得更好的效果。然后,在这些投影版本的query、key和value上并行执行attention函数,得到dv维度的输出值。这些值被concat起来,再次进行投影,得到最终的值,如图2所示。
多头注意力允许模型在不同的位置同时关注不同表示子空间的信息,使用单个注意力头时,平均化会抑制这种效果。
投影参数矩阵
本文使用h = 8个并行的注意力层或头。对于每个头,使用dk = dv = dmodel/h = 64。由于每个头的维度减小,总的计算成本与具有完整维度的单头注意力相似。
Transformer 在三个不同的方式中使用多头注意力:
• 交叉注意力:在“编码器-解码器注意力”层中,query来自前一个解码器层,而内存的key和value来自编码器的输出。这使得解码器中的每个位置都可以关注输入序列中的所有位置。这模仿了序列到序列模型中的典型编码器-解码器注意力机制]。
• 自注意力。在自注意力层中,所有的query,key和value都来自同一个地方,即编码器中前一层的输出。编码器中的每个位置都可以关注编码器前一层的所有位置。
• 掩码自注意力:解码器中的自注意力层允许解码器中的每个位置关注到解码器中的所有位置,包括该位置及之前的位置。我们需要防止解码器中的左向信息流,以保持自回归属性。我们通过在缩放的点积注意力中屏蔽(设置为-∞)所有与非法连接对应的输入中的值来实现这一点,详见图2.
除了注意力子层之外,我们编码器和解码器中的每个层都包含一个全连接的前馈网络,该网络分别相同地应用于每个位置。该网络由两个线性变换和一个ReLU激活函数组成。
虽然线性变换在不同位置上是相同的,但它们在不同层之间使用不同的参数。另一种描述方式是使用核大小为1的两个卷积操作。
输入和输出的维度为dmodel = 512,内层的维度为dff = 2048。
与其他序列转换模型类似,本文使用可学习的embedding将输入token和输出token转换为维度为dmodel的向量。本文还使用常用的可学习的线性变换和softmax函数将解码器输出转换为预测的下一个token的概率。本文的模型中,在两个embedding层和预softmax线性变换之间共享相同的权重矩阵。在嵌入层中,本文将这些权重乘以
由于本文的模型不包含循环和卷积,为了使模型能够利用序列的顺序信息,必须向序列中的注入一些关于相对或绝对位置信息的token。为此,本文在编码器和解码器组底部的输入embedding中添加“位置编码”。位置编码的维度与输入embedding的维度相同,因此可以将两者直接相加。位置编码可以是可学习的也可以是固定的。
本文使用不同频率的正弦和余弦函数:
其中 pos是位置, i是维度。也就是说,位置编码的每个维度对应一个正弦波。波长从 2π到 10000⋅2π形成一个几何级数。我们选择这个函数是因为我们假设它可以让模型容易学习到相对位置的注意力,因为对于任何固定的偏移k, PEpos+k可以表示为 PEpos的线性函数。 此外,我们在编码器和解码器堆中对embedding和位置编码和应用了dropout,对于基本模型,Pdrop=0.1。
我们还尝试使用可学习的位置embedding,发现两个版本的结果几乎相同。我们选择了正弦版本,因为它可能使模型能够推断出比训练过程中遇到的序列长度更长的序列。
在本节中,我们将自注意力层与递归层和卷积层进行比较,这些递归层和卷积层常用于将一个可变长度的符号表示序列 (x1, …, xn) 映射到另一个等长序列 (z1, …, zn) ,其中 xi, zi ∈ Rd,例如典型的序列转换编码器或解码器中的隐藏层。使用自注意力主要有三个原因。
本节描述了我们模型的训练方案。
我们使用了标准的WMT 2014英德数据集,包含大约450万个句子对。句子使用字节对编码进行编码,源-目标词汇共享约37000个标记。对于英法翻译,我们使用了规模更大的WMT 2014英法数据集,包含3600万个句子,并将标记拆分为32000个词片段。句子对按照近似的序列长度进行分批处理。每个训练批次包含一组句子对,其中大约包含25000个源标记和25000个目标标记。
我们在一台配备了8个NVIDIA P100 GPU的机器上训练我们的模型。对于使用文中的超参数的基础模型,每个训练步骤大约需要0.4秒。我们总共训练了基础模型100,000个步骤或12小时。对于我们的大模型(在表3的最后一行中描述),步骤时间为1.0秒。大模型训练了300,000个步骤(3.5天)。
我们使用了Adam优化器,其中β1 = 0.9,β2 = 0.98,ϵ = 10−9。我们根据以下公式在训练过程中调整学习率:
这对应于在前warmup_steps个训练步骤中线性增加学习率,之后按步骤数的倒数平方根成比例地减小学习率。我们使用了warmup_steps = 4000。
在训练过程中,我们采用了三种类型的正则化方法:
残差丢弃:我们在每个子层的输出上使用丢弃,在将其添加到子层输入和归一化之前。此外,我们在编码器和解码器堆栈中,embedding和位置编码的和上也应用了丢弃。对于基本模型,我们使用Pdrop = 0.1的速率。
标签平滑:在训练过程中,我们采用了值为ϵls = 0.1的标签平滑。这会降低困惑度,因为模型学会更加不确定,但会提高准确性和BLEU分数。
在WMT 2014年英德翻译任务中,大的transformer模型(表2中的Transformer(big))的表现超过了之前的最佳模型(包括集成模型),BLEU分数超过2.0,实现了一个新的BLEU分数最高记录,达到28.4。该模型的配置列在表3的底部。训练使用了8个P100 GPU,耗时3.5天。即使是我们的基础模型也超过了之前发表的所有模型和集成模型,在训练成本上只是竞争模型的一小部分。
在WMT 2014年英法翻译任务中,我们的大模型取得了41.0的BLEU分数,在训练成本上不到之前最佳模型的四分之一。英法翻译的Transformer(big)模型使用了Pdrop = 0.1的dropout率,而不是0.3。
对于基础模型,我们使用了最后5个检查点的平均模型,这些检查点是以10分钟间隔写入的。对于大模型,我们取了最后20个检查点的平均值。我们使用了束搜索,束大小为4,长度惩罚参数α = 0.6。这些超参数是在开发集上进行实验后选择的。我们将推理期间的最大输出长度设置为输入长度+50,但尽可能提前终止。
表2总结了我们的结果,并与文献中的其他架构模型比较翻译质量和训练成本。我们通过将训练时间、使用的GPU数量和每个GPU的持续单精度浮点运算能力的估计相乘,来估计训练模型使用的浮点运算次数(对于 K80, K40, M40 and P100,分别估计为2.8, 3.7, 6.0 and 9.5 TFLOPS)。
为了评估Transformer不同组件的重要性,我们以不同的方式改变基础模型,并在开发集newstest2013上测试英译德翻译性能的变化。我们使用了前一节中描述的波束搜索,但没有进行检查点平均。我们在表3中呈现了这些结果。
在表3的(A)行中,我们改变了注意力头数以及注意力key和value的维度,同时保持计算量不变,如第3.2.2节所述。尽管单头注意力比最佳设置差0.9 BLEU,但过多的注意力头数也会导致质量下降。
在表3的(B)行中,我们观察到减小注意力key的大小dk会损害模型质量。这表明确定兼容性并不容易,而且比点积更复杂的兼容性函数可能会更有益。
在 ©和(D)行中,更大的模型更好,并且丢弃(dropout)对于避免过拟合非常有帮助。
在(E)行中,我们用学习得到的位置嵌入替换了我们的正弦位置编码,结果与基础模型几乎相同。
为了评估Transformer是否能推广到其他任务,我们在英文构成分析上进行了实验。这个任务面临着特定的挑战:输出受到强烈的结构约束,并且比输入要长得多。此外,RNN序列到序列模型在小数据情况下无法达到最先进的结果。
我们在华尔街日报(WSJ)的Penn Treebank上训练了一个4层Transformer,dmodel = 1024,大约有40K个训练句子。我们还在半监督设置下进行了训练,使用了来自高置信度和BerkleyParser语料库的大约17M个句子。我们在WSJ设置中使用了一个16K个标记的词汇表,在半监督设置中使用了一个32K个标记的词汇表。
我们仅进行了少量实验来选择dropout、注意力和残差(5.4节)、学习率和束搜索大小,所有其他参数都与英德基础翻译模型保持不变。在推理过程中,我们将最大输出长度增加到输入长度+300。我们在WSJ设置和半监督设置中都使用了一个束搜索大小为21和α = 0.3。
我们在表4中的结果显示,尽管缺乏任务特定调整,我们的模型表现出色,比以前报道的所有模型都要好,除了递归神经网络语法。
与RNN序列到序列模型相比,Transformer在仅训练40K个句子的WSJ训练集上就超过了BerkleyParser。
本文提出了Transformer,这是第一个完全基于注意力的序列转换模型,用多头自注意力替代了编码器-解码器架构中最常用的循环层。
对于翻译任务,与基于循环层或卷积层的架构相比,Transformer的训练速度显著提高。在WMT 2014年英德翻译任务和WMT 2014年英法翻译任务中,我们实现了SOTA。在前一项任务中,我们的最佳模型甚至超过了以前报道的所有集成模型。
我们计划将Transformer扩展到涉及文本以外的输入和输出模态的问题,并研究局部、受限的注意力机制,以高效处理大量的输入和输出,如图像、音频和视频,使生成变得不那么顺序化。