RoPE Variants
LLM 架构 · 位置编码

RoPE 变体:少转几维、干脆不转,还是改成线性偏置

Full RoPE 把每一个二维子空间都拧上位置;Partial RoPE 只旋转前 dr 维,NoPE 一维都不旋转,ALiBi 不旋转 q/k 而是在 attention logits 上加一个按距离线性递减的偏置。 三种做法对应三种位置预算:一个子空间、零维、以及一个固定的 recency 先验。

RoPE 2104.09864 · ALiBi 2108.12409 · NoPE 2305.19466 · GPT-NeoX 2204.06745 · DeepSeek-V2 2405.04434 RoPE ↗ ALiBi ↗ NoPE 论文 ↗ GPT-NeoX ↗ DeepSeek-V2 ↗
TL;DR · 30 秒抓住核心

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 在十亿级代码模型上的有效外推倍数。

25%
GPT-NeoX 的 partial RoPE
只旋转前四分之一的维度
18.40
ALiBi 的 WikiText-103 PPL
训练 512、评估 3512 token
1.76×
NoPE 在十亿级代码模型上的
有效外推倍数
01

注意力本身不知道顺序;难的是位置在训练长度之外还成立

先分清两件事:把位置信息注入注意力并不难,难的是注入方式在训练长度之外仍然可用。

自注意力对 token 的排列是等变的:只做 qTk 时,模型看到的是一袋向量,谁在前谁在后没有区别。 位置编码的任务就是把「第几个」写进表示或 logits。绝对位置嵌入直接给每个位置一个向量,加到词嵌入上; 相对位置方法则让注意力分数依赖两个 token 的距离。

绝对位置表有一个硬边界:训练时只见过 0..L−1,推理时出现位置 L 就没有对应的表项。 正弦位置编码理论上可以算到任意位置,但 ALiBi 论文的实测结论是:sinusoidal 模型在超过训练长度后只能多外推几十个 token(ALiBi §2.1)。 「公式能算」和「模型能用」是两件事。

相对位置方法没有这张表,但它也要决定把位置放在哪里:旋转 q/k、给每个距离学一个 bias、还是加一个固定的线性惩罚。 这些选择影响三笔账:位置信息占多少维、每层多多少计算与显存、以及训练长度之外还剩多少有效性。 Partial RoPE、NoPE、ALiBi 正好代表三种极端的分配方式。

绝对位置:位置 → 加到词嵌入的表
相对位置:位置 → 只进入 q·k 的距离函数
本文比较:位置 → 一个子空间 / 零维 / 一个 logits 偏置
三种位置预算的抽象;具体实现分别见 RoPE §3.2.2、GPT-NeoX §2.1.1、ALiBi §3

还有一个容易被忽略的事实:decoder-only 的 causal mask 本身就打破了排列对称性。 NoPE 论文 §2 指出,带因果掩码的 decoder-only Transformer 并不是排列不变的,因此即使没有显式位置编码,也能建模序列。 这为「完全去掉位置编码」提供了结构基础,但也意味着 NoPE 的位置信息是隐式学出来的,不像 RoPE 那样有一个可写的公式。

02

全维 RoPE 已经是相对编码;三种变体改的是位置预算的分配

先看三条已有路线各自的注入点与瓶颈,再看它们为什么都没有回答「位置该占多少维」。

APE

按位置查表

绝对位置嵌入把位置 i 映射成一个向量,加到词嵌入上。可学习表在训练长度之外没有条目; 正弦表虽然能外推计算,但 ALiBi 论文 §2.1 的实测显示,模型在超过训练长度后只能多走几十个 token。

T5 bias

按距离学一个标量

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 行转录。

Full RoPE

旋转全部二维子空间

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 旋转全部维度。 下一个自然问题是:能不能少花一点?只旋转一个子空间,会不会保住相对性又省下计算? 完全不旋转,模型能不能自己学出位置?如果不想旋转,能不能直接用距离惩罚代替?

03

