注意力机制(论文阅读):Attention Is All You Need

研究问题

主要序列转录模型通常采用复杂的循环或卷积神经网络,包含编码器和解码器,并通过注意机制连接两者。我们提出了一个全新、简化的网络架构,名为transformer,它完全基于注意力机制,摒弃了传统的递归和卷积方法。实验表明,在两个机器翻译任务中,transformer模型在性能上更出色,具有更好的并行性和更短的训练时间。

一.Introduction

第一段:在时序模型中,主要方法有循环神经网络(RNN,Recurrent neural network)、长短期记忆模型(LSTM, long short-term memory )和门控循环神经网络(GRU,gated recurrent neural network),其中主流模型有循环语言模型和编码器-解码器架构。
第二段:介绍了RNN的特点缺点,在RNN中,给定一个序列,计算是从左往右一步一步进行。假设序列是一个句子,他就是一个一个地看,对第t个词,会有一个ht的输出(也叫做隐藏状态),ht由h(t-1)和第t个词来决定,所以每次会将前面的输出(放在隐藏状态中)结合当前的输出作为总的输出。这也是问题所在,由于对序列一步一步进行,所以不能并行,计算性能比较差,第二个问题就是由于前面的时序信息一直放下隐藏状态中,当时序过长时,就会导致前面的信息被弄丢,如果不想被丢掉,就需要足够大的ht来存前面所有时序信息,内存开销太大。尽管做了很多改进,但并未从根本上解决问题。
第三段:Attention在RNN上的应用,以及应用在如何把编码器中的东西有效的传送给解码器。
第四段:新提出transformer,不再使用循环神经层,而是纯使用注意力机制,拥有很高的并行度。

二.Background

第一段:介绍如何使用CNN替换RNN,来减少时序的计算。但是由于使用CNN对比较长的序列建模比较困难(因为卷积每次在一个比较小的窗口,当像素相隔比较远,就需要很多层卷积把其融合起来),而transformer中的注意力机制每次可以看到所有像素,一层就可以看全整个序列,解决这个问题。但卷积存在有多输出通道的优点,每个输出通道可以去识别不同的模式,所以提出Multi-Head Attention(多头注意力机制)可以模拟CNN来实现多输出通道的效果。
第二段:自注意力机制,通过对输入序列中的每个位置进行加权,以计算输入序列的表示,从而增强模型对输入序列中不同位置的依赖性。
第三段:End-to-end memory networks端到端记忆网络基于循环注意机制,而不是顺序排列的递归,并且在简单语言问答和语言建模任务中表现良好。
第四段:Transformer是第一个只依赖于自注意力机制来做encoder到decoder的模型

三.Model Architecture

竞争性神经序列转导模型具有编码器-译码器的架构。Transformer使用堆叠的自关注层和点方向层,完全连接编码器和解码器层。


解释图1:左侧为编码器,右侧为解码器。左侧最底层input就是输入(当翻译句子时,Input就是中文的句子),右侧最下的outputs作为整个解码器的输入,在解码器做预测时是没有输入的,此处标记的outputs可以理解为过去时刻的输出作为当前时刻的输入(shifted right意为一个一个往后移)。左侧编码器:首先进入一个Input embedding即进入一个嵌入层(相当于输入一个词当前处理为一个向量),后进入一个positional Encoding,再往上就是编码器的核心架构(transformer的块block),左侧的N表示有N个block堆在一起。在Transformer block中首先是Multi-Head Attention,后就是前馈神经网络Feed Forward,其中黄色Add&Norm表示残差连接。其中编码器的输出作为解码器的输入,右侧解码器中相比编码器在开头多出一个Masked Multi-Head Attention,这三部分作为解码器的块,重复N次,该结果的输出再进入一个线性层和SoftMax作为整个解码器的输出。

3.1 Encoder and Decoder Stacks(解码器和译码器堆栈)

