Attention Is All You Need

总结

Transformer论文的主要贡献

  • 提出了一种全新的序列转导模型结构: 完全摒弃了传统的循环神经网络(RNN)和卷积神经网络(CNN),首次将自注意力机制作为序列建模的核心。
  • 在机器翻译任务上取得了显著的性能提升: 在WMT 2014英德和英法翻译任务上,Transformer取得了比以往最好的模型更好的结果,并且训练成本更低。
  • 加速了模型训练: Transformer的并行化特性使得模型训练速度大幅加快。
  • 为序列建模任务提供了新的思路: Transformer的成功,推动了注意力机制在自然语言处理领域的广泛应用,并催生了众多基于Transformer的模型。

Transformer模型的核心思想

  • 自注意力机制: Transformer的核心是自注意力机制,它允许模型在处理序列时,直接关联序列的不同位置,从而捕捉到序列内部的复杂关系。
  • 多头注意力: 多头注意力机制增强了模型的表达能力,使得模型能够从不同的表示子空间中获取信息。
  • 位置编码: 为了使模型能够利用序列的顺序信息,Transformer引入了位置编码,将位置信息编码到输入中。

Transformer模型的优点

  • 并行化程度高: 训练速度快。
  • 能够有效地处理长距离依赖: 适用于处理长序列的任务。
  • 表达能力强: 能够学习到更复杂的特征。
  • 可解释性强: 通过注意力机制可以更好地理解模型的内部工作原理。

Transformer模型的局限性

  • 计算复杂度高: 对于长序列,计算复杂度会较高。
  • 可解释性仍有待提高: 虽然注意力机制可以提供一些可解释性,但是模型的整体可解释性仍然是一个挑战。

Abstract

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

1 Introduction

特别是循环神经网络、长短期记忆 [13] 和门控循环 [7] 神经网络已被牢固确立为语言建模和机器翻译等序列建模和转导问题的最新方法 [35, 2, 5]。此后,许多努力继续推动循环语言模型和编码器-解码器架构的边界[38,24,15]。

循环模型通常沿输入和输出序列的符号位置分解计算。将位置与计算时间的步骤对齐,它们生成一系列隐藏状态 ht,作为先前隐藏状态 ht-1 和位置 t 的输入的函数。这种固有的顺序性质排除了训练示例中的并行化,这在更长的序列长度下变得至关重要,因为内存限制限制了示例之间的批处理。最近的工作通过分解技巧 [21] 和条件计算 [32] 实现了计算效率的显着改进,同时还提高了后者情况下的模型性能。然而,顺序计算的基本约束仍然存在。

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

转导模型 (Transduction Model) 是一种机器学习模型,它直接将一个输入序列映射到另一个输出序列,而不需要显式地学习一个通用的函数或中间表示。换句话说,转导模型专注于特定的输入-输出映射任务,而不是试图学习一个适用于所有任务的通用模型。

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

2 Background

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

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

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

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

3 Model Architecture

大多数竞争性神经序列转导模型具有编码器-解码器结构 [5, 2, 35]。在这里,编码器映射符号表示的输入序列 (x1,…, xn) 到一系列连续表示 z = (z1,…, zn)。给定 z,解码器然后生成一个输出序列 (y1,…, ym) 一次一个元素的符号。在每一步,模型都是自回归的 [10],在生成下一个时将先前生成的符号作为附加输入。

在这里插入图片描述

图 1:Transformer - 模型架构。

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

3.1 Encoder and Decoder Stacks

编码器:编码器由 N = 6 个相同层组成。每一层都有两个子层。第一个是多头自注意力机制,第二个是简单的、位置全连接的前馈网络。我们在两个子层中的每一个周围使用残差连接 [11],然后是层归一化 [1]。也就是说,每个子层的输出是LayerNorm(x + Sublayer(x)),其中 Sublayer(x) 是子层本身实现的函数。为了便于这些残差连接,模型中的所有子层以及嵌入层都会产生维度 dmodel = 512 的输出。

