橦言无忌

一个不想改变世界的程序媛

Attention is all you need

前言

文章:Attention is all you need

essay link

Transformer的开山鼻祖~

摘要

显性序列转换模型基于包括编码器和解码器的复杂递归或卷积神经网络,性能最佳的模型还通过注意力机制连接编码器和解码器。我们提出了一种新的简单网络架构,即 Transformer,它完全基于注意力机制,完全摒弃了循环和卷积。对两项机器翻译任务的实验表明,这些模型在质量上更胜一筹,同时可并行化程度更高,并且需要的训练时间明显减少。我们的模型在 WMT 2014 英德翻译任务中达到了 28.4 BLEU,比现有的最佳结果(包括集成)提高了超过 2 BLEU。在 WMT 2014 英法翻译任务中,我们的模型在八个 GPU 上训练 3.5 天后建立了一个新的单模型,其最先进的 BLEU 分数为 41.8,训练成本约占当时最好模型成本的一小部分。。我们通过将 Transformer 成功应用于具有大量和有限训练数据的英语选区解析,证明 Transformer 可以很好地泛化到其他任务。

1,介绍

循环神经网络,特别是长短期记忆和门控循环神经网络,已被牢固确立为序列建模和转换问题(如语言建模和机器翻译)的最先进方法。 此后,许多工作继续涌现,努力推动循环语言模型和编码器-解码器架构的边界。

循环模型通常沿着输入、输出序列的符号位置进行因子计算,将位置在计算时间内对齐到步骤中,它们生成一系列隐藏状态 $h_t$,作为前一个隐藏状态 $h_{t-1}$ 和位置 $t$ 的输入函数。这种固有的顺序性质排除了训练样本中的并行化,这在较长的序列长度下变得至关重要,因为内存限制限制了跨样本的批处理。最近的工作通过分解技巧和条件计算显著提高了计算效率,同时后者还提高了模型性能。 然而,顺序计算的基本限制仍然存在。

注意机制已成为序列建模和转换模型的各种任务中不可或缺的一部分,允许依赖性建模而不考虑它们在输入或输出序列中的距离。 然而,在大部分情况(除少数情况外)下,这种注意力机制都与循环网络结合使用。

本文提出了 Transformer,这是一种避免重复出现的模型架构,而是完全依赖注意力机制来绘制输入和输出之间的全局依赖关系。 Transformer 允许显著提高并行化,并且在八个 P100 GPU 上经过短短 12 小时的训练后,可以达到翻译质量的新水平。

2,背景

减少顺序计算的目标也构成了扩展神经 GPU 、ByteNet 和 ConvS2S 的基础,所有这些都使用卷积神经网络作为基本构建块,并行计算输入和输出所有位置的隐藏表示。在这些模型中,将来自任意两个输入或输出位置信号相关联所需的操作数量随着位置之间的距离而增加,ConvS2S 呈线性增长,By​​teNet 呈对数增长,这使得学习远距离位置之间的依赖关系变得更加困难。在 Transformer 中,这被减少到恒定数量的操作,尽管由于平均注意力加权位置而导致有效分辨率降低的代价,我们用 Multi-Head Attention 抵消了这种效果,如3.2部分所述.

自注意力,有时称为内部注意力,是一种将单个序列的不同位置相关联以计算序列表示的注意力机制。自注意力已成功用于各种任务,包括阅读理解、抽象摘要、文本蕴含和学习与任务无关的句子表示。

端到端记忆网络基于循环注意机制而不是序列对齐循环,并且已被证明在简单语言问答和语言建模任务上表现良好。

然而,据我们所知,Transformer 是第一个完全依靠自注意力来计算其输入和输出表示而不使用序列对齐 RNN 或卷积的转换模型。在接下来的部分中,我们将描述 Transformer,激发自注意力并讨论它相对于 neural_gpu 等模型的优势。

3,模型结构

大多数有竞争力的神经序列转换模型都具有编码器-解码器结构, 这里,编码器将符号表示的输入序列 $(x_1, …, x_n)$ 映射到连续表示的序列 $\mathbf{z} = (z_1, …, z_n)$。 给定 $\mathbf{z}$,解码器随后逐个生成符号输出序列 $(y_1,…,y_m)$。 在每个步骤中,模型都是自回归的,在生成下一个时将之前生成的符号作为附加输入使用。

