毕设相关经典文献——Attention Is All You Need翻译学习

Attention Is All You Need(纯学习)

引言 google 在2017年发布的一篇论文——关于注意力机制,原文地址:Attention Is All You Need。感谢谷歌大佬的分享学习。

一、原文个人翻译

Abstract

主流的序列转换模型基于复杂的递归或卷积神经网络,包括编码器和解码器。具有最佳性能的模型还是通过注意力机制连接编码器和解码器。我们提出了一种新的简单网络架构,即Transformer,它完全基于注意力机制,完全消除了重复和卷积。在两个机器翻译任务上进行的实验表明,这些模型具有更好的性能,同时具有更高的可并行性,并且所需的训练时间明显更少。我们的模型在WMT 2014英语到德语的翻译任务上达到了28.4 BLEU,比包括集成学习在内的现有最佳结果提高了2 BLEU。在WMT 2014英语到法语翻译任务中,我们的模型在8个GPU上进行了3.5天的训练后,所得到的单个模型获得了41.8BLEU分数,这是文献中最好模型的训练成本的一小部分。我们在大型和有限的训练数据中,通过将其成功应用于英语句法解析,表明了Transformer可以很好地适用于其他任务。

1 Introduction

循环神经网络(RNN),特别是长短期记忆(LSTM)和门控循环神经网络(GRU)已被牢固地确立为序列建模和转导问题(例如语言建模和机器翻译)的最新方法。此后,人们一直在努力扩大循环语言模型和编码器-解码器体系结构的界限。

循环网络模型通常沿输入和输出序列的符号位置考虑计算。将序列中每位置数据与RNN计算时刻中的步骤对齐,它们会生成一系列隐藏态ht,作为先前的隐藏态ht-1和位置t的输入数据。这种固有的顺序性质阻止了训练样本的并行化,这在较长的序列长度上变得至关重要,因为内存约束限制了样本之间的批处理。最近的工作通过分解技巧(factorization tricks)和条件计算(conditonal computation)在计算效率上取得了显着提高,同时在后者的情况下还提高了模型性能。但是,顺序计算的基本约束仍然存在。

注意机制已成为各种任务中引人注目的序列建模和转导模型不可或缺的一部分,允许对依赖项进行建模,而无需考虑它们在输入或输出序列中的距离。但是,除少数情况下,此类注意力机制都与循环网络结合使用。

在这项工作中,我们提出了Transformer,它是一种避免重复发生的模型体系结构,而是完全依赖于注意力机制来绘制输入和输出之间的全局依存关系。在八个P100 GPU上进行了长达12个小时的培训之后,该Transformer可以实现更多的并行化,并可以在翻译质量方面达到最新的水平。

2 Background

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

Self-attention,有时也称为intra-attention,是一种与单个序列的不同位置相关计算序列的表示形式的关联机制。self-attention机制已成功用于各种任务中,包括阅读理解,摘要概括,文本蕴涵和学习与任务无关的句子表示。

端到端存储网络基于递归注意机制,而不是序列对齐的递归,并且已被证明在简单语言问答和语言建模任务中表现良好。

据我们所知,Transformer是第一个完全依靠自我注意力来计算其输入和输出表示的转导模型,而无需使用序列对齐的RNN或卷积。在以下各节中,我们将描述transformer,激发自我注意力,并讨论其相对于其他模型的优势所在。

3 Model Architecture

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

Transformer遵循这种总体架构,对编码器和解码器使用栈的self-attenttion和各数据独立的全连接层,分别如图1的左半部分和右半部分所示
图1

3.1 Encoder and Decoder stack

编码器
编码器由N = 6个相同层的堆栈组成。每层都有两个子层。第一个是Multi-Head self-attention,第二个是简单的,位置独立的全连接的前馈网络子层。我们在两个子层的每一层周围采用了残余连接(residual connection),然后进行层归一化(layer normalization)。也就是说,每个子层的输出是LayerNorm(x + Sublayer(x)),其中Sublayer(x)是由子层本身实现的功能。为了提高这些残留连接,模型中的所有子层以及嵌入层均产生尺寸为dmodel = 512的输出。

