🌀 RoPE 旋转位置编码详解与计算示例
一、RoPE 的数学基础
1. 频率参数生成
给定维度 d 和位置 m,定义频率参数:
θi=100002i/d1
其中:
- i:维度索引(从 0 开始), 这个公式很好记忆,d 是向量维度,比如128。而i 乘以2不能超过d,所以当d=128 的时候,
- d:向量总维度。
2. 二维旋转矩阵构造
对每个维度 i,构建对应的二维旋转矩阵:
R(i)=[cos(mθi)sin(mθi)−sin(mθi)cos(mθi)]
3. 向量旋转公式
对于查询向量 qm[i],qm[i+1],旋转后的位置编码为:
qm′[i]qm′[i+1]=qm[i]⋅cos(mθi)−qm[i+1]⋅sin(mθi)=qm[i]⋅sin(mθi)+qm[i+1]⋅cos(mθi)
二、实际计算示例
示例设定:
- 维度 d=4
- 位置 m=2
- 查询向量 qm=[1,2,3,4]
步骤 1:计算频率参数
对每个维度 i=0,1,2,3:
θ0=100000/21=1,θ1=100001/21=0.01,θ2=100002/21=0.0001,θ3=100003/21=0.00001
步骤 2:计算旋转角度
使用 m=2,得到:
mθ0mθ1mθ2mθ3=2×1=2=2×0.01=0.02=2×0.0001=0.0002=2×0.00001=0.00002
步骤 3:构建旋转矩阵并应用
对维度 i=0 和 i=1:
R(0)=[cos(2)sin(2)−sin(2)cos(2)]≈[−0.41610.9093−0.9093−0.4161]
将向量 [1,2] 应用旋转:
qm′[0]qm′[1]=1⋅(−0.4161)−2⋅0.9093=−2.2347=1⋅0.9093+2⋅(−0.4161)=0.0771
对维度 i=2 和 i=3:
R(2)=[cos(0.0002)sin(0.0002)−sin(0.0002)cos(0.0002)]≈[0.999999980.0002−0.00020.99999998]
将向量 [3,4] 应用旋转:
qm′[2]qm′[3]=3⋅0.99999998−4⋅0.0002=2.99999194=3⋅0.0002+4⋅0.99999998=4.00000594
最终结果:
旋转后向量:
qm′=[−2.2347, 0.0771, 2.99999194, 4.00000594]
三、总结
-
RoPE 的优势:
- 捕捉相对位置信息;
- 保持向量模长不变;
- 可扩展至高维空间;
- 支持长序列建模。
-
应用场景:
- Transformer 架构中用于增强位置感知能力;
- 大型语言模型(LLM)中的上下文建模。