Attention Is All You Need

Attention Is All You Need

主流的sequence transduction模型是基于复杂的循环或卷积神经网络,包括一个编码器和一个解码器。性能最好的模型还通过注意机制连接编码器和解码器。我们提出了一种新的简单的网络架构–Transformer,完全基于注意力机制,完全不需要递归和卷积。在两个机器翻译任务上的实验表明,这些模型在质量上更胜一筹,同时可并行性更强,所需的训练时间也大大减少。我们的模型在WMT 2014英德双语翻译任务上达到了28.4 BLEU,比现有的最佳结果(包括ensembles)提高了2 BLEU以上。在WMT 2014英译法任务上,我们的模型在8个GPU上训练3.5天后,建立了一个新的单模型最先进的BLEU得分41.8,这只是文献中最佳模型训练成本的一小部分。我们通过将Transformer成功地应用于英语constituency解析,证明了Transformer可以很好地泛化到其他任务中,无论是在大量的还是有限的训练数据下。

1 Introduction

循环神经网络,特别是长短期记忆[13]和门控循环[7]神经网络,已经被牢固地确立为序列建模和transduction问题的最先进方法,如语言建模和机器翻译[35,2,5]。此后,许多人不断努力推动递归语言模型和编码器-解码器架构的发展[38,24,15]。

递归模型通常沿着输入和输出序列的符号位置来考虑计算。将位置与计算时间中的步骤对齐,它们生成一系列隐藏状态 h t h_t ht,作为先前隐藏状态 h t − 1 h_{t-1} ht1的函数和位置t的输入。这种固有的顺序性质阻碍了训练样本中的并行化,这在较长的序列长度下变得至关重要,因为内存约束限制了batching across examples。最近的工作通过因式分解技巧[21]和条件计算[32]在计算效率方面取得了显著的改进,同时也提高了后者的模型性能。然而,顺序计算的基本约束仍然存在。

注意机制已经成为各种任务中引人注目的序列建模和transduction模型的一个组成部分,允许对依赖关系进行建模,而不考虑它们在输入或输出序列中的距离[2,19]。然而,除了少数情况外[27],这种注意机制都是与循环网络一起使用的。

在这项工作中,我们提出了Transformer,一个摒弃递归的模型架构,而完全依靠注意力机制来绘制输入和输出之间的全局依赖关系。Transformer允许更多的并行化,并且在8个P100 GPU上训练12小时后,就可以在翻译质量上达到一个新的水平。

2 Background

减少sequential computation的目标也构成了Extended Neural GPU[16]、ByteNet[18]和ConvS2S[9]的基础,它们都使用卷积神经网络作为基本构件,对所有输入和输出位置并行计算hidden representations。在这些模型中,将两个任意输入或输出位置的信号关联起来所需的运算次数随着位置之间的距离而增长,对于ConvS2S来说是线性的,对于ByteNet来说是对数的。这使得学习遥远位置之间的依赖关系变得更加困难[12]。在Transformer中,这种情况被减少到了恒定的运算次数,尽管代价是由于attention-weighted位置的平均化而降低了有效的分辨率,我们用Multi-Head Attention来抵消这种效果,如3.2节所述。

Self-attention,有时也被称为intra-attention,是一种将单个序列的不同位置联系起来,以计算序列的表征的注意力机制。Self-attention已被成功地用于各种任务中,包括阅读理解、抽象总结、文本内涵和学习与任务无关的句子表征[4,27,28,22]。

端到端记忆网络是基于recurrent attention mechanism而非sequence-aligned
recurrence,已被证明在简单语言问题回答和语言建模任务中表现良好[34]。

然而,据我们所知,Transformer是第一个完全依靠Self-attention来计算其输入和输出的特征表示,而不使用sequence-aligned的RNNs或卷积。在下面的章节中,我们将描述Transformer,motivate self-attention,并讨论其与[17,18]和[9]等模型相比的优势。

3 Model Architecture