解码器
解码器还由N = 6个相同层的堆栈组成。除了每个编码器层中的两个子层之外,解码器还插入第三子层,该第三子层对编码器堆栈的输出执行Multi-Head-Attention。(严格来讲是对编码器的输出和解码器经过Masked multi-head-attention层后的输入进行计算)与编码器类似,我们在每个子层周围采用残余连接,然后进行层归一化。我们还修改了解码器堆栈中的self-attention子层,以防引入当前位置影响后续位置。这种掩弊,加上输出嵌入被一个位置偏移的事实,确保了对位置i的预测只能依赖于小于i位置的已知输出。

3.2 Attention

attention函数可以描述为将query和一组key-value对映射到输出,其中queries,keys,value和输出都是向量。 将输出计算为值的加权总和,其中分配给每个值的权重是通过query与相应key的兼容性函数来计算的。

在这里插入图片描述

3.2.1 Scaled Dot-Product Attention

我们将我们的attention称为“缩放点积attention”(图2)。 输入由维度为dk的queries和keys,以及维度为dv的value组成。 我们使用所有keys计算query的点积,将每个keys除以√dk,然后应用softmax函数获得value的权重。

实际上,我们在一组query上同时计算attention函数,将它们打包到一个矩阵Q中。key和value也打包在一个矩阵K和V中。 我们将输出矩阵计算为:
在这里插入图片描述
两个最常用的注意力功能是加法attention和点乘(乘法)attention。 除了比例因子1/√dk,点积attention与我们的算法相同。 加性注意机制使用具有单个隐藏层的前馈网络来计算兼容性函数。 尽管两者在理论上的复杂度相似,但是在实践中点积的关注要快得多,并且空间效率更高,因为可以使用高度优化的矩阵乘法代码来实现。

对于较小的√dk而言,这两种机制的性能相似,但加法attention的效果优于点积attention,而对于较大的√dk则不进行缩放。我们怀疑对于较大的√dk值,点积在数量级上增长很大,从而将softmax函数推入梯度极小的区域。为抵消这种影响,我们将点积缩放1/√dk。

3.2.2 Multi-Head Attention

与使用dmodel维度的key,value和query执行单个attention函数相比,我们发现将query,key和value分别与不同的、已经通过训练的线性投影(linear projection)线性映射(linearly project)到dk,dk和dv维h次是有益的。 然后,在query,key和value的这些预计的每个版本上,我们并行执行attention函数,从而产生dv维输出值。 将它们连接起来并再次映射,得到最终值,如图2所示。

Multi-Head-Attention允许模型可以共同关注来自不同位置的不同表示子空间的信息。 对于一个注意力集中的头部,平均化抑制了这种情况。
在这里插入图片描述
在这里插入图片描述
在这项工作中,我们采用h = 8个平行attention层或head。 对于这些中的每一个,我们使用dk = dv = dmodel / h =64。由于每个head的维度减小,因此总的计算成本与具有全维度的单头注意力的计算成本相似。

3.2.3 Applications of Attention in our Model

Transformer以三种不同方式使用Multi-Head attention:

•在“编码器-解码器attention”层中,query来自上一个解码器层,而存储的key和value来自编码器的输出。这允许解码器中的每个位置都参与输入序列中的所有位置。这模仿了Seq2Seq模型中的典型编码器-解码器attention机制。

•编码器包含self-attention层。在self-attention层中,所有key,value和query都来自同一位置,在这种情况下,是编码器中上一层的输出。编码器中的每个位置都可以覆盖编码器上一层中的所有位置。

•类似地,解码器中的self-attention层允许解码器中的每个位置都关注解码器中直到该位置为止的所有位置。我们需要防止解码器中向左流动信息,以保留自回归属性。通过屏蔽(设置为-∞)softmax输入中与非法连接相对应的所有值,我们在缩放点积attention的内部实现了这一点。参见图2。

3.3 Position-wise Feed-Forward Networks

除了关注子层之外,我们的编码器和解码器中的每个层还包含一个完全连接的前馈网络,该网络被分别并相同地应用于每个位置。 这由两个线性变换组成,两个线性变换之间具有ReLU激活。
在这里插入图片描述
虽然线性变换在不同位置上相同,但是它们从一层到另一层使用不同的参数。 描述它的另一种方法是两个核大小为1的卷积。输入和输出的维数为dmodel = 512,而内层的维数为df f = 2048。

