深度学习之自注意力机制(self-attention)(一)Transformer翻译

Attention Is All You Need

Abstract

主要的序列转导模型是基于复杂的循环或卷积神经网络,包括一个编码器和一个解码器。表现最好的模型还通过注意机制连接编码器和解码器。我们提出了一个新的简单的网络架构,Transform,完全基于注意力机制,完全摒弃递归和卷积。在两个机器翻译任务上的实验表明,这些模型在质量上更优越,同时更具并行性,并且需要更少的训练时间。我们的模型在WMT 2014英语-德语翻译任务上实现了28.4 BLEU,比现有的最佳结果(包括集合)提高了2个BLEU以上。在WMT 2014英法翻译任务中,我们的模型在8个gpu上训练3.5天后,建立了一个新的单模型最先进的BLEU分数41.0,这是文献中最佳模型训练成本的一小部分。

1 Introduction

递归神经网络,特别是长短期记忆神经网络(LSTM)[12]和门控递归神经网络(GRU)[7],已经被牢固地确立为序列建模和转导问题(如语言建模和机器翻译)的最新方法[29,2,5]。从那以后,大量的努力继续推动循环语言模型和编码器-解码器架构的发展[31,21,13]。

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

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

在这项工作中,我们提出了Transformer,这是一种避免重复的模型架构,而是完全依赖于注意力机制来绘制输入和输出之间的全局依赖关系。Transformer允许显着更多的并行化,并且在8个P100 gpu上经过12小时的培训后,可以达到翻译质量的新状态。

2 Background

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

自我注意力机制,有时被称为内注意,是一种将单个序列的不同位置联系起来以计算该序列的表示的注意机制。自注意已被成功地应用于阅读理解、抽象总结、文本蕴涵和学习任务无关的句子表征等多种任务中[4,22,23,19]。

端到端记忆网络基于循环注意力机制,而不是顺序排列的递归,并且在简单语言问答和语言建模任务中表现良好[28]。

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

3 Model Architecture

大多数竞争性神经序列转导模型都有一个编码器——解码器结构[5,2,29]。这里,编码器将符号表示的输入序列(x1,...,xn)映射到连续表示的序列z=(z1,...,zn)。给定z,然后解码器一次一个元素地生成符号的输出序列(y1,...,ym)。在每一步,模型都是自回归的[9],在生成下一步时,将先前生成的符号作为附加输入。Transformer遵循这种整体架构,对编码器和解码器使用堆叠的自我关注层和逐点的完全连接层,分别如图1的左半部分和右半部分所示。

3.1 Encoder and Decoder Stacks

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

解码器:解码器也由N=6个相同层的堆栈组成。除了每个编码器层中的两个子层之外,解码器插入第三个子层,该第三子层对编码器堆栈的输出执行多头注意。与编码器类似,我们在每个子层周围采用剩余连接,然后进行层归一化。我们还修改了解码器堆栈中的自我关注子层,以防止位置关注后续位置。这种掩蔽,结合输出嵌入偏移一个位置的事实,确保位置i的预测只能依赖于位置小于i的已知输出。

3.2 Attention

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

3.2.1 Scaled Dot-Product Attention

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

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

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

虽然对于较小的dk值,这两种机制表现相似,但对于较大的dk值,加法注意优于点积注意[3]。我们怀疑,对于dk的大值,点积在幅度上增长很大,将softmax函数推入具有极小梯度的区域4。为了抵消这种影响,我们将点积缩放

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以三种不同的方式使用多头注意力:

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

3.3 Position-wise Feed-Forward Networks

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

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

3.4 Embeddings and Softmax

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

3.5 Positional Encoding

由于我们的模型不包含递归和卷积,为了让模型利用序列的顺序,我们必须注入一些关于令牌在序列中的相对或绝对位置的信息。为此,我们将“位置编码”添加到编码器和解码器堆栈底部的输入嵌入中。位置编码与嵌入具有相同的维度dmodel,因此两者可以相加。位置编码有多种选择,学习的和固定的[8]。

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

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

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

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

4 Why Self-Attention

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

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

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

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

一个核宽度为k < n的卷积层不能连接所有的输入和输出位置对。在相邻核的情况下,这样做需要O(n/k)个卷积层的堆栈,在扩展卷积的情况下需要O(logk(n))个卷积层的堆栈[15],从而增加网络中任意两个位置之间最长路径的长度。卷积层通常比循环层的成本高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个句子组成,并将token拆分为32000个词片词汇[31]。句子对按近似序列长度进行批处理。每个训练批包含一组句子对,其中包含大约25000个源标记和25000个目标标记。

5.2 Hardware and Schedule

我们在一台带有8个NVIDIA P100 gpu的机器上训练我们的模型。对于使用本文中描述的超参数的基本模型,每个训练步骤大约需要0.4秒。我们对基本模型进行了总共10万步或12小时的训练。对于我们的大型模型(如表3所示),步长为1.0秒。大模型训练了30万步(3.5天)。

5.3 Optimizer

我们使用Adam优化器[17],β1 = 0.9, β2 = 0.98, E= 10−9。在训练过程中,我们根据以下公式改变了学习率:

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

5.4 Regularization

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

我们将Dropout[27]应用于每个子层的输出,然后将其添加到子层输入并归一化。此外,我们将dropout应用于编码器和解码器堆栈中的嵌入和位置编码之和。对于基本模型,我们使用Pdrop = 0.1的速率。

表2: 2014年英语到德语和英语到法语新闻测试中,Transformer比以前最先进的模型获得了更好的BLEU分数,而培训成本只是它的一小部分。

标签平滑在训练期间,我们采用值Els=0.1的标签平滑[30]。这伤害了困惑,因为模型学会了更加不确定,但提高了准确性和BLEU分数。

6 Results

6.1 Machine Translation

在WMT 2014英语到德语的翻译任务中,大的Transformer模型(表2中的Transformer(big))比之前报告的最佳模型(包括集成)高出2.0 BLEU以上,建立了28.4的新的最先进的BLEU分数。该模型的配置列于表3的底部。在8个P100 GPU上进行培训需要3.5天。甚至我们的基本模型也超越了所有以前发布的模型和集合,而训练成本只是任何竞争模型的一小部分。

在WMT 2014英语到法语的翻译任务中,我们的大模型获得了41.0的BLEU分数,超过了之前发布的所有单个模型,培训成本不到之前最先进模型的1/4。为英语到法语训练的Transformer(big)模型使用的辍学率Pdrop=0.1,而不是0.3

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

6.2 Model Variations

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

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

表3:Transformer体系结构的变体。未列出的值与基本模型的值相同。newstest2013的所有指标都是基于英语到德语的翻译开发集。根据我们的字节对编码,列出的困惑是每个单词的,不应该与每个单词的困惑进行比较。

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

7 Conclusion

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

对于翻译任务,Transformer的训练速度可以比基于递归层或卷积层的架构快得多。在WMT 2014英语到德语和WMT 2014英语到法语的翻译任务中,我们实现了新的技术水平。在前一个任务中,我们的最佳模型甚至优于所有以前报道的集合。

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

一、Batchnorm

BatchNorm,一般用于CV任务,是把一个batch(N张图片)中同一通道的特征,将其标准化。可以理解为对Batch中的所有图的每一层像素进行标准化。

二、Layernorm

LayerNorm,一般用于NLP任务中,是把batch中的一个样本(一个句子)在当前层的所有特征,将其标准化。可以理解为对一个句子的整体进行标准化。

三、总结

由于二者的所应用的任务不同其特征维度也存在差异,图像对比会产生误解,在此用文字描述更利于理解。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值