Attention Is All You Need论文总结(Transformer)

1 摘要

主流的序列转换模型都是基于复杂的循环神经网络或卷积神经网络,且都包含一个encoder和一个decoder。表现最好的模型还通过Attention机制把Encoder和Decoder联接起来。我们提出了一个新的、简单的网络架构,Transformer. 它只基于单独的attention机制,完全避免使用循环和卷积。
深度学习最大优点:端到端。因此,从原始特征经特征抽取器,得到有用特征的过程十分重要。
NLP常见特征抽取器:RNN、CNN、Transformer(Encoder部分)

2 简介

RNN、LSTM、GRU等递归语言模型。在计算时,将位置与步骤对齐,存在的并行性问题。

深刻理解RNN处理序列存在问题

FCN(全连接)的假设前提为序列元素之间相互独立,失去了语义之间的相关性。并且全连接神经网络含有大量的权重和偏置参数。若序列更长或者网络层数更深,那么参数的数量十分庞大,从下图理解。
在这里插入图片描述
而RNN很好的解决这两个问题,学习卷积层中权值共享,每个字词都共享一个权值,极大减少了权重和偏置的参数量,如下图所示。但也正这种结构也导致RNN的并行性不高。
在这里插入图片描述
Transformer避免使用循环的模型结构,完全依赖于注意机制来绘制输入和输出之间的全局依赖关系。Transformer允许更显著的并行化。

3 背景

将CNN引入Seq2Seq。一方面CNN可以并行计算,效率变高。另一方面CNN可以通过层级结构捕获句子中词语之间的远距离依赖关系,也就可以处理复杂句子信息。
在这里插入图片描述

深刻理解CNN处理序列问题

首先,明确CNN捕获到的是什么特征?CNN的卷积层覆盖的滑动窗口,如大小为k*d(d是词嵌入维度)的滑动窗口穿过句子的每一个单词,实际捕捉到的是k-gram片段信息,k的大小决定其能捕获多远距离的特征。
在这里插入图片描述
如果如果滑动窗口k最大为2,而如果有个远距离特征距离是5,那么无论上多少个卷积核,都无法覆盖到长度为5的距离的输入,所以它是无法捕获长距离特征的。
那么怎样才能捕获到长距离的特征呢?有两种典型的改进方法:一种是假设我们仍然用单个卷积层,滑动窗口大小k假设为3,就是只接收三个输入单词,但是我们想捕获距离为5的特征,怎么做才行?显然,如果卷积核窗口仍然覆盖连续区域,这肯定是完不成任务的。可以跳着覆盖,这就是Dilated 卷积的基本思想,确实也是一种解决方法。第二种方法是把深度做起来。第一层卷积层,假设滑动窗口大小k是3,如果再往上叠一层卷积层,假设滑动窗口大小也是3,但是第二层窗口覆盖的是第一层窗口的输出特征,所以它其实能覆盖输入的距离达到了5。如果继续往上叠加卷积层,可以继续增大卷积核覆盖输入的长度。这就理解了CNN会随序列长度增加而增加计算序列计算次数了吧。
1.在Transformer中,这种情况被减少到了常数次操作。怎么理解呢,TF不使用循环或卷积操作,每一个词嵌入都包含一个位置编码来表示序列顺序,所以即使是远距离依赖,常数次即可完成。
2.代价是由于平均注意力加权位置信息降低了有效分辨率,用多头注意力抵消这种影响?后面解释

4 模型结果

(1) Encoder-Decoder框架

Encoder:符号表示的输入序列 映射成一个连续表示的序列 。
Decoder:给定z,解码器以一次生成一个字符的方式生成输出序列 (y1,…,ym) 。在每一步,模型都是自回归的,在生成下一个字符时,将先前生成的符号作为附加输入。
具体Encoder和Decoder的6个子层什么的论文里看吧,下面介绍一下理解的整个过程。
类残差层的作用:差点忘了,残差层就是将前面序列的信息保留到后面,这里做一个加法。
下图绘制有一些不准确,但以下面这个图来理解整个过程比较清晰:
在这里插入图片描述

(2) Attention Mechanism(注意力机制)

不多说了,详细计算看第5大点。

(2.1)缩放的点积注意力机制

在这里插入图片描述
在Transformer的encoder中,输入只有一个,即输入向量和位置向量之和input_sum。Q,K,V就是input_sum通过三个linear层映射而来。由于linear的输入和输出维度均为d,故Q,K,V的大小与input_sum大小一致。
(1) MatMul:实际是计算Q*KT结果scores是一个L*L的矩阵,L为句子长度。其中scores中[i,j]位置表示Q中第i行与KT中第j列的相似度。这里可以理解为重要度,在机器翻译时,翻译第i个字的时候,要考虑原文中哪个位置的字对现在要翻译的这个位置的字的影响最大。
在这里插入图片描述
(2)Scale:对scores进行类似正则化的操作,即缩放。
(3)Mask:这里使用一个很小的值,对指定值进行覆盖填充。降低padding位置的影响以及某些位置的影响。
在这里插入图片描述
(4)SoftMax:对scores中的数据按行做softmax。
在这里插入图片描述
(5)MatMul:使用softmax得到的概率矩阵与V矩阵做矩阵乘法。
在这里插入图片描述
整体Attention过程如下公式所示:
在这里插入图片描述