Transformer 遵循这种整体架构,为编码器和解码器使用堆叠式自注意力和逐点全连接层,分别如图1的左半部分和右半部分所示。

3.1 编码器和解码器的堆叠

编码器
编码器由 $N=6$ 个相同的层堆叠而成,每一层都有两个子层。第一个是多头自注意力机制,第二个是简单的、按位置的全连接前馈网络。我们在两个子层中都使用了一个残差连接,然后是层归一化,即每个子层的输出为 $\mathrm{LayerNorm}(x + \mathrm{Sublayer}(x))$,其中 $\mathrm{Sublayer}(x)$ 是子层实现的函数层本身。为了促成这些残差连接,模型中的所有子层以及嵌入层都产生维度 $d_{model}=512$ 的输出。

解码器
解码器也由 $N=6$ 个相同的层堆叠而成。除了每个编码器层中的两个子层之外,解码器还插入了第三个子层,它对编码器堆栈的输出执行多头注意力。与编码器类似,我们在每个子层上使用残差连接,然后进行层归一化,还修改了解码器堆栈中的自我注意子层,以阻止当前位置关注后续位置信息。这种掩码与输出嵌入偏移一个位置的事实相结合,确保了对位置 $i$ 的预测只能依赖于位置小于 $i$ 的已知输出。

3.2 注意力

注意力函数可以描述为将 $q$ 和 一组 $k-v$ 对映射到输出,其中 $q$、$k$、$v$ 和 $output$ 都是向量,$output$ 计算为 $v$ 的加权和,其中分配给每个 $v$ 的权重由 $q$ 与相应的 $k$ 的兼容性函数计算。

3.2.1 归一化点积注意力

将本文的特殊注意力称为“归一化点积注意力”(图2),包含 $q$,$k$ 的输入维度为 $d_k$, $v$ 的维度为 $d_v$。 计算 $q$ 与 $k$ 的点积,逐个除以 $\sqrt{d_k}$,然后应用 softmax 函数来获得 $v$ 的权重。

在实践中,我们同时计算一组 $q$ 的注意力函数,并将它们打包到一个矩阵 $Q$ 中,$k$ 和 $v$ 也一起打包到矩阵 $K$ 和 $V$ 中,我们将输出矩阵计算为:

两种最常用的注意力函数是加法注意力和点积(乘法)注意力。点积注意力与我们的算法相同,除了 $\frac{1}{\sqrt{d_k}}$ 的归一化系数。 加法注意力使用具有单个隐藏层的前馈网络计算兼容性函数。 虽然两者在理论上的复杂性相似,但点积注意力在实践中速度更快且空间效率更高,因为它可以使用高度优化的矩阵乘法代码来实现。

虽然对于较小 $d_k$ 的情况,这两种机制的表现相似,但加法注意力在 $d_k$ 较大时因无需缩放而优于点积注意力。 我们怀疑对于较大的 $d_k$ 值,点积的幅度会变大,将 softmax 函数推入梯度极小的区域。 为了抵消这种影响,我们将点积缩放 $\frac{1}{\sqrt{d_k}}$。

3.2.2 多头注意力

与使用 $d_{model}$ 维 $k$、$v$、$q$ 执行单个注意力头不同,我们发现通过可学习的线性投影分别在 $k$、$v$、$q$ 上执行 $h$ 次是有益的,相应投影后的向量维度为 $d_k$,$d_k $ 和 $d_v$ 。然后,在 $q$ 、 $k$ 和 $v$ 的每个投影版本上,我们并行执行注意力函数,产生 $d_v$ 维输出值,这些值之后被连接起来并再次投影,产生最终值,如图2所示。

多头注意力允许模型共同关注来自不同位置、不同表示子空间的信息,对于单个注意力头,均值化可以抑制这种情况。

