ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Attention Is All You Need--Transformer论文解读

2022-01-11 13:02:49  阅读:183  来源: 互联网

标签:输出 Transformer -- Attention key 序列 query 注意力


在这里插入图片描述
The Transformer,based solely on attention mechanisms, dispensing with recurrence and convolutions entirely.
本文提出的Transformer网络完全基于注意力机制 未使用在序列转换模型中常用的循环卷积网络或卷积网络(序列转换模型就是类似于机器翻译 将一种语言的序列转换为另一种语言的序列)

在这里插入图片描述
Transformer最初是应用于机器翻译这个任务,后来Transformer模型大火,逐渐应用于图片,视频等多个领域

序列转换模型中主流的两种模型是 循环语言模型(使用RNN) 和编码器-解码器两种
作者弃用RNN网络的原因:①该类模型计算是沿着输入输出序列的符号位置进行计算的(就是一个序列 从左到右依次处理) 假设序列是一个句子,就是从左至右一个词一个词的处理。 对于第t个词会计算出一个输出ht,也称为它的隐藏状态,ht是由前一个词的隐藏状态ht-1和当前词t共同决定的,ht-1包含之前学到历史信息
②当序列较长时,由于历史信息是一步一步向后传递 ,序列较长可能导致较为靠前的历史信息在后期可能会丢失,而如果想要将早期的历史信息保存下来 会导致ht较大 从而占用较大的内存空间 开销较大

由以上介绍可知 序列的顺序性限制了并行化,当序列较长时 内存开销较大
在这里插入图片描述
本文提出的新的模型----Transformer完全基于注意力机制,相比RNN 允许并行化
在这里插入图片描述

Transformer模型架构介绍

在大多数的序列转换模型 都基于性能较好的编码器-解码器架构
在这里插入图片描述
Transformer基于编码器-解码器架构,同时使用自注意力和point-wise