解码器:解码器还由 N = 6 个相同层的堆栈组成。除了每个编码器层中的两个子层之外,解码器还插入了第三个子层,它对编码器堆栈的输出执行多头注意力。与编码器类似,我们在每个子层周围使用残差连接,然后是层归一化。我们还修改了解码器堆栈中的自注意力子层,以防止位置关注后续位置。这种掩蔽,再加上输出嵌入被一个位置偏移的事实,确保位置 i 的预测仅取决于位置小于 i 的已知输出。

3.2 Attention

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

在这里插入图片描述

图 2:(左)缩放点积注意力。(右)多头注意力由几个并行运行的注意力层组成。

3.2.1 Scaled Dot-Product Attention

我们称我们的特定注意力为“Scaled Dot-Product Attention”(图 2)。输入由维度 dk 的查询和键以及维度 dv 的值组成。我们计算查询与所有键的点积,将每个键除以 √dk,并应用 softmax 函数来获得值的权重。

在实践中,我们同时计算一组查询的注意力函数,打包成一个矩阵 Q。键和值也打包到矩阵 K 和 V 中。我们计算输出矩阵为:

在这里插入图片描述

两种最常用的注意函数是加性注意[2]和点积(乘法)注意。点积注意力与我们的算法相同,只是比例因子为 1/√dk。加性注意使用具有单个隐藏层的前馈网络计算兼容性函数。虽然两者在理论上的复杂性相似,但点积注意力在实践中要快得多,空间效率更高,因为它可以使用高度优化的矩阵乘法代码来实现。

虽然对于较小的 dk 值,这两种机制的表现相似,但加性注意力优于点积注意力,而不会缩放较大的 dk 值 [3]。我们怀疑对于较大的dk值,点积的幅度较大,将softmax函数推入梯度极小的区域4。为了抵消这种影响,我们将点积缩放1/√dk

3.2.2 Multi-Head Attention

我们发现将查询、键和值分别线性投影到 dk、dk 和 dv 维,而不是使用 dmodel 维键、值和查询执行单个注意力函数是有益的。在每个查询、键和值的每个投影版本上,然后我们并行执行注意力函数,产生 dv 维输出值。这些被连接起来并再次投影,从而产生最终值,如图 2 所示。

多头注意力允许模型共同关注不同位置的不同表示子空间的信息。使用单个注意力头,平均会抑制这一点。

在这里插入图片描述

在这项工作中,我们使用 h = 8 个并行注意力层或头部。对于每一个,我们使用dk = dv = dmodel/h = 64。由于每个头的维数降低,总计算成本与全维数单头注意相似。

3.2.3 Applications of Attention in our Model

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

  • 在“编码器-解码器注意力”层中,查询来自前一个解码器层,内存键和值来自编码器的输出。这允许解码器中的每个位置关注输入序列中的所有位置。这模仿了序列到序列模型中典型的编码器-解码器注意机制,如[38,2,9]。
  • 编码器包含自注意力层。在自注意力层中,所有键、值和查询都来自同一个地方,在这种情况下,编码器中前一层的输出。编码器中的每个位置都可以关注编码器前一层的所有位置。
  • 类似地,解码器中的自注意力层允许解码器中的每个位置关注解码器中的所有位置,直到并包括该位置。我们需要防止解码器中的向左信息流以保留自回归属性。我们通过屏蔽对应于非法连接的 softmax 的输入中的所有值(设置为 -∞)来实现这种缩放点积注意力的内部。参见图 2。

3.3 Position-wise Feed-Forward Networks

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

在这里插入图片描述

虽然线性变换在不同的位置是相同的,但它们使用与层到层的不同参数。另一种描述的方法是核大小为1的两个卷积。输入和输出的维数是dmodel = 512,内层维数为df f = 2048。

3.4 Embeddings and Softmax

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

在这里插入图片描述

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

3.5 Positional Encoding

由于我们的模型不包含递归和没有卷积,为了让模型利用序列的顺序,我们必须注入一些关于序列中标记的相对位置或绝对位置的信息。为此,我们在编码器和解码器堆栈底部的输入嵌入中添加了“位置编码”。位置编码具有与嵌入相同的维度 dmodel,以便可以求和两者。位置编码、学习和固定有很多选择[9]。在这项工作中,我们使用不同频率的正弦和余弦函数:

