Long-Context Extrapolation
LLM 位置编码 · 上下文扩展

长上下文外推:不是把位置调大,而是决定每个频率压多少

RoPE 的注意力只看到相对角度 (m−n)θj。序列超过训练长度后,直接外推会把角度推到训练分布之外; Position Interpolation 把位置压回原区间,代价是所有频率一起被压扁。YaRN、LongRoPE 和 DCA 分别从频率分组、逐维搜索和注意力矩阵三条路修正这一点。 页面把「标称长度」和「有效长度」分开看。

TL;DR · 30 秒抓住核心

RoPE 的 attention score 只依赖相对距离 (m−n)θj。训练长度 L 之外的角度没有在预训练中出现, 直接外推的 PPL 可以超过 103(PI §2.2)。PI 的做法是把位置 m 压成 mL/L′, 让最大角度回到训练区间;论文给出的插值误差上界至少比外推上界小 600×(PI §2.3,LLaMA 7B 设定)。

统一缩放的问题是所有频率一起被压。NTK-aware 改 base,让高频维度少压、低频维度多压;YaRN 用波长比 r=L/λ 做分段 ramp, 再给 attention logits 加一个温度 1/t;LongRoPE 把每个维度的缩放因子 λi 和起始 token 数 n̂ 变成搜索变量, 再用渐进式扩展把 256k 推到 2048k。DCA 不走频率缩放,它把相对位置矩阵按 chunk 重写。

标称长度不等于有效长度。LongRoPE 报告 2048k 的目标窗口,但 passkey 在 2048k 处并非所有模型都能保持; LongRoPE2 用 RULER 把「有效」单独量出来:LLaMA3-8B 在 128k 处平均分 82.03,同一张 LongRoPE2 Table 2 里 LongRoPE 为 73.40。 短上下文保持是第二条轴:扩得越远,越需要单独回收 4k/8k 的能力。

600×
PI 的插值误差上界至少比外推上界小 600×
LLaMA 设定,理论比较,不是实验提升
400 steps
YaRN s=16 的微调步数
PG19 64k 段,占预训练语料不到约 0.1%
82.03
LongRoPE2 在 RULER 128k 的平均分
LLaMA3-8B;同表 LongRoPE 为 73.40
01

外推失败的根因:没见过的旋转角,加上被压扁的局部距离

读完这节应知道:RoPE 的注意力只看相对角度;训练长度之外,角度分布变了;把所有位置压回原区间能稳住数值,但会让相邻 token 的差异变小。

RoPE 对 query 和 key 做旋转。取位置索引 m、n,第 j 个频率对的角度是 (m−n)θj,其中 θj=b−2j/D、b=10000 (YaRN §2.1)。这也意味着 attention score 只看相对距离 s=m−n,与绝对位置无关。 预训练时 s≤L;推理超过 L 后,sθj 落到了训练时没覆盖的相位上。

a(s) = Σj [ (q2jk2j + q2j+1k2j+1) cos(sθj) + (q2jk2j+1 − q2j+1k2j) sin(sθj) ]
PI §2.1 Eq.2:a(s) 只依赖相对距离 s=m−n;θj=10000−2j/d

PI §2.2 把直接外推的失败写得很直白:模型在比训练长度更长的序列上,PPL 可以冲到 103 以上,接近未训练模型。论文的解释是三角基函数可以拟合 [0,L] 内的任意形状,但外推区间没有约束,RoPE 原始上界可能非常松。 PI §2.3 于是改看插值误差:把位置压回 [0,L] 后,误差上界至少比外推上界小 600×(PI §2.3,LLaMA 7B 设定)。

第二个问题不是数值爆炸,而是分辨率。PI 把所有位置除以 s,相对距离从 s 变成 s/s′;高频维度本来负责区分邻近 token,压缩后相邻 token 的旋转角差变小。YaRN §3.1 把这个现象描述为 high frequency information 的损失;YaRN §3.2 进一步把它归因于局部相对距离被压扁。

还有第三个不对称:不同维度的波长不同。低维(高频)在训练长度内转很多圈;高维(低频)可能连一个完整周期都没走完。 LongRoPE2 §2.1 举了 Phi3-mini 的例子:训练长度 2048, 最高维的周期是 51861,在训练长度内覆盖不到 4% 的完整周期。 LongRoPE2 §2.2 把这类维度称为 OOD 维度。因此「哪些维度该压、压多少」不能用一个统一的 s 回答推断(由 LongRoPE2 §2.1 的周期覆盖与 LongRoPE2 §2.2 的 OOD 维度定义推得)。

