Attention is all you need
Abstract
主要的序列转导模型(sequence transduction models)基于复杂的递归和卷积神经网络包括编码-解码器。表现最好的模型通过注意力机制连接编码和解码(connect the encoder and decoder through an attention mechanism)。
提出新的简单的网络结构:Transformer,完全基于注意力机制,不需要重复和卷积(dispensing with recurrence and convolutions entirely)。在两个翻译任务上表明,这些模型在质量上更优越,同时拥有更好的并行化和要求更少的时间训练。
我们在WMT 2014英译德翻译任务中取得28.4 BLEU的成绩,超过现存的模型,包括集成模型,2BLEU。在WMT 2014英法翻译任务上,我们的模型在8个GPU上进行了3.5天的培训后,建立了一个新的单一模型最先进的BLEU得分41.8%,成本比之前下降了a small fraction of the training costs of the best models from the literature。我们将它用于英语成分句法分析,表明这个模型可以用于其他任务。
1 Introduction
递归神经网络Recurrent neural networks,特别是长短期记忆long short-term memory和门控递归神经网络gated recurrent [7] neural networks,已经被牢固地确立为序列建模和转导问题(如语言建模和机器翻译language modeling and machine translation)的最新方法。
递归模型通常沿输入和输出序列的符号位置进行因子计算factor computation。
校准位置到计算使得时间,他们根据一个功能先前的隐藏层ht-1和输入的位置t制造一个隐藏序列的状态ht。这固有的顺序性(inherently sequential nature)阻碍训练样本内部的并行化,在长序列较长时尤为关键,因为内存限制导致无法跨样本进行大批量处理across examples。
近来的工作收获了巨大的改进:通过隐式分解技巧和条件计算提高计算高效性上。同时后者(in case of the latter)也改善模型的表现能力。然而序列计算基础的限制仍然存在。
注意力机制变成一个不可分割的部分在有说服力的序列模型和传导模型在多样的任务中,允许依赖性的模型而不考虑他们在输入或输出序列上的距离。
然而除了极少数情况In all but a few cases,注意力机制是结合循环网络使用的。
在这次工作中,我们提出了Transformer,一个模型构造避免递归(recurrence),替代的是完全依赖于一个注意力机制来刻画全局依赖在输入和输出之间。Transformer允许更多的并行化和可以达到SOTA在翻译质量上在仅仅在8个P100 GPUs训练12个小时。
2 Background 背景
减少序列计算的目标也形成了基石如Extended Neural GPU,ByteNet,ConvS2S,所有的这些使用卷积神经网络作为基础建立基石,计算隐藏表达在并行中位所有输入和输出位置。并行计算所有输入输出位置的隐藏表示。关联来自两个任意输入或输出位置的信号所需的操作数量随着位置之间的距离而增加,对于ConvS2S是线性的,对于ByteNet是对数的。这导致在遥远的位置中学习依赖项更难。在Transformer减小到了一个持续的操作数,尽管代价是减小影响力的方法,因为平均注意力权重位置,一个影响我们通过多头注意力机制来抵消(counteract with)
(该段介绍自注意力)自注意力,一些时候被叫做内注意力,是一个注意力机制联系一个单个序列的不同的位置为了计算一个序列的表达。自注意力以及被成功使用在一些多样的任务中包括阅读理解,抽象概况,文本蕴含,和学习与任务无关的句子表征(task-independent,不知道下游任务是什么,学出来的句子通用)。
端对端的记忆网络是根据一个递归注意力机制而不是序列对齐递归,并且已经展示了表现良好在简单语言问题回答和语言模型任务。
然而,据我们所知To the best of our knowledge,Transformer是第一个传导模型完全依赖自注意力来计算输入和输出的表达不用使用序列对齐RNNs或者卷积。在接下来的部分,我们将会描述Transformer,激励自我注意力并讨论他的优点。
3 Model Architecture
大多数竞争性神经序列转导neural sequence transduction models模型都有编码-译码结构。
- 编码器将符号表示(x1,...,xn)的输入序列映射到连续表示序列z=(z1,...,zn)。在给定z的情况下,
- 解码器然后一次一个元素地生成符号的输出序列(y1,...,ym)。在每一步,
- 模型都是****自回归的(auto-regressive)[10],在生成下一步时,使用先前生成的符号作为附加输入。****consuming the previously generated symbols as additional input when generating the next.
遵循这个整体架构,使用堆叠的自我关注和点式。stacked self-attention and point-wise。对编码器和解码器使用完全连接的层,分别显示在图1的左半部分和右半部分。
3.1 Encoder and Decoder Stacks 编码器和解码器堆栈
Encoder 编码器:编码器由N=6个相同层的堆叠组成。
每一层都有两个子层。第一个是多头自我注意机制multi-head self-attention mechanism,,第二个是简单的位置全连接前馈网络a simple, position-wise fully connected feed-forward network。
我们在两个子层的每一层周围采用剩余连接residual connection,随后进行层标准化layer normalization。也就是说,每个子层的输出是LayerNorm(x+subayer(X)),其中subayer(X)是子层本身实现的功能。
解释
"残差跳线"就是把输入直接加到输出上,防止信息丢失。
"层归一化"就是把向量拉回到均值 0、方差 1,训练更稳。
为了促进这些剩余连接,模型中的所有子层以及嵌入层产生维度dmodel=512的输出。(也就是说,真正出来的向量是:先算模块本身的结果 Sublayer(x),再和原来的 x 相加,最后做归一化。)
Decoder解码器:解码器也由n=6个相同层的堆栈组成。除了每个编码层中的两个子层之外,解码器还插入第三个子层,该子层对编码栈的输出执行多头关注。multi-head attention。
解码器每层比编码器多塞一个小模块:它用"多头注意力"去偷看编码器最后产生的整句语义。
与编码器类似,我们在每个子层周围使用残差连接residual connections,然后进行层标准化layer normalization。我们还修改了解码器堆栈中的自我关注子层,以防止位置关注后续位置。(We also modify the self-attention sub-layer in the decoder stack to prevent positions from attending to subsequent positions.生成第 i 个词时,只能看 1...i-1 位置,不能看到 i,i+1...,否则就像考试偷看答案。)这种掩蔽与输出嵌入偏移一个位置的事实相结合,确保了对位置i的预测只能依赖于小于i的位置处的已知输出。