大多数有竞争力的neural sequence transduction models都具有编码器-解码器结构[5,2,35]。这里,编码器将输入的符号表征symbol representations的序列 ( x 1 , . . . , x n ) (x_1,...,x_n) (x1,...,xn)映射为连续表征的序列 z = ( z 1 , . . . , z n ) \mathbb z=(z_1,...,z_n) z=(z1,...,zn)。在给定 z \mathbb z z的情况下,解码器每次生成一个符号的输出序列 ( y 1 , . . , y m ) (y_1,..,y_m) (y1,..,ym)。在每一步中,模型都是auto-regressive的[10],在生成下一个符号时,之前生成的符号作为额外的输入。

在这里插入图片描述

Transformer沿用了这种整体架构,编码器和解码器都采用stacked self-attention和point-wise的全连接层,分别如图1的左半部分和右半部分所示。(The Transformer follows this overall architecture using stacked self-attention and point-wise, fully connected layers for both the encoder and decoder, shown in the left and right halves of Figure 1, respectively.)

3.1 Encoder and Decoder Stacks

Encoder: 编码器是由N=6个identical layers组成的堆栈。每层有两个子层。第一层是一个multi-head self-attention mechanism,第二层是一个简单的、position-wise的全连接feed-forward网络。我们在两个子层周围分别采用残差连接[11],然后进行层归一化[1]。即每个子层的输出为 L a y e r N o r m ( x + S u b l a y e r ( x ) ) LayerNorm(x+Sublayer(x)) LayerNorm(x+Sublayer(x)),其中 S u b l a y e r ( x ) Sublayer(x) Sublayer(x)是sub-layer自身实现的函数。为了方便这些残差连接,模型中的所有子层以及嵌入层都会产生维度为 d m o d e l = 512 d_{model}=512 dmodel=512的输出。

Decoder: 解码器也是由N=6层相同的堆栈组成。除了每个编码器层中的两个子层外,解码器还插入了第三个子层,它在编码器堆栈的输出上执行multi-head attention。与编码器类似,我们在每个子层周围采用残差连接,然后进行层归一化。我们还修改了解码器堆栈中的self-attention sub-layer,以阻止当前位置对后续位置的关注。这种遮蔽(masking),加上输出嵌入偏移一个位置的事实,确保位置 i i i 的预测只能依赖于小于 i i i 的位置的已知输出(This masking, combined with fact that the output embeddings are offset by one position, ensures that the
predictions for position i can depend only on the known outputs at positions less than i.)。

3.2 Attention

attention函数可以描述为将一个query和一组键值对映射到一个输出,其中query、keys, values, and output都是向量。输出是以values的加权和来计算的,其中分配给每个values的权重是由query与相应keys的compatibility function计算的。

在这里插入图片描述

Figure 2: (left) Scaled Dot-Product Attention. (right) Multi-Head Attention consists of several
attention layers running in parallel.

3.2.1 Scaled Dot-Product Attention

我们把我们的特别attention称为 “Scaled Dot-Product Attention”(图2)。输入包括维度为 d k d_k dk的queries and keys和维度为 d v d_v dv的values。我们计算query与所有keys的点积,除以 d k \sqrt {d_k} dk ,并应用softmax函数得到values上的权重。

在实际应用中,我们同时计算一组queries的注意力函数,将其打包成一个矩阵Q,keys and values也打包成矩阵K和V。我们计算输出的矩阵为:

在这里插入图片描述

最常用的两种注意力函数是加法注意力[2]和点积(乘法)注意力。点积注意力与我们的算法相同,只是 1 d k \frac{1}{\sqrt {d_k}} dk 1 的缩放系数不同。加法注意力使用一个带有单层隐藏层的前馈网络来计算compatibility function。虽然两者在理论复杂度上相似,但点积注意力在实践中速度更快,空间效率更高,因为它可以使用高度优化的矩阵乘法代码来实现

d k d_k dk值较小时,这两种机制的表现相似,但在 d k d_k dk值较大的情况下,加法注意力的表现优于点积注意力[3]。我们怀疑,当 d k d_k dk值较大时,点积的大小会增大,从而将softmax函数推到具有极小梯度的区域。为了抵消这种影响,我们用 1 d k \frac{1}{\sqrt {d_k}} dk 1 来缩放点积。

3.2.2 Multi-Head Attention

Instead of performing a single attention function with d m o d e l d_{model} dmodel-dimensional keys, values and queries,
we found it beneficial to linearly project the queries, keys and values h times with different, learned
linear projections to dk, dk and dv dimensions, respectively.