RoPE 把相对位移写进旋转角;Partial RoPE 只让一个子空间携带位置

记住三个式子:RmTRn = Rn−m、θi = B−2i/d,以及 Partial RoPE 的点积 = 旋转子空间项 + 不旋转的常数项。

Full RoPE:相对性来自旋转矩阵的乘法

设第 m 个位置的 query 为 qm = RΘ,mdWqxm, 第 n 个位置的 key 为 kn = RΘ,ndWkxn。 每个 R 是一个块对角矩阵,第 i 块是一个二维旋转,角度为 mθi。 因为旋转矩阵正交,RmTRn = Rn−m,于是:

qmTkn = (Wqxm)T RΘ,md,T RΘ,nd (Wkxn)
= (Wqxm)T RΘ,n−md (Wkxn)
RoPE 论文 §3.2.2 式 (15)–(16):绝对位置写进旋转角,点积里只剩相对位移 n−m;R 正交,所以旋转不改变向量范数

频率由维度索引决定:θ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 的缩放效果)。

Partial RoPE:只旋转前 dr 维,其余维贡献一个常数项

把 q/k 切成两段:前 dr 维记为 rot,其余记为 pass。 只对 rot 施加 RoPE,pass 原样保留:

qm = [ RΘ,mdr qrot ; qpass ]
kn = [ RΘ,ndr krot ; kpass ]
qmTkn = qrotTRΘ,n−mdrkrot + qpassTkpass
第一项携带相对位置,第二项与 m、n 无关;GPT-NeoX §2.1.1 取 dr = 25% 的维度,DeepSeek-V2 §2.1 把 RoPE 隔离到独立的 64 维 decoupled key 上

这是一个连续的光谱:dr = d 是 Full RoPE;dr = 0 时 q/k 完全不旋转,退化成 NoPE 的 q/k 形式。 中间的选择让模型只在一个子空间里看相对位移,剩余维度只提供内容匹配。 推断:位置信号被稀释,但内容通路保留(依据:点积分块展开后,未旋转维度的内积与 m、n 无关)。 这个「常数项」是页面由点积分块展开得到的 推断(依据:上式第一行;论文没有把它写成单独的定理)。

GPT-NeoX §2.1.1

前 25% 维度旋转

GPT-NeoX 论文 §2.1.1 写明:Su et al. 对每个维度都做旋转,而 GPT-NeoX-20B 只对前 25% 的维度做旋转。 论文的说法是,初始实验显示这样在性能和计算效率之间取得了最好的平衡;正文没有附对照表。

DeepSeek-V2 §2.1

decoupled RoPE:位置不碰压缩内容

DeepSeek-V2 的 MLA 用低秩压缩存 KV。若把 RoPE 直接施加在压缩后的 key 上,位置敏感的旋转矩阵会夹在 WQ 与 WUK 之间,破坏推理时的矩阵吸收(DeepSeek-V2 §2.1)。 解法是另开一路 qR/kR 专门承载 RoPE:每头的 decoupled 路径另有 64 维(与 128 维内容头维度并列;kR 在头间共享),压缩内容路径保持不旋转。

交互:旋转维数与 base 如何改变 q·k 随距离的曲线

把 q/k 的每一对维度都取成单位向量 (1,0),只保留旋转项的 cos(Δθi)。 未旋转的维度每对贡献常数 1,所以平均点积 = (d−dr)/d + (2/d)Σcos(Δθi)。 切换 base 与 dr,看曲线在长距离处怎么变。

固定为 DeepSeek-V2 的每头维度
相对距离 Δ
1
旋转维数 d_r
32
旋转对数
16
Σ cos
14.1137
平均点积
0.9705
1.0 0.5 0 −0.5 −1.0 0 32 64 96 128 相对距离 Δ(token)
平均点积 未旋转维度贡献 (d−d_r)/d
当前读数
Δ = 1,d_r = 32:Σ cos = 14.1137,平均点积 = 0.9705。