3.4 Embeddings and Softmax

与其他序列转导(transduction)模型相似,我们使用已训练的Embeddings将输入tokens和输出tokens转换为维dmodel的向量。 我们还使用常用的可学习的线性变换和softmax函数将解码器输出转换为预测的下一个token概率。 在我们的模型中,我们在两个Embedding层和pre-softmax线性变换之间共享相同的权重矩阵。 在嵌入层中,我们将这些权重乘以√dmodel

3.5 Positional Encoding

由于我们的模型不包含循环网络和卷积网络,因此为了使模型能够利用序列的顺序(数据的位置信息),我们必须加入一些有关token在序列中的相对或绝对位置的信息。 为此,我们在编码器和解码器堆栈底部的输入嵌入中添加“位置编码”。 位置编码的维数dmodel与嵌入的维数相同,因此可以将两者相加。 对于位置编码(可学习的和固有匹配的),有许多选择。

表1:每层复杂度,最小顺序操作数和不同层类型的最大路径长度。 n是序列长度,d是表示维,k是卷积的核大小,r是受限的自动注意力中邻域的大小。
在这里插入图片描述

在这项工作中,我们使用不同频率的正弦和余弦函数:
在这里插入图片描述
其中pos是位置,i是尺寸。 即,位置编码的每个维度对应于正弦曲线。 波长形成从2π到10000·2π的几何级数。 我们选择此函数是因为我们假设它会允许模型更容易地学习相对位置,因为对于任何固定的偏移量k,P Epos + k都可以表示为$P E_{pos}的线性函数。

我们还尝试使用可学习的位置嵌入进行实验,发现这两个版本产生的结果几乎相同(请参见表3(E)行)。 我们选择正弦曲线版本是因为它可以使模型外推到比训练过程中遇到的序列更长的序列长度。

4.Why Self-Attention?

在本节中,我们将self-attention层的各个方面与通常用于将一个可变长度字符表示序列(x1,…,xn)映射到另一个等长序列(z1, …,zn),其中xi,zi∈Rd,例如典型序列转导编码器或解码器中的隐藏层。激励我们使用self-attention的原因,主要是以下三个:
(1)一个是每层的总计算复杂度。
(2)另一个是可以并行化的计算,通过所需的最小顺序操作数来衡量。
(3)第三个是网络中远程依赖之间的路径长度。学习远程依赖性是许多序列转换任务中的关键挑战。影响学习这种依赖性的能力的一个关键因素是前向和后向信号必须在网络中传播的路径的长度。输入和输出序列中任何位置组合之间的这些路径越短,学习远程依赖性就越容易。因此,我们还比较了由不同类型层组成的网络中任意两个输入和输出位置之间的最大路径长度。

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

卷积核宽度k <n的单个卷积层无法连接所有输入和输出位置对。这样做需要在连续内核的情况下堆叠O(n / k)个卷积层,在膨胀卷积的情况下则需要O(logk(n)),从而增加了任意两个位置之间最长路径的长度在网络中。卷积层通常比循环层贵k倍。但是,可分离卷积将复杂度大大降低到O(k·n·d + n·d2)。然而,即使k = n,可分离卷积的复杂度也等于我们模型中采用的self-attention层和逐点前馈层的组合(即我们在模型中采用的方法)。

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

5 Training

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

5.1 Training Data and Batching

我们对标准的WMT 2014英语-德语数据集进行了培训,该数据集包含约450万个句子对。 句子使用字节对编码进行编码,具有大约37000个token的共享源目标词汇。 对于英文法文,我们使用了更大的WMT 2014英文法文数据集,该数据集由3千6百万个句子和将标记拆分成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优化方案,其中β1= 0.9,β2= 0.98和ϵ = 10-9。 根据以下公式,我们在训练过程中改变了学习率:
在这里插入图片描述
这相当于线性增加第一个warmup_steps的学习速率,然后按步骤数的平方根成比例地降低学习速率。 我们使用了warmup_steps = 4000。

5.4 Regularization

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