把这三个问题放在一起,就能理解后面的方法为什么都在改写同一个映射:位置怎么缩放,以及每个频率缩放多少。 标称长度只是目标;能不能在目标距离上检索到信息,是另一个指标。PI §3.3 把 effective context window 定义为 token 能有效 attend 的最大距离,这一定义在后面被 passkey 和 RULER 反复使用。

02

直接外推和直接长训都走不通;统一插值把角度压回训练区间,但压扁了所有频率

两条前路:一条是在长序列上直接继续训练,另一条是把位置统一缩回原区间。前者学得慢,后者有效但牺牲高频分辨率。

直接外推 / 直接长训

模型不会因为多训几步就学会新位置

PI §1 报告:直接微调超过 10000 个 batch,有效窗口只从 2048 移到 2560。 PI §2.2 的直接外推 PPL 可以超过 103。

原因不是训练不够,而是新位置的角度不在预训练分布里;继续用 next-token loss 去学,收敛很慢推断(由 PI §1 的 10000 个 batch 实验与 PI §2.2 的外推讨论推得;原文没有把「训练不够」单独列为原因)。 论文把这一现象归因于直接外推没有把角度约束回训练区间(PI §2.2)。

PI · 统一插值

把 m 映射成 mL/L′,所有维度同除 s

PI §2.3 定义 f′(x,m)=f(x,mL/L′)。位置区间从 [0,L′) 压回 [0,L), 相对距离也按同比例缩小。论文给出插值误差上界,并称它至少比外推上界小 600×(PI §2.3)。

代价是高频维度被一起压缩:短上下文 PPL 退化 0.01–0.05(PI §3.2); 扩到 8192 的 7B/33B 模型在原上下文基准上最多退化 2%, 32768 等更长窗口退化更多(PI §3.4;数字见 PI Table 5)。PI Table 5 未转录,本页只引用 §3.4 的 2% 结论。

PI 在工程上很轻:不改架构,1000 步微调就能把 LLaMA 从 2048 扩到 32768(PI §3.1)。 但它留下两个问题:所有维度同一个 s,不合理;位置压缩后,局部顺序信息变弱。 NTK-aware 先改了第一个问题。

NTK-aware · 社区方法

不改位置,改 base:高频少压,低频多压

NTK-aware 最早在社区提出(YaRN 引用 bloc97 的 Reddit 帖),YaRN §3.1 给了方法定义, 形式化版本在 YaRN Appendix A.2 Def.3:把 base 从 b 改成 b′=b·sD/(D−2),等价于每个维度乘上不同的缩放。 高频维度几乎不动,低频维度压得更多。

YaRN Appendix A.2 也指出它的缺点:部分维度会被推到 out-of-bound,微调效果可能不如 PI; 因此它更适合不微调的场景,而不是作为最终方案。下面的 YaRN 把「分段」和「温度」补上。

03

先决定每个频率压多少,再决定位置怎么缩放

所有方法都能写成 f′(x,m,θ)=f(x,g(m),h(θ)):PI 只改 g,NTK-aware 只改 h,YaRN 同时改 h 和 attention 温度,LongRoPE 把 h 变成逐维搜索,DCA 则绕开 h 去改相对位置矩阵。

f′W(xm, m, θd) = fW(xm, g(m), h(θd))
YaRN §2.2 Eq.7:g 控制位置缩放,h 控制每个频率的缩放;PI 在本页记作 g(m)=m/s、h(θ)=θ(PI §2.3)

表 1 · 统一形式下各方法的 g 与 h(据 YaRN §3.1–§3.3、LongRoPE §3.1、DCA §3 整理)