其中投影指的是参数矩阵 $W^Q_i \in \mathbb{R}^{d_{model} \times d_k}$, $W^K_i \in \mathbb{R}^{d_{model} \times d_k}$, $W ^V_i \in \mathbb{R}^{d_{model} \times d_v}$ 和 $W^O \in \mathbb{R}^{hd_v \times d_{model}}$。

本文中,使用了 $h=8$ 个并行注意力层或头,对于其中的每一个,都使用 $d_k=d_v=d_{model}/h=64$,由于每个头的维数减少,总计算成本与具有全维的单头注意力相似。

3.2.3 本文模型中注意力的应用

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

  • 在编码解码器注意力的网络层中,$q$ 来自于前面的解码器层,记忆 $k$ 和 $v$ 来自于编码器的输出,这允许解码器中的每个位置都参与输入序列中的位置,模仿了序列到序列模型中典型的编码器-解码器注意力机制。

  • 编码器包含自注意力层,在自注意力层中,所有的 $k$ 、 $v$ 和 $q$ 都来自同一个地方,在这种情况下,前一层的输出在编码器中,编码器中的每个位置都可以关注编码器上一层中的所有位置。

  • 类似地,解码器中的自注意力层允许解码器中的每个位置关注解码器中直到并包括该位置的所有位置。我们需要防止解码器中的左向信息流,以保持自回归特性,通过屏蔽掉(设置为 $-\infty$)softmax 输入中对应于非法连接的所有值,在缩放点积注意力内部实现这一点。见图2。

3.3 基于位置的前馈网络

除了注意力子层之外,我们的编码器和解码器中的每一层都包含一个完全连接的前馈网络,它相同地应用于每个对应位置。 这由两个线性变换组成,中间有一个 ReLU 激活。

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

3.4 Embeddings 和 Softmax

与其他序列转换模型类似,我们使用学习嵌入将输入标记和输出标记转换为维度 $d_{model}$ 的向量,还使用常用学习中的线性变换和 softmax 函数将解码器输出转换为预测的下一个标记概率。在我们的模型中,我们在两个嵌入层和 pre-softmax 线性变换之间共享权重矩阵,在嵌入层中,我们将这些权重乘以 $\sqrt{d_{model}}$。

3.5 位置编码

由于我们的模型不包含递归和卷积,为了让模型利用序列的顺序,我们必须注入一些关于标记在序列中的相对或绝对位置信息。为此,我们将“位置编码”添加到编码器和解码器堆栈底部的输入嵌入中,位置编码与嵌入具有相同的维度 $d_{model}$,因此可以将两者相加。位置编码有很多选择,可参见 JonasFaceNet2017等。

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

其中 $pos$ 是位置,$i$ 是维度,也就是说,位置编码的每个维度对应一个正弦曲线,波长形成从 $2\pi$ 到 $10000 \cdot 2\pi$ 的几何级数。 我们选择这个函数是因为我们假设它可以让模型很容易地学习相对位置信息,因为对于任何固定偏移 $k$,$PE_{pos+k}$ 可以表示为 $PE_{pos}$ 的线性函数。

我们还尝试使用学习的位置嵌入代替,发现这两个版本产生几乎相同的结果(参见表3),选择正弦版本是因为它可以让模型推断出比训练期间遇到的序列长度更长的序列长度。

4,为什么要自注意力

在本节中,我们将自注意力层的各个方面与其他模型比较,这些模型通常用于将一个可变长度符号表示序列 $(x_1, …, x_n)$ 映射到另一个等长序列 $(z_1 , …, z_n)$, 其中 $x_i, z_i \in \mathbb{R}^d$, 例如典型序列转换编码器或解码器中的隐藏层,为了激励我们使用自注意力,我们考虑了三个必要条件。

一个是每层的总计算复杂度。另一个是可以并行化的计算量,用所需的最小顺序操作数来衡量。

第三个是网络中远程依赖关系之间的路径长度。学习长程依赖性是许多序列转换任务中的关键挑战,影响学习这种依赖性能力的一个关键因素是前向和后向信号在网络中必须经过的路径长度。输入和输出序列中任何位置组合之间的路径越短,就越容易学习远程依赖。因此,我们还比较了由不同层类型组成的网络中任意两个输入和输出位置之间的最大路径长度。

