从0训练LLM · 现代大模型体系 岔路 阅读 + 实验 ≈ 20 分钟 页内实验 ×1
C2 位置:模型怎么知道顺序 岔路课

RoPE 丢了绝对位置吗?LLM 的设计是证明出来的吗?

RoPE 与绝对位置
RoPE 每次旋转用的都是绝对位置,只是在点积里表现为相对距离。顺着这个问题往下问:LLM 的设计有多少是证明出来的?答案是三层——数学性质、理论动机、实验选择。
🔀

这是一堂岔路课,来自一次真实的学习对话。学完 RoPE,还没进 Q/K/V 之前,提问是:

「使用这种旋转的位置编码,似乎只保留了相对位置,缺少了绝对位置,这样效果是 ok 的吗。是实验证明的吗。还是有理论?是不是 LLM 训练很多方法都实际是实验证明,没有绝对的论证?」

本课一问:RoPE 丢了绝对位置吗?LLM 的设计是证明出来的吗?
这一课先不碰:长上下文(回主线第 5 课)。

先修正问题里的一个说法

RoPE 没有丢掉绝对位置。更准确的说法是:每个 q、k 的旋转角由它自己的绝对位置决定;两个 token 做点积时,位置部分自然表现为相对距离。RoFormer 原文的说法也是这两句合在一起:用旋转矩阵编码绝对位置,同时让自注意力里显式出现相对位置的依赖。

用最简单的数字核对一遍:每往后一个位置多转 10°。k 在位置 2 转 20°,q 在位置 5 转 50°,两者差 30°;整句往后挪 18 个位置,k 在 20 转 200°,q 在 23 转 230°,差还是 30°。下面每个数都是 2×2 旋转矩阵现乘出来的:

下面是两个普通的 2 维向量(教学构造):q(提问的一方,在位置 m)和 k(被查的一方,在位置 n)。 RoPE 不给它们「加」任何东西,只是按各自的位置把它们转一个角度:位置 m 转 m × 10°,位置 n 转 n × 10°。 拖两个滑杆,盯住右边那个「旋转后点积」。

实线 = 转过之后的向量 · 虚线 = 还没转的原始向量 · 灰弧 = 两者当前夹角
Query 位置 m5
Key 位置 n2
操作记录 —— 只要 m − n 那一列不变,最后一列就一个数都不变

为什么点积只剩下 m − n(一行推导)
(R(mθ)q) · (R(nθ)k) = qᵀ R(mθ)ᵀ R(nθ) k = qᵀ R(−mθ) R(nθ) k = qᵀ R((n−m)θ) k

关键是旋转矩阵是正交矩阵:R(φ)ᵀ = R(−φ),而且两次旋转可以相加:R(α)R(β) = R(α+β)。 于是 m 和 n 只能以 n − m 的形式留下来,绝对位置在点积里被约掉了。 这正是苏剑林推出 RoPE 的方式——先立下「内积后只剩相对位置」这个方程,解出来就是旋转矩阵。

🎯

试三件事:① 看初始状态,q 转 50°、k 转 20°,差 30°;② 点一次「整体平移 +18」,变成 230° 和 200°,差还是 30°,旋转后点积一个数都没变;③ 对照下面「真实算术」里 qm 的坐标:位置 5 和位置 23 的 q 完全是两个不同的向量——绝对位置确实用上了,只是在点积里被约掉了。

⚠

常见误解:「RoPE 只保留相对位置。」

旋转本身用的就是绝对位置 m;旋转后的 qm 带着 m 的信息。「只剩 n − m」说的是点积这一步的结果,不是 RoPE 把绝对位置扔了。

那模型还知道「我是第几个」吗?

打分里只剩相对距离,但模型并不因此对绝对位置一无所知,线索至少有三条:

绝对位置也不是永远没用:「只看文章开头」「列表里的第一项」「序列末尾」这类任务就用得上它。但对大多数语言规律来说,「苹果离『吃』很近」比「苹果恰好在全文第 1,013 个 token」有用得多,同一个搭配放在第 10 个位置和第 1,010 个位置,规律一样。这就是相对位置被看重的理由。

第二个问题:LLM 的设计是证明出来的吗?

两者都有,但现代 LLM 远不是从一个完整的数学理论推导出来的。更有用的办法是把每一条结论分到三层里去,这一章的每一课都在页面上这么标:

层含义RoPE 身上的例子
数学可证明 前提成立,结论就成立R(m)ᵀR(n) = R(n − m):点积只依赖相对位置;多频率下打分的上界随距离衰减
有理论动机 说得通,但证明不了「最好」语言有一定的平移不变性,所以相对位置可能比绝对坐标更值得学;「距离越远关联越弱」符合直觉。但没有定理说 RoPE 是最优的位置编码
实验验证 比出来的,换条件可能变RoFormer 在翻译和中文长文本上的对比;EleutherAI 在 125M、1.4B 模型上的对比;Qwen 在自家模型上试过把 RoPE 去掉,又加了回来(第 5 课)

同一个方法常常三层都有,缺哪一层都说不完整。最有说服力的例子来自 RoPE 的作者自己:论文 §4.5.5「局限」一节写道,虽然把相对位置形式化成了 2D 子空间里的旋转,他们说不清它为什么比其他位置编码收敛得更快;虽然证明了远程衰减,他们也没找到它在长文本上表现更好的可信解释 。数学性质是证明出来的,「它更好」却是比出来的,而且比出来之后,解释还欠着。

