Full RoPE 把每一个二维子空间都拧上位置;Partial RoPE 只旋转前 dr 维,NoPE 一维都不旋转,ALiBi 不旋转 q/k 而是在 attention logits 上加一个按距离线性递减的偏置。
三种做法对应三种位置预算:一个子空间、零维、以及一个固定的 recency 先验。
RoPE 的全部结论压在一个恒等式上:qm = RmWqxm、kn = RnWkxn,
因为 RmTRn = Rn−m,所以 qmTkn 只依赖相对位移 n−m。
Full RoPE 把 d/2 个二维子空间全部旋转,默认 base 是 10000。
Partial RoPE 只对前 dr 维做同样的旋转,剩下的维度继续参与点积但不携带位置。
GPT-NeoX 只旋转前 25% 的维度;DeepSeek-V2 把 RoPE 隔离到 64 维的 decoupled key 上(key 在头间共享),让 512 维的压缩内容路径保持可吸收。
NoPE 连旋转都不做,只靠 causal mask 打破排列对称性;论文证明它能表示绝对与相对位置,但训练后更像 T5 的相对偏置。
ALiBi 也不加位置嵌入,改为在每层 logits 上加 m(j−i),斜率按 2−8i/n 取几何序列。
代价各不相同:Partial RoPE 只给一个子空间位置,NoPE 的位置能力完全靠学习,ALiBi 则把 recency 先验写死。 下面的数字卡分别标出旋转比例、ALiBi 的外推 PPL,以及 NoPE 在十亿级代码模型上的有效外推倍数。
先分清两件事:把位置信息注入注意力并不难,难的是注入方式在训练长度之外仍然可用。
自注意力对 token 的排列是等变的:只做 qTk 时,模型看到的是一袋向量,谁在前谁在后没有区别。
位置编码的任务就是把「第几个」写进表示或 logits。绝对位置嵌入直接给每个位置一个向量,加到词嵌入上;
相对位置方法则让注意力分数依赖两个 token 的距离。
绝对位置表有一个硬边界:训练时只见过 0..L−1,推理时出现位置 L 就没有对应的表项。
正弦位置编码理论上可以算到任意位置,但 ALiBi 论文的实测结论是:sinusoidal 模型在超过训练长度后只能多外推几十个 token(ALiBi §2.1)。
「公式能算」和「模型能用」是两件事。
相对位置方法没有这张表,但它也要决定把位置放在哪里:旋转 q/k、给每个距离学一个 bias、还是加一个固定的线性惩罚。 这些选择影响三笔账:位置信息占多少维、每层多多少计算与显存、以及训练长度之外还剩多少有效性。 Partial RoPE、NoPE、ALiBi 正好代表三种极端的分配方式。
还有一个容易被忽略的事实:decoder-only 的 causal mask 本身就打破了排列对称性。 NoPE 论文 §2 指出,带因果掩码的 decoder-only Transformer 并不是排列不变的,因此即使没有显式位置编码,也能建模序列。 这为「完全去掉位置编码」提供了结构基础,但也意味着 NoPE 的位置信息是隐式学出来的,不像 RoPE 那样有一个可写的公式。
先看三条已有路线各自的注入点与瓶颈,再看它们为什么都没有回答「位置该占多少维」。
绝对位置嵌入把位置 i 映射成一个向量,加到词嵌入上。可学习表在训练长度之外没有条目;
正弦表虽然能外推计算,但 ALiBi 论文 §2.1 的实测显示,模型在超过训练长度后只能多走几十个 token。
T5 的相对偏置给每个 query-key 距离学一个共享标量,加到 attention logits 上。它的外推比 APE 好, 但 ALiBi 论文 §2.2 指出训练至少慢一倍。ALiBi §2.2 的例子是:同样做 1024 token 推理, L=1024 的 sinusoidal 是 28.5k words/s,而 L=512 的 T5 bias 是 14.4k words/s(正文引 ALiBi Appendix Table 1)——训练更短也没有速度优势。 注:原文正文与 ALiBi Table 1 对 28.5k 的归属不一致(ALiBi Table 1 的 L=512 Sinusoidal 行也是 28.5k,L=1024 行为 26.0k); 本页表 3 按 ALiBi Table 1 的 512 行转录。
RoPE 把 q/k 的每两维看成一个复数平面,按位置旋转;点积只依赖相对位移。 但 NoPE 论文 §4 在合成推理任务上报告:Rotary 的长度泛化表现更接近 APE,而不是其他相对方法。
表 1 · 三种已有位置方案的注入点与已知瓶颈(页面整理;APE 与 T5 的瓶颈见 ALiBi §2.1 与 ALiBi §2.2,Full RoPE 的瓶颈见 NoPE §4)
| 方案 | 位置进入哪里 | 额外参数 | 已知瓶颈 |
|---|---|---|---|
| 绝对位置嵌入 APE | 加到词嵌入;按位置查表或固定正弦 | 可学习位置表,或 0 个参数 | 训练长度之外没有表项;正弦版实测也只能多外推几十个 token(ALiBi §2.1) |
| T5 relative bias | 每层 attention logits 加一个按距离学习的标量 | 每个距离一个 bias | 训练至少慢一倍(ALiBi §2.2) |
| Full RoPE | 旋转 q/k 的全部 d/2 个二维子空间 | 0 个参数;只有 base 等超参 | 下游长度泛化被 NoPE 论文 §4 归到接近 APE 的一侧 |
这三条路线的共同点是「位置要覆盖整个表示」:APE 给每个位置一整条向量,T5 bias 给每个距离一个标量,Full RoPE 旋转全部维度。 下一个自然问题是:能不能少花一点?只旋转一个子空间,会不会保住相对性又省下计算? 完全不旋转,模型能不能自己学出位置?如果不想旋转,能不能直接用距离惩罚代替?
记住三个式子:RmTRn = Rn−m、θi = B−2i/d,以及 Partial RoPE 的点积 = 旋转子空间项 + 不旋转的常数项。
设第 m 个位置的 query 为 qm = RΘ,mdWqxm,
第 n 个位置的 key 为 kn = RΘ,ndWkxn。
每个 R 是一个块对角矩阵,第 i 块是一个二维旋转,角度为 mθi。
因为旋转矩阵正交,RmTRn = Rn−m,于是:
频率由维度索引决定:θi = B−2i/d,i = 0,1,…,d/2−1。
RoPE 论文取 B = 10000(RoPE §3.2.2)。i=0 的频率恒为 1 rad/token,波长是 2π;
i 越大,频率越低,波长越长。增加维度 d 会加入更多低频对;增大 base B 会把 i>0 的频率整体压低。
推断(由 RoPE §3.2.2 的 θi 公式直接读出;论文没有单独讨论 base 的缩放效果)。
把 q/k 切成两段:前 dr 维记为 rot,其余记为 pass。
只对 rot 施加 RoPE,pass 原样保留:
这是一个连续的光谱:dr = d 是 Full RoPE;dr = 0 时 q/k 完全不旋转,退化成 NoPE 的 q/k 形式。
中间的选择让模型只在一个子空间里看相对位移,剩余维度只提供内容匹配。
推断:位置信号被稀释,但内容通路保留(依据:点积分块展开后,未旋转维度的内积与 m、n 无关)。
这个「常数项」是页面由点积分块展开得到的 推断(依据:上式第一行;论文没有把它写成单独的定理)。
GPT-NeoX 论文 §2.1.1 写明:Su et al. 对每个维度都做旋转,而 GPT-NeoX-20B 只对前 25% 的维度做旋转。 论文的说法是,初始实验显示这样在性能和计算效率之间取得了最好的平衡;正文没有附对照表。
DeepSeek-V2 的 MLA 用低秩压缩存 KV。若把 RoPE 直接施加在压缩后的 key 上,位置敏感的旋转矩阵会夹在
WQ 与 WUK 之间,破坏推理时的矩阵吸收(DeepSeek-V2 §2.1)。
解法是另开一路 qR/kR 专门承载 RoPE:每头的 decoupled 路径另有
64 维(与 128 维内容头维度并列;kR 在头间共享),压缩内容路径保持不旋转。
把 q/k 的每一对维度都取成单位向量 (1,0),只保留旋转项的 cos(Δθi)。
未旋转的维度每对贡献常数 1,所以平均点积 = (d−dr)/d + (2/d)Σcos(Δθi)。
切换 base 与 dr,看曲线在长距离处怎么变。
交互参数:d = 128(DeepSeek-V2 的每头维度),base 10000 来自 RoPE §3.2.2; base 500000 与 d_r 档位是页面自定对照值。这是简化模拟,不是源码实现:只计算 q=k=(1,0) 时的 128 维平均点积。
模型定义:d = 128,q 与 k 在每一对维度上都取单位向量 (1,0)。第 i 对的旋转贡献是
cos(Δ·θi),θi = B−2i/128。
平均点积 = (d−dr)/d + (2/d)Σcos。
组 A:B = 10000,d_r = 32,Δ = 1
组 B:B = 500000,d_r = 32,Δ = 16
JS 只做 Math.pow、Math.cos 和四则运算,显示用 toFixed(4);
上面两组参数在页面上切换后逐位一致。q=k=(1,0) 是页面简化的玩具设定,不是论文实验。
覆盖:RoPE 的二维旋转与相对位移恒等式;d=128 时的 d/2 个频率; Partial RoPE 只旋转前 d_r 维、其余维贡献常数项;base 对 i>0 频率的影响 (i=0 的频率恒为 1 rad/token,不随 base 改变);d_r/d 的位置预算。
未覆盖:真实 q/k 的随机方向与幅值;W_q/W_k 投影;attention softmax 与温度; ALiBi 的偏置项;NoPE 的隐式位置学习;多头之间的斜率差异;训练与长度外推实验; KV cache 与 DeepSeek-V2 的矩阵吸收。
因此它是简化模拟,不是源码实现;它只回答「旋转维数与 base 如何改变 q·k 随相对距离的曲线」, 不回答「哪种变体在某个下游任务上更好」。
NoPE 把位置项整个删掉:qm = Wqxm、kn = Wkxn,
qmTkn = (Wqxm)T(Wkxn)。
它没有位置参数,也没有额外计算(NoPE §4)。
为什么这样还能工作?NoPE 论文 §5.1 给出两个构造:第一层可以在 hidden state 里恢复绝对位置(以序列开头的 <bos> 为锚点,NoPE Appendix C.1);
后续层可以实现相对编码,把点积写成 fcnt(q,k) + frel(n−m)(NoPE §5.1)。
但「能表示」不等于「会学到」:NoPE §5.2 用 attention 分布的 JSD 比较发现,训练后的 NoPE 最像 T5 的相对偏置,最不像 APE 和 Rotary。
ALiBi 的改动只有一处:在 query-key 点积之后、softmax 之前,给每个 head 加一个固定斜率的线性偏置:
斜率按几何序列取。对 n 个头,第 i 个斜率是 2−8i/n,
起点和公比都是 2−8/n(ALiBi §3)。8 个头时是 1/21, …, 1/28;
16 个头时从 2−0.5 开始,按同样的公比插值到 2−8。
ALiBi 论文说这组斜率在多个数据域和模型规模上都能用,因此不需要每次重新调(ALiBi §3)。
这和 NoPE 的差别是「加不加先验」,不是「加不加位置嵌入」:两者都不往词嵌入里加位置向量; 但 ALiBi 在每层 logits 上加一个固定的、按距离递减的标量,NoPE 什么也不加。 和 RoPE 的差别是「加在 logits 上」还是「旋转 q/k」:ALiBi 的 bias 是加性的,RoPE 的旋转是乘性的。
表 2 · 三种变体与基线的位置项对照(页面整理;公式与超参出处:RoPE §3.2.2、GPT-NeoX §2.1.1、NoPE §4 与 NoPE §5、ALiBi §3)
| 变体 | 位置项 | 关键超参 | 位置作用的维度 |
|---|---|---|---|
| Full RoPE | qm=RmWqxm;kn=RnWkxn | base B=10000;d/2 个频率 | 全部 d 维 |
| Partial RoPE | 前 dr 维旋转;其余维不旋转 | dr;GPT-NeoX 取 25% | dr 维 |
| NoPE | 无 | 无 | 0 维;顺序靠 causal mask |
| ALiBi | q/k 不旋转;logits 加 m(j−i) | 每头斜率 2−8i/n | 所有层的每个 q-k 对(标量偏置) |
把每种变体的额外计算、显存和 KV cache 账分开算;ALiBi 不加位置嵌入,但多一份 n×L×L 的 bias mask。
d 维的逐元素旋转;没有额外参数。RoPE 论文 §3.4.2 给出等价的逐元素实现,旋转本身是 O(d),不改变 attention 的 O(N²d) 主项。dr 计;dr < d 时旋转的逐元素运算更少,但 KV cache 仍要存完整的 K,不会因为少转几维而缩小。DeepSeek-V2 的 decoupled key 反而额外存 64 维,换来压缩内容路径可吸收。L×L 变成 n×L×L,ALiBi 论文 §3 报告最多多占 100MB(图 2 的 1024/3072 设置)。斜率不学习;论文说把斜率改成可学习没有带来强外推,训练速度还相对固定斜率的 ALiBi 慢 3%(ALiBi §3 脚注 11)。
DeepSeek-V2 的 KV 账最能说明 Partial RoPE 的工程意义。MLA 的压缩维度 dc 是
512,decoupled RoPE key 的维度 dhR 是
64。每个 token 跨 l 层要存的总 KV 元素是
(dc + dhR)l = (512 + 64)l = 576l;平均每层 576 个。
DeepSeek-V2 Table 1 把它折算成「约 2.25 个 GQA 组」,同时 DeepSeek-V2 Table 1 把能力标为 Stronger(强于 MHA)。
这里的 576 是页面按 DeepSeek-V2 §3.1.2 的两个维度相加得到的每层值,576l 才是跨层总数;
DeepSeek-V2 论文 §2.1.3 给出的是 (dc + dhR)l 的公式。
注意 576 是每 token 每层的 KV cache,跨 l 层是 576l,不是「RoPE 单独占 576」。RoPE 只负责其中 64 维的 key;
如果没有 decoupled 这一路,位置旋转会污染压缩内容路径,推理时就不能把 WUK 吸收进 WQ(DeepSeek-V2 §2.1)。
所以这 64 维是「为了保住矩阵吸收而付出的位置通道」,不是纯粹的额外浪费。
ALiBi 的成本可以用 ALiBi 论文 Table 1 的同一组测量横向看:训练长度 512、WikiText-103、单张 V100。 ALiBi 的训练速度与 sinusoidal 基本持平,推理更快;T5 bias 的训练和推理都慢很多;Rotary 居中但显存更高。
表 3 · WikiText-103、训练长度 512、单张 V100 的速度与显存(按 ALiBi 论文 Table 1 的 L=512 行转录;Train/Eval 单位为 words/s)
| 位置方法 | 训练速度 | 推理速度 | 训练显存 |
|---|---|---|---|
| Sinusoidal | 28.5k | 82.1k | 15.3 GB |
| Rotary | 20.0k | 43.4k | 17.8 GB |
| T5 Bias | 14.4k | 21.8k | 16.9 GB |
| ALiBi | 28.3k | 85.8k | 15.3 GB |
这张表的口径是「训练长度 512」的对比,不是长上下文外推实验;它说明 ALiBi 的固定 bias 在训练和推理上几乎不付额外时间,
代价是那份按 head 复制的 mask。RoPE 的旋转在表里体现为 Rotary 的 20.0k words/s 和 17.8 GB;
Partial RoPE 会把旋转量按 dr/d 缩小,但表里没有 partial 的单独一行,不能把 Rotary 的数字直接当成 Partial RoPE 的数字。
同一层注意力的前向顺序不变,变的是 q/k 投影之后到 softmax 之前那一步。
Wq、Wk 得到每个 token 的 query 和 key。此时两者都还没有位置信息。d/2 个二维子空间;Partial RoPE 只旋转前 dr/2 个;NoPE 跳过;ALiBi 不在 q/k 上做任何事,只准备每头的 bias 矩阵。qiTkj/√d。ALiBi 在这里加上 m(j−i),且这个 bias 不参与 1/√d 缩放(ALiBi §3 脚注 10)。j > i 的位置置为不可见;NoPE 的顺序信息主要来自这一步。
这张图只画「位置项放在哪里」,不画多头注意力的并行、KV cache 的布局和 MLA 的矩阵吸收。
Partial RoPE 的未旋转维度仍会进入 q·k,只是不带位置;NoPE 的 q/k 与普通线性投影完全相同;
ALiBi 的 bias 在每一层都加,不是只在第一层加。三者的差别都在 softmax 之前那一步,之后的 attention 计算共享同一套结构。
两组证据的评测对象不同:一个是 WikiText-103 的 PPL,一个是代码模型的 PPL 随 context 变化;不要横比绝对数。
ALiBi 论文 Table 2 给了训练长度 512 的一组对照。训练 512、评估 512 时,ALiBi 的 PPL 是 19.73;评估 3512 时降到 18.40。 同一组条件下,sinusoidal 从 20.05 涨到 178.97, Rotary 从 20.07 涨到 35.54, T5 bias 从 19.65 涨到 22.91。 3512 是训练长度的 6.9×(3512 / 512);在 3512 这个点上, sinusoidal 与 ALiBi 的 PPL 之比约为 9.7×(178.97 / 18.40)。
表 4 · WikiText-103 验证集 PPL(训练长度 512;节选,保留以下 6 个长度;转录自 ALiBi 论文 Table 2,WPS 列未转录;OOM 表示原文该格为 OOM)
| 评估长度 Lvalid | Sinusoidal | Rotary | T5 Bias | ALiBi |
|---|---|---|---|---|
| 512 | 20.05 | 20.07 | 19.65 | 19.73 |
| 1012 | 43.54 | 21.37 | 18.79 | 18.73 |
| 2512 | 132.41 | 31.58 | 20.41 | 18.41 |
| 3512 | 178.97 | 35.54 | 22.91 | 18.40 |
| 10512 | 341.53 | 60.77 | 52.95 | 18.32 |
| 15512 | 406.01 | 79.25 | OOM | 18.31 |
这张表里最反直觉的一行是 ALiBi 的 18.31:评估长度到 15512 时,它的 PPL 仍低于训练长度 512 时的 19.73。 ALiBi §4.2 还报告,1.3B 参数模型在 1024 上训练、外推到 2048 时, PPL 比在 2048 上训练的 sinusoidal 低 0.09,显存比后者少 3.1 GB, 达到同一 PPL 比在 2048 上训练的 sinusoidal 平均快 11%(ALiBi §4.2)。
NoPE 论文的实验设置是 decoder-only、约 107M 参数、从零训练;训练长度在 1 到 20 之间均匀采样, 测试长度在 1 到 40 之间均匀采样, 覆盖 10 个合成任务、每个任务 3 个种子(NoPE §3)。在这个设置下,NoPE §4 的结论是: NoPE 与最强的显式位置编码 T5 相对偏置相当,甚至更好;ALiBi 居中;APE 和 Rotary 表现较差。
更接近真实规模的证据在 NoPE Appendix F:1.3B 参数、在代码数据上预训练、context 1024。 NoPE 与 ALiBi 都能有效外推到 1800 个 token; 超过 1800 之后,两者 PPL 都上升,但 ALiBi 相对更稳(NoPE Appendix F.3)。 1800 / 1024 = 1.76×,这是本页数字卡里的外推倍数。
两处证据不能拼成一张总排名。ALiBi 论文的主实验是 WikiText-103 语言建模,指标是 PPL; NoPE 论文的主实验是合成推理任务和代码模型,指标是下游准确率与 PPL。 ALiBi 论文说 ALiBi 能外推;NoPE 论文说 ALiBi 在合成任务上居中、不如 T5 相对偏置。 这两句话分别成立,页面并列呈现,不把其中一个推广到另一个 setting。
GPT-NeoX 的 25% 是工程选择,不是一篇受控的外推实验:GPT-NeoX §2.1.1 只说明初始实验认为它在性能和计算效率之间最平衡,
正文没有给对照数字。DeepSeek-V2 的 decoupled RoPE 则把证据放在 KV cache 上:
每 token 每层 576 个元素(512 + 64),跨 l 层共 576l 个;DeepSeek-V2 Table 1 折算成约 2.25 个 GQA 组。
这能说明位置通道可以只占一个小切片,但不能说明 Partial RoPE 在长度外推上优于 Full RoPE。
DeepSeek-V2 的 128K 上下文不能单独归因于 decoupled RoPE:DeepSeek-V2 论文 §3.1.4 说预训练后还用 YaRN 把默认 4K 扩展到 128K, 且 YaRN 只作用在承载 RoPE 的 decoupled key 上。推断:Partial RoPE 在这里的角色是「让位置与压缩内容解耦」, 不是「单靠少转几维就能解释 128K 的外推」。
表 5 · 各变体的证据口径(页面整理;数字出处见各行)
| 变体 | 证据来源 | 设定 | 结果 |
|---|---|---|---|
| Partial RoPE | GPT-NeoX §2.1.1 | 20B 模型;只旋转前 25% 维度 | 作者称性能与计算效率最平衡;正文未附对照表 |
| Decoupled RoPE | DeepSeek-V2 §2.1、DeepSeek-V2 Table 1 | dc=512;dhR=64 | KV cache 每层 576 元素/token;跨 l 层 576l 元素/token;约 2.25 个 GQA 组 |
| NoPE | NoPE §4、NoPE Appendix F.3 | 合成任务;1.3B 代码模型 | 合成任务不输 T5 相对偏置;1.3B 有效外推到 1800 |
| ALiBi | ALiBi Table 2 | WikiText-103;训练 512 | 评估 3512 时 PPL 18.40;sinusoidal 为 178.97 |
把每种选择的失效条件写清楚:部分旋转丢位置,NoPE 在更长上下文变弱,ALiBi 有 recency 偏置。
q·k,但不含位置项;
如果任务需要每个维度都携带细粒度位置,这部分信息只能由旋转子空间和内容匹配间接提供。
GPT-NeoX 的 25% 是初始实验的选择,正文没有给消融表;
DeepSeek-V2 的 decoupled RoPE 与 MLA 的矩阵吸收绑定,不是一个可以无条件搬到其他模型的通用替换。
2L 处最好,并能在实验中维持到 10000 个 token,
但这不是对所有数据域的保证。斜率是固定的几何序列;把斜率改成可学习没有带来强外推,训练速度还相对慢
3%(ALiBi §3 脚注 11)。
需要在不加位置嵌入的前提下,用固定先验换稳定外推和低成本,ALiBi 是最直接的选择; 需要零位置计算、并愿意让模型自己学隐式位置,NoPE 在中小规模下游推理任务上有证据; 想保留 RoPE 的相对性、又要减少旋转维数或保住低秩 KV 的矩阵吸收,Partial/decoupled RoPE 是工程上的折中。 三者不是同一把尺子上的三个刻度:Partial RoPE 改变的是位置子空间,NoPE 去掉的是显式位置项,ALiBi 改变的是 logits 的距离先验。
最后把两处原文的相反结论并列在这里,方便读者按 setting 取用: ALiBi 论文 §4 报告 ALiBi 在 WikiText-103 上外推到 3512 仍保持低 PPL,而 sinusoidal 爆炸; NoPE 论文 §4 报告在合成推理任务上 ALiBi 居中、T5 相对偏置更强、NoPE 最好。 两篇的评测对象、指标和训练数据都不同;页面不把这两组结论合并成一个总排名。