我们发现,与其用 d m o d e l d_{model} dmodel-维度的keys, values and queries来执行单一的注意力函数,不如用不同的,学习到的线性投影分别将queries, keys and values线性投影为 d k , d k , d v d_k,d_k,d_v dk,dk,dv维度 h h h次。

在这些queries, keys and values的每一个投影版本上,我们并行地执行attention function,产生 d v d_v dv维的输出值。它们被连接(concatenated)起来,再次被投影,得到最终值,如图2所示。

Multi-head attention注意允许模型在不同的位置联合处理来自不同表示子空间的信息。在 single attention head的情况下,平均化(averaging)抑制了这一点。

在这里插入图片描述

其中,projections为参数矩阵 W i Q ∈ R d m o d e l × d k , W i K ∈ R d m o d e l × d k , W i V ∈ R d m o d e l × d v , W i O ∈ R h d v × d m o d e l W_i^Q\in\mathbb R^{d_{model}\times d_k},W_i^K\in\mathbb R^{d_{model}\times d_k},W_i^V\in\mathbb R^{d_{model}\times d_v},W_i^O\in\mathbb R^{hd_v\times d_{model}} WiQRdmodel×dk,WiKRdmodel×dk,WiVRdmodel×dv,WiORhdv×dmodel

在这项工作中,我们采用了h = 8个平行的注意力层,heads。对于每一个我们都用 d k = d v = d m o d e l / h = 64 d_k=d_v=d_{model}/h=64 dk=dv=dmodel/h=64

由于每个头的维度减少,总的计算成本与全维度single-head attention相似。

3.2.3 Applications of Attention in our Model

Transformer 刚以三种不同的方式使用 multi-head attention。

1.在“encoder-decoder attention”层中,queries 来自前一个解码器层, the memory keys and values来自编码器的输出。这使得解码器中的每个位置都能在输入序列中的所有位置上进行关注。这模仿了sequence-to-sequence模型中典型的编码器-解码器注意机制,如[38,2,9]。

2.编码器包含self-attention layers。在自注意层中,所有的keys, values and queries都来自同一个地方,在这种情况下,就是编码器中上一层的输出编码器中的每个位置都可以关注编码器前一层中的所有位置

3.同样,解码器中的self-attention lay允许解码器中的每个位置关注解码器中的所有位置,直至并包括该位置。We need to prevent leftward information flow in the decoder to preserve the auto-regressive property。We implement this inside of scaled dot-product attention by masking out (setting to − ∞ -\infty ) all values in the input
of the softmax which correspond to illegal connections. See Figure 2.

3.3 Position-wise Feed-Forward Networks

除了注意子层,我们的编码器和解码器中的每一层都包含一个完全连接的前馈网络,该前馈网络分别应用于每个位置。这包括两个线性变换,中间有一个ReLU激活。

在这里插入图片描述

虽然不同位置的线性变换是相同的,但它们在层与层之间使用不同的参数。另一种描述方式是内核大小为1的两个卷积。输入和输出的维度为 d m o d e l = 512 d_{model}=512 dmodel=512,inner-layer的维度为 d f f = 2048 d_{ff}=2048 dff=2048

3.4 Embeddings and Softmax

与其他sequence transduction models类似,我们使用learned embeddings将输入tokens和输出tokens转换为维数为 d m o d e l d_{model} dmodel的向量。我们还使用usual learned linear transformation和softmax函数将解码器输出转换为预测的next-token概率。在我们的模型中,我们在两个embedding layers和pre-softmax linear transformation之间共享相同的权重矩阵,类似于[30]。在embedding layers中,我们将这些权重乘以 d m o d e l \sqrt {d_{model}} dmodel

3.5 Positional Encoding

由于我们的模型不包含递归和卷积,为了使模型能够利用序列的顺序,我们必须注入一些关于序列中标记的相对或绝对位置的信息。为此,我们在编码器和解码器堆栈底部的输入嵌入中加入 “位置编码”。位置编码与嵌入的维度 d m o d e l d_{model} dmodel相同,因此两者可以相加。位置编码有很多选择,有学习型和固定型[9]。

在这项工作中,我们使用不同频率的正弦和余弦函数:

在这里插入图片描述

