# Attention Is All You Need（中文翻译）

> 原文：Vaswani et al., 2017. arXiv:1706.03762
> 翻译：扣子 | 2026-06-19
> 术语对照：Transformer=Transformer, Attention=注意力, Encoder=编码器, Decoder=解码器, Self-Attention=自注意力, Multi-Head=多头, Embedding=嵌入

---

## 摘要

当前主流的序列转换模型基于复杂的循环神经网络或卷积神经网络，包含编码器和解码器。性能最佳的模型还通过注意力机制连接编码器和解码器。我们提出了一种全新的简单网络架构——Transformer，完全基于注意力机制，彻底摒弃了循环和卷积。在两个机器翻译任务上的实验表明，这些模型在质量上更优，同时具有更高的可并行性，且训练时间显著减少。在 WMT 2014 英德翻译任务上，我们的模型取得了 28.4 BLEU，比此前最佳结果（含集成模型）提升了超过 2 BLEU。在 WMT 2014 英法翻译任务上，我们的模型以 8 块 GPU 训练 3.5 天后，取得了 41.8 BLEU 的单模型最佳成绩，训练成本仅为文献中最佳模型的一小部分。我们还将 Transformer 成功应用于英语句法成分解析，证明了其在有限数据和充足数据条件下均具有良好的泛化能力。

---

## 贡献说明

Ashish Vaswani（Google Brain）、Noam Shazeer（Google Brain）、Niki Parmar（Google Research）、Jakob Uszkoreit（Google Research）、Llion Jones（Google Research）、Aidan N. Gomez（多伦多大学）、Łukasz Kaiser（Google Brain）、Illia Polosukhin（Google Brain）。

**同等贡献**。署名顺序随机。Jakob 提出了用自注意力替代 RNN 的想法并启动了评估工作。Ashish 与 Illia 共同设计并实现了首个 Transformer 模型，并深度参与了本工作的方方面面。Noam 提出了缩放点积注意力、多头注意力和无参数位置表示，成为另一位几乎参与了每个细节的成员。Niki 在我们最初的代码库和 tensor2tensor 中设计、实现、调优并评估了无数模型变体。Llion 同样实验了新颖的模型变体，负责了我们最初的代码库，以及高效推理和可视化。Lukasz 和 Aidan 花费了无数日夜设计并实现了 tensor2tensor 的各个部分，替换了我们早期的代码库，极大提升了结果并加速了研究。

---

## 1 引言

循环神经网络（RNN），特别是长短期记忆网络（LSTM）[13] 和门控循环网络（GRU）[7]，已被牢固确立为序列建模和转换任务（如语言建模和机器翻译）的最先进方法 [35, 2, 5]。此后，大量工作持续推进循环语言模型和编码器-解码器架构的边界 [38, 24, 15]。

循环模型通常沿输入和输出序列的符号位置分解计算。将位置与计算时间步对齐，它们生成一系列隐藏状态 h_t，作为前一隐藏状态 h_{t-1} 和位置 t 的输入的函数。这种固有的序列性质阻碍了训练样本内部的并行化，这对应处理较长序列长度时变得至关重要，因为显存限制会约束跨样本的批处理。近期工作通过分解技巧 [21] 和条件计算 [32] 在计算效率上取得了显著提升，其中后者还改善了模型性能。然而，序列计算这一根本性约束依然存在。

注意力机制已成为各种任务中引人注目的序列建模和转换模型的组成部分，允许建模依赖关系而不受其在输入或输出序列中距离的影响 [2, 19]。然而，除少数情况 [27] 外，这些注意力机制都与循环网络结合使用。

在本文中，我们提出 Transformer——一种摒弃循环、完全依赖注意力机制来建模输入和输出之间全局依赖关系的模型架构。Transformer 允许显著更高的并行度，在八块 P100 GPU 上仅需训练 12 小时即可达到翻译质量的新水平。

## 2 背景

减少序列计算的目标也是 Extended Neural GPU [16]、ByteNet [18] 和 ConvS2S [9] 的基础，它们都使用卷积神经网络作为基本构建块，对所有输入和输出位置并行计算隐藏表示。在这些模型中，连接来自任意两个输入或输出位置的信号所需的操作次数随位置之间的距离增长——ConvS2S 为线性增长，ByteNet 为对数增长。这使得学习远距离位置之间的依赖关系更加困难 [12]。在 Transformer 中，这被减少为常数次操作，尽管代价是由于注意力加权位置的平均化导致有效分辨率降低——我们通过第 3.2 节描述的多头注意力来抵消这一影响。

