Transformer:Attention Is All You Need

Transformer:Attention Is All You Need

Transformer:Attention Is All You Need_第1张图片

Transformer结构
transformer论文地址:https://arxiv.org/pdf/1706.03762.pdf

1、Transformer整体架构

由图看出,transformer的整体结构由Encoder(左侧)和Decoder(右侧)组成。并且Transformer提出了一种简单的架构,仅仅依赖于注意力机制,而没有使用传统的RNN或者CNN。该模型仅仅针对机器翻译的任务,而后序提出了一系列使用了transformer的架构,不仅用到了NLP领域,还用到了CV领域。

为什么没有使用RNN? 由于RNN的网络结构必须读入序列左侧得到结果后,才可以读入序列右侧的数据,进行运算,不可以进行并行运算,增加了时间成本。并且由于梯度的消失,RNN网络的时间序列不能太长。

为什么没有使用CNN?因为CNN,每次计算的是一个3x3的窗口,需要很多层的运算,才可以将一个较长的序列联系到一起,而attention只需要一层就可以把整体序列看到。

类比与CNN可以产生多通道(不同通道可以认为提取不同的特征),该作者提出了多头注意力机制(multi head attention),由于它有多个head,所以可以产生多个序列信息。

2.Encoder结构

对于整体的encoder而言,其输入序列(x1 , x2 ··· xn),经过N层的Multi Head Attention层和FFN层(Feed-Forward Networks)得到(z1 , z2 ··· zn)。

经过Multi Head Attention和其Add&Norm之后的计算公式为
X = L a y e r N o r m ( X + M u l t i H e a d A t t e n t i o n ( X ) ) X = LayerNorm( X + MultiHeadAttention(X) ) X=LayerNorm(X+MultiHeadAttention(X))
经过FFN和其Add&Norm之后的计算公式为
X = L a y e r N o r m ( X + F e e d F o r w a r d ( X ) ) X = LayerNorm( X + FeedForward(X) ) X=LayerNorm(X+FeedForward(X))
对于输入x序列,是由单词embedding和位置embedding(由于attention一次看一层,缺失了位置信息)相加而组成。对于单词embedding,可以采用Word2Vec、Glove、one-hot等编码方式,对于每个词都得到一个长度为d 的维度。对于位置embedding,使用PE表示,其使用公式得到,不可训练。

PE (pos,2i) = sin( pos / 10000 (2i/d) )   对于偶数维度
PE (pos,2i+1) = sin( pos / 10000 (2i+1/d) )  对于奇数维度

pos是在橘子中的位置,2i或者2i+1表示的是词embedding的维度。

Multi Head Attention层的结构:

Transformer:Attention Is All You Need_第2张图片

左侧为self-attention(其中的Mask是在 Masked Multi-Head Attention中使用的),右侧为Multi-Head Attention。其中左侧的self-attention的计算公式为(很好的利用了并行化,减少了时间成本):

Transformer:Attention Is All You Need_第3张图片

右侧的多头注意力机制是为了方便提取多种不同的序列特征使用的,其输入的Q、K、V矩阵是n x dmodel的,将其通过乘以一个dmodel x ( dmodel /h ) 的可训练的矩阵得到n x ( dmodel /h ) 大小的矩阵结构。Q、K、V分别有h个这种可训练的矩阵,分别经过自注意机制后,得到的h个n x ( dmodel /h )的结构,这h个再进行concat连接成n x dmodel的矩阵,然后经过一层Linear层。

Feed Forward层的结构:

单隐藏层的MLP,是一个两层的全连接层,第一层的激活函数为Relu,第二层不使用激活函数,公式如下:
F F N ( x ) = m a x ( 0 , R e l u ( x w 1 + b 1 ) ) w 2 + b 2 FFN( x ) = max( 0 ,Relu( xw1 + b1) ) w2 + b2 FFN(x)=max(0,Relu(xw1+b1))w2+b2
其中间隐藏层将dmodel增大了四倍,后一层将其减小了四倍,所以最终得到的dmodel与原dmodel相同。

LayerNorm的原理:

对于每个单词的embedding为dmodel,假如dmodel = 512,那么相当于在这512个元素上进行了norm归一化。

3.Decoder结构

对于整体的decoder而言,其输入序列(z1 , z2 ··· zn),最终得到的是(y1 , y2 ··· ym)的序列结构。并且其输入有两个,一个是z序列,另一个是yt时刻之前得到的(y1 , y2 ··· yt-1)序列,所以对于y序列,要先经过一层masked multi head attention(其将softmax之前,yt-1之后的值都设为特别小的负数,然后经过softmax后值为0,即权重为0,见上侧self-attention结构图),对于z序列,当做K-V,对于y经过attention的序列,当做Q,进行multi head attention,最后经过FFN,然后进行N次操作,最终经过线性层和softmax层得到结果。其中的各结构与Encoder中的结构相同。

4.总结

Transformer由于使用的是Self-Attention,所以可以更好的并行化训练,并且得到了不错的效果。并且Transformer目前已经被应用于了很多领域,NLP领域的机器翻译,对话分析,完词填空等等,CV领域的图像识别,目标检测,图像分割等等。也是为后续的各种功能强大的模型打下基础。

你可能感兴趣的:(深度学习,transformer,深度学习,人工智能)