赞
踩
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个位置的绝对位置编码。
近年来,关于绝对位置编码的工作大多数是以不同的方法生成绝对位置编码为主。下面列出一些关于绝对位置编码的一些工作,感兴趣的同学可以了解一下~
最经典的相对位置编码起源于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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。