方法g(m)h(θj)是否训练备注
PI m/s θj 需要(短步数) 所有维度同比例压缩(PI §2.3)
NTK-aware m θj·s−2j/(D−2) 可不训练 等价于改 base;部分维度 out-of-bound(YaRN Appendix A.2;形式化定义见 YaRN Appendix A.2 Def.3)
NTK-by-parts m (1−γ)θj/s + γθj 需要 γ 由 r=L/λ 决定;α=1、β=32(YaRN §3.2 Def.1)
YaRN m 同 NTK-by-parts,另加温度 1/t 需要 √(1/t)=0.1ln(s)+1(YaRN §3.3 Def.2)
LongRoPE m(n<n̂ 的位置不缩放) θj/λj,λj 逐维搜索 需要 / 渐进 λj≤λj+1;n̂ 也搜索(LongRoPE §3.1 Eq.3;搜索空间见 LongRoPE Table 4)
DCA 分块位置矩阵(非单一 g) 不缩放 θ 不需要 intra / inter / successive 三种相对位置(DCA §3.1–§3.3)

PI:把整段位置轴均匀压短

PI 的 g(m)=m/s,h(θ)=θ。位置 m 变成 m/s, 所有维度的有效波长都乘以 s。它不引入新参数,也不改模型结构;代价是高频维度也一起被拉长, 相邻 token 的旋转角差变小。PI §2.3 的定理 2.1 给的是插值误差上界:在已知网格点之间做线性插值, 误差由 (s−s1)(s2−s) 控制;外推没有这个夹逼区间,上界只能靠三角和估计。

NTK-aware:用 base 把缩放压力分散到各维度

NTK-aware 不动位置,只改频率。YaRN §3.1 的定义是 g(m)=m、h(θj)=b′−2j/D,其中 b′=b·sD/(D−2)。把 b′ 代回去,等效于 θj·s−2j/(D−2):j 越大(频率越低),缩放越重; j 越小(频率越高),几乎不缩放。这样高频分辨率保住了一部分, 但 YaRN Appendix A.2 指出部分维度会被推到 out-of-bound;微调时这些维度可能反而拖后腿。

NTK-by-parts:按波长分段,不再对中间维度做线性缩放

NTK-by-parts 先算每个维度的波长 λj=2π/θj,再算比值 rj=L/λj。YaRN §3.2 用两个阈值 α、β 把维度分成三段: r<α 的维度做完整线性插值(θj/s); r>β 的维度完全不插值(保留 θj); 中间的维度用 ramp γ(r)=(r−α)/(β−α) 做线性混合: h(θj)=(1−γ)θj/s+γθj。 对 Llama 系列,YaRN §3.2 给的取值是 α=1、β=32。

把 r=L/λ 代进去:低维(高频)的波长短,r 大,落在 r>β 一侧, 不插值;高维(低频)的波长长,r 小,落在 r<α 一侧,完整插值。 这正好对应「高频保留局部顺序、低频把远端压回训练区间」的分工推断(由 YaRN §3.2 的 r<α / r>β 分段定义与 YaRN §3.1 的高频损失讨论推得)。

YaRN:在 NTK-by-parts 上加一个 attention 温度

YaRN 的定义 2 是 NTK-by-parts 加一个温度:把 softmax 前的 logits 改成 qTk/(t√D)(YaRN §3.3 Eq.14)。实现上不需要改 attention 代码: 把 query 和 key 都乘上 √(1/t),等价于把 RoPE 的复数嵌入整体缩放,RoPE 又是预计算复用的, 因此论文称零额外推理开销(YaRN §3.3)。

√(1/t) = 0.1 ln(s) + 1
YaRN §3.3 Eq.15:温度系数按缩放因子 s 拟合;该式在 LLaMA 7B/13B/33B/65B 上拟合(无微调),论文称同一组值也适用于 Llama 2 7B/13B/70B

温度不是一个从第一性原理推出来的常数,而是用「最低 PPL」拟合出来的经验式(YaRN §3.3)。 它的作用是把长上下文下的 attention 分布整体压平或锐化;论文报告它在不同数据样本和 token 位置上有一致的 PPL 影响(YaRN §3.3;实验见 YaRN Appendix A.3)。

交互:单频探针下的频率与 score

下面的探针只取一个频率维度 j,令 q=k=(1,0),于是该维的 score 就是 cos(d·θeff);YaRN 再乘以 1/t(即除以 t)。切换 PI / NTK-aware / YaRN, 拖动缩放因子 S、维度 j 和相对距离 d,可以看到同一距离下 不同策略把有效频率压到了多少。图上的曲线是 score 随 d 的变化; 高频维度在图上会很密,读数以探针值为准。