锚点模型上随处都是「实验选出来」的数字,没有一个有定理:

⚠

常见误解:「既然靠实验,LLM 就是在瞎试。」

不是。更准确的分工是:数学告诉我们一个方法有什么性质,并排除明显不合理的设计;理论和直觉告诉我们什么值得试;实验告诉我们它实际上有没有效;规模化再验证放大到几十亿、几千亿参数、万亿 token 之后规律还成不成立。通常的顺序是:理论直觉 → 提出方法 → 小规模实验 → 有效 → 扩大训练 → 大量评测 → 发现规律 → 再补理论解释,而不是「完整理论 → 数学推导 → 必然得到 Transformer」。

🔍 同一个结论,换个规模就变:一个本章里的真例子

第 3 课的实测里,我们自己的小模型上 sinusoidal 明显比可学习位置差;原始论文的对照里两者几乎一样。差别的大头来自实验条件:原论文先把 embedding 乘了 √dmodel,我们的第一版实现没有乘;补上这一步,差距缩小了大半,但仍然没有消失——原论文是 6 层翻译模型训 10 万步,我们是 3.7M 参数的语言模型训 400 步。实验结论要连同实验条件一起引用,这正是 EvidenceBadge 在「实验验证」这一档写着「只在出处写明的模型、数据、规模下成立」的原因。

带走一个学习习惯

以后学每一个组件,都问这三个问题:

🧭

① 它解决什么问题?
② 数学上为什么可能有效?
③ 实验上为什么最后选了它?

这样既不会陷进公式里,也不会把一次实验的结果当成定理。这一章每一课末尾的「证据三问」表,就是这三个问题的答卷。

位置编码的演进,你在这里

位置编码的演进:每一代都被上一代的某个真数字逼出来
  1. 起点 不加任何位置信息 Vaswani 2017 §3.5 的前提
    解决了注意力对所有 token 一视同仁,一次矩阵乘并行算完。
    卡在交换「小明打了小王」为「小王打了小明」,每个 token 的输出向量逐位相同,差值 = 0(第 1 课在浏览器里实算)。
  2. 朴素 ① 把编号直接加进向量 最容易想到的做法
    解决了每个位置一个不同的数,简单直接。
    卡在编号没有上限:在位置 37,内容只剩位置信号的 2.7%(内容 RMS = 1 时;按项目初始化尺度只剩 0.054%)。
  3. 第一代 可学习的绝对位置向量 GPT-2 等
    解决了位置也查表,和词向量一样训练出来。
    卡在表有多少行就只能处理多少个位置:GPT-2 的位置表 1,024 行 × 768 维 = 786,432 个参数,位置 1,024 没有对应的行。
  4. 第一代 · 公式版 Sinusoidal 正弦位置编码 Vaswani 2017
    解决了不背位置,用多组 sin/cos 现算,任意位置都算得出来;两个位置编码的点积只依赖距离。
    卡在「算得出」不等于「会用」:原文表 3 里它和可学习位置几乎一样(dev PPL 4.92 vs 4.92,BLEU 25.8 vs 25.7);而且加在输入上,整句平移后注意力分数会变。
  5. 第二代 相对位置(在注意力里按距离加项) Shaw 2018、T5 等
    解决了直接告诉注意力「相隔多远」,语言规律在文章各处一样。
    卡在要改注意力的计算,为每个距离单独加一项,距离还被截断在 [rmin, rmax] 之内(RoFormer §2.3 的综述)。
  6. 第三代 RoPE 旋转位置编码 Su et al. 2021 你在这里
    解决了按位置旋转 Q、K,转完再点积,绝对位置被约掉,只剩 n − m;不加参数。
    卡在能算到任意长,却只在训练见过的角度内可靠:Qwen3 原生 32,768,64 个频率对里有 24 对一圈都没转满;Qwen3.8 原生 262,144,32 对里有 10 对。
  7. 解决了把新位置折算回见过的范围:Qwen3 32,768 → YaRN ×4 = 131,072;Qwen3.8 262,144 → ×4 ≈ 1M。
    卡在窗口 ≠ 有效长度:Qwen3.8-Flash-Next 技术报告自报,8 针 MRCR 在 128K 为 97.14,到 1M 只剩 20.71(全注意力版本)。
  8. 2026 分歧 部分 RoPE,还是干脆不要(NoPE) 2025–2026
    解决了Qwen3.8 只转 25% 的维度;Kimi K3、GLM-5.3-Flash 的全局注意力层不用任何位置编码,顺序交给线性注意力层。
    卡在Qwen 报告:全注意力层去掉 RoPE,预训练看不出差别,后训练后「停不下来」的比例明显升高——所以它保留了 RoPE。两条路线都做到了百万级上下文,没有唯一正解。
数字口径:GPT-2、Qwen3、Qwen3.8 的数字由 frontier-models.json / anchor-model.json 的官方 config 在构建时现算;表 3 数字出自 Vaswani 2017(本地 PDF);MRCR 数字出自 Qwen3.8-Flash-Next 技术报告表 3(官方自报,未经第三方复现);Qwen 的 NoPE 结论同一报告,只有定性描述。

一句话

📌

RoPE 用绝对位置去转,在点积里只留下相对距离;LLM 的设计多数是「数学性质 + 理论动机 + 实验选择」三层叠出来的。

回到主线

回主线第 5 课:能算出位置编码,就能读懂长文吗? → 第 5 课

你可能会问