如表1中第3列所述,自注意力层将所有位置与恒定数量的顺序执行操作连接起来,而循环层需要 $O(n)$ 个顺序操作。
就计算复杂度而言,当序列长度 $n$ 小于表示维度 $d$ 时,自注意力层比循环层更快,这是句子表示中最常见的情况,通常在最先进的机器翻译模型中出现,例如词片和字节对表示。为了提高涉及非常长序列任务的计算性能,可以将自注意力限制为仅考虑以相应输出位置为中心的输入序列中大小为 $r$ 的邻域,会将最大路径长度增加到 $O(n/r)$,我们计划在未来的工作中进一步研究这种方法。

内核宽度 $k < n$ 的单个卷积层不会连接所有输入和输出位置对,为了增加网络中任意两个位置之间的最长路径,在连续内核的情况下需要一堆 $O(n/k)$ 卷积层,或者在空洞卷积的情况下需要 $O(log_k(n))$。卷积层通常比递归层复杂 $k$ 倍,但是可分离卷积大大降低了复杂性,达到 $O(k \cdot n \cdot d + n \cdot d^2)$。然而,即使 $k=n$,可分离卷积的复杂度也等于自注意力层和逐点前馈层的组合,这是本文模型的方法。

作为附带的好处,自注意力可以产生更多可解释的模型,从我们的模型中检查注意力分布,并在附录中展示和讨论示例。 不仅单个注意力头清楚地学会执行不同的任务,而且多注意力头似乎表现出了与句子的句法和语义结构相关的行为。

5,训练

本节描述了我们模型的训练机制。

5.1 训练数据和批量化

我们在标准的 WMT 2014 英德数据集上进行了训练,该数据集包含大约 450 万个句子对。 句子使用字节对编码进行编码,它具有约 37000 个标记的共享source-target词汇表。 对于英语-法语,我们使用了明显更大的 WMT 2014 英语-法语数据集,该数据集由 3600 万个句子组成,并将标记拆分为 32000 个单词词汇表。 句子对按近似序列长度分批在一起,每个训练批次包含一组句子对,其中包含大约 25000 个source标记和 25000 个target标记。

5.2 硬件和策略

我们在一台配备 8 个 NVIDIA P100 GPU 的机器上训练我们的模型,使用整篇论文中描述的关于超参数的基础模型,每个训练步骤大约需要 0.4 秒。 我们对基本模型进行了总共 100,000 步或 12 小时的训练,对于大模型,(在表3的底行描述),步进时间为 1.0 秒。 大模型训练了 300,000 步(3.5 天)。

5.3 优化器

我们使用了 Adam 优化器,其中 $\beta_1=0.9$、$\beta_2=0.98$ 和 $\epsilon=10^{-9}$。 我们根据以下公式在训练过程中更新学习率:

这对应于第一个 $warmup_steps$ 训练步骤线性增加学习率,然后按步数的平方根按反比例减少学习率,本文使用了 $warmup_steps=4000$。

5.4 正则化

我们在训练期间采用三种类型的正则化:

Residual Dropout
我们将 dropout 应用于每个子层的输出,然后再将其添加到子层输入并进行归一化。 此外,我们将 dropout 应用于编码器和解码器堆栈中的嵌入和位置编码的总和。 对于基本模型,我们使用 $P_{drop}=0.1$ 的比率。

Label Smoothing
在训练期间,我们采用了值为 $\epsilon_{ls}=0.1$ 的标签平滑。 这会伤害困惑度,因为模型会变得更加不确定,但会提高准确性和 BLEU 分数。

6,结果

6.1 机器翻译

在 WMT 2014 英德翻译任务中,大Transformer模型中的 表格2中的Transformer (big))比之前报告的最佳模型(包括集成模型)高出超过 $2.0$ 个BLEU ,建立了一个新的最先进的 BLEU 分数 $28.4$。该模型的配置列在表3的最后一行,在 8 块 P100 GPU 上训练花费了 3.5 天,甚至我们的基础模型也超过了之前发布的所有模型和集成,其训练成本仅为任何竞争模型的一小部分。

