Paper : Attention Is All Your Need
Code : official

摘要

本文提出了经典的Attention与Multi Head Attention 机制,并利用这两部分构造了一个Transformer结构,为BERT的提出打下基础。作者在NLP相关的数据集上进行测试,相比CNN和RNN给出了以下几个优点

  • 并行度高,训练时间短
  • 表现更好
  • 可以更好的处理长距离依赖关系,从全局的角度处理输入和输出的依赖关系

Transformer 结构

Attention Is All Your Need
从NLP模型架构的角度来看,Transformer 模型可以看作一个Seq2Seq的结构,抽象表示成如下形式

Attention Is All Your Need
借用一张图来表示seq2seq模型,假设该任务是句子的翻译,对于不同语言来说,表示相同的含义需要的句子长短是不同的,而Seq2Seq就是用来处理输入和输出长度不确定的情况
Attention Is All Your Need
对于Transformer来说,首先将句子根据位置进行编码调整,然后按照顺序输入到Encoder中,对于Decoder来说,Decoder的输出包含两部分,分别是Encoder的输出和Seq上一个位置的结果,也就是Decoder上一次的输出作为这一次的输入。

在Transformer结构中,对于每一模块,都使用Residual connection机制进行处理,即对于子模块 Sublayer 的输出为 LayerNorm(x+SubLayer(x))\text{LayerNorm}(x+\text{SubLayer}(x)),在这里 SubLayer()\text{SubLayer}(\cdot) 表示该子层对应的函数变换。在实现中,假设隐变量的维度统一为 dmodel=512d_\text{model} = 512。取编码器和解码器中的 N=6N=6 。在解码器中,使用Mask层来避免对于位置 i 的预测依赖 i 之后的结果。

Attention 机制

注意力机制的核心在于对给定信息进行权重分配,只关注最相关的输入来进行决策。当注意力机制用来生成一个序列的表示时,也被称作是自注意力机制。注意力机制的表示形式如下

Attention Is All Your Need
假定Source是需要系统处理的信息源,Query代表某种条件或者先验信息,Attention Value是给定Query信息的条件下,通过注意力机制从Source中提取得到的信息。一般Source里面包含有多种信息,我们将每种信息通过Key-Value对的形式表示出来,那么Attention定义为

Attention(Query,Source)=isimilarity(Query,Keyi)Valuei \text{Attention(Query,Source)} = \sum_i\text{similarity(Query,Key}_i)\cdot\text{Value}_i

其中 similarity(Query,Keyi)\text{similarity(Query,Key}_i) 表示权重,当Query与Key越接近时,答案越依赖于对应的Value的值。如果使用 Cosine 来衡量向量之间的相似度,并假定向量的长度为1,那么相似度可以通过点乘来进行计算。如果将Key,Query的向量连接起来形成矩阵,那么计算权重的方法可以使用矩阵乘法来表示。在Transformer结构中,Attention机制也被称作是 Scaled Dot-Product Attention,具有如下结构

Attention Is All Your Need
数学公式表示如下

Attention(Q,K,V)=softmax(QKTdk)V \text{Attention}(Q,K,V) = \text{softmax}(\frac{QK^\text T}{\sqrt{d_k}})V

各矩阵的形状如下:

  • Q : numq × dq 其中 dq 表示询问的特征向量维度
  • K : numk × dk 其中 dk 表示Key的特征向量维度,满足 dk = dq
  • V : numv × dv 其中 dv 表示Value的特征向量维度,满足 dv = dk

作者认为,随着 dk 的增大, 点乘的值会增大Softmax饱和的区域,导数下降到极小值,不利于优化。考虑Q和K中每个变量都是 N(0,1)\sim N(0,1),点乘的结果为 qk=qikiN(0,dk)q\cdot k = \sum q_i k_i\sim N(0,d_k)

对于自注意力机制来说,这里的 Q,K,V 是将同一编码输入通过三个线性变换映射过去的,也就是说