在这里插入图片描述

其中 pos 是位置,i 是维度。也就是说,位置编码的每个维度对应一个正弦信号。波长形成从2π到10000·2π的几何级数。我们选择这个函数是因为我们假设它将允许模型轻松学习关注相对位置,因为对于任何固定的偏移 k,PEpos+k 可以表示为 P Epos 的线性函数。

我们还尝试使用学习的位置嵌入 [9],并发现两个版本产生了几乎相同的结果(见表 3 行 (E))。我们选择正弦版本,因为它可能允许模型外推到比训练期间遇到的序列长度更长的序列长度。

4 Why Self-Attention

在本节中,我们将自注意力层的各个方面与通常用于映射一个可变长度的符号表示序列(x1,…, xn) 到另一个长度相等的序列 (z1,…, zn),其中 xi, zi ∈ Rd,例如典型序列转导编码器或解码器中的隐藏层。激发我们对自注意力的使用,我们考虑了三个要求。

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

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

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

一个核宽度为k < n的卷积层不能连接所有的输入和输出位置对。在相邻核的情况下,这样做需要O(n/k)个卷积层的堆栈,在扩展卷积的情况下需要O(logk(n))个卷积层的堆栈[18],从而增加网络中任意两个位置之间最长路径的长度。卷积层通常比循环层的成本高k倍。然而,可分离卷积[6]大大降低了复杂性,为O(k·n·d + n·d2)。然而,即使k = n,可分离卷积的复杂性也等于自注意层和点前馈层的组合,这是我们在模型中采用的方法。

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

5 Training

5.1 Training Data and Batching

我们在标准的 WMT 2014 英德数据集上进行训练,该数据集由大约 450 万个句子对组成。句子使用字节对编码 [3] 进行编码,该编码具有大约 37000 个标记的共享源目标词汇表。对于英法,我们使用了更大的 WMT 2014 英法数据集,该数据集由 36M 个句子组成,并将标记拆分为 32000 个单词片段词汇表 [38]。句子对按近似序列长度分批在一起。每个训练批次包含一组句子对,包含大约 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优化器[20],β1 = 0.9, β2 = 0.98, ε = 10−9。我们根据公式在训练过程中改变学习率:

在这里插入图片描述

这对应于在第一个warmup_steps训练步骤中线性增加学习率,然后按步数的倒数平方根成比例地降低学习率。我们使用了edwarmup_steps = 4000。

5.4 Regularization

我们在训练中使用三种类型的正则化:

  • Residual Dropout 我们将dropout[33]应用于每个子层的输出,然后将其添加到子层输入并归一化。此外,我们将dropout应用于编码器和解码器堆栈中的嵌入和位置编码之和。对于基本模型,我们使用pdrop = 0.1的速率。
  • Label Smoothing 在训练期间,我们采用值 εls = 0.1 [36] 的标签平滑。这会损害困惑度,因为模型学习更不确定,但提高了准确性和 BLEU 分数。

6 Results

在这里插入图片描述

表 2:Transformer 在英语到德语和英语到法语 newstest2014 测试上以训练成本的一小部分实现了比以前的最先进模型更好的 BLEU 分数。

7 Conclusion

在这项工作中,我们提出了 Transformer,这是第一个完全基于注意力的序列转导模型,用多头自注意力替换了编码器-解码器架构中最常用的循环层。对于翻译任务,Transformer 可以比基于循环或卷积层的架构快得多。在 WMT 2014 英德和 WMT 2014 英法翻译任务上,我们达到了新的技术水平。在前一个任务中,我们最好的模型甚至优于所有先前报告的集成。我们对基于注意力的模型的未来感到兴奋,并计划将它们应用于其他任务。我们计划将 Transformer 扩展到涉及文本以外的输入和输出模式的问题,并研究局部、受限的注意力机制,以有效地处理图像、音频和视频等大型输入和输出。使生成不那么顺序是我们的另一个研究目标。我们用于训练和评估我们的模型的代码可在 https://github.com/tensorflow/tensor2tensor 获得。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值