目录
4.2.1Scaled Dot-Product Attention缩放点积注意力
4.2.2 Multi-Head Attention多头注意力
4.3基于位置的前馈神经网络Position-wise Feed-Forward Networks
1.摘要
主流的序列转换(如机器翻译)模型都是基于递归或者卷积神经网络的编码器解码器架构;
Transformer是完全基于Attention的编码器解码器模型;
实验表明Transformer模型在取得更好效果的同时,并行性更好,训练周期更短。
Transformer在其他类型任务中也有很好的通用性。
2.前言
RNN,尤其是LSTM和GRU是当前公认的最好的序列处理模型。
循环神经网络处理序列问题,需要结合序列的顺序位置信息(时间步),因此要按序处理,对并行性有很高的限制。
注意力机制在对序列模型建模时,可以不用按顺序处理信息,可以与循环神经网络结合使用。
transformer不用循环而完全采用注意力机制来刻画输入输出的全局序列信息。
3.背景
Extended Neural GPU,ByteNet and ConvS2S ,这些使用卷积神经模块的模型能增加计算的并行性,但是随着两个信号的距离增加,对两个信号的操作次数也会增加。其中ConvS2S呈线性增加,ByteNet呈对数级增加。训练长度越长的序列会变得越困难。
transformer将计算两个信号的操作数减少到常数级,采用多头注意力机制使得数据分辨率不会降低。
4.模型架构
模型为encoder—decoder结构,如图的左右两部分,encoder和decoder分别由N个encoder块和N个decoder块组成,每个模块由多头注意力和线性层组成。
4.1 编码器和解码器块
Encoder:编码器由N=6个encoder块组成,每个encoder块分为两个子层,分别是注意力机制层和基于位置的全连接前馈网络层。每个子层都使用了残差连接和层归一化。并且为了构造网络方便,每个层的输出为固定的512维。
Decoder:解码器同样由N=6个decoder块组成,每个decoder块是在encoder块的两层中间插入第三层,该层对encoder块的输出执行多头注意力。同encoder一样,每个子层都使用了残差连接和层归一化。还对自注意力做一些修改,目的是让encoder训练时不要看后面的序列,这在机器翻译任务中意味着我们希望一个接一个词的输入,翻译当前位置的词时仅以已读的词做依据,因此要暂时遮住后面的词。
4.2Attention
通常可以将attention视为一个映射函数,该函数有三个向量因素构成:query、key、value。在计算时,query和key计算注意力权重,输出value在该权重上的加权和。直观的理解,假如query是对书籍的一次查询,key是书籍的特征,包括类型、简介、内容量等,value是和key成对的书籍列表。输入想要的书籍描述,经过与key做运算得到权重,与列表(value)加权和得到所查询的书籍。这个权重就叫做注意力权重,形象的理解就是不同对象所得到的注意力(关注度)分数。
4.2.1Scaled Dot-Product Attention缩放点积注意力
公式:
输入分别由维度为的query和key组成的矩阵Q和K,做点积操作,然后除以
,经过softmax操作(归一化,使得和为一)得到注意力权重,与value组成的矩阵V做乘法得到attention注意力。
常用的attention机制由两类,加性注意力和点积缩放注意力。当Q和V的输入维度不同时,先用一个线性层将他们的维度提到相同维度,然后让Q和V直接相加。因此直接使用矩阵乘法计算的缩放点积注意力计算更快,空间更节省。
4.2.2 Multi-Head Attention多头注意力
V、K和Q经过h次线性层Linear得到h个V、K、Q对,分别送入4.2.1中介绍的缩放点积层得到h个/h维的输出,将他们concat拼接起来,再经过一个线性层得到
维的输出。
其中分别是4个线性层的参数矩阵。
理论上每个头head学习到不同位置的注意力,组合起来达到更好的效果。
4.2.3 注意力在模型中的应用
三种使用方式:
- 在encoder-decoder的atttention层,decoder的query来自decoder块的前一层输出,key和value来自encoder的输出。
- 在encoder层中包含自注意力层(即query、key、value都是同一个值),自注意力层的query、key、value都来自前一层encoder块的输出。
- 在decoder中,正如4.1decoder中描述的那样,需要遮住序列的后面部分,以保护模型的自回归特性。在softmax函数前,实现一个mask函数,将与序列后面相关的注意力值设为
4.3基于位置的前馈神经网络Position-wise Feed-Forward Networks
采用两个全连接的线性层,输入维度为512,经过变换再加上偏置
得到2048维的隐藏层,经过激活函数ReLu,输入第二个线性层,先与
相乘再加上
得到512维的输出。
注意transformer的encoder和decoder的各个网络块的输入输出维度都相等,为了搭网络方便,所以中间层虽然扩展了维度,但又立刻降维到输入的维度。
4.4embedding嵌入层和Softmax激活函数
- embedding层用来转换encoder的输入的词元为模型的指定数据维度
,转换decoder的输出词元为
维,并作为下一轮decoder的输入。
- 在两个embedding层和softmax函数前的linear层共享权重矩阵。对embedding层的权重乘以
。
4.5位置编码Positional Encoding
由于attention不能像RNN那样利用序列的顺序信息,因此需要加上额外的位置编码,使得位置信息能参与到模型中。将位置信息加在embedding层,且维度要与embedding的维度相同,才能够直接相加。
位置编码的函数有很多,该论文采用的是cos和sin函数编码,公式如下:
pos表示第pos个词元,表示词元的维度,i代表词元的第i维。
k和指的位置pos(或者i)的偏移。因此可以得出结论
与
成线性关系。即上图最左侧的矩阵是与i无关的,仅与偏移
相关。
5.为什么使用自注意力
从三个方面考虑自注意力比循环层或者卷积层的优势,分别是:序列长度为n时每层的计算复杂度、序列的按序操作次数的必须值、最大路径长度
计算复杂度表征计算量,按序操作次数表征并行能力(按序操作次数越少,并行能力越高),最大路径长度表征输入序列长度的限制(路径越短,可用的序列长度越长)。
- 计算复杂度:当n小于d时,自注意力优于循环和卷积网络。为了使注意力的n能取得更大依然优于循环和卷积,可以采用受限的自注意力,即每个输出位最多关注序列的一个r长度的子序列。
- 按序操作次数:自注意力和卷积都是并行性极高的O(1)
- 最大路径长度:单卷积看不到所有的序列信息,需要使用扩展的卷积最大路径为
,自注意力为O(n/r)最优。
最后,自注意力的可解释性更强,甚至可以直观的从人类的注意力分配理解。
6.训练
6.1训练数据和分批
数据集为:
standard WMT 2014 English-German dataset,包括450万个英语德语句子对,双字节编码,37000个词元的字典。
larger WMT 2014 English-French dataset,包括3600万个英语法语句子对,将词元拆分为32000个词根词缀组成的字典。
分批:
按近似相当的长度将句子对分批。每个训练批次包含一组句子对,这组句子对大约包含25000个词元。
6.2硬件和训练时间
GPU使用8张NVIDIA的P100,在一台机器上做训练, 基准模型训练时长为12小时,更大的模型训练时长为3天。
6.3优化器
优化器使用Adma,参数设置为0.9,
设置为0.98,
设置为
。学习率,按下面的公式动态变动
warmup_steps设置为4000。刚开始时比较小,随着step_num(训练第几步)的增加学习率lrate呈线性增加,属于预热阶段。一段时间后,
比较小,随着step_num的增大,lrate呈step_num的平方根的反比下降,属于学习率衰退阶段。
6.4正则
残差丢弃法:attention子层的输出,丢弃10%的数据后再传递给add&norm层。同时,在embedding层的输出和位置编码相加后也丢弃10%的数据。
标签平滑Label Smoothing:使用参数=0.1做标签平滑。