旋转位置编码

Transformer升级之路:2、博采众长的旋转式位置编码 - 科学空间|Scientific Spaces

旋转矩阵

旋转位置编码的关键就在于对q,k向量额外乘一个旋转矩阵。旋转矩阵是单位正交阵,正交意味着它的转置等于它的逆,也意味着两个向量点乘的结果不会有改变,单位则意味着向量的模长不会变。这两个特性让旋转矩阵可以让高维向量/形状旋转

原文对位置编码这个任务进行了形式化

对q,k向量进行一个操作,让q和k带上绝对的位置信息。因为是旋转位置编码,这里的操作f就表示让q向量旋转角度m,让k向量旋转角度n

按照注意力的计算方式对加入了绝对位置信息的q,k点乘,点乘结果只和相对位置信息有关。这里相对位置信息就是m-n,即q,k之间旋转角度的差值,如果m-n=0,意思就是q,k旋转了相同的角度,结果一样。

只要满足上面两个条件,就满足了用绝对位置信息搞相对位置编码的要求了。另外为了方便,还可以假设,即m=0表示位置为0时不旋转

通过二维旋转矩阵引入位置信息

原文先假设q,k是二维向量,然后通过复数来推导。因为复数乘法有旋转的几何含义(上面的第一个式子)。同时复数相乘取实部(或者虚部)有点乘的效果(第二个式子),所以可以用来简化推导。(但是当时看的时候稍微有点困惑)

接下来,对更高维度的q,k,我们可以对向量两两分组,每一组用不同的旋转矩阵进行旋转(即)
但是这里似乎用完全相同的也问题不大,因为毕竟都是能表达旋转位置信息。

上面的只是一个旋转矩阵的特例,二维的旋转矩阵只有一个方向能转,高维度的旋转矩阵就有很多方向能转了。而上面通过两两分组写出来的就是一种方向
其实只要能满足下面这个式子就可以了

下面还可以将乘一个旋转矩阵改成这种逐个位置相加的形式。这也是为什么我们不选择其他旋转矩阵的原因——因为这样的稀疏的分块对角的旋转矩阵实现更简单。

角度设置

最后,文章讲了如何选择,作者的选择是. 主要是依据远程衰减性,有点不太理解,也看不太懂原文的推理(数学差一点是这样的orz)。但是姑妄言之,总比没有强

首先,虽然当m-n=0时,q,k使用相同的旋转矩阵,不会改变点积的结果,但是m-n比较大时,就会改变点积结果。

假设q,k是相同的二维向量,相距m,点积结果为

(因为某个向量多旋转了嘛,当然应该多乘

那么假设旋转角度,就会让奇数位置的点积结果为0,某些位置注意力一下变成0了,从感性上来说不太好,所以最好不要太大,比较好。这样比较远的相同词向量点乘结果会逐渐趋近于0

但是也不是越小越好,比较大的旋转角度有利于模型分辨相邻的位置信息。所以最好是有一部分大,有一部分小。大的旋转矩阵会让它那部分的点积结果周期性的变大变小,因此体现短程位置信息。如下图,类似于一种二进制编码。

上面作者选择,是一个递减的指数函数,大部分角度较小,最大角度,最小,序列长度大概为时相同词向量点积结果为0。序列长度为时转过一个周期,模型无法通过旋转位置编码区分相差这个距离的token。所以最大序列长度最好小于,b是指那个10000的底数

上面的分析只是说了为什么对每个分块旋转矩阵要选择不同的旋转角度,为什么距离较远的向量旋转编码后点积结果会小,以及最小旋转角度可能和最大序列长度有关。并没有说明为啥要而不是其它形式,兴许随便选的罢

附:Transformer升级之路:18、RoPE的底数设计原则 - 科学空间|Scientific Spaces 从语义聚合的角度对中的b有更多分析。所谓语义聚合,指的是平均而言当k与q相近时,不管它们的相对距离n−m多大,其注意力平均来说都应该更大(至少要比随机的两个Token更大)。分析后发现就是要求,在希望找到对给定L,最能满足约束的b,当然b越大角度越小,所以平均而言cos的求和越大。作者找了满足条件的尽可能小的b,b比L大一个到几个数量级。

扩展上下文

选择还有其它好处,就是便于对位置信息插值。

下图是位置编码的示意图,横坐标为i,表示了q,k向量不同的维度,纵坐标为m,表示了相对位置。颜色表示的数值,表示位置编码对相同向量点乘结果的影响。


(实际图上每一列是,忽略那一列就好)
看上去很像二进制,因为每一列都是不同的周期函数,在-1~1之间变动
实际上这个位置编码可以理解为进制,因为相邻列之间周期相差一个固定的数值
与实际的x进制的区别在于幅值只在-1~1而不是0~x-1


这个函数的周期为,i表示不同列,所以相邻列之间周期相差

线性内插
位置m一般取0,1,2,3,4…但是如果让它取0,0.5,1,1.5…呢?我们只需要把角度变成,这样就可以在原本0.5的位置上安插token,从而扩展上下文。

对应到图上,就是把那张图竖着等比例拉长一倍。这样周期就变为
每列周期等比例伸长,但是相邻列周期比例不变

NTK-aware scaled RoPE
另一种思路是改变,即增加相邻周期比例。想要将上下文扩展一倍,每列周期就变成
实验表明这种效果更好

参考:Transformer升级之路:10、RoPE是一种β进制编码 - 科学空间|Scientific Spaces

其它

二维旋转位置编码

Transformer升级之路:4、二维位置的旋转式位置编码 - 科学空间|Scientific Spaces

一维的情况,找到满足的矩阵

二维的情况,找到满足的矩阵
同时对输入坐标(x,y)有可逆性,即给定x,y唯一确定一个矩阵

最后位置信息还是体现在点乘结果上

Transformer升级之路:17、多模态位置编码的简单思考 - 科学空间|Scientific Spaces