Transformer、多头自注意力机制论文笔记:Attention is all you need

论文原文

论文中心思想:提出了一种只使用注意力机制的模型,模型中没有结合任何RNN或CNN,通过encoder--decoder的模型实现出了一种强力有效的模型。

引言与背景

在注意力机制诞生后,诞生了多种改进的模型,但是这些模型一般都是把注意力机制与循环神经网络结合(包括一些改良的,如LSTM),但是这些模型有个弊端,就是并行计算能力不强,为解决这一些问题,论文提出了一种仅基于注意力机制的模型,具有强大的并行计算性以及效果很好。

模型结构

总的模型结构为encoder-decoder,在编码器中,把符号表示的输入序列(x_1,x_2,...,x_n)映射为连续的表示z = (z_1,...,z_n),得到了z之后,解码器生成符号输出序列(y_1,...,y_n),一次一个地生成。

模型结构图:

编码解码器:

Encoder:编码器由6层一样的层组成,每一层有两个子层。第一层是一个多头自注意力机制,另一层是一个简单的全连接前馈网络。在标准化层之后,这两层各自都采用一个残差连接,每一个子层的输出是LayerNorm(x+Sulayer(x)),其中Sublayer(x)是子层本身实现的函数。为了优化这些残差裂解,模型中的所有子层以及嵌入层都生成维度512的输出。

Decoder:解码器也是6层一样的层组成的,出来2个在每个编码器中的子层,第三个是在编码器输出后面的一个多头自注意力层。与编码器类似,每一个子层标准化后都用一个残差连接包围。还有一个为了保证序列信息的掩盖层。

注意力

一个注意力函数其实就是把一个query,一个key-value的集合(关于query,key,value可以看这篇论文:Key-Value  Memory Networks for Directly Reading Documents)映射成一个输出,其中query,key,value,output都是向量。输出其实是values的加权求和,其中分配给每个值的权重通过一个相关函数计算query与当前key的相关程度。

缩放点乘积注意力

输入包括:querie和key都是d_k维,value为d_v维,

计算query和所有key的点积后,除以\sqrt{d_k}(为了防止梯度消失),以及用一个softmax函数得到全美一个value的权重。

事实上,计算的时候通过矩阵实现并行计算。

Attention(Q,K,V)=softmax(\frac{QK^T}{\sqrt{d_k}})V

使用点成的原因是因为可以通过一些高效的优化手法提升速度。

多头注意力

其实就是把多个自注意力连起来

MultiHead(Q,K,V)=Concat(head_1,...,head_h)W^o

head_i=Attention(QW_i^Q,KW_i^K,VW_i^V)

同时,通过减低维度来减少总就算消耗。

全连接前馈网络

Transformer中所有全连接网络都是一样的,由两个线性转换和中间一个RELU函数组成 。

FFN(x)=max(0,xW_1+b)W_2+b_2

位置编码

因为模型没有使用卷积或者循环结构,为了使用到序列中的顺序信息,必须增加相对或绝对位置信息。为此论文加入了位置编码在编码器和解码器的下方。

PE_{(pos,2i)}=sin(pos/10000^{2i/d_{model}})

PE_{(pos,2i+1)}=cos(pos/10000^{2i/d_{model}})

其中,pos是位置,i是维度

发布了54 篇原创文章 · 获赞 36 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/aaalswaaa1/article/details/103942346