Attention Is All You Need

文章为翻译,仅供学习参考

论文下载地址:[1706.03762] Attention Is All You Need (arxiv.org)

作者:Ashish Vaswani;Noam Shazeer;Niki Parmar;Jakob Uszkoreit;Llion Jones;Aidan N. Gomez;Aidan N. Gomez;Illia Polosukhin

摘要

目前主流的序列转换模型基于包含编码器和解码器的复杂循环或卷积神经网络。性能最佳的模型还通过注意力机制连接编码器和解码器。我们提出了一种新的简单网络架构,Transformer,完全基于注意力机制,完全摒弃了循环和卷积。在两个机器翻译任务上的实验显示,这些模型在质量上更胜一筹,同时具有更高的并行化能力,并且训练时间大大减少。我们的模型在WMT 2014英语到德语翻译任务上达到了28.4 BLEU,比现有的最佳结果(包括集成模型)提高了2个以上的BLEU分数。在WMT 2014英语到法语翻译任务上,我们的模型在使用八个GPU训练3.5天后,建立了新的单模型最佳BLEU分数41.8,这只是文献中最佳模型训练成本的一小部分。我们还展示了Transformer能够很好地泛化到其他任务,通过将其成功应用于英语成分句法分析,无论是大规模还是有限的训练数据。

1.引言

循环神经网络,特别是长短期记忆(Long Short-Term Memory, LSTM)[13]和门控神经单元(Gated Recurrent, GRU)[7],已经被牢固地确立为序列建模和转换问题(如语言建模和机器翻译[35, 2, 5])中的最先进方法。自此以后,众多努力持续不断地推动着循环语言模型和编码器-解码器架构的边界[38, 24, 15]

循环模型通常会根据输入和输出序列的符号位置来分解计算。通过将这些位置与计算时间中的步骤对齐,它们生成一系列隐藏状态h_{t},作为前一个隐藏状态h_{t-1}和位置t的输入的函数。这种固有的序列性质阻碍了在训练样本内部的并行化,这在处理较长序列长度时变得至关重要,因为内存限制减少了跨样本的批处理能力。最近的工作通过分解技巧[21]和条件计算[32]在计算效率上取得了显著改进,同时在后者的情况下也提高了模型性能。然而,序列计算的基本限制仍然存在。

注意力机制已经成为各种任务中引人注目的序列建模和转换模型的一个组成部分,它允许在输入或输出序列中建模依赖关系而不考虑它们之间的距离。然而,在除了少数情况以外,这样的注意力机制通常是与循环网络结合使用的。

2.背景

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

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

端到端记忆网络(End-to-end memory networks)是基于递归注意机制而不是序列对齐递归的,已被证明在简单语言问答和语言建模任务上表现良好[34]

据我们所知,然而,Transformer 是第一个完全依赖自注意力机制来计算输入和输出表示的转换模型,而无需使用序列对齐的循环神经网络(RNN)或卷积。在接下来的几节中,我们将介绍 Transformer,解释自注意力的动机,并讨论它相对于像 [17, 18] [9] 这样的模型的优势。

3.模型架构

大多数具有竞争力的神经序列转换模型都具备编码器-解码器结构[5, 2, 35]。在这种结构下,编码器将一个输入符号表示的序列(x_{1},...,x_{n})映射为一个连续表示的序列z=(z_{1},..,z_{n}) 。基于 z,解码器逐个元素地生成一个输出序列(y_{1},...,y_{n})的符号。在每个步骤中,模型都是自回归的[10],在生成下一个符号时,消耗先前生成的符号作为附加输入。

Attention Is All You Need_第1张图片

Transformer 模型采用了一种整体架构,使用堆叠的自注意力和逐点全连接层作为编码器和解码器的组成部分,如图1的左半部分和右半部分所示。

3.1编码器和解码器堆栈

编码器:编码器由 N = 6 个相同的层堆叠而成。每层包含两个子层。第一个子层是多头自注意力机制,第二个子层是简单的逐点全连接前馈神经网络。我们在每个子层周围采用残差连接 [11],然后进行层标准化 [1]。也就是说,每个子层的输出是 LayerNorm(x + Sublayer(x)),其中Sublayer(x)是子层自身实现的函数。为了方便这些残差连接,模型中的所有子层和嵌入层的输出维度均为 d_{model} = 512。

