← 关联知识节点:位置编码:RoPE 直觉 → 推导 → 实现
交互工具 · 原理

RoPE 旋转指针

RoPE 像钟表:每个 token 按位置转过一角,两个 token 相互打分时看到的只是夹角差——问「8 点与 11 点的时针差多少」,答案永远是 90°,不用管是今天还是去年。拖两根滑杆改变位置 m、n,看指针怎么转、打分怎么只认位置差;锁住位置差平移「楼层」,读数不动;再切「加性编码」对照,同样平移,读数当场漂移。

纯前端算真实公式:θg = base^(−2g/d)、打分 = 旋转后 q·k 点积(q、k 为文章 seed=7 高斯向量),与知识库《位置编码》动手节四个实测读数逐位对账,零 API、零延迟。

RoPE 把每个 token 当成钟表指针:位置 m 转过 m×θ—— 问「8 点与 11 点的时针差多少」,答案永远是 90°,不用管是今天还是去年。 拖两根滑杆改变 token 位置 m、n:夹角只等于位置差 ×θ, 打分(旋转后 q·k 点积)也只看位置差。 锁住位置差平移「楼层」,读数纹丝不动;切「加性编码」对照,同样平移读数当场漂移。

表盘(单位圆 · 第 1 组指针)

171.9°q·mk·n

表盘只画选中的一组针(θ_g=1,波长 6.3 token,组号越大针越慢);打分是全部 4 组的真实点积(文章口径)。

q 指针 · 位置 10
213.0°
m×θ = 10.0 rad · 已转 1 圈
k 指针 · 位置 7
41.1°
n×θ = 7.0 rad · 已转 1 圈
指针夹角 = 差 × θ
171.9°
|m−n|×θ = 3.00 rad(真实转角)

打分读数(q、k 为文章 seed=7 向量,真实计算)

q·k =2.043693

当前位置差 m−n = 3。锁住位置差平移「楼层」:绝对位置 mθ 与 −nθ 在点积里恰好相消,读数纹丝不动——形式绝对、效果相对。

位置 m(q 的楼层)10

0 ~ 100000;锁差时拖它,n 自动跟着走(保持 m−n = 3)

位置 n(k 的楼层)7

0 ~ 100000;锁差时拖它,m 自动跟着走(保持 m−n = 3)

θg = base−2g/d(base=10,000、d=8 教学口径)· 打分 = 旋转后 q·k,只含位置差 (m−n)θg

文章两档锚点,点一下复现「只看位置差」对照

文章动手节实测:两档打分完全相同——2.043693 与 2.043693。位置差同为 3,绝对位置差了四个数量级,打分纹丝不动(差在浮点末位)——点两档锚点可逐位对账。