CV——day85 注意力机制经典之作——Attention Is All You Need

主要的序列转换模型是基于复杂的循环或卷积神经网络,包括编码器和解码器。性能最好的模型还通过注意机制连接编码器和解码器。我们提出了一种新的简单网络架构——Transformer,它完全基于注意力机制,完全摒弃了递归和卷积。在两个机器翻译任务上的实验表明,这些模型在质量上更优,同时具有更强的并行性,需要的训练时间显著减少。

1 Introduction

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

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

2 Background

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

3 Model Architecture

image-20230318112519117

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

3.1 编码器和解码器堆栈

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

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

3.2 Attention

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

3.2.1 Scaled Dot-Product Attention

image-20230319093855859

输入由维度dk的查询(Q)、键(K)和维度(V)dv的值组成。我们计算查询与所有键的点积,每个键除以√dk,并应用softmax函数来获得值的权重。

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

3.2.2 Multi-Head Attention

image-20230319093911551

我们发现,将查询、键和值分别用不同的、学习过的线性投影h次地线性投影到dk、dk和dv维上,比用模型维键、值和查询执行单一的注意函数更为有效。然后,在查询、键和值的每一个投影版本上,我们并行执行注意力函数,产生dv维的输出值。这些被连接起来并再次投影,最终得到图2所示的值。

多头注意使得模型能够联合注意不同位置上不同表示子空间的信息。如果只集中注意力,平均就会抑制这一点。

image-20230319094511477

在这项工作中,我们采用了h = 8个平行注意层或头。对于每一个,我们使用dk = dv = dmodel/h = 64。由于每个头的维度减小了,总的计算成本与全维度的单头注意相似。

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

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

  • 在“编码器-解码器注意”层中,查询来自先前的解码器层,而记忆键和值来自编码器的输出。这使得解码器中的每个位置都能处理输入序列中的所有位置。这模仿了序列到序列模型中典型的编码器-解码器注意机制
  • 编码器包含自注意层。在自注意层中,所有的键、值和查询都来自同一个地方,在本例中,即编码器中前一层的输出。所述编码器中的每个位置可以处理所述编码器的前一层中的所有位置。
  • 类似地,解码器中的自注意层允许解码器中的每个位置处理解码器中直到并包括该位置的所有位置。我们需要防止信息在解码器中向左流动,以保持自回归特性。我们通过屏蔽(设置为−∞)softmax输入中与非法连接对应的所有值来实现缩放点乘注意。参见图2。

3.5 位置编码

由于我们的模型不包含递归和卷积,为了让模型利用序列的顺序,我们必须注入一些关于相对或绝对位置的信息,在这项工作中,我们使用不同频率的正弦和余弦函数:image-20230319094916025

4 Why Self-Attention

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

image-20230319095009171

如表1所示,自注意层用固定数量的顺序执行操作连接所有位置,而循环层需要O(n)个顺序操作。在计算复杂度方面,当序列长度n小于表示维度d时,自我注意层比循环层更快,这是最常见的情况。

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

7 Conclusion

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

对于翻译任务,Transformer的训练速度比基于循环或卷积层的体系结构快得多。在WMT 2014英语到德语和WMT 2014英语到法语的翻译任务中,我们都达到了一个新的水平。在前一个任务中,我们的最佳模型甚至优于所有之前报告的集合。

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

我们用来训练和评估模型的代码可以在github中找到。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值