交互参数:d = 128(DeepSeek-V2 的每头维度),base 10000 来自 RoPE §3.2.2; base 500000 与 d_r 档位是页面自定对照值。这是简化模拟,不是源码实现:只计算 q=k=(1,0) 时的 128 维平均点积。

手算对账:两组参数,JS 与手算同一套公式点开看每一步

模型定义: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

  1. θi = 10000−i/64,i = 0…15。
  2. 16 项 cos 值:0.540302, 0.647906, 0.731761, 0.796458, 0.846009, 0.883756, 0.912396, 0.934062, 0.950415, 0.962739, 0.972014, 0.978989, 0.984230, 0.988167, 0.991122, 0.993340;Σ = 14.113666。
  3. 未旋转贡献 = (128 − 32) / 128 = 0.75;旋转项 = 2 × 14.113666 / 128 = 0.220526。
  4. 平均点积 = 0.75 + 0.220526 = 0.970526,显示 0.9705。

组 B:B = 500000,d_r = 32,Δ = 16

  1. θi = 500000−i/64,i = 0…15。
  2. 16 项 cos 值:−0.957659, 0.892695, −0.369020, −0.714084, 0.722987, 0.855903, −0.036736, −0.785515, −0.999246, −0.817334, −0.469038, −0.106298, 0.203022, 0.441923, 0.616337, 0.739395;Σ = −0.782669。
  3. 未旋转贡献 = 0.75;旋转项 = 2 × (−0.782669) / 128 = −0.012229。
  4. 平均点积 = 0.75 − 0.012229 = 0.737771,显示 0.7378。

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:不旋转,靠因果结构隐式定位

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:不加位置嵌入,但在每层 logits 上加距离惩罚

ALiBi 的改动只有一处:在 query-key 点积之后、softmax 之前,给每个 head 加一个固定斜率的线性偏置:

softmax( qiKT + m · [−(i−1), …, −2, −1, 0] )
ALiBi 论文 §3:m 是每个 head 固定、不学习的斜率;bias 不乘 1/√dk(ALiBi §3 脚注 10);网络里不加任何位置嵌入

斜率按几何序列取。对 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 对(标量偏置)
04

省的是旋转与 KV,代价是位置分辨率或一份额外的 bias mask

把每种变体的额外计算、显存和 KV cache 账分开算;ALiBi 不加位置嵌入,但多一份 n×L×L 的 bias mask。

开销账本

四笔账:旋转、KV、bias 矩阵、参数

  • Full RoPE:每个 token 每层做 d 维的逐元素旋转;没有额外参数。RoPE 论文 §3.4.2 给出等价的逐元素实现,旋转本身是 O(d),不改变 attention 的 O(N²d) 主项。
  • Partial RoPE:旋转量按 dr 计;dr < d 时旋转的逐元素运算更少,但 KV cache 仍要存完整的 K,不会因为少转几维而缩小。DeepSeek-V2 的 decoupled key 反而额外存 64 维,换来压缩内容路径可吸收。
  • NoPE:没有位置参数、没有额外项;NoPE 论文 §4 明确说它不增加 attention 的计算量。
  • ALiBi:前向不增加运算,bias 直接加进 mask;但 mask 从 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)

位置方法训练速度推理速度训练显存
Sinusoidal28.5k82.1k15.3 GB
Rotary20.0k43.4k17.8 GB
T5 Bias14.4k21.8k16.9 GB
ALiBi28.3k85.8k15.3 GB

这张表的口径是「训练长度 512」的对比,不是长上下文外推实验;它说明 ALiBi 的固定 bias 在训练和推理上几乎不付额外时间, 代价是那份按 head 复制的 mask。RoPE 的旋转在表里体现为 Rotary 的 20.0k words/s 和 17.8 GB; Partial RoPE 会把旋转量按 dr/d 缩小,但表里没有 partial 的单独一行,不能把 Rotary 的数字直接当成 Partial RoPE 的数字。

05

三个注入点:q/k 旋转、什么都不加、logits 加偏置