其中pos为位置,i为维度。也就是说,位置编码的每个维度都对应一个正弦曲线。波长形成了从 2 π 2\pi 2π 10000 ⋅ 2 π 10000\cdot 2\pi 100002π的几何级数,我们之所以选择这个函数,是因为我们假设它可以让模型很容易地通过相对位置来学习,因为对于任何固定的偏移量k, P E p o s + k PE_{pos+k} PEpos+k都可以表示为 P E p o s PE_{pos} PEpos的线性函数。

我们还尝试使用learned positional embeddings[9]来代替,发现两个版本产生了几乎相同的结果(见表3第(E)行)。我们选择正弦模型是因为它可以使模型外推到比训练中遇到的序列长度长的序列。

Table 3: Variations on the Transformer architecture. Unlisted values are identical to those of the base model. All metrics are on the English-to-German translation development set, newstest2013. Listed perplexities are per-wordpiece, according to our byte-pair encoding, and should not be compared to per-word perplexities.

在这里插入图片描述

4 Why Self-Attention

在本节中,我们将自注意力层的各个方面与通常用于将一个可变长度的符号表示序列 ( x 1 , . . . , x n ) (x_1,...,x_n) (x1,...,xn)映射到另一个等长序列 ( z 1 , . . . , z n ) (z_1,...,z_n) (z1,...,zn)的循环层和卷积层进行比较,其中 x i , z i ∈ R d x_i,z_i\in\mathbb R^d xi,ziRd,如典型的序列转换编码器或解码器中的隐藏层。动机我们使用自注意力,我们考虑三个欲望。

一个是每层的总计算复杂度。另一个是可以并行化的计算量,以所需的最小sequential operations来衡量。

三是网络中长程依赖之间的path length。学习长程依赖性是许多sequence transduction tasks中的一个关键挑战。影响学习这种依赖性能力的一个关键因素是前向和后向信号在网络中必须穿越的路径长度(One key factor affecting th ability to learn such dependencies is the length of the paths forward and backward signals have to traverse in the network)。输入和输出序列中任意位置组合之间的这些路径越短,就越容易学习长程依赖性[12]。因此,我们也比较不同层类型组成的网络中任意两个输入和输出位置之间的最大路径长度。

表1:不同层类型的最大路径长度、每层复杂度和最小顺序操作数。n为序列长度,d为表示维度,k为卷积的内核大小,r为受限自注意中邻域的大小。

在这里插入图片描述

如表1所述,自注意力层用一个恒定的顺序执行操作数连接所有位置,而递归层需要O(n)个顺序操作。就计算复杂度而言,当序列长度n小于表示维度d时,自注意层比递归层更快,最常见的情况是机器翻译中最先进的模型所使用的句子表示,如word-piece[38]和byte-pair[31]表示。为了提高涉及很长序列的任务的计算性能,自注意力可以被限制为只考虑输入序列中以各自输出位置为中心的大小为r的邻域。这将使最大路径长度增加到O(n=r)。我们计划在今后的工作中进一步研究这种方法。

一个kernel width k<n的单卷积层并不能连接所有的输入和输出位置对。在连续内核的情况下,这样做需要一个O(n/k)卷积层的堆栈,或者在扩张卷积的情况下需要O(logk(n))[18],增加了网络中任何两个位置之间的最长路径的长度。卷积层一般比递归层贵,贵了k倍。然而,Separable convolutions[6]大大降低了复杂性,达到 O ( k ⋅ n ⋅ d + n ⋅ d 2 ) O(k\cdot n\cdot d+n\cdot d^2) O(knd+nd2)。然而,即使k=n,可分离卷积的复杂度也等于自注意层和point-wise feed-forward层的组合,我们在我们的模型中采用的方法。

作为副作用,自我注意可以产生更多的解释模型。我们从我们的模型中检验注意力分布,并在附录中给出和讨论示例。不仅个体的注意力集中者清楚地学会了执行不同的任务,而且许多人表现出与句子的句法和语义结构有关的行为。

feed-forward层的组合,我们在我们的模型中采用的方法。

作为副作用,自我注意可以产生更多的解释模型。我们从我们的模型中检验注意力分布,并在附录中给出和讨论示例。不仅个体的注意力集中者清楚地学会了执行不同的任务,而且许多人表现出与句子的句法和语义结构有关的行为。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值