|---------------------|--------------------------------------|----------------------|
| 输入 Embedding | Input Embedding 框 | 最左边第一个框 |
| Positional Encoding | 同层的小加号"+" | 与 Input Embedding 相加 |
| N=6 个相同层 | 左侧大灰色块标注 Nx | 竖着叠了 6 层 |
| 每层两个子层 | ①Multi-Head Attention ② Feed Forward | 每层内部上下两个粉/蓝块 |
| Add & Norm | 每个子层旁边的"Add & Norm"小框 | 残差+层归一化 |
| 残差连接 + LayerNorm | 同上 | 图中每个子层周围的箭头和小框 |
|--------------------------------|---------------------------------------------|-----------------------|
| 输出 Embedding(偏移一位) | Output Embedding (shifted right) 框 | 最右边第一个框 |
| Positional Encoding | 同层的小加号"+" | 与 Output Embedding 相加 |
| N=6 个相同层 | 右侧大灰色块标注 Nx | 竖着叠了 6 层 |
| 第三子层:对 encoder 输出做多头 attention | 每层中间那个 Multi-Head Attention 块(箭头来自 encoder) | 三层中最中间那块 |
| Masked Multi-Head Attention | 每层最下面的那个 Masked Multi-Head Attention 块 | 三层中最下面那块(带 mask) |
| Add & Norm + 残差 | 每个子层旁边的"Add & Norm"小框 | 同上 |
3.2 Attention 注意力
注意力函数可以被描述为将一个查询query和一组键-值对key-value映射到输出output,其中查询、键、值和输出都是向量。输出被计算为值的加权和,其中分配给每个值的权重是通过查询与相应键的兼容性函数来计算的。

