【15k字】长文理解Transformer: Attention Is All You Need(含python代码)

作者:猛码Memmat

在这里插入图片描述

Abstract

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

0 可视化讲解Transformer

https://baoyu.io/pages/ft/generative-ai

1 Introduction

在这里插入图片描述
在这里插入图片描述
neural networks, long short-term memory [13] and gated recurrent [7] neural networks

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

2 Background

在这里插入图片描述
grows in the distance between positions, linearly for ConvS2S and logarithmically for ByteNet.

In the Transformer this is reduced to a constant number of operations
在Transformer中,这被减少为一个常数数量的操作,尽管代价是由于平均注意力加权位置而降低了有效分辨率,我们用Multi-Head Attention抵消了这一影响,如3.2节所述。

Self-attention, sometimes called intra-attention

the Transformer is the first transduction model relying entirely on self-attention to compute representations of its input and output without using sequencealigned RNNs or convolution.
然而,据我们所知,Transformer是第一个完全依靠自我注意来计算输入和输出表示的转导模型,而不使用序列对齐的rnn或卷积。在接下来的章节中,我们将描述Transformer,激发自我关注,并讨论它相对于[17,18]和[9]等模型的优势。

3 Model Architecture

在这里插入图片描述
At each step the model is auto-regressive [10], consuming the previously generated symbols as additional input when generating the next.
在每一步中,模型都是自动回归[10],在生成下一步时,将先前生成的符号作为额外的输入。
The Transformer follows this overall architecture using stacked self-attention and point-wise, fully connected layers for both the encoder and decoder, shown in the left and right halves of Figure 1, respectively.
Transformer遵循这种总体架构,为编码器和解码器使用了堆叠的自关注层和按点完全连接层,分别如图1的左右两部分所示。
在这里插入图片描述

3.1 Encoder and Decoder Stacks

在这里插入图片描述
编码器由N = 6个相同层的堆栈组成。每一层有两个子层。第一个是一个多头自注意机制,第二个是一个简单的、按位置完全连接的前馈网络。我们在两个子层的每一层周围都使用了一个残余连接[11],然后是层规范化[1]。也就是说,每个子层的输出是LayerNorm(x + Sublayer(x)),其中Sublayer(x)是子层本身实现的函数。为了方便这些残余连接,模型中的所有子层以及嵌入层都会产生维度为 d m o d e l = 512 d_{model} = 512 dmodel=512的输出。

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

3.2 Attention

在这里插入图片描述
mapping a query and a set of key-value pairs to an output, where the query, keys, values, and output are all vectors.
注意力函数可以描述为将查询和一组键-值对映射到输出,其中查询、键、值和输出都是向量。输出是按值的加权和计算的,其中分配给每个值的权重是通过查询与相应键的兼容性函数计算的。
在这里插入图片描述

3.2.1 Scaled Dot-Product Attention

在这里插入图片描述
我们称我们的特别注意为“缩放点积注意”(图2)。输入由维度dk的查询和键以及维度dv的值组成。我们计算查询的所有键的点积,每个键除以√dk,并应用softmax函数来获得值的权重。
在实践中,我们同时计算一组查询上的注意力函数,它们被打包成一个矩阵q。键和值也被打包成矩阵K和V。我们计算输出的矩阵为:

最常用的两个注意函数是加性注意[2]和点积注意(乘性注意)。点积注意与我们的算法相同,除了比例因子为1√dk。加性注意算法采用带有单一隐藏层的前馈网络计算兼容性函数。虽然两者在理论复杂性上相似,但点积注意在实践中要更快、更节省空间,因为它可以使用高度优化的矩阵乘法代码来实现。
当dk值较小时,两种机制表现相似,当dk[3]值较大时,加性注意在没有缩放的情况下优于点积注意。我们怀疑对于较大的dk值,点积的大小会变大,将softmax函数推到具有极小梯度4的区域。为了抵消这种影响,我们将点积乘以1√dk。

3.2.2 Multi-Head Attention

在这里插入图片描述
与使用dmodel维度的键、值和查询执行单一的注意力函数不同,我们发现将查询、键和值线性投影h次分别投影到dk、dk和dv维度是有益的。在这些查询、键和值的每个投影版本上,我们然后并行执行注意力函数,产生dv维输出值。这些值被连接起来并再次投影,得到最终值,如图2所示。

多头注意使模型能够共同关注来自不同位置的不同表示子空间的信息。如果只有一个注意力头,平均会抑制这一点。

投影是参数矩阵

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

3.2.3 Applications of Attention in our Model

在这里插入图片描述

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

3.3 Position-wise Feed-Forward Networks

在这里插入图片描述
除了注意力子层,编码器和解码器中的每一层都包含一个完全连接的前馈网络,该网络分别且相同地应用于每个位置。这包括两个线性转换,中间有一个ReLU激活。

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猛码Memmat

欢迎支持,随缘打赏 ~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值