Q=XWQK=XWKV=XWV \\Q = XW^Q \\K = XW^K \\V = XW^V

这里,XX 表示编码矩阵,形状为 batch × dmodel ,而 WQ,WK,WVW^Q,W^K,W^V 形状为 dmodel × dq, dmodel × dk, dmodel × dv

Multi Head Attention 机制

Attention Is All Your Need

简单情况下 dmodel = dq = dk = dv ,但作者发现对于不同位置来说,将它们映射到不同的子空间中进行计算效果更好,因此使用多头注意力机制的方式进行维度的划分。假定 dmodel = h × dk,那么多头注意力机制表示为

MultiHead(Q,K,V)=Concat(head1,...,headh)WOwhere headi=Attention(QWiQ,KWiK,VWiV) \text{MultiHead(Q,K,V)} = \text{Concat}(\text{head}_1,...,\text{head}_h) W^O \\\text{where }\text{head}_{i} = \text{Attention}(QW_i^Q,KW_i^K,VW_i^V)

其中各矩形的形状如下

符号 形状
WiQW_i^Q (dmodel,dk)
WiKW_i^K (dmodel,dk)
WiVW_i^V (dmodel,dv)
WOW^O (h×dv,dmodel)

在该文章中,取 dk = dv = dmodel / h = 64,取 h = 8

Feed-Forward Network

在Transformer 结构中,Feed-Forward模块表示为

FFN(x)=ReLU(xW1+b1)W2+b2 FFN(x) = \text{ReLU}(xW_1+b_1)W_2+b_2

FFN的输入输出的特征维度是 dmodel = 512,隐藏层的特征维度是 dff = 2048

Positional Encoding

由于我们的模型不包含时序和卷积,因此为了使模型使用序列的顺序,我们必须注入一些在序列中的相对或绝对位置的信息。我们在编码器和解码器底部的输入嵌入中添加“位置编码”。位置编码具有与嵌入相同的d维模型,因此可以将两者相加。 位置编码有很多选择,可以学习和固定。在本文中采用正弦余弦编码方式

PE(pos,2i)=sin(pos100002i/dmodel)PE(pos,2i+1)=cos(pos100002i/dmodel) \\\text{PE}_{(pos,2i)} = \sin(\frac{pos}{10000^{2i/d_\text{model}}} ) \\\text{PE}_{(pos,2i+1)} = \cos(\frac{pos}{10000^{2i/d_\text{model}}} )

其中pos表示位置,i 表示维度

Self-Attention 与 CNN RNN 之间的比较

作者从三个方面分析了Self-Attention 的特点

  • 每层的总计算量,计算量越小越好
  • 并行化的程度,并行计算过程中单个计算机执行的操作越少越好
  • 长距离依赖的关系中的路径长度。路径越短越好学习
    Attention Is All Your Need

实验结果

总体效果

Attention Is All Your Need

不同参数对模型的影响

Attention Is All Your Need

总结

在这项工作中,作者介绍了完全基于注意力的seq2seq模型Transformer,用多头自注意力代替了编码器-解码器体系结构中最常用的RNN层。 对于翻译任务,与基于递归或卷积层的体系结构相比,训练Transformer更快。在WMT 2014英语到德语和WMT 2014英语到法语的翻译任务中,都达到了SOTA。作者提出未来的工作包括将“Transformer”扩展到涉及文本以外的涉及输入和输出方式的问题,并研究局部的有限注意力机制,以有效处理大型输入和输出。个人认为Attention机制描述的是一种与空间结构无关的点与点之间的特征影响,从GNN的角度来理解,如果每个特征向量对应到图中的点特征,Attention提供了一种全图的视野变化。

相关文章:

  • 2021-05-31
猜你喜欢
  • 2021-10-03
  • 2021-10-19
  • 2022-02-27
  • 2021-07-24
  • 2021-11-01
相关资源
相似解决方案