3.2.1 Scaled Dot-Product Attention缩放点积注意力
输入包括查询和键query and key的维度dk,以及value的维度dv。
We compute the dot products of the query with all keys, divide each by √dk, and apply a softmax function to obtain the weights on the values.
-计算所有查询和键值的点积(Q和K MatMul)
-除以根号dk,dk越大点积绝对值容易越大,直接 softmax 会挤到 0 或 1,造成梯度消失;除以根号后数值更温和。(scale)
-softmax
在实践中,我们同时计算一组查询的注意力函数,这些查询被打包到一个矩阵Q中。键和值也被打包到矩阵K和V中。我们计算输出矩阵如下:
两个最常用的注意函数是加性注意力additive attention和点积(乘性)注意力dot-product (multi-plicative) attention。
-点积 注意力与我们的算法相同,只是比例因子为1/√dk。
纯点积注意力 = Q·K^T;
Transformer版 = Q·K^T / √dₖ,防止数值过大。
-加法注意力在计算"query 与 key 有多匹配"的时候(compatibility function。兼容性函数),用的是一个单隐藏层的前馈神经网络a feed-forward network with a single hidden layer.。
虽然从大 O 理论复杂度上看,两者差不多,但在实际跑程序时,点积注意力快得多、也省内存得多。原因是点积注意力可以直接调用已经优化到极限的矩阵乘法库(如 cuBLAS、MKL)。
而对于较小的dk值,两种机制的表现相似,而对于较大的dk值,加性注意优于点积注意,而没有进行比例调整。我们怀疑,对于较大的dk值,点积的幅度会增大,从而将Softmax函数推入其梯度极小的区域。为了抵消这一影响,我们按以下比例缩放点积1/根号dk。
当向量维度 dₖ 比较小时,加法注意力 和 点积注意力 的效果差不多。如果 不做缩放(即不除以 √dₖ),当 dₖ 变大时,加法注意力会比点积注意力效果更好。我们猜测,dₖ 越大,点积的绝对值会跟着变大。这会直接把 softmax 推到"梯度几乎为零"的饱和区。为了抵消这一影响,我们按√dₖ缩放点积。
3.2.2 Multi-Head Attention 多头注意力
我们发现,使用不同的学习线性投影将查询、键和值分别线性投影到DK、DK和DV维度上h次是有益的,而不是使用dModel维键、值和查询执行单一的注意函数。然后,在这些查询、键和值的每个投影版本上,我们并行地执行注意力功能,从而产生dv维output value。它们被连接起来,并再次投影,产生最终的值,如图2所示。
多头注意力使得模型能够同时关注来自不同表示子空间、不同位置的信息jointly attend to information from different representation subspaces。而如果只用单个注意力头,取平均会抑制这种能力averaging inhibits this。



在这项工作中,我们使用了h=8个平行的注意力层或头部。对于其中的每一个,我们使用dk=dv=dmodel/h=64。由于每个头的维度都降低了,所以总的计算量与全维的单头注意相似。
3.2.3 Applications of Attention in our Model注意力在我们的模型中的应用
Transformer以三种不同的方式使用多头注意力:
- 在****"编码者-解码者注意"层中**** ,查询来自上一个解码层,而存储键和值来自编码器的输出。这允许解码器中的每个位置参与输入序列中的所有位置。这模仿了序列到序列模型中典型的编解码者注意机制.
- 编码器包含自我关注层。在自我关注层中,所有键、值和查询都来自相同的位置,在本例中,是编码器中上一层的输出。编码器中的每个位置可以关注编码器的前一层中的所有位置。
- 类似地,解码器里的自注意力层,让当前正在生成的词只能"回头看"已经生成的词,绝对不能偷看后面的词(all positions ... up to and including that position:从第 1 个词一直到它自己(不能看到未来))。我们需要防止信息在解码器中向左流动(把"未来的信息"完全堵死),以保持自回归特性(保持"一次只能生成一个新词,且不能偷看未来"这条规矩)。在注意力计算里,我们把"当前词 vs 未来词"的得分先改成负无穷,再送 softmax,这样它们概率就变成 0,等于彻底遮掉。
3.3 Position-wise Feed-Forward Networks位置式前馈网络
除了注意子层,编码器和解码器中的每一层都包含一个完全连接的前馈网络,该网络分别且相同地应用于每个位置。这由两个线性变换组成,其间有一个ReLU激活。
虽然线性变换在不同位置上是相同的,但它们在不同的层之间使用不同的参数。另一种描述方式是将其描述为核大小为1的两个卷积。
第一层 1×512→1×2048 的"1×1 卷积"=放大;
第二层 1×2048→1×512 的"1×1 卷积"=缩回。
输入和输出的维度为dmodel=512,而内层的维度为dff=2048。

