经典论文之(三)——Transformer

绪论

《Attention Is All You Need》——注意力就是你需要做的。这篇文章是大名鼎鼎的Transformer模型,是前几年特别火的一个模型,开创了继MLP、CNN和RNN之后的第四大类模型。

优势序列转导模型基于复杂的递归或卷积神经网络,包括编码器和解码器。性能最好的模型还通过注意力机制连接编码器和解码器。但在这篇文章中,提出了一个新的简单网络架构,即Transformer,它完全基于注意力机制,完全省去了递归和卷积。这是第一个完全基于注意力的序列转导模型,用多头自注意力取代了编码器-解码器架构中最常用的递归层

在两个机器翻译任务上的实验表明,这些模型在质量上优越,同时更具并行性,并且需要更少的训练时间。模型在WMT 2014英语到德语的翻译任务中实现了28.4 BLEU,比现有的最佳结果(包括合集)提高了2 BLEU以上。在WMT 2014英法翻译任务中,模型在八个GPU上训练3.5天后,建立了一个新的单一模型最先进的BLEU得分41.8。

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

背景

循环神经网络,特别是LSTM和GRN已经建立起序列建模和转导问题,并且一直努力在不断突破递归语言模型和编码器-解码器架构的界限。但在其中出现了一些问题,如果它们要生成一个隐藏状态ht,作为先前隐藏状态ht-1就需要作为输入,也就是说这种固有的顺序无法将训练进行并行化处理,并且也对内存有了很大的考验,内存约束限制了示例之间的批处理。

注意力机制已成为各种任务中令人信服的序列建模和转导模型的组成部分,允许对依赖性进行建模,而不考虑它们在输入或输出序列中的距离。然而,在除少数情况外的所有情况下,这种注意力机制都与递归网络结合使用。

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

模型架构

在大部分的竞争性神经序列转导模型中都具有encoder-decoder结构。在本片文章中,编码器将符号表示到输入序列**(x1,…,xn)中,然后映射到序列z=(z1,…,zn)中,其中每一个z都是一个向量,对应每一个x。然后解码器一次一个元素生成序号地输出序列(y1,…,ym)。在每一步中,模型都是自回归**的,也就是说,输出会一点一点输出,先前生成的符号会作为下一个的输入提出。
在这里插入图片描述

Transformer遵循这一总体架构,使用堆叠的自关注和逐点、完全连接的编码器和解码器层,分别如图1的左半部分和右半部分所示。

编码器

编码器:编码器由N=6个相同层的堆叠组成。每一层都有两个子层。第一种是多头自我注意机制,第二种是简单的位置全连接前馈网络,就是MLP 。我们在两个子层的每一个周围采用残差连接[11],随后是层标准化[1]。也就是说,每个子层的输出是LayerNorm(x+subayer(X)),其中subayer(X)是子层本身实现的功能。为了促进这些残差连接,模型中的所有子层以及嵌入层产生维度dModel=512的输出。
1、 Inputs:进行输入,比如一个中文句子
2、 Input Embedding:嵌入层,把词表示为向量
3、 Positional Encoding:
4、 N*:意味着又N个block
5、 Multi-Head Attention:多重自注意力
6、 Add & Norm:残差连接和layerNorm处理
7、 Feed Forward:向前反馈,基本相当于MLP

解码器

解码器:解码器也由N=6个相同层的堆栈组成。除了每个编码层中的两个子层之外,解码器还插入第三个子层,该子层对编码器堆栈的输出执行多头关注。与编码器类似,我们在每个子层周围使用残差连接,然后进行层标准化。我们还修改了解码器堆栈中的自我关注子层,以防止位置关注后续位置。这种掩蔽与输出嵌入偏移一个位置的事实相结合,确保了对位置i的预测只能依赖于小于i的位置处的已知输出。
1、 output:之前的输入作为输出
2、 Output Embedding:嵌入层
3、 Positional Encoding
4、 N*:意味着N个block
5、 Masked Muti-Head Attention:隐藏的多重注意力
6、 Add &Norm:残差链接
7、 Feed Forward:向前反馈
8、 Linear:线性的
9、 Softmax

注意力层

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

Scaled Dot-Product Attention

输入包括维度dk的查询和键以及维度dv的值。我们用所有键计算查询的点积,将每个点积除以√dk,并应用softmax函数来获得值的权重。
在这里插入图片描述

在实践中,我们同时计算一组查询的注意力函数,并将其打包成矩阵Q。键和值也打包成矩阵K和V。我们将输出矩阵计算为:
在这里插入图片描述
虽然对于较小的dk值,这两种机制的表现相似,但在不缩放较大的dk[3]值的情况下,加性注意力优于点积注意力。我们怀疑,对于较大的dk值,点积的大小会变大,从而将softmax函数推向具有极小梯度4的区域。为了抵消这种影响,我们将点积缩放1√dk。

Multi-Head Attention

我们发现,与使用dmodel维度的键、值和查询执行单个注意力函数不同,将查询、键和值分别线性投影到dk、dk和dv维度的不同学习线性投影h次是有益的。然后,在这些查询、键和值的投影版本中的每一个上,我们并行执行注意力函数。

多头注意力允许模型联合关注来自不同位置的不同表示子空间的信息。对于一个注意力集中的头部,平均值会抑制这种情况。
在这里插入图片描述

Position-wise Feed-Forward Networks–前馈神经网络

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

在这里插入图片描述

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

Embeddings and Softmax

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

Positional Encoding

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

参考文献和代码

源论文:https://arxiv.org/abs/1706.03762

源代码:https://github.com/tensorflow/tensor2tensor.

  • 23
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值