2017年,Google的Vaswani 等人提出了一种新颖的纯注意力序列到序列架构,闻名学术界与工业界的 Transformer 架构横空出世。它的可并行化训练能力和优越的性能使其成为自然语言处理领域(Natural Language Processing,NLP)以及计算机视觉领域(Computer Vision,CV)研究人员的热门选择。本文将重点讨论Transformer架构一个不可或缺的部分——位置编码(Positional Encoding)。
位置编码是什么?它为什么这么重要?
在人类的语言中,单词的位置与顺序定义了语法,也影响着语义。无法捕获的单词顺序会导致我们很难理解一句话的含义,如下图所示。
因此在NLP任务中,对于任何神经网络架构,能够有效识别每个词的位置与词之间的顺序是十分关键的。传统的循环神经网络(RNN)本身通过自回归的方式考虑了单词之间的顺序。然而Transformer 架构不同于RNN,Transformer 使用纯粹的自注意力机制来捕获词之间的联系。纯粹的自注意力机制具有置换不变的性质(证明请见)。换句话说,Transformer中的自注意力机制无法捕捉输入元素序列的顺序。因此我们需要一种方法将单词的顺序合并到Transformer架构中,于是位置编码应运而生。
位置编码的作用方式
目前,主流的位置编码方法主要分为绝对位置编码与相对位置编码两大类。其中绝对位置编码的作用方式是告知Transformer架构每个元素在输入序列的位置,类似于为输入序列的每个元素打一个"位置标签"标明其绝对位置。而相对位置编码作用于自注意力机制,告知Transformer架构两两元素之间的距离。如下图所示。
绝对位置编码
最早的绝对位置编码起源于2017年Jonas Gehring等人发表的Convolutional Sequence to Sequence Learning,该工作使用可训练的嵌入形式作为位置编码。随后Google的Vaswani等人在Attention Is All You Need文章中使用正余弦函数生成的位置编码。关于Transformer架构为什么选择正余弦函数去生成绝对位置编码以及正余弦函数的一些特性,笔者安利大家阅读kazemnejad老师的博文《Transformer Architecture: The Positional Encoding》,该文详细叙述了正余弦绝对位置编码的原理。诞生于 2018 年末的 BERT也采用了可训练的嵌入形式作为编码。实际上,这三项工作的共性都是在每个词的嵌入上加位置编码之后输入模型。形式上,如下公式所示:
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个位置的绝对位置编码。
近年来,关于绝对位置编码的工作大多数是以不同的方法生成绝对位置编码为主。下面列出一些关于绝对位置编码的一些工作,感兴趣的同学可以了解一下~
- Learning to Encode Position for Transformer with Continuous Dynamical Model
该文提出一种基于连续动态系统的绝对位置编码(FLOATER),从数据中学习神经微分方程递归生成位置编码,在机器翻译、自然语言理解和问答等任务上获得了不错的性能提升。
由于递归机制本身具有出色的外推性质,所以FLOATER基本不受文本长度的限制。并且作者说明了正余弦绝对位置编码就是FLOATER的一个特解。该工作在WMT14 En-De和En-Fr分别进行了实验,分别对比Transformer Base模型有着0.4和1.0 BLEU值的涨幅。但与此同时,这种递归形式的位置编码也牺牲了原本模型的并行输入,在速度上会有一定影响。 - Encoding Word Order in Complex Embeddings
该工作提出一种复值词向量函数生成绝对位置编码,巧妙地将复值函数的振幅和相位与词义和位置相联系,在机器翻译、文本分类和语言模型任务上获得了不错的性能提升。。
该复值词向量函数以位置为变量,计算每个词在不同位置的词向量。由于该函数对于位置变量而言是连续的,因此该方法不光建模了绝对位置,也建模了词之间的相对位置。该工作在WMT16 En-De机器翻译任务数据集上进行了实验,复值词向量对比Transformer Base模型有1.3 BLEU值的涨幅。 - SHAPE: Shifted Absolute Position Embedding for Transformers
该工作提出了一种绝对位置编码的鲁棒性训练方法。作者认为现有的位置编码方法在测试不可见长度时缺乏泛化能力,并提出了平移绝对位置编码(SHAPE)来解决这两个问题。SHAPE的基本思想是在训练过程中对绝对位置编码随机整体平移一段距离来实现泛化能力。该工作在WMT16 En-De机器翻译任务数据集上进行训练,将newstest2010-2016作为校验集和测试集,对比正余弦绝对位置编码,该方法有着一定的性能提升。
相对位置编码
最经典的相对位置编码起源于Shaw等人发表的Self-Attention with Relative Position Representations。在介绍相对位置表示之前,首先简要介绍一下自注意力机制的计算流程,对于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=1∑mα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