本实验编码器采用N=6,后表示为有6个相同的层堆叠。每个层中有两个子层, 分别为multi-head self-attention mechanism和simple, position wise fully connected feed-forward network(本质为MLP),对于每个子层都是用残差连接,最后再使用layer normalization。每一个子层公式为LayerNorm(x + Sublayer(x)),Sublayer(x)进入子层,+x表示残差连接,最后进入LayerNorm。由于使用到残差连接,尽可能避免使用投影来解决输出输出不一致问题,简单将输入输出维度都调至512,这一简单操作方便后续使用,只含有两个参数,分别为n和统一的输入输出维度。
解码器同样n=6,与编码器不同的是使用第三个子层(多头注意力机制)。解码器还使用了自回归(原来时刻的输出作为当前时刻的输入),意味着预测时不能看到之后时刻的输出,由于在注意力机制中一次可以看到完整的输入,为避免此情况的发生(预测第t个时刻的输出时看到t时刻以后的输出),所以使用带掩码的注意力机制。

3.2 Attention(注意力层)

注意力函数中包含query、key、value和output,它们都是向量,其中output是value的加权和,其中权值算法是:对于n个对应的key和value,给定任一个query,判断每个key与query的相似度,越相似,每个key对应的value加权时权重就更大进而得到output。

3.2.1 Scaled Dot-Product Attention(缩放的点积注意力)

query和key的维度都是dk,value的维度是dv,所以output的维度也是dv。计算步骤:对query和key做点积(余弦),作为相似度,再除√dk,最后再使用SoftMax(非负和为1)来得到权重,再将权重作用到value上就可以得到输出。实际运算中,Q表示quary的矩阵(n行,dk列),K表示Key的矩阵(m行dk列),做点积得到n*m的矩阵,该矩阵中每一行就是query对每个key的相似值。在对每行进行Softmax操作,最后*V(V是value的矩阵,m行dv列),最终结果是一个n*dv的矩阵。


存在两种比较常见的注意力机制,一种叫做加性的注意力机制,可以处理query和value不等长的情况;另一种是点积注意力机制,与本文中使用的类似,只是不需要除√dk,该种方法实现相对简单而且比较高效,只需要两次矩阵乘法就能实现。
解释并没有使用最简单的上述提到的第二种注意力机制,而是选择除√dk:当dk不特别大时,除或者不除结果类似,当dk比较大时,也就是向量比较长时,点积的结果可能就比较大,当值比较大就会导致差距会很大,导致最大的值做出来的softmax就会更接近1,其余就会更偏向0,此时梯度比较小会跑不动,但是前面选择dk=512,所以选择除。
由于预测时不能看到之后时刻的输出,由于在注意力机制中一次可以看到完整的输入,为避免此情况的发生(预测第t个时刻的输出时看到t时刻以后的输出),mask操作解决当前问题。具体方法就是mask将qt或qt+1以及以后的所有值都变成一个非常大的负数,而这样的数进入softmax后就会变为0,保证qt前值有效果。

3.2.2 Multi-Head Attention

将query 、key 和value(进入Linear层)投影到低维的空间,投影h次再做h次注意力函数,再将每个函数的输出并在一起,再做一次线性投影回来做最终的输出。


没有选择3.2.1中简单方法的原因:为了识别更复杂的模式,需要学习一些参数,在投影到低维的过程是有一个h可以学到,投影h次,尽可能学到h次不同的投影方式,使得在投影进去的度量空间中能够匹配不同的模式所需要的相似函数,最后再投影成输出,从而模拟CNN中多通道的方法。

3.2.3 Applications of Attention in our Model

讲述在transformer中如何使用注意力机制,包含三种不同的使用方法。
(1)编码器中的注意力层Multi-Head Attention:为自注意力机制(其中有三个输入,分别为key、value和query,是由输入复制而来,所以为自注意力机制)。假设有n个词,则会变成n个d维的向量,最终输出也是d维,因为在单头中输出就是Value的加权和.
(2)解码器中第一个注意力层Masked Multi-Head Attention:同样为自注意力机制,相比较编码器中的注意力层多使用了Masked。
(3)解码器中第二个注意力层Multi-Head Attention:并非自注意力机制,它的key和value都来自于编码器的输出,而query来自于解码器中上一个attention的输出(n个长为d的向量),作用就是将编码器中需要的东西拎出来。

3.3 Position-wise Feed-Forward Networks

作用就是相当于一个MLP,但是是基于position的MLP,也就是对每一个词使用一次MLP。公式为FFN(x) = max(0, xW1 + b1)W2 + b2, 其中xW1 + b1表示一个线性层,max(0, xW1 + b1)表示ReLU激活层,然后再有一个线性层。相当于一个单隐藏层的MLP,输入层为512,中间隐藏层将维度扩到2048,最后在投影会512。