θ_eff (rad/token)
0.000625
r = L/λ
6.5190
γ (YaRN ramp)
—
angle = d·θ_eff
1.280000
2 0 −2 0 2048 4096 相对距离 d(token) score
图 1(页面模拟)· 固定 S、j,改变 d;曲线为单频 score=cos(d·θ_eff),YaRN 再乘以 1/t(即除以 t);纵轴范围 ±2.1(刻度标注 ±2;S=64 时 1/t≈2.005,不裁切)。不是论文图。
单频探针读数
PI:θ_eff = 0.000625 rad/token,angle = 1.280000 rad,score = 0.2867。所有维度统一除以 S。

探针参数:L=4096、D=128、b=10000、α=1、β=32; θj=10000−2j/128。L=4096 与 D=128 是页面为 LLaMA 2 风格探针选定的设定,不参与论文结论。 静态公式与参数来源:PI 的 g(m)=m/s 见 PI §2.3;NTK-aware 的 base 替换见 YaRN §3.1; YaRN 的 r、γ ramp 与 α=1、β=32 见 YaRN §3.2; 温度 1/t 见 YaRN §3.3。探针是简化模拟,不是源码还原;覆盖与未覆盖的分支见下面的折叠块。

手算对账:PI 与 YaRN 各一组,按显示精度逐位对齐点开看每一步

组 A:PI,S=16,j=32,d=2048

  1. θ32 = 10000−64/128 = 0.01 rad/token。
  2. PI:θeff = 0.01/16 = 0.000625。
  3. angle = 2048 × 0.000625 = 1.280000 rad。
  4. score = cos(1.280000) = 0.286715,按 4 位小数显示为 0.2867。

组 B:YaRN,S=16,j=32,d=2048

  1. r = L/λ = 4096 × 0.01 / (2π) = 6.518986;γ = (6.518986 − 1)/(32 − 1) = 0.178032。
  2. θeff = 0.01 × ((1 − 0.178032)/16 + 0.178032) = 0.002294048,按 6 位小数显示为 0.002294。
  3. angle = 2048 × 0.002294048 = 4.698211 rad。
  4. 1/t = (0.1 ln 16 + 1)2 = 1.631390227;cos(4.698211) = −0.014177531;score = −0.014177531 × 1.631390227 = −0.023129086,按 4 位小数显示为 −0.0231。

两组都只做乘法、除法、cos 和 ln;JS 用同一公式。显示位数:θeff、angle 与 γ 6 位小数,score 4 位小数。 手算中间值保留更多位,最后按同一精度四舍五入。NTK-aware 走同一段乘除,没有单独列第三组。

这个探针覆盖了什么、没覆盖什么简化模拟,不是源码还原

覆盖:PI 的 g(m)=m/s;NTK-aware 的 base 替换 b′=b·sD/(D−2);YaRN 的 r、γ ramp、h(θ) 和温度 1/t;单个频率对 j 的相对距离 d; 分数按 cos(d·θeff) 计算,YaRN 再乘以 1/t(即除以 t)。

未覆盖:64 个频率的求和、q/k 的具体内容、softmax 分母、√D 归一化、多头、 KV cache、Dynamic Scaling、LongRoPE 的逐维搜索、DCA 的分块注意力、微调过程。 探针把 q=k=(1,0),所以分数只是单频余弦,不是完整 attention。

因此它是简化模拟,不是源码还原。手算覆盖 PI 与 YaRN 两组;NTK-aware 用同一段乘除。

LongRoPE:把逐维缩放因子和起始 token 变成搜索变量

LongRoPE 把 PI/NTK/YaRN 里的「人手规则」换成搜索。它给每个 RoPE 维度一个独立的缩放因子 λi,再加一个 token 位置阈值 n̂:n<n̂ 的位置保持不变, 从 n̂ 开始除以 λi(LongRoPE §3.1 Eq.3)。 论文正文写的是「initial n̂−1 token positions」,而 Eq.3 的条件是 n<n̂; 两者相差一个边界 token,页面按公式写 n<n̂。 这样同时利用两种非均匀性:不同维度压不同倍数,序列开头的 token 少压。

搜索空间在 LongRoPE Table 4(LongRoPE §3.2):λi 从 1.0 到 s×1.25、 步长 0.01;n̂ 从 {0, 1, 2, 4, 8, 12, 16, 20, 24, 28, 32, 64, 128, 256} 里选。 搜索用 evolution search,并强制 λi≤λi+1,让低维(高频)少压、高维(低频)多压。 论文报告 s=4× 时搜索空间有 4×10167 种组合(LongRoPE §3.2); 在 LLaMA2 上,这种非均匀插值可以做到 8× 的无微调扩展(LongRoPE §1),这也是渐进式扩展把 256k 推到 2048k 的基础。