3.4 Embeddings and Softmax嵌入和Softmax
输入token:源语言的一个词(或子词)。
输出token:目标语言的一个词(或子词)。
embedding:把"一个字"变成"一个向量"的查表操作,好比"猫" → [0.2, --1.3, 0.7, ...](512个数)。
与其他序列转导模型类似,我们使用学习嵌入learned embeddings将输入词元token和输出词元token转换为维度dmodel的向量。
我们还使用常用的学习线性变换learned linear transformation和Softmax函数将解码器输出转换为预测的下一词的概率分布。
在我们的模型里,输入嵌入、输出嵌入和刚才那个预 softmax 线性变换三者共用同一套权重矩阵,做法跟文献(Press & Wolf, 2017)一样。 查表得到的向量,要先乘以 √512 ≈ 22.6,目的是让embedding的尺度跟后面注意力计算匹配,不然数值太小。
3.5 Positional Encoding 位置编码
由于我们的模型不包含递归和卷积,为了使模型利用序列的顺序,我们必须注入一些关于序列中标记的相对或绝对位置的信息the relative or absolute position of the tokens in the sequence。为此,我们在编码器和解码器堆栈底部的输入嵌入中添加了"位置编码"positional encodings。位置编码具有与嵌入相同的维度dmodel,从而可以对这两个进行求和。位置编码有许多选择,有学习的和固定的learned and fixed。
在这项工作中,我们使用不同频率的正弦和余弦函数:
其中pos是位置,i是维度。也就是说,位置编码的每个维度对应于一个正弦。这些波长形成从2π到10000·2π的几何级数a geometric progression。我们选择这个函数是因为我们假设它将允许模型通过相对位置容易地学习注意learn to attend by relative positions,因为对于任何固定的偏移量k,PEpos+k可以表示为PEpos的线性函数。
我们还试验了使用习得的位置嵌入[9],发现两个版本产生的结果几乎相同(Table3 rowE)。我们选择正弦版本是因为它可能允许模型外推到比训练期间遇到的序列长度更长的序列长度。
4 Why Self-Attention为什么要自我关注
在这一部分中,我们将自关注层的各个方面与通常用于将一个可变长度的符号表示序列(x1,...,xn)映射到另一等长序列(z1,...,zn)的递归和卷积层进行比较,其中xi,zi∈Rd,例如典型的序列转导编码器或解码器中的隐藏层。我们要考虑三件事。
- 每层的总计算复杂 度。total computational complexity per layer
- 可以并行化的计算量,以所需的最小顺序操作数来衡量。the amount of computation that can be parallelized, as measured by the minimum number of sequential operations required.
- 第三个是网络中远程依赖之间的路径长度the path length between long-range dependencies in the network。
在许多序列转导任务中,学习长距离依赖关系是一个关键挑战。影响学习这种相关性的能力ability to learn such dependencies的一个关键因素是前向和后向信号必须在网络中穿越的路径的长度。输入和输出序列中位置的任意组合之间的这些路径越短,就越容易学习长期依赖关系。因此,我们还比较了由不同层类型组成的网络中任意两个输入和输出位置之间的最大路径长度。
计算复杂度方面:当序列长度 n <表示维度 d 时,自注意力层(self-attention layers) 比循环层(recurrent layers) 更快。
实际应用中:在机器翻译等任务中,句子表示通常使用 word-piece 或 byte-pair 表示法,这种情况下 n < d,因此自注意力层在这种场景下更高效。which is most often the case with sentence representations used by state-of-the-art models in machine translations, such as word-piece [38] and byte-pair [31] representations。
为了提高涉及很长序列的任务的计算性能,可以将自我注意限制为只考虑输入序列中以相应输出位置为中心的大小为r的邻域。这会将最大路径长度增加到O(n/r)。
一个卷积层的卷积核宽度为 k,如果 k 小于序列长度 n,那么单个卷积层无法让输入序列中的每一个位置都与输出序列中的每一个位置建立直接联系。
为了让每个位置都能影响到其他所有位置(即实现全局感受野,increasing the length of the longest paths between any two positions in the network.),你需要堆叠多个卷积层:
如果使用普通卷积核(contiguous kernels),需要堆叠大约 O(n / k) 层。
如果使用空洞卷积(dilated convolutions),可以更高效地扩大感受野,只需要 O(logₖ(n)) 层。
卷积层的计算成本通常比循环层(如 RNN、LSTM)高,高出大约 k 倍(k 是卷积核宽度)。
因为卷积层在每个位置都要对 k 个输入做加权求和,而循环层每个时间步只处理一个输入。
可分离卷积(Separable convolutions) 是一种优化技术,可以显著降低计算复杂度。decrease the complexity considerably,它将一个大的卷积操作拆分成两个小的步骤(比如先逐深度卷积,再逐点卷积),从而把复杂度降到:O(k · n · d + n · d²)
k:卷积核宽度
n:序列长度
d:特征维度
即使你把卷积核宽度 k 设为整个序列长度 n(即全局卷积),
使用可分离卷积的复杂度仍然等同于一个自注意力层 + 一个逐点前馈网络(point-wise feed-forward layer)的组合。
FFN的复杂度是O(nd^2)
而这个组合正是 Transformer 中的标准模块。
总结:卷积层要想实现全局感受野,需要堆很多层,计算也贵;即使用最优化的可分离卷积,其复杂度也只是和 Transformer 的一个基本模块(自注意力+前馈)持平。
作为附带的好处,自我关注可能会产生更多可解释的模型。我们检查了我们的模型中的注意力分布,并在附录中提供并讨论了示例。每个人的注意力不仅清楚地学会执行不同的任务,而且许多人似乎表现出与句子的句法和语义结构相关的行为。
图1所示:自我关注层(self-attention)使用恒定数量的顺序(sequential operations)执行的操作连接所有位置,而递归层需要O(N)个顺序操作。
Table1:不同层类型的最大路径长度、每层复杂性和最小顺序操作数。n是序列长度,d是表示维,k是卷积的核大小,r是受限自关注中邻域的大小。
5 Training
这一部分描述了我们的模型的训练制度。
5.1 Training Data and Batching 训练数据和批次
数据集: WMT 2014 English-German 英德数据集:450万对句子(4.5 million sentence pairs)。句子使用字节对编码,它具有大约37000个标记的共享源目标词。
2014年WMT英语-法语数据集,包括3600万个句子和拆分成32000个单词的词汇表。For English-French, we used the significantly larger WMT 2014 English-French dataset consisting of 36M(M是百万的缩写)
sentences and split tokens into a 32000 word-piece vocabulary.
批次: 句子对按大致的序列长度成批排列在一起。每个训练批次包含一组句子对,其中包含大约25000个源标记和25000个目标标记。
5.2 Hardware and Schedule硬件和时间表
使用8个NVIDIA P100 GPU
对于使用本文中描述的超参数的基本模型,每个训练步骤大约需要0.4秒。我们对基础模型进行了总共100,000步或12小时的训练。对于我们的大型模型(如表3的底线所示),步长为1.0秒。这些大模型接受了300,000步(3.5天)的训练。
5.3 Optimizer 优化
我们使用ADAM优化器