在 WMT 2014 英法翻译任务中,我们的大模型获得了 41.0 的 BLEU 分数,优于之前发布的所有单一模型,训练成本不到之前最好模型的 1/4。为英语到法语训练的 Transformer(大)模型使用 dropout 比例 $P_{drop}=0.1$,而不是 $0.3$。

对于基本模型,我们平均使用了最后 5 个训练checkpoints点获得的单一模型,这些检查点以每 10 分钟的间隔写入。对于大型模型,我们对最后 20 个checkpoints进行了平均。使用束搜索,束大小为 $4$,长度惩罚为 $\alpha=0.6$。这些超参数是在开发集上进行实验后选择的,在推理期间将最大输出长度设置为输入长度 + $50$,但尽可能提前终止。

表2总结了我们的结果,并将我们的翻译质量和训练成本与文献中的其他模型架构进行了比较,通过乘以训练时间、使用的 GPU 数量和每个 GPU 的持续单精度浮点容量估计值来估计用于训练模型的浮点运算数。

6.2 模型变体

为了评估 Transformer 不同组件的重要性,我们以不同的方式改变基础模型,测量开发集 newstest2013 上英语到德语翻译的性能变化。使用了上一节中描述的束搜索,但没有检查点平均,在表3中展示了这些结果。

在表3的行(A)中,我们改变注意力头的数量以及注意力 $k$ 和 $v$ 的维度,保持计算量不变,如第3.2.2节所述。虽然单头注意力比最佳设置差 0.9 BLEU,但如果头太多,质量也会下降。

在表3的行(B)中,我们观察到减小注意力 $k$ 的维度大小 $d_k$ 会损害模型质量,这表明确定兼容性并不容易,比点积更复杂的兼容性函数可能是有益的。我们在 (C) 和 (D) 行中进一步观察到,正如预期的那样,模型越大越好,dropout 对避免过度拟合非常有帮助。在行 (E) 中,我们用学习的位置嵌入替换我们的正弦位置编码,并观察到与基本模型几乎相同的结果。

6.3 英文选区解析

为了评估 Transformer 是否可以推广到其他任务,我们对英语选区解析进行了实验。这项任务提出了具体的挑战:输出受到强大的结构约束,并且比输入长得多。此外,RNN 序列到序列模型无法在小数据范围内获得最先进的结果。

我们在 Penn Treebank 的华尔街日报 (WSJ) 部分训练了一个 $d_{model} = 1024$ 的 4 层Transformer,大约 40K 个训练句子,还在半监督环境中训练它,使用的数据是来自大约 1700 万个句子的高置信度和 BerkleyParser 语料库。我们为 WSJ only 设置使用了 16K tokens 的词汇表,为半监督设置使用了 32K tokens 的词汇表。

我们只进行了少量实验来选择 dropout,注意力和残差, 22 节开发集上的学习率和光束大小,所有其他参数与英语-德语基础翻译模型的参数保持不变。在推理过程中,我们将最大输出长度增加到输入长度 + $300$,对于仅 WSJ 和半监督设置,我们使用 $21$ 和 $\alpha=0.3$ 的光束大小。

我们在 Table4 中的结果表明,尽管缺乏针对特定任务的调整,我们的模型表现出奇的好,产生的结果比之前报告的所有模型都要好,循环神经网络语法除外。

与 RNN 序列到序列模型相比,Transformer 优于 BerkeleyParser,即使仅在 WSJ 40K 句子训练集上进行训练也是如此。

7,结论

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

对于翻译任务,Transformer 的训练速度明显快于基于循环层或卷积层的架构。在 WMT 2014 英德和 WMT 2014 英法翻译任务中,我们都达到了新的水平。在前一个任务中,我们最好的模型甚至优于所有先前报告的集成模型,还通过英语选区分析实验表明我们模型的更广泛且适用性更好。

我们对基于注意力的模型的未来感到兴奋,并计划将它们应用到其他任务中,计划将 Transformer 扩展到涉及文本以外的输入和输出模式的问题,并研究局部的、受限的注意力机制,以有效处理图像、音频和视频等大型输入和输出,减少生成顺序是我们的另一个研究目标。

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

// 代码折叠