Residual Dropout 在对子层的输出进行归一化之前,我们将其(dropout)应用于子层的输出。 此外,我们对编码器和解码器堆栈中的嵌入和位置编码的总和应用了dropout。 对于基本模型,我们使用Pdrop = 0.1。

Label Smoothing 在训练过程中,我们采用值ls = 0.1的标签平滑。 随着模型变得更加不确定,这会降低perplexity,但会提高准确性和BLEU得分。

6 Result

6.1 Machine Translation

在WMT 2014英语到德语的翻译任务中,大型变压器模型(表2中的变压器(大))比以前报道的最佳模型(包括合奏)高出2.0 BLEU,建立了新的状态art BLEU得分为28.4。表3的底部列出了该模型的配置。在8个P100 GPU上进行了3.5天的培训。甚至我们的基本模型都超过了以前发布的所有模型和集合,而其培训成本只是任何竞争模型的一小部分。

在2014年WMT英语到法语翻译任务中,我们的大型模型的BLEU得分达到41.0,优于以前发布的所有单个模型,而培训费用却不到以前的最新水平的1/4模型。为英语到法语训练的Transformer(大型)模型使用的辍学率Pdrop = 0.1,而不是0.3。

对于基本模型,我们使用通过平均最近5个检查点(以10分钟为间隔编写)获得的单个模型。对于大型模型,我们平均了最后20个检查点。我们使用波束大小为4且长度损失为α= 0.6的波束搜索[38]。这些超参数是在开发集上进行实验后选择的。我们将推理期间的最大输出长度设置为输入长度+ 50,但在可能的情况下尽早终止[38]。

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

6.2 Model Variations

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

在表3中的行(A)中,我们改变了注意头的数量以及注意键和值的大小,使计算量保持不变,如3.2.2节中所述。 尽管单头注意比最佳设置差0.9 BLEU,但过多的头也会降低质量。

表3:Transformer体系结构的变体。 未列出的值与基本模型的值相同。 所有度量标准都在英语到德语的翻译开发套件newstest2013上。 根据我们的字节对编码,列出的模糊是每个wordpiece,不应与每个word的模糊相比较。

在表3中的行(B)中,我们观察到减小注意键大小dk会损害模型质量。 这表明确定兼容性不是一件容易的事,并且比点乘积更复杂的兼容性功能可能是有益的。 我们进一步在(C)和(D)行中观察到,正如预期的那样,较大的模型更好,并且遗漏对于避免过度拟合非常有帮助。 在第(E)行中,我们将正弦位置编码替换为学习的位置嵌入[9],并观察到与基本模型几乎相同的结果。

6.3 English Constituency Parsing

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

我们在Penn Treebank的《华尔街日报(WSJ)》 [25]上训练了一个dmodel = 1024的4层变压器,约40K训练语句。我们还使用来自约1700万个句子的较大的高可信度和BerkleyParser语料库,在半监督的情况下对其进行了训练[37]。对于仅WSJ设置,我们使用了16K令牌的词汇表;对于半监督设置,我们使用了32K令牌的词汇表。

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

我们在表4中的结果表明,尽管缺少针对特定任务的调整,我们的模型仍然表现出令人惊讶的出色表现,除了递归神经网络语法[8]之外,其结果比以前报告的所有模型都更好。

与RNN序列到序列模型相反[37],即使仅在40K句子的WSJ训练集上进行训练,该Transformer的性能也优于Berkeley Parser [29]。

7 Conclusion

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

对于翻译任务,与基于循环层或卷积层的体系结构相比,可以大大加快Transformer的培训速度。在WMT 2014英语到德语和WMT 2014英语到法语的翻译任务中,我们都达到了最新水平。在前一项任务中,我们最好的模型甚至胜过所有先前报告的合奏。

我们对基于注意力的模型的未来感到兴奋,并计划将其应用于其他任务。我们计划将“transformer”扩展到涉及文本和文字之外的输入和输出形式的问题。

研究局部受限注意力机制,以有效处理大量输入和输出,例如图像,音频和视频。使世代相继减少是我们的另一个研究目标。我们用于训练和评估模型的代码可从https://github.com/tensorflow/tensor2tensor获得。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值