结果分两段。先在预训练模型上搜 128k/256k 的因子:128k 训 400 步,换 256k 因子再训 600 步; 然后在 256k checkpoint 上做第二次搜索,把窗口推到 2048k,最后扩展比是 512×(LongRoPE §3.3)。渐进式扩展的关键是:第二次搜索用已经适应过长上下文的模型, 不需要在 2048k 长度的文本上直接微调。

LongRoPE 还做了一次短上下文回收:在扩展后的模型上再搜 4k/8k 的因子,推理时按序列长度切换。 没有回收时,Proof-pile 4k PPL 是 4.16,回收后是 3.71;平均基准分从 49.3 到 52.9(LLaMA2-7B-2048k,ft=128k;LongRoPE Table 10)。

DCA:不改频率,改相对位置矩阵

Dual Chunk Attention 走的是另一条路:不缩放位置,也不改 θ,而是把长序列切成小于预训练长度的 chunk, 重写 query/key 的相对位置矩阵(DCA §3)。它有三个部分:intra-chunk、inter-chunk、successive-chunk。

以 DCA §3.3 的例子:c=10、s=6、w=4,inter-chunk 的 query 位置是全 9, successive-chunk 的前四个位置改成 6,7,8,9。DCA 不训练,但改的是 attention 的计算方式; 它不是 h(θ) 轴上的方法,表 1 单列一行只是为了对照。

04

成本落在微调步数和数据长度,不在推理:多数方法只改 RoPE

PI、YaRN、LongRoPE 都不改模型结构;训练步数从千步降到几百步,LongRoPE 用两段微调把 256k 推到 2048k。DCA 走另一条路:不训练,但要改 attention 的分块计算。

训练账本

从千步到几百步

  • PI:默认 1000 步;7B/13B/33B 扩到 8192 用 32 张 A100、global batch 64; 其他设置用 128 张 A100、batch 128(PI §3.1)。
  • YaRN:模型是 Llama 2 7B/13B;s=16 用 400 步、64k 段、global batch 64;s=32 在 s=16 checkpoint 上再加 200 步。 论文称占预训练语料不到约 0.1%(YaRN §1)。
  • LongRoPE:LLaMA2-7B 的 128k 先训 400 步,换 256k 因子再训 600 步;128k 用 8 张 A100, 256k 用 16 张,global batch 32。 Mistral-7B 的 128k/256k 用 16k 训练长度、4 张 A100、global batch 64(训练配置见 LongRoPE §4.1;4 卡见 LongRoPE §4.1)。 §4.1 不同实验分别用了不同卡数(上列 8、16、4 张)。LongRoPE Appendix A.1 称所有实验用 16 张 A100, 与 §4.1 的 4 张不一致;本页只把 4 张用于 Mistral 训练这一句,不消解两处差异。
  • DCA:不训练;chunk size 取训练长度的 3/4, Llama2 为 3072;7B/13B 单卡 A100-80G 可推理,70B 在 16k 内需 2 张(DCA §4.1)。

推理侧的共同点是「只改位置」:PI 不改架构(PI §2.3);YaRN 的温度在 RoPE 生成时预先算好, 论文称零额外推理开销(YaRN §3.3);LongRoPE 只改 RoPE 因子(LongRoPE §1)。DCA 是例外:它改 attention, 需要 Python 层的 monkey patch,但论文报告显存和速度与 FlashAttention 接近(DCA §4.4)。

搜索本身也有成本。LongRoPE 的搜索空间在 s=4× 时有 4×10167 种组合(LongRoPE §3.2), 因此用 evolution search:种群 64、mutation/crossover 各 16、迭代 40 次、每轮 top- 32。LongRoPE2 把搜索目标换成 needle-driven PPL(LongRoPE2 §3.2)。 这些是离线成本,不进入推理路径。

05

扩展流程不是一路放大:先定频率映射,再用短于目标的数据微调,最后回收短上下文

