1445 字
7 分钟
Attention is All You Need

Abstract#

​ 主流的序列转导模型(sequence transduction models)基于复杂的循环神经网络(recurrent neural network)卷积神经网络(convolutional neural network),这些网络包含编码器解码器。表现最佳的模型还通过注意力机制将编码器和解码器连接起来。

​ 我们提出了一种全新的简单网络架构——Transformer,它完全基于注意力机制,摒弃了循环和卷积。在两项机器翻译任务上的实验表明,这些模型在质量上更胜一筹,同时更具并行性,训练所需时间也大幅减少。

​ 在WMT 2014英语到德语翻译任务上,我们的模型取得了28.4分的BLEU分数,比包括集成模型在内的现有最佳结果提高了2分以上。在WMT 2014英语到法语翻译任务上,我们的模型在八个GPU上训练3.5天后,建立了新的单模型最优BLEU分数41.8分,而训练成本仅为文献中最佳模型的一小部分。我们通过将Transformer成功应用于英语成分句法分析,无论训练数据量大还是有限,都证明了其良好的泛化能力。

3 Model Architecture#

​ 大多数具有竞争力的神经序列转导模型都具有编码器-解码器结构(Encoder-Decoder Structure)

​ Encoder 将符号表示的输入序列(x1,...,xn)(x_1, ..., x_n)映射到连续表示序列z=(z1,...,zn)z = (z_1, ..., z_n)。给定zz,Decoder 则逐个元素地生成符号的输出序列(y1,...,ym)(y_1, ..., y_m)

​ 在每一步中,模型是自回归的(auto-regressive),在生成下一个元素时,将之前生成的符号作为额外输入。

model-architecture

​ Transformer遵循这一总体架构,在编码器和解码器中均使用堆叠的自注意力层点对点全连接层,分别如 Figure 1 的左半部分和右半部分所示。

3.1 Encoder and Decoder Stacks#

  • Encoder: Encoder 由N=6N=6个相同的层堆叠而成,每层包含两个子层。

    第一个子层是多头自注意力机制,第二个子层是一个简单的、位置相关的全连接前馈网络

    我们在两个子层周围都使用了残差连接(residual connection),之后是层归一化(layer normalization)。即,每个子层的输出为LayerNorm(x+Sublayer(x))LayerNorm(x + Sublayer(x)),其中Sublayer(x)Sublayer(x)是由子层本身实现的函数。为了便于这些残差连接,模型中的所有子层以及嵌入层都产生维度为dmodel=512d_{model}=512的输出。

  • Decoder: Decoder 同样由N=6N=6个相同的层堆叠而成。

    除了每个编码器层中的两个子层外,解码器还插入了一个第三子层,该子层对编码器堆叠的输出执行多头注意力机制(multi-head attention)

    与 Encoder 类似,我们在每个子层周围都使用了残差连接,并随后进行层归一化。我们还修改了 Decoder 堆叠中的自注意力子层(self-attention sub-layer),以防止位置之间的相互注意。这种掩码机制,结合输出嵌入偏移一个位置的事实,确保了对位置 ii 的预测只能依赖于小于位置 ii 的已知输出。

3.2 Attention#

​ 注意力函数可描述为将Query一组键值对映射到输出,其中Query、Keys、Values和输出都是向量。输出是作为值的加权和计算得出的,其中分配给每个值的权重是由 query 与相应 key 的兼容性函数计算得出的。

Fig2-attentions

3.2.1 缩放点积注意力(Scaled Dot-Product Attention, SDPA)#

​ 我们特别关注的是“缩放点积注意力”(Figure 2 left)。输入包括维度为 dkd_k 的查询和键,以及维度为 dvd_v 的值。我们计算 queries 与所有 keys 的点积,将每个点积除以dk\sqrt{d_k},并应用 softmax 函数以获得值的权重。 ​ 在实践中,我们同时计算一组 queries 的注意力函数,这些 queries 被打包成一个矩阵QQ。Keys 和 Values 也被打包成矩阵 KKVV。我们计算输出矩阵的方式如下:

Attention(Q,K,V)=softmax(QKTdk)VAttention(Q,K,V)=softmax(\frac{QK^T}{\sqrt{d_k}})V

​ 两种最常用的注意力函数是加性注意力(additive attention)点积(乘法)注意力(dot-product attention)。点积注意力与我们的算法相同,除了缩放因子为 1dk\frac{1}{\sqrt{d_k}}。加性注意力使用具有单个隐藏层的前馈网络来计算兼容性函数。

​ 虽然这两种注意力在理论复杂度上相似,但点积注意力在实践中更快且更节省空间,因为它可以使用高度优化的矩阵乘法代码来实现。 ​ 当 dkd_k 值较小时,这两种机制的表现相似,但当 dkd_k 值较大时,未缩放的加法注意力机制优于点积注意力机制。我们推测,当 dkd_k 值较大时,点积的数值会变得很大,从而使 softmax 函数进入梯度极小的区域。为了抵消这种影响,我们将点积缩放为 1dk\frac{1}{\sqrt{d_k}}

3.2.2 多头注意力(Multi-Head Attention)#

​ 我们发现,与其使用具有 dmodeld_{model} 维度的 keys、values 和 queries 来执行单个注意力函数,不如将 queries、keys 和 values 分别用不同的、学习到的线性投影进行 hh 次线性投影,分别投影到 dkd_kdkd_kdvd_v 维度。然后,我们并行地对这些 queries、keys 和 values 的投影版本执行注意力函数,得到 dvd_v 维度的输出值。将这些输出值连接起来,并再次进行投影,得到最终 values,如 Figure 2 right 所示。多头注意力使模型能够联合关注来自不同位置的不同表示子空间的信息。而使用单个注意力头时,平均操作会抑制这一点。

Attention is All You Need
https://lettle.cn/posts/attentionisallyouneed/
作者
Lettle
发布于
2026-04-13
许可协议
CC BY-NC-SA 4.0