自注意力（self-attention），有时称为内部注意力（intra-attention），是一种将单个序列的不同位置关联起来以计算该序列表示的注意力机制。自注意力已成功应用于多种任务，包括阅读理解、抽象摘要、文本蕴涵和任务无关的句子表示学习 [4, 27, 28, 22]。

端到端记忆网络基于循环注意力机制而非序列对齐的循环，并已被证明在简单语言问答和语言建模任务上表现良好 [34]。

然而，据我们所知，Transformer 是第一个完全依赖自注意力来计算其输入和输出表示、不使用序列对齐的 RNN 或卷积的转换模型。在以下章节中，我们将描述 Transformer，论证自注意力的动机，并讨论其相对于 [17, 18] 和 [9] 等模型的优势。

## 3 模型架构

![图 1](https://arxiv.org/html/1706.03762v7/Figures/ModalNet-21.png)
**图 1：Transformer 模型架构。**

大多数有竞争力的神经序列转换模型采用编码器-解码器结构 [5, 2, 35]。编码器将输入符号表示序列 (x_1, ..., x_n) 映射为连续表示序列 z = (z_1, ..., z_n)。给定 z，解码器随后逐元素生成输出符号序列 (y_1, ..., y_m)。在每一步中，模型是自回归的 [10]，在生成下一个符号时将先前生成的符号作为额外输入。

Transformer 遵循这一总体架构，对编码器和解码器均使用堆叠的自注意力和逐位置全连接层，分别如图 1 的左半部分和右半部分所示。

### 3.1 编码器和解码器堆栈

**编码器**：编码器由 N=6 个相同层的堆叠组成。每层有两个子层。第一个是多头自注意力机制，第二个是简单的逐位置全连接前馈网络。我们在两个子层的每个周围使用残差连接 [11]，随后进行层归一化 [1]。即，每个子层的输出为 LayerNorm(x + Sublayer(x))，其中 Sublayer(x) 是子层本身实现的函数。为便于这些残差连接，模型中的所有子层以及嵌入层均产生维度 d_model = 512 的输出。

**解码器**：解码器同样由 N=6 个相同层的堆叠组成。除了每个编码器层中的两个子层之外，解码器还插入了第三个子层，该子层对编码器堆叠的输出执行多头注意力。与编码器类似，我们在每个子层周围使用残差连接，随后进行层归一化。我们还修改了解码器堆叠中的自注意力子层，以防止位置关注到后续位置。这种掩码（masking），加上输出嵌入偏移一个位置的事实，确保了位置 i 的预测只能依赖于位置小于 i 的已知输出。

### 3.2 注意力

注意力函数可以描述为将查询（query）和一组键值对（key-value pairs）映射到输出，其中查询、键、值和输出都是向量。输出是值的加权和，其中分配给每个值的权重由查询与相应键的兼容性函数计算得出。

#### 3.2.1 缩放点积注意力

我们将我们特定的注意力称为"缩放点积注意力"（图 2）。输入包括维度为 d_k 的查询和键，以及维度为 d_v 的值。我们计算查询与所有键的点积，将每个除以 √d_k，然后应用 softmax 函数以获得值的权重。

实践中，我们同时计算一组查询的注意力函数，将它们打包成矩阵 Q。键和值也打包成矩阵 K 和 V。输出矩阵的计算如下：

$$\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V \quad \text{（公式1）}$$

两种最常用的注意力函数是加性注意力 [2] 和点积（乘性）注意力。点积注意力与我们的算法相同，只是缺少 1/√d_k 的缩放因子。加性注意力使用单隐藏层的前馈网络计算兼容性函数。虽然两者在理论复杂度上相似，但点积注意力在实践中更快且更节省空间，因为它可以使用高度优化的矩阵乘法代码实现。

对于较小的 d_k 值，两种机制表现相似；但对于较大的 d_k 值，无缩放的点积注意力不如加性注意力 [3]。我们推测，对于较大的 d_k 值，点积的量值增长很大，将 softmax 函数推入梯度极小的区域¹。为了抵消这一效应，我们将点积缩放 1/√d_k。

> ¹为说明点积为何变大，假设 q 和 k 的分量是均值为 0、方差为 1 的独立随机变量。则它们的点积 q·k = Σ q_i·k_i 的均值为 0，方差为 d_k。

#### 3.2.2 多头注意力

![图 2 左](https://arxiv.org/html/1706.03762v7/Figures/ModalNet-19.png)
![图 2 右](https://arxiv.org/html/1706.03762v7/Figures/ModalNet-20.png)
**图 2：（左）缩放点积注意力。（右）多头注意力由多个并行运行的注意力层组成。**

我们发现，与其使用 d_model 维的键、值和查询执行单个注意力函数，不如将查询、键和值分别用不同的、可学习的线性投影进行 h 次线性投影，映射到 d_k、d_k 和 d_v 维度，效果更好。然后，在这些投影版本的查询、键和值上并行执行注意力函数，产生 d_v 维的输出值。将它们拼接起来，再进行一次投影，得到最终值，如图 2 所示。

多头注意力允许模型同时关注来自不同表示子空间、不同位置的信息。单个注意力头中，平均化会抑制这一点。

投影矩阵为 W_i^Q ∈ ℝ^(d_model × d_k)，W_i^K ∈ ℝ^(d_model × d_k)，W_i^V ∈ ℝ^(d_model × d_v)，以及 W^O ∈ ℝ^(hd_v × d_model)。

在本文中，我们使用 h=8 个并行的注意力层（或称为"头"）。对每个头，我们使用 d_k = d_v = d_model / h = 64。由于每个头的维度降低，总计算成本与全维度单头注意力相似。

#### 3.2.3 模型中注意力的应用

Transformer 以三种不同的方式使用多头注意力：

- **编码器-解码器注意力层**：查询来自前一解码器层，记忆键和值来自编码器的输出。这允许解码器中的每个位置关注输入序列中的所有位置。这模仿了典型的序列到序列模型中的编码器-解码器注意力机制 [38, 2, 9]。

- **编码器自注意力层**：编码器包含自注意力层。在自注意力层中，所有键、值和查询来自同一位置——即编码器中前一层的输出。编码器中的每个位置可以关注编码器前一层的所有位置。

- **解码器自注意力层**：类似地，解码器中的自注意力层允许解码器中的每个位置关注解码器中截至该位置（含）的所有位置。我们需要防止解码器中向左的信息流动，以保持自回归特性。我们通过在缩放点积注意力内部，将 softmax 输入中对应非法连接的所有值掩码掉（设为 -∞）来实现这一点。参见图 2。

### 3.3 逐位置前馈网络

除了注意力子层外，编码器和解码器中的每一层都包含一个全连接前馈网络，该网络分别且相同地应用于每个位置。它由两个线性变换组成，中间有一个 ReLU 激活函数：

$$\text{FFN}(x) = \max(0, xW_1 + b_1)W_2 + b_2 \quad \text{（公式2）}$$

虽然线性变换在不同位置之间是相同的，但它们在层与层之间使用不同的参数。另一种描述方式是将其视为卷积核大小为 1 的两个卷积。输入和输出的维度为 d_model = 512，内部层的维度为 d_ff = 2048。

### 3.4 嵌入和 Softmax

与其他序列转换模型类似，我们使用可学习的嵌入将输入 token 和输出 token 转换为维度为 d_model 的向量。我们还使用通常的可学习线性变换和 softmax 函数将解码器输出转换为预测的下一个 token 概率。在我们的模型中，我们在两个嵌入层和 softmax 前线性变换之间共享相同的权重矩阵，类似于 [30]。在嵌入层中，我们将这些权重乘以 √d_model。

### 3.5 位置编码

由于我们的模型不包含循环和卷积，为了使模型能够利用序列的顺序，我们必须注入一些关于 token 在序列中相对或绝对位置的信息。为此，我们在编码器和解码器堆叠底部的输入嵌入中添加"位置编码"。位置编码与嵌入具有相同的维度 d_model，以便两者可以相加。位置编码有多种选择，可以是可学习的或固定的 [9]。

在本文中，我们使用不同频率的正弦和余弦函数：

$$PE_{(pos, 2i)} = \sin\left(\frac{pos}{10000^{2i/d_{\text{model}}}}\right)$$

$$PE_{(pos, 2i+1)} = \cos\left(\frac{pos}{10000^{2i/d_{\text{model}}}}\right)$$

其中 pos 是位置，i 是维度。即，位置编码的每个维度对应一个正弦曲线。波长形成从 2π 到 10000·2π 的几何级数。我们选择此函数是因为我们假设它允许模型轻松学习按相对位置进行关注，因为对于任何固定偏移 k，PE_(pos+k) 可以表示为 PE_pos 的线性函数。

我们还实验了使用可学习的位置嵌入 [9]，发现两种方案产生了几乎相同的结果（见表 3 的 (E) 行）。我们选择正弦版本是因为它可能使模型能够外推到比训练期间遇到的更长的序列长度。

## 4 为什么选择自注意力

在本节中，我们将自注意力层的各个方面与循环层和卷积层进行比较，这些层通常用于将一个可变长度的符号表示序列 (x_1, ..., x_n) 映射到另一个等长序列 (z_1, ..., z_n)，其中 x_i, z_i ∈ ℝ^d，例如典型序列转换编码器或解码器中的隐藏层。在论证自注意力的使用时，我们考虑三个目标。

一是每层的总计算复杂度。二是可并行化的计算量，以所需的最少顺序操作数来衡量。三是网络中长距离依赖之间的路径长度。学习长距离依赖是许多序列转换任务的关键挑战。影响学习此类依赖能力的一个关键因素是前向和反向信号在网络中必须穿越的路径长度。输入和输出序列中任意位置组合之间的这些路径越短，就越容易学习长距离依赖 [12]。因此，我们还比较了由不同层类型组成的网络中任意两个输入和输出位置之间的最大路径长度。

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

| 层类型 | 每层复杂度 | 顺序操作 | 最大路径长度 |
|---|---|---|---|
| 自注意力 | O(n²·d) | O(1) | O(1) |
| 循环 | O(n·d²) | O(n) | O(n) |
| 卷积 | O(k·n·d²) | O(1) | O(log_k(n)) |
| 自注意力（受限） | O(r·n·d) | O(1) | O(n/r) |

如表 1 所示，自注意力层以常数次顺序执行的操作连接所有位置，而循环层需要 O(n) 次顺序操作。在计算复杂度方面，当序列长度 n 小于表示维度 d 时，自注意力层比循环层更快——这在机器翻译中最先进模型使用的句子表示（如 word-piece [38] 和 byte-pair [31] 表示）中最为常见。为了改善涉及非常长序列的任务的计算性能，自注意力可以限制为仅考虑以相应输出位置为中心的输入序列中大小为 r 的邻域。这将最大路径长度增加到 O(n/r)。我们计划在未来的工作中进一步研究这种方法。

单个卷积层，卷积核宽度 k < n，不能连接所有输入和输出位置对。要做到这一点，在连续卷积核的情况下需要 O(n/k) 个卷积层的堆叠，或在空洞卷积 [18] 的情况下需要 O(log_k(n)) 层，这增加了网络中任意两个位置之间最长路径的长度。卷积层通常比循环层更昂贵，差了 k 倍。然而，可分离卷积 [6] 显著降低了复杂度，降至 O(k·n·d + n·d²)。然而，即使 k=n，可分离卷积的复杂度也等同于自注意力层和逐位置前馈层的组合——这正是我们模型所采用的方法。

作为附带收益，自注意力可以产生更具可解释性的模型。我们检查了模型的注意力分布，并在附录中展示和讨论了示例。不仅各个注意力头明显学会了执行不同的任务，许多头还表现出与句子的句法和语义结构相关的行为。

## 5 训练

本节描述我们模型的训练方案。

### 5.1 训练数据和批处理

我们在标准的 WMT 2014 英德数据集上进行训练，该数据集包含约 450 万个句子对。句子使用 byte-pair 编码 [3]，共享的源-目标词汇量约为 37000 个 token。对于英法任务，我们使用了显著更大的 WMT 2014 英法数据集，包含 3600 万个句子，并将 token 分割为 32000 个 word-piece 词汇 [38]。句子对按近似的序列长度进行批处理。每个训练批次包含一组句子对，约含 25000 个源 token 和 25000 个目标 token。

### 5.2 硬件和训练时间

我们在一台配备 8 块 NVIDIA P100 GPU 的机器上训练模型。对于使用本文所述超参数的 base 模型，每个训练步骤耗时约 0.4 秒。我们对 base 模型总共训练了 100,000 步，即 12 小时。对于 big 模型（见表 3 底部行），每步耗时 1.0 秒。big 模型训练了 300,000 步（3.5 天）。

### 5.3 优化器

我们使用 Adam 优化器 [20]，参数为 β_1=0.9、β_2=0.98 和 ε=10⁻⁹。我们在训练过程中按以下公式调整学习率：

**lrate = d_model^(-0.5) · min(step_num^(-0.5), step_num · warmup_steps^(-1.5))**   （公式 3）

这对应于在前 warmup_steps 个训练步骤中线性增加学习率，之后按步骤数的负平方根比例降低。我们使用 warmup_steps = 4000。

### 5.4 正则化

我们在训练中采用三种正则化方法：

**残差 Dropout**：我们对每个子层的输出应用 dropout [33]，然后再将其加到子层输入并进行归一化。此外，我们对编码器和解码器堆叠中的嵌入与位置编码之和也应用 dropout。对于 base 模型，我们使用 P_drop = 0.1 的比率。

**标签平滑**：在训练过程中，我们采用了 ε_ls = 0.1 的标签平滑 [36]。这会损害困惑度（perplexity），因为模型学到了更不确定，但提高了准确率和 BLEU 分数。

## 6 结果

### 6.1 机器翻译

**表 2：Transformer 在 WMT 2014 英德和英法 newstest2014 测试集上以极低的训练成本取得了比此前最先进模型更好的 BLEU 分数。**

| 模型 | BLEU (EN-DE) | BLEU (EN-FR) | 训练成本 FLOPs (EN-DE) | 训练成本 FLOPs (EN-FR) |
|---|---|---|---|---|
| ByteNet [18] | 23.75 | — | — | — |
| Deep-Att + PosUnk [39] | — | 39.2 | — | 1.0×10²⁰ |
| GNMT + RL [38] | 24.6 | 39.92 | 2.3×10¹⁹ | 1.4×10²⁰ |
| ConvS2S [9] | 25.16 | 40.46 | 9.6×10¹⁸ | 1.5×10²⁰ |
| MoE [32] | 26.03 | 40.56 | 2.0×10¹⁹ | 1.2×10²⁰ |
| GNMT + RL 集成 | 26.30 | 41.16 | 1.8×10²⁰ | 1.1×10²¹ |
| ConvS2S 集成 | 26.36 | 41.29 | 7.7×10¹⁹ | 1.2×10²¹ |
| **Transformer (base)** | **27.3** | **38.1** | **3.3×10¹⁸** | — |
| **Transformer (big)** | **28.4** | **41.8** | **2.3×10¹⁹** | — |

在 WMT 2014 英德翻译任务中，big Transformer 模型（表 2 中的 Transformer (big)）以超过 2.0 BLEU 的优势超越了此前报告的最佳模型（包括集成模型），取得了 28.4 BLEU 的新最优成绩。该模型的配置列于表 3 的底部行。训练在 8 块 P100 GPU 上耗时 3.5 天。即使是我们的 base 模型也超越了所有先前发表的模型和集成模型，且训练成本仅为任何竞争模型的零头。

在 WMT 2014 英法翻译任务中，我们的 big 模型取得了 41.0 的 BLEU 分数，超越了所有先前发表的单模型，训练成本不到此前最优模型的 1/4。英法训练的 Transformer (big) 模型使用 P_drop = 0.1，而非 0.3。

对于 base 模型，我们使用通过对最后 5 个检查点（每隔 10 分钟保存）取平均得到的单一模型。对于 big 模型，我们对最后 20 个检查点取平均。我们使用束大小为 4、长度惩罚 α=0.6 的束搜索 [38]。这些超参数是在开发集上实验后选择的。推理时最大输出长度设为输入长度 + 50，但在可能时提前终止 [38]。

我们通过将训练时间、使用的 GPU 数量以及每个 GPU 的持续单精度浮点能力估计值相乘来估计训练模型的浮点运算次数²。

> ²我们使用的值：K80 2.8 TFLOPS、K40 3.7 TFLOPS、M40 6.0 TFLOPS、P100 9.5 TFLOPS。

### 6.2 模型变体

**表 3：Transformer 架构的变体。未列出的值与 base 模型相同。所有指标均在英德翻译开发集 newstest2013 上。所列困惑度为 per-wordpiece（基于 byte-pair 编码），不应与 per-word 困惑度比较。**

| — | N | d_model | d_ff | h | d_k | d_v | P_drop | ε_ls | train steps | PPL (dev) | BLEU (dev) | params (×10⁶) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| base | 6 | 512 | 2048 | 8 | 64 | 64 | 0.1 | 0.1 | 100K | 4.92 | 25.8 | 65 |
| (A) | — | — | — | 1 | 512 | 512 | — | — | — | 5.29 | 24.9 | — |
| | — | — | — | 4 | 128 | 128 | — | — | — | 5.00 | 25.5 | — |
| | — | — | — | 16 | 32 | 32 | — | — | — | 4.91 | 25.8 | — |
| | — | — | — | 32 | 16 | 16 | — | — | — | 5.01 | 25.4 | — |
| (B) | — | — | — | — | 16 | — | — | — | — | 5.16 | 25.1 | 58 |
| | — | — | — | — | 32 | — | — | — | — | 5.01 | 25.4 | 60 |
| (C) | 2 | — | — | — | — | — | — | — | — | 6.11 | 23.7 | 36 |
| | 4 | — | — | — | — | — | — | — | — | 5.19 | 25.3 | 50 |
| | 8 | — | — | — | — | — | — | — | — | 4.88 | 25.5 | 80 |
| | — | 256 | — | — | 32 | 32 | — | — | — | 5.75 | 24.5 | 28 |
| | — | 1024 | — | — | 128 | 128 | — | — | — | 4.66 | 26.0 | 168 |
| | — | — | 1024 | — | — | — | — | — | — | 5.12 | 25.4 | 53 |
| | — | — | 4096 | — | — | — | — | — | — | 4.75 | 26.2 | 90 |
| (D) | — | — | — | — | — | — | 0.0 | — | — | 5.77 | 24.6 | — |
| | — | — | — | — | — | 0.2 | — | — | — | 4.95 | 25.5 | — |
| | — | — | — | — | — | — | 0.0 | — | 4.67 | 25.3 | — |
| | — | — | — | — | — | — | 0.2 | — | 5.47 | 25.7 | — |
| (E) | — | positional embedding instead of sinusoids | — | — | — | — | — | — | 4.92 | 25.7 | — |
| big | 6 | 1024 | 4096 | 16 | — | — | 0.3 | — | 300K | 4.33 | 26.4 | 213 |

为评估 Transformer 不同组件的重要性，我们以不同方式调整了 base 模型，测量在英德翻译开发集 newstest2013 上的性能变化。我们使用如前所述的束搜索，但不进行检查点平均。

在表 3 的 (A) 行中，我们改变注意力头的数量以及注意力键和值的维度，同时保持总计算量不变。虽然单头注意力比最佳设置差 0.9 BLEU，但头数过多时质量也会下降。

在表 3 的 (B) 行中，我们观察到减少注意力键大小 d_k 会损害模型质量。这表明确定兼容性并不容易，可能需要比点积更复杂的兼容性函数。我们进一步在 (C) 和 (D) 行中观察到，如预期那样，更大的模型更好，而 dropout 在防止过拟合方面非常有用。在 (E) 行中，我们将正弦位置编码替换为可学习的位置嵌入 [9]，观察到与 base 模型几乎相同的结果。

### 6.3 英语句法成分解析

**表 4：Transformer 在英语句法成分解析上表现优异（结果基于 WSJ 第 23 节）**

| 解析器 | 训练方式 | WSJ 23 F1 |
|---|---|---|
| Vinyals & Kaiser et al. (2014) [37] | WSJ only, 判别式 | 88.3 |
| Petrov et al. (2006) [29] | WSJ only, 判别式 | 90.4 |
| Zhu et al. (2013) [40] | WSJ only, 判别式 | 90.4 |
| Dyer et al. (2016) [8] | WSJ only, 判别式 | 91.7 |
| **Transformer (4 layers)** | WSJ only, 判别式 | **91.3** |
| Zhu et al. (2013) [40] | 半监督 | 91.3 |
| Huang & Harper (2009) [14] | 半监督 | 91.3 |
| McClosky et al. (2006) [26] | 半监督 | 92.1 |
| Vinyals & Kaiser et al. (2014) [37] | 半监督 | 92.1 |
| **Transformer (4 layers)** | 半监督 | **92.7** |
| Luong et al. (2015) [23] | 多任务 | 93.0 |
| Dyer et al. (2016) [8] | 生成式 | 93.3 |

为评估 Transformer 能否泛化到其他任务，我们在英语句法成分解析上进行了实验。该任务面临特殊挑战：输出受强结构约束，且长度远大于输入。此外，RNN 序列到序列模型在小数据情境下无法达到最先进结果 [37]。

我们使用 d_model=1024 的 4 层 Transformer 在 Penn Treebank [25] 的华尔街日报（WSJ）部分（约 4 万个训练句子）上进行训练。我们还在半监督设置下训练，使用约 1700 万个句子的高置信度和 BerkeleyParser 语料 [37]。WSJ-only 设置使用 16K token 词汇，半监督设置使用 32K token 词汇。

我们仅进行少量实验来选择 dropout（注意力 dropout 和残差 dropout，见第 5.4 节）、学习率和束大小，在第 22 节开发集上，其他所有参数保持与英德 base 翻译模型相同。在推理时，我们将最大输出长度增加到输入长度 + 300。对于 WSJ-only 和半监督设置，均使用束大小 21 和 α=0.3。

我们在表 4 中的结果表明，尽管缺乏任务特定的调优，我们的模型表现惊人地好，除了循环神经网络语法 [8] 外，优于所有先前报告的模型。

与 RNN 序列到序列模型 [37] 不同，Transformer 即使在仅使用 4 万个 WSJ 训练句子的情况下，也超越了 BerkeleyParser [29]。

## 7 结论

在本文中，我们提出了 Transformer——第一个完全基于注意力的序列转换模型，用多头自注意力取代了编码器-解码器架构中最常用的循环层。

对于翻译任务，Transformer 的训练速度显著快于基于循环层或卷积层的架构。在 WMT 2014 英德和英法翻译任务上，我们都取得了新的最先进水平。在前一个任务中，我们的最佳模型甚至超越了所有先前报告的集成模型。

我们对注意力模型的未来充满期待，并计划将其应用于其他任务。我们计划将 Transformer 扩展到涉及文本以外输入和输出模态的问题，并研究局部、受限的注意力机制，以高效处理图像、音频和视频等大规模输入和输出。使生成过程减少序列化是我们的另一个研究目标。

我们用于训练和评估模型的代码可在 [https://github.com/tensorflow/tensor2tensor](https://github.com/tensorflow/tensor2tensor) 获取。

### 致谢

我们感谢 Nal Kalchbrenner 和 Stephan Gouws 富有成果的评论、修正和启发。

---

## 参考文献

*（共 40 篇参考文献，详见英文原文）*

## 附录：注意力可视化

![图 3](https://arxiv.org/html/1706.03762v7/x1.png)
**图 3：编码器第 5 层（共 6 层）自注意力中追踪长距离依赖的注意力机制示例。许多注意力头关注动词 "making" 的远距离依赖，完成 "making…more difficult" 这个短语。此处仅显示词 "making" 的注意力。不同颜色代表不同头。建议彩色查看。**

![图 4a](https://arxiv.org/html/1706.03762v7/x2.png)
![图 4b](https://arxiv.org/html/1706.03762v7/x3.png)
**图 4：同样在第 5 层（共 6 层）的两个注意力头，显然参与了指代消解。上：第 5 号头的完整注意力。下：仅词 "its" 在第 5 和第 6 号头上的独立注意力。注意，该词的注意力非常锐利。**

![图 5a](https://arxiv.org/html/1706.03762v7/x4.png)
![图 5b](https://arxiv.org/html/1706.03762v7/x5.png)
**图 5：许多注意力头表现出的行为似乎与句子的结构有关。上文给出了两个来自编码器第 5 层（共 6 层）自注意力中两个不同头的示例。这些头明显学会了执行不同的任务。**
