Transformer详解(三):Transformer结构
Transformer结构是⾕歌那篇<Attention is all you need>论⽂中提到的。论⽂中提出了transformer这么⼀种新的结构,将其应⽤在机器翻译的领域上,取得了很好的效果。本⽂将分析⼀下Transformer结构的具体组成部分。
整体结构
Transformer 整体结构宏观上看是⼀个Encoder-Decoder结构,只不过这个结构完全抛弃了常见的RNN,LSTM等结构。
Transformer整体结构
图中左边部分为Encoder 部分,右边部分为Decoder部分和最后的线性输出层。其中Encoder和Decoder各有6层。
g50
Encoder-Decoder 的6层结构国庆节高速免费时间
Encoder部分
对于Encoder部分来说,整个的Encoder结构⾥包含6层,每⼀层⾥⾯有两层。分别是⼀层self-attention层和⼀层全连接层。需要注意的是,这⾥的self-attention并不是只有⼀层。模型中使⽤的是multi-head-Attention。其实就是多个self-attention,可以把每个self-attention理解为⼀个head,多个self-attention⾃然就是多头了。在上⼀篇⽂章中我们已经提到了self-attention的计算,经过计算,⼀个self-attention会输出⼀个结果z。那么,multi-head-attention的输出是什么呢? 答案是把每⼀个self-attention的输出结果拼接起来。然后输⼊给后⾯的全连接⽹络。
multi-head-Attention的拼接过程
全连接⽹络层是⼀个两层的⽹络,第⼀层是Relu激活函数,第⼆层是⼀个线性的激活函数。
汽车电脑这⾥附上pytorch版本的multi-head attention版本
Decoder部分和Encoder⼀样,也是有6层,但是每⼀个单独的decoder与encoder相⽐,在self-attention层(decoder层中叫masked self-attention)和全连接⽹络层之间,多了⼀层Encoder-Decoder-Attention 层。
decoder中有两层attention层
decoder结构中,第⼀层是⼀个multi-head-self-attention层,这个与encoder中的区别是这⾥是masked-multi-head-self-attention。使⽤mask的原因是因为在预测句⼦的时候,当前时刻是⽆法获取到未来时刻的信息的。上⼀篇⽂章提到self-attention会⽣成⼀个attention map,并以‘I have a dream’为例⽣成了⼀个44的attention map,这次⽣成的44的attention map因为有mask的原因,未来的信息全部被隐藏掉了。
当前预测的时候是⽆法获取未来信息的
decoder中的第⼆层attention层就是⼀个正常的multi-head attention层。但是这⾥Q,K,V来源不同。Q来⾃于上⼀个decoder的输出,⽽K,V则来⾃于encoder的输出。剩下的计算就没有其他的不同了。
两厢
关于这两个attention层,可以理解为 mask-self-attention是计算当前翻译的内容和已经翻译的前⽂之间的关系,⽽encoder-decoder-attention 是计算当前翻译内容和编码的特征向量之间的关系。
最后再经过⼀个全连接层,输出decoder的结果。
夏利轿车报价这⾥对mask操作做⼀个说明,mask的⽬的,是为了在训练时不让模型看到后⾯位置的信息,所以需要mask掉。这⼀步其实为了加速训练过程,通过mask掉训练语料,替代通过for循环拼接。⽽在实际的预测中,因为没有后⾯的信息,所以就不⽤使⽤mask。
个⼈表达能⼒有限,这⾥⽤博客 The Illustrated Transformer中动图来表⽰decoder阶段,输出第⼀个词和输出剩下词的过程。
Generator部分
最后⽣成的部分相⽐之下简单很多。由⼀个线性层再加⼀个softmax层完成最后的输出。
风度汽车Positional Encoding