LongRoPE 的渐进式扩展和 YaRN 的短数据训练说明训练长度不必等于目标长度;但最后一步必须是有效长度验收,而不是看标称值。

  1. 定目标与频率映射。先确定目标缩放 s=L′/L,再选择 g(m) 和 h(θ):PI 全压、NTK-aware 改 base、YaRN 分段加温度、LongRoPE 逐维搜索。 这一步决定后面微调能不能收敛(YaRN §2.2、LongRoPE §3.1)。
  2. 在目标长度上搜索或验证因子。LongRoPE 用 5 个 PG19 验证样本、以 PPL 为目标跑 evolution search; 超过 512k 的阶段把种群、mutation、crossover 减半,改用 3 个 Pile-Books3 样本(LongRoPE §4.1)。 LongRoPE2 把目标换成 needle-driven PPL,只算 needle token 的 PPL(LongRoPE2 §3.2)。
  3. 用短于目标的数据微调。YaRN 训练用 64k 段(YaRN §4.1),评估到 128k(YaRN Table 1); LongRoPE 在 128k/256k 上训练,目标是 2048k(LongRoPE §3.3)。训练长度和目标长度脱钩, 但频率映射必须先把目标区间的角度约束住。
  4. 用有效上下文验收。passkey 看的是检索距离(PI §3.3、LongRoPE §4.2、YaRN §4.3); RULER 看多任务平均(LongRoPE2 Table 2);PPL 只能说明语言建模,不直接等于可用长度 (YaRN §B.5 原文称 PPL 不能完整刻画 effective context;LongRoPE2 §3.2 也改用 needle-driven PPL,避免普通 PPL 被无关 token 稀释)。
  5. 回收短上下文。LongRoPE 在扩展后的模型上重搜 4k/8k 因子,推理时按长度切换(LongRoPE §3.3); LongRoPE2 用 mixed context window training,短序列继续用原始 RoPE,长序列用缩放后的 RoPE(LongRoPE2 §3.3)。

这五步的顺序不是固定的:DCA 跳过第 3 步,直接在推理时改相对位置矩阵;PI 则可以把第 2 步省掉, 因为它不需要搜索,只需要一个固定的 s。共同点是第 4 步不能省:标称窗口是目标, 不是可用性的证明。

06

标称长度只是上限:PPL、passkey 和 RULER 才能说明模型真的用上了多远

同一张表里既有训练-free 的 PPL,也有微调后的 passkey 和 RULER;条件和分母都跟着数字写,不能把 2048k 的标称值当成每个任务都能用满。

表 2 · 各论文报告的代表性结果;每行的数据集、模型和出处不同,不能横向相减

方法模型 / 设定训练目标报告数字出处
Direct FT LLaMA-7B 10000 batches 8192 有效窗口 k_max 2560 PI Table 4
PI LLaMA-7B 1000 steps 32768 200 步时 k_max 32768 PI Table 4
YaRN s=32 Llama-2-7B 400+200 steps,64k 段 128k Proof-pile PPL 2.37 at 131072 YaRN Table 1(PPL);训练步数见 YaRN §4.1
LongRoPE ft=256k LLaMA2-7B 400+600 steps 2048k passkey ≥90% 到 2048k LongRoPE §4.2(passkey);训练步数见 LongRoPE §3.3
DCA Llama2-70B 0 steps 192k PPL 5.59 at 64k DCA Table 1(PPL);目标 192k 见 DCA Table 2
LongRoPE2 LLaMA3-8B 10B tokens 128k RULER 平均 82.03 at 128k LongRoPE2 Table 2(RULER);训练 10B tokens 见 LongRoPE2 §1

PI:有效窗口先到,短上下文后掉

PI 的 passkey 结果很直接:LLaMA-7B 目标 32768,200 步时 k_max 就到 32768(PI Table 4)。同一张表里,7B/8192 的直接长训 10000 个 batch 只到 2560。但 PI Table 4 的 7B/32768 行在 600 步一格是 18432,其余步数是 32768;论文正文没有解释这一格,页面照表并列。

长序列语言建模也随窗口变长而改善:PG19 上 7B/32768 模型在 32768 处的 PPL 是 6.77(PI Table 1)。代价在短上下文:Proof-pile 上 PI 模型在 2048 处 PPL 退化 0.01–0.05(PI §3.2);扩到 8192 的 7B/33B 模型在原上下文基准上 最多退化 2%,32768 等更长窗口退化更多(PI §3.4;数字见 PI Table 5,该表未转录)。 两个窗口大小都出现在 PI §1,32768 的训练设定见 PI §3.1;页面不把它们的比值当作实验提升。