(2.2)多头注意力机制

在这里插入图片描述
使用不同的学习到的多组线性映射query,key,value并行执行attention函数。即通过“多头”,每个头维护一个单独Q/K/V权重矩阵,得到多个不同的Z矩阵。
在这里插入图片描述
前馈层只需要一个矩阵(每个单词的向量)。故将多个矩阵Concatenate为一个矩阵。如何实现呢?将所有矩阵连接起来,在乘以一个额外的权重矩阵。最终,得到一个矩阵Z。
在这里插入图片描述
在这里插入图片描述
Multi-head attention允许模型把不同位置子序列的表示都整合到一个信息中。如果只有一个attention head,它的平均值会削弱这个信息。如何理解?
自注意力机制的缺陷:模型在对当前位置编码时,会过度的将注意力集中于自身位置,因此提出多头注意力机制。
在实践中,当给定相同的查询、键和值的集合时,我们希望模型可以基于相同的注意力机制学习到不同的行为,然后将不同的行为作为知识组合起来,例如捕获序列内各种范围的依赖关系(例如,短距离依赖和长距离依赖)。因此,允许注意力机制组合使用查询、键和值的不同的子空间表示可能是有益的。为此,与使用单独的一个注意力池化不同,我们可以独立学习得到h组不同的线性投影(linear projections)来变换查询、键和值。然后,这h组变换后的查询、键和值将并行地进行注意力池化。最后,将这h个注意力池化的输出拼接在一起,并且通过另一个可以学习的线性投影进行变换,以产生最终输出。这种设计被称为多头注意力,其中h个注意力池化输出中的每一个输出都被称作一个头。下图展示了使用全连接层来实现可以学习的线性变换的多头注意力。
在这里插入图片描述

(3)基于位置的前馈神经网络

除了encoder子层外,encoder和decoder中每层还包含一个全连接的前馈神经网络。该网络分别单独应用于每一个位置。尽管线性变换在不同位置上是相同的,但它们在层与层之间使用不同的参数。 它的另一种描述方式是两个内核大小为1的卷积。 输入和输出的维度为dmodel=512 ,内部层的维度为dff=2048 。

(4)词嵌入和softmax

这里与其他的序列转换模型类似,使用学习到的嵌入词向量将输入字符和输出字符转换为维度为dmodel的向量。同时,使用普通的线性变换和softmax函数将decoder输出转换为预测的下一个字符的概率。在模型中,两个embedding层之间和pre-softmax线性变换共享权重矩阵。

(5)位置编码

由于模型不包含循环或卷积(一维卷积),为使模型利用序列的顺序信息,必须加入序列中关于字符相对或者绝对位置的一些信息。故,在encoder和decoder堆栈底部的输入嵌入中添加“位置编码”。位置编码和嵌入的维度dmodel相同,所以两者可以相加。有多种位置编码选择。如通过学习得到的位置编码和固定的位置编码。
这里使用的是正弦波的方式,但是会丢失位置信息。后面提出的bert和t5军事采用基于学习的positional enbedding。

5 选择自注意力机制

计算自注意力,第一步是从输入向量创建三个向量Q、K、V。对每个单词,创建一个查询向量Q,一个键向量K和一个值向量V,这些向量是通过将嵌入乘以在训练过程中训练的三个矩阵来创建的。
在这里插入图片描述
如上图,将x_1乘以权重矩阵W^Q产生q_1,即与该词关联的查询向量。按照此方法,最终将为输入句子的每个单词创建一个Q,K,V向量。
第二步,计算一个分数score。例如下图,计算第一个词ThinkIng的注意力,需要计算句子中每个词的评分。对于Thinking这个词,句子中每一个位置的词的分数计算如下,分别计算thinking这个词的查询向量与每一个词的键向量的点积即得到分数。
第三步,对每一分数除以8。
第四步,用softmax函数进行归一化,每个分数均归一化为正数且总和为1。显然,Thinking这个位置具有最高的分数。
第五步,将每个词的值向量乘以softmax分数并将它们相加。既可以保持想要关注的单词不变,又可以淹没不想管的单词(如对这个单词乘以0.001)。这样就会产生自注意力层的输出(对于第一个词)。
在这里插入图片描述
句子级整体计算过程如下:
在这里插入图片描述
步骤二到五合并成一个公式:
在这里插入图片描述
其他
Decoder的输入输出到底是什么?
Shifted Right到底什么意思?
Decoder中还需要seq mask?
参考https://blog.csdn.net/qq_22795223/article/details/105676186

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值