,在训练过程中根据公式改变了学习率:
对于第一个warmup_steps线性地增加学习速率,并且此后以step_num的平方根的倒数成比例地减小它(就是step_num^(-0.5))。
d_model:模型隐层维度(Transformer-base 里 512)。
step_num:当前训练步数(从 1 开始)。
warmup_steps:热身步数,论文里设为 4000。
5.4 Regularization 正则化
我们在训练期间采用了三种类型的正规化:
Residual Dropout :残差连接上的 Dropout。Dropout:丢弃法
我们将Dropout[33]应用于每个子层的输出,然后将其添加到子层输入并规格化。
In addition, we apply dropout to the sums of the embeddings and the positional encodings in both the encoder and decoder stacks.此外,我们将dropout应用于编码器和解码器堆栈中的嵌入和位置编码的总和。对于基本模型,我们使用Pdrop=0.1的比率。(目的:防止过拟合,让模型更鲁棒。)
Label Smoothing标签平滑
在训练期间,我们采用了值ϵls=0.1时的标签平滑[36]。这伤害了困惑(hurt perplexity让模型在训练集上的 perplexity 变高了),因为模型学会了更多的不确定,但提高了准确性和BLEU的分数。
P.S:做法:真实词原来是"one-hot"=[0,0,1,0...],现在把正确位置的概率从 1 改成 0.9,其余词平分 0.1(εls=0.1)。
6 Results
6.1 Machine Translation 机器翻译

