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

RoPE 快慢针

RoPE 像一套钟表:每组维度的「针」转速不同——最快的针几个 token 转一圈(管邻近词序),最慢的针几千甚至几十万 token 才转一圈(管远距离依赖),转速全由 rope_theta 一个旋钮说了算。拧它,看所有条形一起拉伸:第 1 组秒针纹丝不动,组号越大拉得越长——这正是长上下文扩展「调大 base 把针调慢」的地基。

纯前端算真实公式:θg = base^(−2g/d)、波长 λg = 2π/θg,与知识库《位置编码》波长图两档锚点(base=1 万 / 100 万)逐字对账,零 API、零延迟。

RoPE 把每组维度当成一根指针:θᵢ = base^(−2i/d),转速逐组变慢。 短波长的快针转一圈只过几个 token(管邻近词序), 长波长的慢针几千甚至几十万 token 才转一圈(管远距离依赖)—— 快慢全由 rope_theta 一个旋钮说了算。拧它,看条形整体拉伸。
rope_theta
10,000
base:所有针的共同旋钮
快针波长 · 第 1 组
6.3
token(θ₀=base⁰=1,拧 base 不动它)
慢针波长 · 末组
6283
token(对 1 万档 ×1.00)

各维波长(转一圈的 token 数)

对数横轴 · 每格十倍
1第 1 组:θ=1.00e+0,波长 6.3 token6.3快针 · 管近处2第 2 组:θ=1.00e-1,波长 63 token633第 3 组:θ=1.00e-2,波长 628 token6284第 4 组:θ=1.00e-3,波长 6283 token6283慢针 · 管远距离1101001k10k100k

行号是组号(每组 2 维,共 4 根针)。文章教学口径 d=8;真实模型上百维、末组波长更长,结论只强不弱。 轴上界只随 d 定——拧 theta 看到的就是纯拉伸:第 1 组纹丝不动,组号越大拉得越长。

rope_theta(base)10,000

对数刻度 4,096 ~ 4,000,000;靠近 1 万 / 100 万自动吸附锚点

d 每头维度8

两两一组,共 4 根针;步进 8,文章教学口径 d=8

θg = base−2g/d,波长 λg = 2π/θg(g 为组号,每组 2 维)

文章两档锚点,点一下复现波长图

原版设置(base=1 万,Llama 2 口径):末组波长 6283 token。若训练长度只有 4096,这一维见过的最大相位是 2π×4096/6283 ≈ 4.10 rad(约 235°)——更远的位置全是没读过的刻度,直接外推就在这里翻车。