定制软件开发Transformer架构:位置编码

2017年,Google的Vaswani 定制软件开发等人提出了一种新颖的定制软件开发纯注意力序列到序列,定制软件开发闻名学术界与工业界的 Transformer 定制软件开发架构横空出世。定制软件开发它的可并行化训练能力定制软件开发和优越的性能使其成为定制软件开发自然语言处理领域(Natural Language Processing,NLP)定制软件开发以及计算机视觉领域(Computer Vision,CV)定制软件开发研究人员的热门选择。定制软件开发本文将重点讨论Transformer定制软件开发架构一个不可或缺的部分——位置编码(Positional Encoding)。

Transformer架构

定制软件开发位置编码是什么?定制软件开发它为什么这么重要?

定制软件开发在人类的语言中,定制软件开发单词的位置与顺序定义了语法,定制软件开发也影响着语义。定制软件开发无法捕获的单词顺序会定制软件开发导致我们很难理解一句话的含义,定制软件开发如下图所示。

定制软件开发因此在任务中,定制软件开发对于任何神经网络架构,定制软件开发能够有效识别每个词的定制软件开发位置与词之间的顺序是定制软件开发十分关键的。定制软件开发传统的循环神经网络(RNN)本身通过自回归的方式考虑了单词之间的顺序。然而Transformer 架构不同于RNN,Transformer 使用纯粹的自注意力机制来捕获词之间的联系。纯粹的自注意力机制具有置换不变的性质()。换句话说,中的自注意力机制无法捕捉输入元素序列的顺序。因此我们需要一种方法将单词的顺序合并到Transformer架构中,于是位置编码应运而生。

位置编码的作用方式

目前,主流的位置编码方法主要分为绝对位置编码相对位置编码两大类。其中绝对位置编码的作用方式是告知Transformer架构每个元素在输入序列的位置,类似于为输入序列的每个元素打一个"位置标签"标明其绝对位置。而相对位置编码作用于自注意力机制,告知Transformer架构两两元素之间的距离。如下图所示。

绝对位置编码

最早的绝对位置编码起源于2017年Jonas Gehring等人发表的,该工作使用可训练的嵌入形式作为位置编码。随后Google的Vaswani等人在文章中使用正余弦函数生成的位置编码。关于Transformer架构为什么选择正余弦函数去生成绝对位置编码以及正余弦函数的一些特性,笔者安利大家阅读kazemnejad老师的博文《》,该文详细叙述了正余弦绝对位置编码的原理。诞生于 2018 年末的 也采用了可训练的嵌入形式作为编码。实际上,这三项工作的共性都是在每个词的嵌入上加位置编码之后输入模型。形式上,如下公式所示:
x = ( w 1 + p 1 , . . . , w m + p m ) . x = (w_1 + p_1, . . . ,w_m + p_m). x=(w1+p1,...,wm+pm).
其中, x x x表示模型的输入, w m w_m wm表示第 m m m个位置的词嵌入, p m p_m pm表示第 m m m个位置的绝对位置编码。

近年来,关于绝对位置编码的工作大多数是以不同的方法生成绝对位置编码为主。下面列出一些关于绝对位置编码的一些工作,感兴趣的同学可以了解一下~


  1. 该文提出一种基于连续动态系统的绝对位置编码(FLOATER),从数据中学习神经微分方程递归生成位置编码,在机器翻译、自然语言理解和问答等任务上获得了不错的性能提升。
    由于递归机制本身具有出色的外推性质,所以FLOATER基本不受文本长度的限制。并且作者说明了正余弦绝对位置编码就是FLOATER的一个特解。该工作在WMT14 En-De和En-Fr分别进行了实验,分别对比Transformer Base模型有着0.4和1.0 BLEU值的涨幅。但与此同时,这种递归形式的位置编码也牺牲了原本模型的并行输入,在速度上会有一定影响。

  2. 该工作提出一种复值词向量函数生成绝对位置编码,巧妙地将复值函数的振幅和相位与词义和位置相联系,在机器翻译、文本分类和语言模型任务上获得了不错的性能提升。。
    该复值词向量函数以位置为变量,计算每个词在不同位置的词向量。由于该函数对于位置变量而言是连续的,因此该方法不光建模了绝对位置,也建模了词之间的相对位置。该工作在WMT16 En-De机器翻译任务数据集上进行了实验,复值词向量对比Transformer Base模型有1.3 BLEU值的涨幅。

  3. 该工作提出了一种绝对位置编码的鲁棒性训练方法。作者认为现有的位置编码方法在测试不可见长度时缺乏泛化能力,并提出了平移绝对位置编码(SHAPE)来解决这两个问题。SHAPE的基本思想是在训练过程中对绝对位置编码随机整体平移一段距离来实现泛化能力。该工作在WMT16 En-De机器翻译任务数据集上进行训练,将newstest2010-2016作为校验集和测试集,对比正余弦绝对位置编码,该方法有着一定的性能提升。