同一层注意力的前向顺序不变,变的是 q/k 投影之后到 softmax 之前那一步。

位置进入注意力的三个位置 RoPE / Partial RoPE 旋转 不旋转 只旋转前 d_r 维 其余维度仍参与 q·k 但不含位置项 q_m = R_m W_q x_m q_mᵀk_n = f(n − m) only first d_r dims rotate 全维 RoPE 是 d_r = d 的特例 d_r = 0 时退化为 NoPE 的 q/k NoPE 没有位置模块 q/k 不做任何位置变换 j ≤ i mask 让位置 i 只能看 ≤ i q_mᵀk_n = (W_q x_m)ᵀ(W_k x_n) 没有显式位置项;顺序来自因果结构 ALiBi q/k 不旋转;在 logits 上加 每头一个固定斜率 m 的线性偏置 logits_ij = q_iᵀk_j + m(j − i) m_i = 2^(−8i/n) 斜率随头号递减 不加位置嵌入; bias 不乘 1/√d_k 同一层里,位置只可能进入 q/k、logits,或者哪里都不进
图 1 · 三种位置注入点的示意。左:RoPE/Partial RoPE 旋转 q/k 的子空间;中:NoPE 只保留 causal mask;右:ALiBi 在每层 logits 上加线性偏置。图中 d_r 与 128/64 的数字来自 GPT-NeoX §2.1.1 与 DeepSeek-V2 §3.1.2;MLA 的完整压缩路径与 KV cache 布局未画。
  1. q/k 投影:先用 Wq、Wk 得到每个 token 的 query 和 key。此时两者都还没有位置信息。
  2. 位置处理:Full RoPE 旋转全部 d/2 个二维子空间;Partial RoPE 只旋转前 dr/2 个;NoPE 跳过;ALiBi 不在 q/k 上做任何事,只准备每头的 bias 矩阵。
  3. logits:计算 qiTkj/√d。ALiBi 在这里加上 m(j−i),且这个 bias 不参与 1/√d 缩放(ALiBi §3 脚注 10)。
  4. mask + softmax:因果掩码把 j > i 的位置置为不可见;NoPE 的顺序信息主要来自这一步。
  5. 加权求和:用 softmax 权重聚合 value。三种变体都不改变 value 的计算,位置只影响 attention 权重。

这张图只画「位置项放在哪里」,不画多头注意力的并行、KV cache 的布局和 MLA 的矩阵吸收。 Partial RoPE 的未旋转维度仍会进入 q·k,只是不带位置;NoPE 的 q/k 与普通线性投影完全相同; ALiBi 的 bias 在每一层都加,不是只在第一层加。三者的差别都在 softmax 之前那一步,之后的 attention 计算共享同一套结构。

06

ALiBi 在语言建模上把 512 训练外推到 3512;NoPE 在十亿级代码模型上到 1800

两组证据的评测对象不同:一个是 WikiText-103 的 PPL,一个是代码模型的 PPL 随 context 变化;不要横比绝对数。

ALiBi:PPL 随评估长度变长而下降,sinusoidal 则爆炸

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)

评估长度 LvalidSinusoidalRotaryT5 BiasALiBi
51220.0520.0719.6519.73
101243.5421.3718.7918.73
2512132.4131.5820.4118.41
3512178.9735.5422.9118.40
10512341.5360.7752.9518.32
15512406.0179.25OOM18.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:合成任务上不输 T5 相对偏置,代码模型上到 1800

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。

Partial RoPE:证据是效率,不是一条独立的外推曲线

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
07

没有一种变体同时保住位置分辨率、零成本和长度外推

把每种选择的失效条件写清楚:部分旋转丢位置,NoPE 在更长上下文变弱,ALiBi 有 recency 偏置。

一句话判据

什么时候选哪个

需要在不加位置嵌入的前提下,用固定先验换稳定外推和低成本,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 最好。 两篇的评测对象、指标和训练数据都不同;页面不把这两组结论合并成一个总排名。