解码器:解码器也由 N = 6 个相同的层堆叠而成。除了每个编码器层中的两个子层外,解码器还插入了第三个子层,该子层对编码器堆栈的输出进行多头注意力计算。与编码器类似,我们在每个子层周围采用残差连接和层标准化。我们还修改了解码器堆栈中的自注意力子层,以防止当前位置关注后续位置。通过这种掩码操作,再加上输出嵌入在位置上向前偏移一个位置,确保了位置 i 的预测只能依赖于小于 i 的已知输出。

3.2注意力

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

3.2.1缩放点积注意力

我们将我们特定的注意力机制称为“缩放点积注意力”(图2)。输入由维度为d_{k}的查询向量和键向量以及维度为d_{v}的值向量组成。我们计算查询向量与所有键向量的点积,将每个点积除以\sqrt{d_{k}},并应用softmax函数来获取对值向量的权重。

Attention Is All You Need_第2张图片在实践中,我们同时计算一组查询的注意力函数,将其打包成矩阵Q。键和值也被打包成矩阵K和V。我们计算输出矩阵如下:

Attention(Q,K,V)=softmax(\tfrac{QK^{T}}{\sqrt{d_{k}}})V

最常用的两种注意力函数是加性注意力[2]和点积(乘法)注意力。点积注意力与我们的算法相同,除了缩放因子\tfrac{1}{\sqrt{d_{k}}}。加性注意力使用具有单个隐藏层的前馈网络计算兼容性函数。虽然这两种方法在理论复杂度上相似,但在实践中,点积注意力要更快,更节省空间,因为它可以使用高度优化的矩阵乘法代码实现。

d_{k}的值较小时,这两种机制的表现相似,但在较大的dk值下,加性注意力优于未经缩放的点积注意力[3]。我们怀疑对于较大的d_{k}值,点积的值会变得很大,将softmax函数推入具有极小梯度的区域。为了抵消这种影响,我们通过\tfrac{1}{\sqrt{d_{k}}}对点积进行缩放。

3.2.2多头注意力

我们发现,与其使用具有d_{model}维度的键、值和查询执行单个注意力函数,将查询、键和值分别进行h次线性投影,使用不同的学习线性投影将它们投影到d_{k}d_{k}d_{v}维度上,会更加有益。然后,在这些投影版本的查询、键和值上并行执行注意力函数,得到d_{v}维输出值。这些值被串联起来,然后再次进行投影,得到最终的值,如图2所示。

MultiHead(Q,K,V)=Concat(head_{1},...,head_{h})W^{O}

        where   head_{i}=Attention(QW_{i}^{Q}, KW_{i}^{K},VW_{i}^{V})

其中,投影是由参数矩阵W_{i}^{Q}\in R^{d_{model}\cdot d_{k}}W_{i}^{K}\in R^{d_{model}\cdot d_{k}}W_{i}^{V}\in R^{d_{model}\cdot d_{v}}W_{i}^{O}\in R^{hd_{v}\cdot d_{model}}完成的。

在这项工作中,我们采用了 h = 8 个并行的注意力层,或称为注意力头。对于每个注意力头,我们使用 dk = dv = d_{model}/h = 64。由于每个注意力头的维度减小,总的计算成本与具有完整维度的单头注意力相似。

3.2.3在我们的模型中注意力的应用

Transformer 在三个不同的方式中使用了多头注意力:

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

3.3位置编码前馈网络(Position-wise Feed-Forward Networks)

除了注意力子层之外,我们的编码器和解码器中的每一层还包含一个全连接的前馈网络,它将分别对每个位置应用相同的处理。该前馈网络由两个线性变换组成,并在两者之间使用了ReLU激活函数。

FFN(x)=max(0,xW_{1}+b_{1})W_{2}+b_{2}

在不同位置,线性变换是相同的,但它们在不同层之间使用不同的参数。另一种描述这一点的方式是作为具有1*1大小的两个卷积。输入和输出的维度是d_{model}= 512,内部层的维度是d_{f f}= 2048。

3.4Embeddings和Softmax

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

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

Attention Is All You Need_第3张图片

3.5位置编码

由于我们的模型不包含递归和卷积,而是在模型中利用序列的顺序信息,因此我们必须注入一些关于序列中标记的相对或绝对位置的信息。为此,我们在编码器和解码器堆栈的底部向输入嵌入添加“位置编码”。位置编码的维度与嵌入的维度d_{model}相同,因此两者可以相加。有许多不同的位置编码选择,包括学习的和固定的。

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