在WMT 2014英语翻译德语任务中,transformer比之前报道的最好的模型(包括综合模型)高出2.0%以上BLEU,创造了28.4的最先进的BLEU得分。在8个P100 GPU上进行了3.5天的训练。甚至我们的基础模型也超过了之前发布的所有模型和综合模型,而训练成本只是任何竞争模型的一小部分。at a fraction of the training cost of any of the competitive models.
在2014年WMT英法翻译任务中,我们的大模型达到了BLEU的41.0分,超过了之前发表的所有单一模型,训练成本不到以前最先进模型的四分之一。接受过英语到法语转换培训的Transformer(BIG)模型使用的是丢弃率(dropout rate)Pdrop=0.1,而不是0.3。
For the base models, we used a single model obtained by averaging the last 5 checkpoints, which were written at 10-minute interval.对于基础模型,我们把训练最后 5 个、每 10 分钟保存一次的检查点参数取平均,得到最终的单一模型。
For the big models, we averaged the last 20 checkpoints.对于大模型,我们把最后 20 个检查点参数取平均。
We used beam search with a beam size of 4 and length penalty α = 0.6解码时采用束搜索,束宽为 4,长度惩罚系数 α = 0.6。
These hyperparameters were chosen after experimentation on the development set.这些超参数(指beam size,α)是在开发集上通过实验筛选出来的。
We set the maximum output length during inference to input length + 50, but terminate early when possible.推理时输出长度上限设为输入长度 + 50,但如果模型提前生成结束符,就会立即终止。
表 2 汇总了我们的实验结果,并将我们的翻译质量与训练成本同文献中的其他模型架构进行了对比。We estimate the number of floating point operations used to train a model by multiplying the training time, the number of GPUs used, and an estimate of the sustained single-precision floating-point capacity of each GPU.我们通过"训练总时长 × 所用 GPU 数量 × 单 GPU 持续单精度算力"来估算训练模型所消耗的浮点运算总量。(the number of floating point operations (FLOPs):训练该模型所消耗的浮点运算次数)
6.2 Model Variations模型变体
为了评估Transformer的不同组件的重要性,我们以不同的方式改变了我们的基本模型,测量了英语到德语翻译开发集的性能变化。我们按照上一节所述使用了波束搜索,但没有检查点平均。结果在Table3中。
表格里没列出来的那些数值均与 base 模型保持一致。
全部指标均在英德翻译开发集 newstest2013 上测得。
Listed perplexities are per-wordpiece, according to our byte-pair encoding, and should not be compared to per-word perplexities.表中所列困惑度均以 BPE 子词(wordpiece)为单位计算,请勿与按整词计算的困惑度横向对比。
A行我们改变了注意头的数量h以及注意键和值的维度dk,dv,保持计算量不变。
单头注意力比最优设置差 0.9 BLEU,而头数过多时质量同样会下降。
→ 作者想告诉你:头数不是越多越好,8 头左右在 base 模型里性价比最高。
B行减小注意键大小dk会损害模型质量。This suggests that determining compatibility is not easy and that a more sophisticated compatibility function than dot product may be beneficial.这说明"判断相似度"本身很困难,未来或许需要比点积更复杂的兼容函数。(compatibility在注意力机制(attention) 的语境里,它其实是一个 技术术语,意思是:查询(query)和键(key)之间的匹配程度,也就是 相似度。)
C行和D行表明:更大的模型更好,dropout在避免过拟合中非常有用。
(C) 组:把 dmodel 从 512 提到 1024
dmodel=1024, dk=dv=128 → BLEU 26.0(+0.2)
(D) 组:只改 dropout
dropout=0.0 → BLEU 24.6(掉 1.2)
dropout=0.2 → BLEU 25.5(回到正常)
E:用学习的位置嵌入来替换我们的正弦位置编码replace our sinusoidal positional encoding with learned positional embeddings[9],并且观察到与基本模型几乎相同的结果
6.3 English Constituency Parsing英语成分句法分析
Constituency:成分
Parsing:语法分析
为了评估Transformer是否能运用到其他任务,在英语成分句法分析上进行实验。这项任务提出了具体的挑战:输出受到强烈的结构性限制,而且比输入要长得多。此外,RNN序列到序列模型(RNN sequence-to-sequence)还不能在小数据区域中获得最先进的结果。
我们在PTB-WSJ(一个数据集,90 年代初由美国宾夕法尼亚大学发布。把大量英语文本先做分词、再做人工校对的词性标注和成分句法树标注。)部分上训练了一个dModel=1024的4层transformer,大约40K个训练句子。我们还在半监督环境下使用较大的高置信度语料库和Berkley Parser语料库进行了训练,语料库大约有1700万个句子。我们将16K个令牌的词汇表用于WSJ Only设置,将32K个令牌的词汇表用于半监督设置。
我们只做了少量的实验来选择dropout,包括注意力(attention)和残差(residual)(第5.4节)。学习率(learning rate)和波束大小(beam size)在第22节发展集上,所有其他参数与英语到德语基础翻译模型保持不变。在推理中,将最大输出长度增加到输入长度+300。我们对《华尔街日报》和半监督设置使用了束尺寸21和α=0.3。
表4中的结果表明,尽管缺少特定于任务的调整,但我们的模型执行得出奇地好,产生的结果比以前报道的所有模型都要好,但递归神经网络语法(Recurrent Neural Network Grammar)除外。
与RNN序列到序列模型[37]相比,Transformer的性能优于BerkeleyParser[29],即使只在WSJ训练集上训练40K个句子也是如此。
WSJ only:只用WSJ数据
Parser:模型/系统名称。
Training:训练条件。
-- WSJ only, discriminative=只用 4 万句标注,判别式训练;
-- semi-supervised=再额外用 1 700 万句自动语料;
-- multi-task / generative=其它训练策略。
WSJ 23 F1:在 Penn Treebank《华尔街日报》第 23 段(官方测试集)上的成分句法 F1 分数,越高越好。
|---------------------------------|--------------------------------------|------------------------------------------------------------------------|
| 模型 | 技术路线 / 模型类型 | 一句话说明 |
| Petrov et al. (2006) | 判别式PCFG 分裂-合并 | 经典" Berkeley Parser ":不断分裂非终结符再合并,用 EM+判别式微调,纯符号文法。 |
| Zhu et al. (2013) | 判别式Span-based 线性模型 | 传统最大熵/感知机,手工特征+枚举所有候选 span,靠线性打分选树。 |
| Dyer et al. (2016) | RNN 转移系统(Stack-LSTM Parser) | 用 3 个 LSTM 实时跟踪"栈-缓存-历史",按转移动作(SHIFT/REDUCE)一步步造树,端到端。 |
| Vinyals & Kaiser et al. (2014) | 序列到序列 LSTM + 注意力 | 把线性化句法树当成目标字符串,用 encoder-decoder LSTM 直接生成括号序列,生成式模型。 |
| Huang & Harper (2009) | 自训练(self-training) + Berkeley Parser | 先用 Berkeley Parser 给 100 万句未标注文本打伪标签,再把这些数据重新训练 Berkeley Parser,半监督套路。 |
| McClosky et al. (2006) | 自训练 + 生成式 PCFG | 早期半监督标杆:用 Collins 生成式 PCFG 给 2 百万句打伪标签,再混合重训练。 |
| Luong et al. (2015) | 多任务序列到序列 LSTM | 一个 encoder-decoder 同时做翻译、句法、分块等多任务,共享参数,句法只是其中一路输出。 |
7 Conclusion
提出Transformer,第一个序列转换模型(sequence transduction)完全根据注意力,在编码解码结构(encoder-decoder)中用多头自注意力(multi-headed self-attention)完全替代卷积层。
Transformer可以被训练地很快比起递归或者卷积架构。(Transformer can be trained significantly faster than architectures based on recurrent or convolutional layers.)在WMT 2014 English-to-German and WMT 2014 English-to-French translation任务中,达到了SOTA。在之前的任务中,超过了所有之前被报道的团体。
希望将Transformer拓展到更多输入输出问题而不是文本,比如图像、音频、视频。Making generation less sequential is another research goals of ours."让生成过程变得不那么'顺序化',是我们的另一个研究目标。"(在传统的生成模型(如GPT系列)中,生成过程是顺序的(sequential),即一个字、一个词地按顺序生成。这种方式虽然有效,但也存在一些问题,比如:速度慢(必须等前一个生成完才能生成下一个)难以并行计算、对长序列生成效率低,所以,"making generation less sequential" 指的是研究如何让生成过程更并行、更高效,)