相对位置编码

最经典的相对位置编码起源于Shaw等人发表的。在介绍相对位置表示之前,首先简要介绍一下自注意力机制的计算流程,对于Transformer模型的某一自注意力子层:
Q = x W Q K = x W K V = x W V Q= x W_Q \\ K=xW_K \\ V=xW_V Q=xWQK=xWKV=xWV
其中, x x x为上一层的输出, W Q W_Q WQ W K W_K WK W V W_V WV为模型参数,它们可以通过自动学习得到。此时,对于整个模型输入的向量序列 x = { x 1 , … , x m } x=\{x_1,\ldots,x_m\} x={x1,,xm},通过点乘计算,可以得到当前位置 i i i和序列中所有位置间的关系,记为 z i z_i zi,计算公式如下:
z i = ∑ j = 1 m α i j ( x j W V ) z_i = \sum_{j=1}^m \alpha_{ij}({x}_j {W}_V) zi=j=1mαij(xjWV)
这里, z i {z}_{i} zi可以被看做是输入序列的线性加权表示结果。而权重 α i j \alpha_{ij} αij通过Softmax函数得到:
α i j = exp ⁡ ( e i j ) ∑ k = 1 m exp ⁡ ( e i k ) \alpha_{ij} = \frac{\exp ({e}_{ij})}{\sum_{k=1}^{m}\exp ({e}_{ik})} αij=k=1mexp(eik)exp(eij)
进一步, e i j {e}_{ij} eij被定义为:
e i j = ( x i W Q ) ( x j W K ) T d k {e}_{ij} = \frac{({x}_i {W}_Q){({x}_j {W}_K)}^{\textrm{T}}}{\sqrt{d_k}} eij=dk (xiWQ)(xjWK)T
其中, d k d_k dk为模型中隐藏层的维度。 e i j {e}_{ij} eij实际上就是 Q {Q} Q K {K} K的向量积缩放后的一个结果。而相对位置表示的核心思想就是在 z i z_i zi e i j {e}_{ij} eij的计算公式里面分别引入了可学习的相对位置向量 a i j V {a}_{ij}^V aijV a i j K {a}_{ij}^K aijK。改进后的自注意力机制如下:
z i = ∑ j = 1 m α i j ( x j W V + a i j V ) e i j = x i W Q ( x j W K + a i j K ) T d k = x i W Q ( x j W K ) T + x i W Q ( a i j K ) T d k zi=mj=1αij(xjWV+aVij)eij=xiWQ(xjWK+aKij)Tdk=xiWQ(xjWK)T+xiWQ(aKij)Tdk zieij=j=1mαij(xjWV+aijV)=dk xiWQ(xjWK+aijK)T=dk xiWQ(xjWK)T+xiWQ(aijK)T
其中, a i j V {a}_{ij}^V aijV a i j K {a}_{ij}^K aijK定义如下:
a i j K = w c l i p ( j − i , k ) K a i j V = w c l i p ( j − i , k ) V c l i p ( x , k ) = m a x ( − k , m i n ( k , x ) ) aKij=wKclip(ji,k)aVij=wVclip(ji,k)clip(x,k)=max(k,min(k,x)) aijKaijVclip(x,k)=wclip(ji,k)K=wclip(ji,k)V=max(k,min(k,x))
通过预先设定的最大相对位置 k k k,强化模型对以当前词为中心的左右各 k k k个词的注意力计算。因此,最终的窗口大小为 2 k + 1 2k+1 2k+1。对于边缘位置窗口大小不足 2 k 2k 2k的单词,采用了裁剪的机制,即只对有效的临近词进行建模。相对位置权重 a i j {a}_{ij} aij矩阵如下图所示:

由引出了一系列相对位置编码的讨论与改进。
下面列出一些关于相对位置编码的一些工作,感兴趣的同学可以了解一下~


  1. 该文改进相对位置编码的动机源于如下公式的完全展开,分别表示单词-单词、位置-位置、单词-位置、位置-单词:
    e i j = ( x i W Q ) ( x j W K ) T d k = ( ( w i + p i ) W Q ) ( w j + p j ) W K ) T d k = w i W Q W K T w j T + p i W Q W K T p j T + w i W Q W K T p j T + p i W Q W K T w j T d k
    eij=(xiWQ)(xjWK)Tdk=((wi+pi)WQ)(wj+pj)WK)Tdk=wiWQWKTwjT+piWQWKTpjT+wiWQWKTpjT+piWQWKTwjTdk
    eij=dk (xiWQ)(xjWK)T=dk ((wi+pi)WQ)(wj+pj)WK)T=dk wiWQWKTwjT+piWQWKTpjT+wiWQWKTpjT+piWQWKTwjT

    作者认为单词-位置、位置-单词这两部分是不合理的。该文将 p j p_j pj替换为相对位置向量 R i − j R_{i−j} Rij,与Shaw的训练式的相对位置向量不同,本文使用正余弦编码生成 R i − j R_{i−j} Rij p i p_i pi替换为两个可训练的向量 u , v u,v u,v,公式如下:
    e i j = w i W Q W K T w j T + v W Q W K T R i − j T + w i W Q W K T R i − j T + u W Q W K T w j T d k
    eij=wiWQWKTwjT+\redvWQWKT\redRijT+wiWQWKT\redRijT+\reduWQWKTwjTdk
    eij=dk wiWQWKTwjT+vWQWKTRijT+wiWQWKTRijT+uWQWKTwjT

    Transformer-XL提出的片段级别递归和相对位置编码使模型具有学习长距离依赖的能力,加速效果很明显并且可以支持的最长依赖近似于O(NL)。Google 随后提出的XLNet模型也采用了Transformer-XL的结构。

  2. 相较于Transformer-XL,Google提出的预训练语言模型T5所使用的相对位置编码更为简单。该工作将位置-位置、单词-位置、位置-单词替换成一个可以学习的偏置项,如下公式:
    e i j = w i W Q W K T w j T + α i − j d k
    eij=wiWQWKTwjT+\redαijdk
    eij=dk wiWQWKTwjT+αij

    值得一提的是,对于相对位置偏置项 α i − j \alpha_{i−j} αij,T5模型采用了更精细的分段处理。在相对距离较近的情况下(相对距离窗口为-7~7),每个位置使用独立训练的相对位置向量;而随着相对距离的增加(相对距离窗口小于-7或大于7),多个位置会共享一个相对位置向量,直至相对距离达到阈值进行clip操作。

  3. 文章指出了当下基于Transformer结构的预训练模型中位置编码存在的两个问题。第一个问题便是上述单词-位置、位置-单词的对应问题。其次,作者认为符号[CLS]不应当含有位置信息。基于此作者移除了单词-位置、位置-单词的对应关系,同时引用T5模型中的偏置项:
    e i j = w i W Q W K T w j T 2 d k + p i U Q U K T p j T 2 d k + α i − j
    eij=wiWQWKTwjT2dk+piUQUKTpjT2dk+\redαij
    eij=2dk wiWQWKTwjT+2dk piUQUKTpjT+αij

    其中, U Q U_Q UQ U K U_K UK为可学习的参数矩阵。同时把[CLS]标识符的位置信息抹除使得任何其它位置与其有着相同的相对位置关系。作者在GLUE(General Language Understanding Evaluation)任务上进行了实验,证明了这两部分改进的有效性。

  4. 与前三个工作相比,微软提出的预训练语言模型DeBERTa所使用的相对位置编码机制也是类似。该工作将展开式调整成如下公式:
    e i j = w i W Q W K T w j T + w i W Q W K T R i − j T + R j − i W Q W K T w j T d k
    eij=wiWQWKTwjT+wiWQWKT\redRijT+\redRjiWQWKTwjTdk
    eij=dk wiWQWKTwjT+wiWQWKTRijT+RjiWQWKTwjT

    本文中, R i − j R_{i−j} Rij与Shaw的工作一样都是训练式可截断的相对位置向量。同时,DeBERTa指出相对位置信息对于大多数NLP任务更加重要,但绝对位置信息在某些任务上也很重要。

  5. 与前面工作的“套路”截然不同,作者苏剑林提出一种旋转式位置编码,利用绝对位置编码实现相对位置编码的效果。具体方法为:
    e i j = w i W Q R i R j T W K T w j T d k = w i W Q R i − j W K T w j T d k
    eij=wiWQ\redRiRjTWKTwjTdk=wiWQ\redRijWKTwjTdk
    eij=dk wiWQRiRjTWKTwjT=dk wiWQRijWKTwjT

    其中, R i − j \red{R_{i-j}} Rij为正交的旋转矩阵。在进行Attention计算时,将 Q i Q_i Qi K j K_j Kj视为高维空间上的点,分别乘以对应的旋转矩阵,根据其绝对位置 i i i j j j分别对其逆时针旋转对应的角度。这样,在进行内积运算后的数值与相对位置 i − j i-j ij相关。因此这种位置编码方法有非常直观的物理含义,同时这也是一种可用于线性Attention的相对位置编码。

  6. 该文作者针对Shaw等人的相对位置编码提出了四种改进方法,分别如下:
    e i j = ( x i W Q ) ( x j W K ) T α ∣ i − j ∣ d k e i j = ( x i W Q ) ( x j W K ) T α i − j d k e i j = s u m _ p r o d ( x i W Q , x j W K , α i − j ) d k e i j = ( x i W Q + α i − j ) ( x j W K + α i − j ) − < α i − j , α i − j > d k
    eij=(xiWQ)(xjWK)T\redα|ij|dkeij=(xiWQ)(xjWK)T\redαijdkeij=sum_prod(xiWQ,xjWK,\redαij)dkeij=(xiWQ+\redαij)(xjWK+\redαij)<\redαij,\redαij>dk
    eijeijeijeij=dk (xiWQ)(xjWK)Tαij=dk (xiWQ)(xjWK)Tαij=dk sum_prod(xiWQ,xjWK,αij)=dk (xiWQ+αij)(xjWK+αij)<αij,αij>

    从公式上来看,与Shaw的相对位置编码相比,前三种改进方法取消了将相对位置信息附加在Key元素上的做法,以乘法的方式融合了相对位置信息。而最后一种方法将相对位置信息同时附加在了Query和Key元素上,并减去了两个相对位置嵌入相乘的结果。那么最终便是Query-Key、Query-相对位置、相对位置-Key这三项的相加。对比Shaw多了相对位置-Key这个对应关系,笔者认为这么做还是很有趣的。作者在SQuAD1.1数据集上面进行了实验,与训练式和正余弦的绝对位置编码以及Shaw的相对位置编码进行比较,性能有一定的提升。并通过实验证明了方法的外推性和鲁棒性。

关于位置编码的分析性工作


  1. 该文章主要针对机器翻译任务,根据不同句子长度的测试集,对比分析了绝对位置编码与相对位置编码的性能,用实验证明了相对位置编码更具有优势,泛化能力更加强大。


  2. 文章提供一个新的视角,说明在不同NLP任务上应使用不同的位置编码。


  3. 文章在多项NLP任务上对不同的位置编码进行了定性分析。

参考

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发