PE_{pos,2i}=sin(pos/10000^{2i/d_{model}})

PE_{pos,2i+1}=cos(pos/10000^{2i/d_{model}})

其中,pos表示位置,i表示维度。也就是说,位置编码的每个维度对应一个正弦波。这些波长形成一个从2π到10000·2π的几何级数。我们选择这个函数是因为我们假设它将使模型能够轻松地通过相对位置来学习注意力,因为对于任何固定的偏移量k,PE_{pos+k}可以表示为PE_{pos+k}的线性函数。

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

4.为什么是自注意力

在本节中,我们将自注意力层的各个方面与常用于将一个变长序列的符号表示(x_{1},...,x_{n})映射到另一个等长序列(z_{1},...,z_{n}),其中x_{i}, z_{i}\in R^{d},例如,在典型的序列转换编码器或解码器中的隐藏层。激发我们使用自注意力的动机,我们考虑了三个期望目标。

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

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

表1所示,自注意力层通过一定数量的顺序执行操作连接所有位置,而循环层则需要O(n)个顺序操作。就计算复杂性而言,当序列长度n小于表示维度d时,自注意力层比循环层更快,而在机器翻译中通常情况下,最先进模型使用的句子表示(例如 word-piece 和 byte-pair 表示)中n通常小于d。为了提高涉及非常长序列的任务的计算性能,自注意力可以限制考虑输入序列中大小为r的邻域,以输出位置为中心。这将增加最大路径长度为O(n/r)。我们计划在未来的工作中进一步研究这种方法。

5.训练

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

5.1训练数据和批次

我们在标准的WMT 2014年英德数据集上进行了训练,该数据集包含约450万个句子对。句子使用字节对编码[3]进行编码,其中源语言和目标语言共享一个约37000个标记的词汇表。对于英法语言对,我们使用了规模显著更大的WMT 2014年英法数据集,其中包含3600万个句子,并将标记分割为32000个词片(word-piece)词汇表[38]。根据近似的序列长度,将句子对合并成批次。每个训练批次包含一组句子对,其中大约有25000个源语言标记和25000个目标语言标记。

5.2硬件和训练计划

我们在一台配备8块NVIDIA P100 GPU的机器上训练了我们的模型。对于采用论文中描述的超参数的基础模型,每个训练步骤大约需要0.4秒。我们一共训练了基础模型100,000步,即12小时。对于我们的大型模型(表3底部所述),每个步骤需要1.0秒。大型模型训练了300,000步(3.5天)。

5.3优化器

我们使用了Adam优化器[20],其中\beta _{1} = 0.9,\beta _{2}= 0.98,ϵ = 10^{-9}。我们根据以下公式调整了训练过程中的学习率:

lrate=d^{-0.5}_{model}\cdot min(step\_num^-0.5,step\_num\cdot warmup\_steps^{-1.5})

这意味着在前warmup_steps个训练步骤中,学习率线性增加;之后,学习率按照步数的倒数平方根成比例地递减。我们使用了warmup_steps = 4000。

5.4正则化

我们在训练过程中采用了三种正则化方法:

表2:Transformer模型在英德翻译和英法翻译的newstest2014测试中取得了比之前最先进的模型更好的BLEU分数,而且只需较少的训练成本。

Attention Is All You Need_第4张图片

残差连接的Dropout:我们在每个子层的输出上应用dropout [33],然后将其添加到子层输入并进行归一化。此外,我们还在编码器和解码器堆栈中的嵌入和位置编码之和上应用了dropout。对于基础模型,我们使用P_{drop} = 0.1的比率。

标签平滑:在训练过程中,我们采用了\epsilon _{ls} = 0.1的标签平滑方法[36]。这会降低困惑度,因为模型学会更加不确定,但会提高准确性和BLEU分数。

6.结果

6.1机器翻译

在WMT 2014年的英德翻译任务中,大型Transformer模型(在表2中称为Transformer (big))的性能超过了之前报告的最佳模型(包括集成模型),BLEU分数高出2.0以上,创造了新的最先进BLEU分数28.4。该模型的配置列在表3的最底部。该模型在8个P100 GPU上训练耗时3.5天。即使是我们的基础模型也超过了之前发布的所有模型和集成模型,在训练成本上只需一小部分竞争模型的成本。