3.4 Embeddings and Softmax

Embedding就是输入一个词,通过学习,使用一个长为d的向量来表示它。在本文中d=512,编码器和解码器的输入都有Embedding,在softMax前面也需要Embedding,这三个层的权重一样使训练更简单。将权重乘√d的原因:在学Embedding时,会出现将向量的L2long学的比较小的情况,解决该问题.

3.5 Positional Encoding

由于attention没有时序信息,(其中rnn是将上一时刻的输出作为该时刻的输入,所以本身就具有时序信息,)该做法是在输入中加入时序信息。

四.Why Self-Attention(使用自注意力机制的原因)

解释表1:比较了4中不同的层,分别为自注意力层,卷积层,循环层和受限制的自注意力层。性能比较:第一个是计算复杂度,第二个是顺序的计算(越少越好,在计算一个Layer时,需要等前面多少计算才能进行下一步的计算,越不需要等并行度就越高),最后一个是信息从一个数据点走到另一个数据点要走多远(越短越好)。

创新点

1.原来主流的序列转导模型都是基于CNN或RNN,包括解码器和译码器,其中使用注意力机制来连接解码器和译码器的模型达到了较好的效果。原来方法存在难以并行,内存开销大并且时序中原来信息容易丢失的缺点,本文中提出完全基于注意力机制的方法,并行性高且训练的时间更少。
2.提出使用CNN来代替RNN,既可以减少时序计算,也可以输出多通道。但是卷积的视野有限,当像素相距较远时,需要多层卷积将其融合,所以提出自注意力和端到端记忆网络,前者是单个序列的不同位置关联起来以计算序列表示的注意力机制。
3.BN取的是不同样本的同一个特征,而LN取的是同一个样本的不同特征。
4.在处理时序数据时,如果一个序列被打乱则其语义肯定发生变化,但注意力机制不会处理该问题,使用Positional Encoding在输入中加入时序信息。
5.从三个方面评价自注意力:每层的总计算复杂度、并行性的计算量和长距离依赖关系之间的路径长度。

知识点补充

1.序列转录模型就是给进一个序列,输出一个序列,其中机器翻译就是典型例子。
2.注意力机制:是一种资源分配机制。模型在处理输入数据时,为了实现特定的任务,需要从输入数据中关注一些重要的信息,而忽略一些不重要的信息。因此,注意力机制可以通过对不同的输入数据进行加权处理,以调整模型对每个输入数据的关注程度,从而提高模型的性能。注意力函数中包含query、key、value和output,它们都是向量,其中output是value的加权和,其中权值算法是:对于n个对应的key和value,给定任一个query,判断每个key与query的相似度,越相似,每个key对应的value加权时权重就更大进而得到output。
3.competitive neural sequence transduction models(竞争性神经序列转导模型):在竞争学习中,多个神经元会争夺对某个输入信号的控制权。在神经序列转导模型中,这种竞争过程被用来选择性地激活与输入序列最匹配的神经元。由于它基于神经元之间的竞争,它能够学习并且记住大量的序列和模式,且能够以并行和分布式的方式来处理信息,从而在处理数据上具有高效性。
4.auto-regressive(自回归):以翻译句子为例,译码器可能一次看一个句子,但解码器一定是一个一个的生成,同时过去时刻的输出会作为当前时刻的输入。
5.对比batchnorm和layernorm:以二维数据为例,横向表示每个样本的所有feature,纵向表示所有的样本,batchnorm是选择每一列也就是所有样本的同一个feature使其均值为0方差为1(具体操作即使将其减去均值,除以方差),而layernorm是将同一个样本的所有feature使其均值为0方差为1。但是通常使用数据都是三维数据,三个维度分别为batch、feature和sequence,相当于每次操作一个面,即把面拉成一维数据进行操作。Layernorm用的较多原因:在持续的序列模型中,长度通常变化,而其使用有效feature进行操作。

核心结论

1.由于RNN并行性差且占据内存空间大,使用注意力层代替
2.多头注意力:一方面卷积窗口小,而注意力层一层可看全部像素;另一方面卷积层可以学习多输出通道信息,因此引入多头注意力。利用q、k、v投影到低维空间,投影h次再做h次注意力,从而学习更复杂的模式。
3.自注意力:query、key、value均为复制而来。对输入序列不同位置进行加权,从而增强对不同位置的依赖。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值