type
status
date
slug
summary
tags
category
icon
password
ROPE是目前不论LLM还是VLLM常用的位置编码。本文将step by step梳理个人对ROPE的理解,如有不当之处,敬请指出。
Attention计算如下,假定当前序列长度为
对于Attention而言,其score的计算依赖各个位置query,key向量的点积。不妨考虑query的和key的位置的向量,记作
原始 不包含任何位置信息,因此需要引入位置相关的映射,使点积结果依赖于相对位置
具体来说:
我们期望找到一个映射
其输入为:1) 当前位置的向量,2) 位置信息。其输出为添加了位置信息的向量,向量经过这个映射后,点乘能够满足:
如何设计这个映射,使得向量的点积结果依赖相对位置? 加法倒是容易,可以引入指数函数
通过上面的运算,我们能够实现:添加了绝对位置的向量相乘后具有累积位置的信息。这里离目标已经很近了。
核心诉求:如何让上式的变为
这里我们不禁想到一个结论:两个复向量的点乘会引入共轭,这个共轭能带来我们想要的负号。
在量子力学、信号处理等领域中,为了保证两个复向量的点乘结果是实数,复向量点乘的定义如下:
的共轭复数。 PS: 其共轭复数
回到上式,我们引入复数将绝对位置信息乘到复数的幅角中,此时,根据上面的复向量的运算规则:
上面的式子已经实现绝对位置编码引入相对位置信息。这里离ROPE最终的形式已经很近了。
对上式进一步改进,已知不妨将视作个复向量,此时上式可写为:
上式已经是ROPE的最终形式,之所以叫ROPE,是因为根据复数的乘法几何意义
对每一个元素可以理解对进行旋转。
回顾一下复数的几种表示方法
因此
上式的形式做的逐元素乘法,对于可以把结果都拼接起来
同理可得
 
检查一下
可见,两个引入绝对位置编码的向量,点积后包含相对位置信息。
注意,上面的形式需要的通道数能够被整除
 
one more thing
上述的推导,我们人为将 以自上而下的顺序,间隔步长为2,group成的向量,将其视为复数的向量形式,并分配旋转矩阵(即)。我们当然可以更改这个group的规则,目前实践中用的比较多的是将的向量group在一起,这样代码实现和效率上有一定的优势,此时
是逐元素乘法,同时更改通道的顺序,点乘后的计算等价
通常源码中都用以上实现方式。
 
ROPE的二维形式
目标变为,找到一个使得
如果直接类比1D的ROPE构造:
他只能建立,不是我们想要的。
通过前文我们找到一个map 使得
核心思路,一半通道编码的位置,另一半编码位置。本质上在两个正交的子空间上分别做1D ROPE。
注意,上面的形式需要的通道数能够被整除
当然ROPE还有很多变体,如3D-ROPE,partial ROPE等。理解了本质,再类比理解就容易了。
给身边考研的小伙伴diffusion model(一):DDPM技术小结 (denoising diffusion probabilistic)
Loading...