Transformer:Attention Is All You Need
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表示,其使用公式得到,不可训练。
pos是在橘子中的位置,2i或者2i+1表示的是词embedding的维度。
Multi Head Attention层的结构:
左侧为self-attention(其中的Mask是在 Masked Multi-Head Attention中使用的),右侧为Multi-Head Attention。其中左侧的self-attention的计算公式为(很好的利用了并行化,减少了时间成本):
右侧的多头注意力机制是为了方便提取多种不同的序列特征使用的,其输入的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领域的图像识别,目标检测,图像分割等等。也是为后续的各种功能强大的模型打下基础。