在WMT 2014年的英法翻译任务中,我们的大型模型取得了41.0的BLEU分数,表现优于之前发布的所有单一模型,并且训练成本不到之前最先进模型的四分之一。Transformer(大型)模型在英法翻译训练中使用的是P_{drop} = 0.1的dropout率,而不是0.3。

对于基础模型,我们使用了最后5个检查点的平均模型,这些检查点是以10分钟的间隔写入的。对于大型模型,我们取最后20个检查点的平均值。我们使用了束搜索(beam search),束大小为4,长度惩罚因子α = 0.6 [38]。这些超参数是在开发集上进行实验后选择的。我们将推断期间的最大输出长度设置为输入长度+50,但如果可能的话会提前终止[38]

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

6.2模型变化

为了评估Transformer不同组件的重要性,我们以不同方式改变基础模型,衡量在英德翻译任务中性能的变化。

表3:Transformer架构的变种。未列出的值与基础模型相同。所有指标都是针对英德翻译开发集(newstest2013)的,困惑度(perplexities)是按照我们的字节对编码(byte-pair encoding)计算的每个单词片段的值,并且不应与每个单词的困惑度进行比较。

Attention Is All You Need_第5张图片

我们在开发集newstest2013上使用了与前文描述相同的束搜索,但没有使用检查点平均值。我们将这些结果呈现在表3中。

表3的(A)行中,我们改变了注意力头数和注意力键值维度,同时保持计算量不变,如第3.2.2节所述。尽管单头注意力比最佳设置差0.9 BLEU,但质量也会随着头数过多而下降。

表3的(B)行中,我们观察到减小注意力键的大小dk会降低模型的质量。这表明确定兼容性并不容易,使用比点积更复杂的兼容性函数可能会有益处。在(C)和(D)行中,我们进一步观察到,如预期的那样,更大的模型效果更好,并且使用dropout非常有助于避免过拟合。在(E)行中,我们用学习的位置嵌入[9]替换了正弦位置编码,并观察到与基础模型几乎相同的结果。

6.3英语短语结构分析

为了评估Transformer模型是否能够推广到其他任务,我们进行了英语短语结构分析的实验。这个任务面临着特定的挑战:输出受到强烈的结构约束,并且比输入明显更长。此外,在小数据情境下,RNN序列到序列模型未能达到最先进的结果[37]

我们在华尔街日报(Wall Street Journal,简称WSJ)的Penn Treebank数据集[25]上训练了一个4层的Transformer模型,其中d_{model}为1024。该数据集包含约40,000个用于训练的句子。此外,我们还在半监督设置下对模型进行了训练,使用了更大规模的高可信度和BerkleyParser语料库,其中包含大约17,000,000个句子[37]。对于仅使用WSJ数据集的设置,我们使用了16,000个标记的词汇表;而在半监督设置下,我们使用了32,000个标记的词汇表。

我们仅在第22节的开发集上进行了少量的实验,以选择dropout、注意力和残差(第5.4节)、学习率和束搜索大小等参数。除此之外,所有其他参数都与英德基础翻译模型保持不变。在推断过程中,我们将最大输出长度增加到输入长度+300。我们使用了21个束搜索大小,并且对于WSJ数据集和半监督设置,α值均为0.3。

表4:Transformer在英语短语结构分析任务中具有很好的泛化能力(结果基于WSJ的第23节)

Attention Is All You Need_第6张图片

表4中的结果显示,尽管我们的模型缺乏特定任务的调整,但其表现出人们意想不到的良好性能,在除了递归神经网络语法(Recurrent Neural Network Grammar)[8]之外的所有先前报告的模型中都产生更好的结果。

与RNN序列到序列模型[37]相比,即使只在包含4万个句子的WSJ训练集上进行训练,Transformer模型也能胜过BerkeleyParser [29]

7.结论

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

在翻译任务中,与基于循环层或卷积层的架构相比,Transformer模型的训练速度可以显著提高。在WMT 2014英德翻译和WMT 2014英法翻译任务中,我们取得了最新的最高水平。在前一项任务中,我们的最佳模型甚至超过了以往所有已报告的集成模型。

你可能感兴趣的:(深度学习,人工智能,机器学习,自然语言处理)