YaRN:训练 64k,评估到 128k

YaRN 的 s=32 模型在 64k 段上微调,却在 131072 处得到 2.37 的 Proof-pile PPL;同一列里 65536 处是 2.45、98304 处是 2.36 (YaRN Table 7;131072 处的 2.37 亦见 YaRN Table 1)。passkey 在 8k 到 128k 的整个窗口内准确率在 99% 以上(YaRN §B.5)。YaRN §4.2 的设定是:模型只用 64k 训练数据,128k 上下文仍能外推;短上下文基准另有小幅波动(YaRN Table 3)。

LongRoPE:2048k 的目标与 2048k 的 passkey 不是同一件事

LongRoPE 报告的目标窗口是 2048k(LongRoPE §1),微调总步数约 1k,训练长度在 256k 以内(LongRoPE §3.3)。在 Proof-pile 上, LLaMA2-7B ft=128k 在 262144 处的 PPL 是 1.88(LongRoPE Table 5); 在 Books3 上,2048k 处的 PPL 是 7.80(ft=128k)与 7.08(ft=256k;LongRoPE Table 6)。

passkey 更接近「有效」:LLaMA2-2048k(ft=256k)在 4k 到 2048k 维持 ≥90% 的检索准确率;Mistral-2048k(ft=128k)在 1800k 之前是 100%,到 2048k 降到 60%(LongRoPE §4.2)。 同一篇论文还报告:LLaMA2 在 256k 微调更好,Mistral 在 128k 微调更好(LongRoPE §4.2)。 两个结论针对不同模型,页面并列保留,不合并成一个最优设置。

短上下文回收的收益可以直接看 LongRoPE Table 10:4k PPL 从 4.16 降到 3.71,平均基准从 49.3 到 52.9(LLaMA2-7B-2048k,ft=128k)。LongRoPE Table 10 的 recovery 消融把这两件事分开测量。

DCA:不训练的分块注意力

DCA 的 ChunkLlama2-70B 在 4k 处 PPL 是 5.24,64k 处是 5.59(DCA Table 1),96k 处是 5.80, 192k 处是 7.05(DCA Table 2)。7B 版本在 32k 处 PPL 是 7.89,比 4k 的 7.87 高 0.02;到 64k 就升到 15.87。 这里 0.02 是 7.89 − 7.87 的差值,口径是 PG19 PPL 的绝对差。 两个模型规模的 PPL 曲线不同(DCA Table 1、DCA Table 2)。

实际任务上,ChunkLlama2-70B 的 few-shot 平均分是 37.8 (DCA Table 3:✗、4k 训练上下文、0 步训练);LongLoRA-70B 是 37.2(DCA Table 3:✓、32k)。DCA §4.3 注明 LongLoRA 用 LoRA 在 RedPajama 上训练 1000 步以支持 32k;两者条件不同,不能当作同条件对比。

LongRoPE2:把「有效」单独量出来

LongRoPE2 在 LLaMA3-8B 上把 RULER 128k 平均分做到 82.03, 同一张 LongRoPE2 Table 2 里 LongRoPE 是 73.40;两者相差 8.63 个百分点(82.03 − 73.40,绝对差)。短上下文侧, LLaMA3-8B 保留 98.6% 的原始性能,Phi3-mini 保留 97.6%(LongRoPE2 §4.2)。这组结果把「长上下文变好」和 「短上下文不掉」分开报告。

07

边界:有效上下文短于标称、短上下文会退化、搜索和分块都依赖模型与目标长度

把适用边界写清楚:标称窗口是训练目标,不是每个任务都能用满;频率映射和搜索因子都不是模型无关的常数。

一句话判据

什么时候用哪条路

如果只需要把窗口扩大、能接受短步数微调,PI 是最小改动;如果高频局部顺序不能丢,优先考虑 NTK-by-parts 或 YaRN;如果目标远大于训练长度、又不想在目标长度上直接微调, LongRoPE 的渐进式搜索更合适;如果完全不能训练,DCA 的分块注意力是一条可部署的路径, 但要注意 DCA Table 1 与 DCA Table 2 里 7B/70B 的 PPL 曲线并不相同。无论走哪条路,验收都要看有效上下文,而不是标称窗口。