encoder编码器 将符号表示的输入序列((x1,x2…,xn) 映射为连续表示的序列z(z1,…,zn) z是输入序列的一个向量的表示
如果输入序列是一个句子 那么xt就是这个句子里的第t个词;zt表示第t个词的一个向量的表示;z为编码器的输出

decoder解码器 生成输出序列(y1,…,ym)长为m,注意:m和n不一定相等
解码器用到了auto-regressive模型,即自回归,过去时刻的输出会作为当前时刻的输入

在这里插入图片描述

上图为Transformer结构 ,左边是编码器 右边是解码器
下面将对重点组成部分进行介绍

Encoder编码器

编码器由6个相同的层构成 ,每一层又由两个子层组成(①为multi-head self-attention mechanism自注意力机制 ②为simple, position-wise fully connected feed-forward network前馈网络)
下图中 即为1层

在这里插入图片描述
原文中提到 每个子层使用残差连接,之后对该层进行layer normalization
每个子层的输出为 LayerNorm(x+Sublayer(x))
Sublayer(x)是由子层自己实现的函数 可以是Multi-Head Attention 也可以是Feed Forward
x是输入 Sublayer(x)是该子层输入x之后的输出
由于残差需要输入和输出的大小一致,为了方便,将所有层的输出维度都设定为512

在这里插入图片描述

Decoder解码器

在这里插入图片描述
解码器除了有和编码器相同的两个子层,还有第三个子层,用来对编码器的输出执行多头注意力,其余基本与编码器类似,如残差连接,layer normalization等
在这里插入图片描述
由于解码器使用自回归,过去时刻的输出会作为当前时刻的输入,同时在当前时刻,当前时刻之后的输出是不能被得到的,在预测第t个时刻的输出的时候,不能得到t时刻之后时刻的输入。 而注意力机制可以看到所有时刻的输入,所以在解码器中使用了一个Masked Multi-Head Attention,来确保在t时刻,不会看到t时刻之后的输入,从而确保训练和预测是一致的

Attention注意力层

在这里插入图片描述
注意力函数 可以被描述为 将一个query和一些key-value对映射成一个output输出的函数
query,key,value,output都是向量

output是value的加权和(因此二者的维度是一样的)
每一个value的权重是由query和对应的key之间的相似度得出 相似度由compatibility function计算

compatibility function不同 会实现不同的attention
Transformer使用的attention是 Scaled Dot-Product Attention

Scaled Dot-Product Attention

query和key的长度是相同的 均为dk
value的长度是dv,output的长度也是dv

在这里插入图片描述
将query和n个key做内积,再除以根号dk,再使用softmax计算权重,得到n个非负的且和为1的权重
在这里插入图片描述
在实际计算中 不止一个query,因此将n个query表示为矩阵Q 行为一个query 列为维度dk
K是m个key,行为一个key 列为dk KT是K矩阵的转置矩阵
V是m个value ,行为一个value 列为dv
这样QKT计算出的是nm的矩阵 其中每一行是一个query对所有key的内积值 在将计算结果除以根号dk后送入softmax得到权重
最后
V得到n*dv的矩阵即为输出

在这里插入图片描述
文中提到最常见的两种注意力函数,一类是加型注意力,一类是点积注意力
加型注意力可用于处理query和key不等长的情况
本文选用是点积注意力,唯一的不同是除了根号下dk,
两种注意力其实差不多,本文选用点积注意力的原因是因为在实际计算中更快,效率高,使用矩阵乘法即可实现

在这里插入图片描述
之后作者介绍了上文中要除以根号下dk的原因
在这里插入图片描述

当dk较小时,两种注意力效果相近,而当dk较大时,加型注意力的效果优于点积注意力,其原因可能是,dk较大 向量较长时做点积,值可能会变得很大,使得值之间相对的差距就会较大,而经过softmax后,值最大的会更接近1,剩下的值会更接近于0,这种情况下计算梯度时会比较小,而transformer中用到的dk是512较大,通过除以根号下dk来抵消其作用。

在这里插入图片描述
上图是Scaled Dot-Product Attention的流程图,最开始Q和KT做矩阵乘法 然后除以根号下dk,Mask是为了在t时刻只能之前时刻的信息,不能得到之后时刻的信息
对于t时刻的qt 只能看到k1到kt-1的信息,而注意力机制是可以看到所有时刻的信息的,即会与所有时刻的k做运算,Mask的做法是将kt到kn换成一个非常大的负数,从而进入softmax计算,t到n对应的值会变成0,从而计算出的权重只有前面1到t-1起作用,在这之后的权重会成为0来达到想要的效果

Multi-Head Attention

在这里插入图片描述
将V,Q,K投影到低维,投影h次,再做h次的注意力函数,将每次函数的输出并在一起,投影回来得到最终的输出
投影W可以学习到,学习h次不同的投影方法,使得投影进去的度量空间里面可以去匹配不同模式所需要的相似函数,最后合并各次的输出,再做一次投影得到最终的输出

在这里插入图片描述

MultiHead的输出是将所有头的输出合并起来投影到Wo里
每一个头head,将Q,K,V分别通过可以学习到的Wq,Wk,Wv投影在低维,之后再做Scaled Dot-Product Attention
投影到64维度 之后8个头合并成512维
在这里插入图片描述

Applications of Attention in our Model

在这里插入图片描述
文中列举了transformer中使用注意的三种方式,其实分别对应结构图的三处attention
在这里插入图片描述
在这里插入图片描述
注意这里三个分支依次代表key,value,query!!!
在这里插入图片描述
在上图的attention中,key,value来自编码器的输出 ,而query来自解码器下一层的输出
在这里插入图片描述
而在上图中的两个attention输入,三个箭头分别是key,value,query,注意他们是同一个东西既指key,也指value,query

Position-wise Feed-Forward Networks

在这里插入图片描述
一个序列中,每一个词就是一个position
x是输入长为512的向量,经过W1投影成2048,在经过W2将2048投影成512

Embeddings and Softmax

在这里插入图片描述
embedding就是对一个词,来学习一个长为d的向量来表示它,在本文中d=512
解码器的输入和编码器的输入都需要embedding

Positional Encoding

在这里插入图片描述
作用是给网络加入时序信息,因为attention不含时序信息
在这里插入图片描述
用一个512的向量来表示一个词在序列中的位置,这个向量通过上图中的sin,cos计算得出
将计算出的位置向量与嵌入层的输入向量相加 实现了将时序信息加入数据的目的

Why Self-Attention

在这里插入图片描述
作者在这部分介绍了为什么使用自注意力,解释与循环,卷积相比,自注意力相比的优点,可见下图中的Table1
在这里插入图片描述
比较四种层在 Complexity per Layer计算复杂度(越小越好) , Sequential Operations 顺序计算量(越小越好,下一步的计算必须等前面多少步计算完成,步数越少,并行度越好),Maximum Path Length信息从一个数据点传输到另一个数据点的距离(越短越好)
在这里插入图片描述
这里解释一下Self-Attention n是序列的长度,d是向量的长度,自注意力的计算本质上其实是矩阵乘法
在这里插入图片描述
Q矩阵是nd,n个query,行为query 列为长度d,K矩阵也是nd,QKT生成的矩阵维度为nn
这里计算复杂度是nnd,生成的矩阵为nn,一共是n2个元素,根据矩阵乘法,计算一共元素需要使用d次乘法,n2个元素计算n^2d次乘法,因此Complexity per Layer计算复杂度为O(n^2*d)
Sequential Operations 顺序计算量 矩阵乘法并行度高,因此为O(1)
Maximum Path Length,attention中一个query会与所有的key做运算,输出是所有value的加权和,因此这里为O(1)

结论

在这里插入图片描述
Transformer是第一个完全使用注意力机制的序列转换模型,在encoder-decoder架构上使用multi-headed自注意来代替循环,同时对于翻译任务,Transformer与其他使用循环或卷积的模型相比训练速度都快 并且效果也非常好
此外 作者还在结论中计划将Transformer应用于其他非文本的数据上 如图片,音频,视频(这也正是如今Transformer大火的方向)

标签:输出,Transformer,--,Attention,key,序列,query,注意力
来源: https://blog.csdn.net/Ever_____/article/details/122304346

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有