Attention Is All You Need总结

目录

1.摘要

2.前言

3.背景

4.模型架构

4.1 编码器和解码器块

4.2Attention

4.2.1Scaled Dot-Product Attention缩放点积注意力

4.2.2 Multi-Head Attention多头注意力

4.2.3 注意力在模型中的应用

4.3基于位置的前馈神经网络Position-wise Feed-Forward Networks

4.4embedding嵌入层和Softmax激活函数

4.5位置编码Positional Encoding

5.为什么使用自注意力

6.训练

6.1训练数据和分批

6.2硬件和训练时间

6.3优化器

6.4正则


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缩放点积注意力

 公式:Attention(Q,K,V ) = softmax(\frac{QK^{T}}{\sqrt{d_{k}}})V

输入分别由维度为d_{k}的query和key组成的矩阵Q和K,做点积操作,然后除以\sqrt{d_{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个d_{v}/h维的输出,将他们concat拼接起来,再经过一个线性层得到d_{v}维的输出。

MultiHead(Q,K,V ) = Concat(head1,...,headh)W^{O}

        where head_{i} = Attention(QW_{i}^{Q} ,KW_{i}^{K} , VW_{i}^{V})

其中W_{i}^{Q} ,W_{i}^{K} , W_{i}^{V}, W^{O}分别是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函数,将与序列后面相关的注意力值设为-\propto

4.3基于位置的前馈神经网络Position-wise Feed-Forward Networks

FFN(x) = ReLu(X\cdot W_{1} + b_{1})W_{2} + b_{2}

采用两个全连接的线性层,输入维度为512,经过W_{1}变换再加上偏置b_{1}得到2048维的隐藏层,经过激活函数ReLu,输入第二个线性层,先与W_{2}相乘再加上b_{2}得到512维的输出。

注意transformer的encoder和decoder的各个网络块的输入输出维度都相等,为了搭网络方便,所以中间层虽然扩展了维度,但又立刻降维到输入的维度。

4.4embedding嵌入层和Softmax激活函数

  • embedding层用来转换encoder的输入的词元为模型的指定数据维度d_{model},转换decoder的输出词元为d_{model}维,并作为下一轮decoder的输入。
  • 在两个embedding层和softmax函数前的linear层共享权重矩阵。对embedding层的权重乘以\sqrt{d_{model}}

4.5位置编码Positional Encoding

 由于attention不能像RNN那样利用序列的顺序信息,因此需要加上额外的位置编码,使得位置信息能参与到模型中。将位置信息加在embedding层,且维度要与embedding的维度相同,才能够直接相加。

位置编码的函数有很多,该论文采用的是cos和sin函数编码,公式如下:

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

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

pos表示第pos个词元,d_{model}表示词元的维度,i代表词元的第i维。

 

 k和\delta指的位置pos(或者i)的偏移。因此可以得出结论PE_{i+k}PE_{i}成线性关系。即上图最左侧的矩阵是与i无关的,仅与偏移\delta相关。

5.为什么使用自注意力

从三个方面考虑自注意力比循环层或者卷积层的优势,分别是:序列长度为n时每层的计算复杂度、序列的按序操作次数的必须值、最大路径长度

 计算复杂度表征计算量,按序操作次数表征并行能力(按序操作次数越少,并行能力越高),最大路径长度表征输入序列长度的限制(路径越短,可用的序列长度越长)。

  • 计算复杂度:当n小于d时,自注意力优于循环和卷积网络。为了使注意力的n能取得更大依然优于循环和卷积,可以采用受限的自注意力,即每个输出位最多关注序列的一个r长度的子序列。
  • 按序操作次数:自注意力和卷积都是并行性极高的O(1)
  • 最大路径长度:单卷积看不到所有的序列信息,需要使用扩展的卷积最大路径为O(log_{k}(n)),自注意力为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,参数\beta_{1}设置为0.9, \beta_{2}设置为0.98,\epsilon设置为10^{-9}。学习率,按下面的公式动态变动

lrate = d^{-0.5}_{model} * min(step\_num^{-0.5}, step\_num *warmup\_steps^{-1.5})

warmup_steps设置为4000。刚开始时step\_num *warmup\_steps^{-1.5}比较小,随着step_num(训练第几步)的增加学习率lrate呈线性增加,属于预热阶段。一段时间后,step\_num^{-0.5}比较小,随着step_num的增大,lrate呈step_num的平方根的反比下降,属于学习率衰退阶段。

6.4正则

残差丢弃法:attention子层的输出,丢弃10%的数据后再传递给add&norm层。同时,在embedding层的输出和位置编码相加后也丢弃10%的数据。

标签平滑Label Smoothing:使用参数\epsilon=0.1做标签平滑。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值