POS系统example.launch 的位置_Transformer改进之相对位置编码(RPE)

165b72df49a2f2fc913ded0a1c9417e9.png

本文讨论一下Transformer中相对位置编码(Relative Position Embedding,RPE)的问题,首先聊聊Vanilla Transformer的编码方式为什么不包含相对位置信息,然后主要围绕三篇论文介绍在Transformer中加入RPE的方法。

Vanilla Transformer位置编码方式有什么问题

我们知道在原理上Transformer是无法隐式学到序列的位置信息的,为了可以处理序列问题,Transformer提出者的解决方案是使用位置编码(Position Encode/Embedding,PE),并且为了计算方便使用绝对位置编码,即序列中每个位置都有一个固定的位置向量,计算如下:

edf9321e0a9ab6967d84733afe0cdaee.png

然后会将词向量和位置向量相加得到每个词最终的输入,然后进行一系列复杂的操作,我们只需要看self attention的运算就可以了,其他的运算和位置编码没关系。attention中也只需要看attention score的计算即可。

所以看一个序列中,第i个单词和第j个单词的attention score的计算:

其中Wq,Wk分别是multi-head attention给每个head加的query和key参数,Exi和Exj是xi和xj的词嵌入,Ui和Uj是第i个位置和第j个位置的位置向量。因式分解得到下式

5fde2379e4aebc726c8ca4cf9ac4f346.png

其中(a)和位置向量和位置编码没关系,(b)和(c)都只有一个位置的向量,所以也不包含相对位置信息,(d)同时包含Ui和Uj,是最有可能包含相对位置信息的。

实际上,按照Vanilla Transformer的位置编码方法,如果没有Wq和Wk那么它是包含相对位置信息的,证明如下:

8a1ad53364c62b2e0f85e48b2dcc865b.png

可以看到最后的结果只和两个位置的相对位置有关系,也就是包含相对位置信息。

但是中间加入一个“不可知”的线性变换以后,就没有相对位置信息了,这个可以使用实验证明,具体如下图

a7ec83611be9a4622ef48a46d78f70f5.png

图中,k表示两个位置的距离,上面蓝色的曲线表示

,下面的两条曲线分别表示
,W1和W2表示两个
随机的参数矩阵。图中可以看到
的曲线和有明显的pattern,而下面的两条曲线却看不出明显的pattern。这就说明了(d)中也不包含相对位置信息。

这里细心的人一定会提出疑问,上面说的W1和W2都是随机的,但是在Transformer中Wq和Wk都是trianable的,也许最终学到的​

可以使得
​ 保留相对位置信息呢,因为这并没有从理论上证伪,只给大家看了两个所谓的随机的W,并没有枚举所有的可能?一个最简单的例子,假如训练完全的​
,那么
​ ,也就包含相对位置信息。对于这点其实不用争吵,只需要把预训练好的BERT中的参数拿出来,试一下即可,没几行代码,有兴趣的同学可以一试。

Transformer中加入相对位置信息


第一篇paper: Self-Attention with Relative Position Representations

既然相对位置信息是在self-attention计算时候丢失的,那么最直接的想法就是在计算self-attention的时候再加回来。该工作出自Transformer的原班人马,看来Transformer提出时他们就已经发现这个问题了。

具体做法是在计算attention score和weighted value时各加入一个可训练的表示相对位置的参数,并且multi head之间可以共享。具体的:

就表示了xi和xj的相对位置信息,所以他们只和 i 和 j 的差值k有关。具体如下:

38974ae41e2977aac110736b37173982.png

论文中这个图就比较形象了

27070a3801cae3decba724c6a1ab192d.png

作者表示,k>4以后效果就没有提升了,说明通常情况下,临域为4的窗口内(4 gram),attention对相对位置比较敏感,窗口以外,相对位置可以不做区分。


第二篇paper: Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context

回顾上文说的self-attention的计算公式

5fde2379e4aebc726c8ca4cf9ac4f346.png

transformer-xl中将其改写为如下

f6d5859aa8a14a552f43a951851ac9d6.png

改写的逻辑如下:

  1. 首先将所有的Uj改为
    ​ ,表示对key来说将绝对位置转换为相对query(xi)的位置。
    也是基于正弦波的,可以理解为
  2. (c)和(d)中
    表示query相关的绝对位置向量,改为相对位置以后,query应该和自己的位置没关系,所以将每个head对应的
    使用一个和位置i无关的向量u表示。v也是同理。由于Wq是一个trainable的参数,所以u和v也是trainable

第三篇paper: Encoding word order in complex embeddings(openreview)

这篇paper比较有意思,这篇文章让我想起来了GraphWave...

前面两个方法都是基于"词向量+位置向量"的模式,说白了是在“亡羊补牢”,而没有一开始就修建一个牢固的羊圈。而这篇论文从两个基本的假设,推导出一个复数域的词向量方法,理论十分优美。

首先用一个复数域函数表示词表中索引为j,在一段文本中位置为pos的单词的向量表示,D是词向量维度

两个基本假设为:

  • 已知一个词在某个位置的词向量表示,可以计算出它在任何位置的词向量表示。数学语言就是:存在一个函数Transform,对于任意pos和n >= 1,都有
  • 有界性,即词向量函数的范数是有界的。数学语言就是:存在一个正数​
    ,对任意位置pos,都有

在Transform为线性函数的假设下,那么函数g只有一个解:

到这里就知道为什么g要选择复数域了,如果是g是实数域函数

  • ​ ,同一个词在不同位置的词向量是一样的,无法达到建模位置信息的目的。
  • ​,当pos很大时,词向量将收敛到零向量,即无法对任意位置都计算出合理的词向量。

而当 g是复数域时,可以避免以上两个问题。

最终

其中rj表示振幅,wj是角频率,

是初相位。

需要注意的是,以上是向量形式的函数,如果表示成非向量形式,即对词向量中的每一维度拆开,如下:

每一维度还是一个复数咋整?把实部和虚部分别写成一个向量,再concat起来变成2D维向量即可,GraphWave也是这么做的。下面这个图很形象

441bcff891bacd58a90a8e44c34e71e8.png

这种复数词向量还有很不错的可解释性。

  • 振幅rj只和词相关,对应于词向量
  • 角频率wj表示词对位置的敏感程度,当角频率越小对位置越不敏感

另外原始的绝对位置向量也是该复数域词向量的一种特殊形式,一边有sin, cos,一边有e^i,再结合欧拉公式,推导一下即可。

缺点在于,参数是原来的三倍,所以作者提出一些降低参数的技巧,不再赘述。

总结

本文讨论一下Transformer中相对位置编码(Relative Position Embedding,RPE)的问题,首先聊聊Vanilla Transformer的编码方式为什么不包含相对位置信息,然后主要围绕三篇论文介绍在Transformer中加入RPE的方法。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值