长上下文速览(Long Context,2020 ~ 2026)
一条主线:从「注意力算不起长序列」到「怎么又准又便宜地用满 64K → 1M」· 每篇 = 配方 + 一句话(问题 / 方法 / 核心)· 检索时间 2026-08-23
零基础读法:长上下文其实同时解决四个问题
定义:让模型一次读一本书、一个仓库或一整段 agent 轨迹,而不是只读几页。难点不是「能不能读」,而是注意力计算和显存会随序列长度暴涨。
方法:大致分五条路——稀疏注意力(只算部分历史)、线性/状态空间(把历史压成定长 state)、KV 压缩/驱逐(只留重要缓存)、位置编码外推(让短序列训练也能用长序列)、以及工程实现(FlashAttention、PagedAttention)。
模型:Transformer 是底座;方法层有 Longformer、InfLLM、LongRoPE、YaRN、MInference、RingAttention 等。近年旗舰通常不只用一种,而是混合 sparse + linear + sliding window。
算法:核心是给每个历史 token 决定「算不算、存不存、怎么打分」。例如稀疏注意力选块/选 token,KV cache 按重要性驱逐,位置编码用 RoPE 插值或外推来支持更长长度。
评测:别只看「能输入多长」,要看 LongBench、RULER、needle-in-a-haystack 这类检索与推理测试,同时报告 perplexity、显存和延迟。很多模型声称 1M 上下文,但真实检索精度可能并不高。
读每篇时问:它省的是计算、显存还是外推能力?省下来后准确率掉了多少?
0. 记法(这个领域的「最大公约数」)
长上下文要同时回答四件事:注意力怎么算(复杂度)、KV 怎么存(显存)、长度怎么外推(位置编码)、怎么客观测出真实长度(benchmark)。配方围绕这四轴:
| 记号 | 意思 |
|---|---|
dense | 全注意力(每 token 看所有历史),$O(n^2)$,精确但贵 |
sparse | 稀疏注意力:滑窗 / 全局 / 随机 / block / landmark / 检索,子平方 |
linear / ssm | 线性注意力 / 状态空间模型,$O(n)$,详见 linear-attention.html |
flash / paged | 不改变数学、只优化实现:IO 感知(FlashAttention)/ 分页 KV(PagedAttention) |
evict / compress | KV 驱逐 / 压缩:按分数丢掉不重要的 KV,省显存 |
sink | attention sink:保留/学习几个「吸收注意力」的 sink token |
rope / alibi / pi / yarn / hope | 位置编码与外推:RoPE / ALiBi / Position Interpolation / YaRN / HoPE |
niah | needle-in-a-haystack:在长文本里塞一根「针」测检索,最常用但被批「高估」的合成测法 |
配方格式:模型: <注意力/复杂度> -> <上下文/成本> [关键机制]。例:StreamingLLM: dense -> 无限流式 [sink + 滑窗]。
1. 主线:五条并行的战线,最后都指向「混合」
- 算得起(复杂度):dense $O(n^2)$ 太贵 → 稀疏注意力(Sparse Transformer / Longformer / BigBird)→ 硬件高效实现(FlashAttention)→ 原生稀疏(NSA / HiLS)。
- 存得下(显存):KV 缓存随长度线性涨 → 分页管理(PagedAttention)→ 驱逐/压缩(H2O / SnapKV / DMC / YoCo)。
- 够得着(外推):RoPE 直接外推会崩 → Position Interpolation → YaRN / LongRoPE / Self-Extend / PoSE,把 4K 模型外推到 128K/1M。
- 绕得过(sink):StreamingLLM 发现 attention sink 是个「bug」→ GPT-OSS 内置 sink 参数、Gated Attention 门控消除 sink。
- 测得准(评测):needle-in-haystack → LongBench / RULER / InfiniteBench / HELMET,从「找得到」走向「想得清」。
三条并行轴在收敛:注意力复杂度(dense → sparse → linear → hybrid)、KV 记忆(full → evict → compress → sparse-access)、长度外推(RoPE → PI → YaRN/HoPE → sink-free)。交点是一个开放问题:长上下文到底靠「便宜的压缩」(线性/驱逐)还是「贵的精确」(稀疏/全注意力)? 2025 起的答案是「混合」。
2. 源头与地基(2020-2023:先让长序列「算得动」)
在「上下文窗口」成为卖点之前,第一代工作只求一件事:让注意力在长序列上跑得动。两条腿:一是稀疏化注意力(Sparse Transformer、Reformer、Longformer、BigBird),二是优化实现而不改数学(FlashAttention 1/2/3、PagedAttention)。这一代的遗产是——「注意力不必是 $O(n^2)$」,为后面所有稀疏/线性路线铺路。
Sparse Transformer(1904.10509,Child et al. 2019)
sparse(strided + fixed) -> $O(n\sqrt{n})$ [稀疏注意力分解]
问题 注意力时间/显存随长度平方涨;方法 把注意力矩阵分解成 strided(跨步)和 fixed(固定局部)两种稀疏模式,复杂度降到 $O(n\sqrt{n})$;核心 稀疏注意力的开山,最早把长序列(图像/音频/文本)做成可行;后续 BigBird / Longformer 指出固定模式不通用、质量有损,NSA 又把稀疏改成原生可训练的动态选择——稀疏这条线被继承,固定模式被改。
Reformer(2001.04451,Kitaev et al. 2020)
sparse(LSH) + reversible -> $O(n \log n)$ [局部敏感哈希 + 可逆残差]
问题 全注意力在长序列上算不动、且要存激活;方法 用局部敏感哈希(LSH)只让相似 token 互相注意,配可逆残差省激活内存;核心 「哈希近似注意力」路线,复杂度 $O(n \log n)$;后续指出 LSH 有近似误差、实现复杂,主流没沿用,这条线基本被放弃。
Longformer(2004.05150,Beltagy et al. 2020)
sparse(滑窗 + 全局 + 膨胀) -> $O(n)$ [三种稀疏模式组合]
问题 长文档(数千 token)放不进全注意力;方法 组合滑动窗口、任务相关的全局 token、膨胀窗口三种稀疏模式;核心 $O(n)$ 复杂度,成为长文档 NLP 的常用底座;后续 NSA 指出固定稀疏不通用、选择方式该可训练,把稀疏改成原生可训练 + 硬件对齐——Longformer 的滑窗/全局思想被继承。
BigBird(2007.14062,Zaheer et al. 2020)
sparse(随机 + 滑窗 + 全局) -> $O(n)$ [随机图 + 局部 + 全局]
问题 稀疏注意力凭什么能替代全注意力;方法 用随机、滑窗、全局三类边的稀疏图,并给出理论(稀疏注意力在图灵完备性上的等价刻画);核心 既省算力又给出理论保证,稀疏注意力的代表性理论工作;后续 NSA / DSA 指出随机图模式不如动态选择,改成按分数选 token / block——理论保证被保留,固定随机模式被改。
FlashAttention(2205.14135,Dao et al. 2022)
flash -> 更快 + 省显存 + 精确 [IO 感知 + 分块 tiling]
问题 注意力瓶颈不在算力而在「显存读写」(IO),且近似方法省了算力却换不来墙钟加速;方法 用 tiling 分块、不物化 N×N 注意力矩阵、在线 softmax,把注意力做成 IO 感知;核心 精确(不近似)却更快更省,GPT-2 上快 7.6×,成为所有长上下文实现的默认底座。
FlashAttention-2(2307.08691,Dao 2023)
flash -> ~2× 再提速 [更好的并行 + 工作划分]
问题 FlashAttention 在 GPU 上并行度、工作划分还有浪费;方法 减少非 matmul 操作、沿序列维度并行、更好的 warp 工作划分;核心 训练吞吐约再翻倍,达到 A100 上 230 TFLOPs/s。
FlashAttention-3(2407.08608,Shah et al. 2024)
flash -> Hopper 异步 + FP8 [wgmma 异步 + 低精度]
问题 前两代没用上 Hopper 的新能力(异步、低精度);方法 用异步 wgmma、跨 warp 重叠 softmax 与 matmul、FP8 低精度;核心 H100 上 740 TFLOPs/s(约 75% 峰值利用),再快 1.5-2×。
PagedAttention / vLLM(2309.06180,Kwon et al. 2023)
paged -> 显存利用率大幅提升 [像 OS 虚拟内存一样分页 KV]
问题 KV 缓存每请求动态增减,按连续块分配会碎片化、浪费显存;方法 把 KV 切成固定大小的 page、像虚拟内存一样按需映射,消除碎片和预留冗余;核心 吞吐提升 2-4×,长上下文服务的显存管理范式,几乎所有推理框架都借鉴。
3. Attention Sink 专章(核心叙事)
长上下文研究的第一章其实是「发现并解决一个 bug」。StreamingLLM 发现 attention sink——softmax 让最初几个 token 吸收大量注意力,只留滑窗会崩;H2O 发现注意力分数是重尾的、少数 heavy-hitter 贡献大部分注意力。两个发现把「sink 必须处理」立成共识,此后的工作要么绕开它、要么解决它。本节把 sink 讲清楚:它是什么、怎么被发现,又怎么在 2025 年被 GPT-OSS(内置可训练 sink 参数)和 Gated Attention(门控直接消除 sink)两个方向分别「收编」。
Sinkformers(Doubly Stochastic Attention)(2110.11773,2021)
sink(Sinkhorn) -> 长序列稳定 [双随机注意力]
问题 softmax 只做行归一化,注意力的「吸收」分布不对称、长序列易崩;方法 用 Sinkhorn 算法把注意力矩阵变成行、列都归一化的双随机矩阵;核心 「sink」这个词在注意力语境里的早期出现,为后来的 attention sink 分析埋下伏笔;后续 StreamingLLM 把问题简化成「保留 sink token + 滑窗」,Sinkhorn 双随机的路线基本被弃。
StreamingLLM(Efficient Streaming LMs with Attention Sinks)(2309.17453,Xiao et al. 2023,ICLR 2024)
dense -> 无限流式 [sink token + 滑动窗口]
问题 流式推理只保留最近 token 的滑窗会崩、PPL 骤升;方法 发现「attention sink」——softmax 的副产品让最初几个 token 吸收大量注意力,保留这几个 sink token + 最近 token 即可无限流式、不重训;核心 首次命名 attention sink、给出「4 个 sink + 滑窗」即可流式这一经验规律,奠定「sink 必须留」的共识;后续 Gated Attention 指出只留 sink + 滑窗会丢中间信息,改成直接消除 sink,GPT-OSS 则把 sink 做成可训练参数——sink 从 workaround 被收编。
H2O(Heavy-Hitter Oracle)(2306.14048,Zhang et al. 2023,NeurIPS 2023)
evict -> KV 压缩 20× [保留 heavy-hitter + 最近 token]
问题 KV 缓存随长度线性增长、撑爆显存;方法 发现注意力分数是重尾的——少数 heavy-hitter token 贡献大部分注意力,据此动态驱逐、只保留 heavy-hitter 和最近 token;核心 KV 驱逐派的开山,带理论保证,是 SnapKV/PyramidKV 等后续工作的起点;后续 SnapKV 指出逐 token 分数不稳,改「观察窗口投票」,PyramidKV 又按层分预算——H2O 的驱逐思想被继承、判分方式被改。
Massive Activations in LLMs(2402.17762,Sun et al. 2024)
analysis -> sink 的机理刻画 [巨量激活的定位与来源]
问题 LLM 里少数激活值异常巨大(可达其他 10 万倍),原因和后果不明;方法 系统定位 massive activation 出现的位置,发现它们与 attention sink(初始 token、特定分隔符)强相关;核心 把 sink 现象和「巨量激活」连起来,解释了为什么 sink 会影响量化和训练稳定性。
GPT-OSS(OpenAI 开源模型,2025-08)(HF)
dense + 内置 sink -> 128K [trainable sink 参数]
问题 sink 一直被当「要绕开的 bug」,各家各用 workaround;方法 把 attention sink 做成模型内置、可训练的一等参数(soft_max_add_sinks),20B/120B MoE、128K 上下文;核心 sink 从「问题」变成「设计特性」,标志着它被正式接纳。
Gated Attention(Non-linearity, Sparsity, Sink-Free)(2505.06708,Yang et al. 2025,NeurIPS 2025,Qwen3-Next)
gated -> sink-free [head 级 sigmoid 门控 + QK-Norm]
问题 sink 与 massive activation 一起损害训练稳定性和长上下文外推;方法 在 SDPA 之后加 head 级 sigmoid 门控,引入非线性 + 稀疏性,配合零中心 QK-Norm,直接消除 attention sink;核心 「sink-free」:不再需要特殊照顾 sink,还顺带提升长上下文外推,被 Qwen3-Next 采用。
4. 稀疏注意力(2023-2026,sink 之后的主战场)
sink 不再卡脖子之后,主战场转向原生稀疏注意力:把稀疏性做成端到端可训练、硬件对齐,去冲 64K → 1M → 16M。核心矛盾是「怎么选才又准、又便宜、又可训练」——早期靠手工规则(Landmark、MInference),后来靠 MoE 式 block 路由(MoBA)、学出来的阈值(SeerAttention)、可切换 dense↔sparse(InfLLM-v2),直到层级 landmark + 端到端检索分数(HiLS)。稀疏注意力的完整演进(含选 block vs 选 token、DeepSeek NSA/DSA/CSA/HCA)见 sparse-attention.html。
RingAttention(Blockwise Transformers)(2310.01889,Liu et al. 2023,ICLR 2024)
dense(分块环形) -> 近无限上下文 [分布式分块注意力]
问题 长序列单卡放不下、注意力矩阵爆炸;方法 序列分块、按环在设备间传递 KV,块间做注意力,训练可并行;核心 用分布式分块把 dense 注意力扩到百万级,是长上下文分布式训练的底座。
Landmark Attention(Random-Access Infinite Context)(2305.16300,Mohtashami & Jaggi 2023)
sparse(landmark) -> 无限上下文 [检索式随机访问]
问题 全注意力算不了无限长;方法 每个 block 用 landmark token 做代表,query 先检索相关 block 再做局部注意力;核心 检索式稀疏注意力的早期代表。
MInference(Dynamic Sparse Attention)(2407.02490,Jiang et al. 2024)
sparse(动态) -> 10× 预填充加速 [免训动态稀疏模式]
问题 长上下文预填充太慢;方法 免训识别 A-shape / Vertical-Slash / Block-Sparse 三种注意力稀疏模式并据此计算;核心 不训练、动态稀疏,prefill 加速一个数量级。
NSA(Native Sparse Attention,DeepSeek)(2502.11089,Yuan et al. 2025,ACL 2025)
sparse(压缩 + 选择 + 滑窗) -> 64K 原生可训练 [硬件对齐三路并行]
问题 稀疏注意力要么不可原生训练、要么硬件不友好;方法 token 压缩、token 选择、滑窗三路并行,统一成硬件对齐算子,端到端训练;核心 「原生稀疏 + 硬件对齐」成为这条线的标杆。
MoBA(Mixture of Block Attention,Kimi)(2502.13189,2025)
sparse(block 路由) -> 10M 上下文 [MoE 式 block 选择]
问题 稀疏注意力怎么又高效又选对块;方法 把 MoE 路由搬到注意力,每个 query 只路由到少数相关 block;核心 「注意力也 MoE 化」,Kimi 跑到 10M 上下文。
SeerAttention(2410.13276,2025)
sparse(learned) -> 90% 稀疏 [端到端学注意力阈值]
问题 手工稀疏规则不通用;方法 让模型端到端学习「哪些注意力该保留」的阈值;核心 「学出来的稀疏」而非手工设计。
InfLLM-v2(Dense-Sparse Switchable)(2509.24663,2025)
sparse↔dense 可切换 -> 短长自适应 [语义块检索]
问题 短上下文要 dense、长上下文要 sparse,难兼得;方法 dense/sparse 可切换,短时全注意力、长时检索稀疏;核心 无缝短到长自适应。
HiLS Attention(Hierarchical Sparse Attention Done Right)(2607.02980,2026,种子论文)
sparse(层级 landmark) -> 64×+ 外推 [压缩 chunk key → chunk-mass surrogate + inter/intra-chunk softmax + LM loss 端到端]
问题 现有 chunk-wise 稀疏注意力 chunk 选不准、追不上 full attention;方法 用压缩后的 chunk key 估 chunk-mass surrogate,把注意力拆成 inter-chunk(检索分数)与 intra-chunk(块内 softmax),检索分数直接进前向、用 next-token 损失端到端优化;核心 检索分数可端到端学习、原生稀疏训练,64× 外推仍有 90% 检索准确率,8K 训练的模型在 4M NIAH 上仍 90–100%,现有 full-attention 模型轻量续训即可转换;它的边界是 chunk 级选择,和 DeepSeek CSA/HCA 的「先压缩再选」谁更适合 1M+ 仍是开放问题。
DashAttention(Differentiable Adaptive Sparse Hierarchical)(2605.18753,2026)
sparse(可微层级) -> 长上下文 [可微自适应稀疏]
问题 层级稀疏注意力不够可微、选择不够自适应;方法 可微 + 自适应的层级稀疏注意力;核心 把稀疏选择做进可微框架。
NOSA(Native and Offloadable Sparse Attention)(2510.13602,2025)
sparse(原生 + 可卸载) -> 超长上下文 [KV offload 到 CPU]
问题 超长上下文的 KV 显存放不下;方法 原生稀疏注意力 + 把不活跃 KV offload 到 CPU;核心 稀疏 + 卸载,突破显存上限。
MiniMax Sparse Attention(2606.13392,2026)
sparse(block + local) -> $O(kB_k)$ [GQA 组内 Top-k block + 强制 local block]
问题 agentic / 仓库级代码 / 持久记忆要求几十万到百万 token 联合注意力,softmax 部署不起;方法 建在 GQA 上:切 KV block,轻量 Index Branch 按 group 算 token 分数、块内 max-pool 得 block 分数,每个 GQA group 独立 Top-k 选块并强制保留 local block,Main Branch 只在这些块上做精确 softmax;核心 每 query 成本从 $O(N)$ 降到 $O(kB_k)$,1M 上下文 attention compute 降 28.4x、H800 上 prefill 14.2x / decode 7.6x(详见 sparse-attention.html)。
5. KV 驱逐 / 压缩(显存这条线)
H2O 开了「驱逐不重要的 KV」这条路,后面争三件事:重要性判得准不准、预算按层怎么分、判断开销多低。代表分别是观察窗口投票(SnapKV)、金字塔层自适应预算(PyramidKV)、只用 query 的近零开销估计(Quest)。再往深走是「压缩」而非「驱逐」——DMC 把 token 合并进固定 slot、YoCo 干脆只缓存一次 KV。核心矛盾是「越省越不准」,所以这条免训路线长期活在推理加速里。
Scissorhands(Persistence of Importance)(2305.17118,Liu et al. 2023)
evict -> KV 压缩到 5% [重要性持续假设]
问题 长上下文 KV 显存大;方法 提出「重要性持续」假设——重要的 token 在后续生成里保持重要,据此只保留少数关键 token;核心 把 KV 压到 5%、显存降到 20% 以内,且不影响生成质量。
FastGen(Model Tells You What to Discard)(2310.01801,Ge et al. 2023)
evict(自适应) -> 免训 KV 压缩 [四种注意力模式画像]
问题 手工 KV 压缩不通用;方法 对注意力做 profiling,识别标点、局部、特殊 token 等四种模式,据此自适应压缩;核心 免训练的即插即用压缩,把 KV 显存大幅降下来。
SnapKV(2404.14469,Li et al. 2024)
evict -> 稳定 KV 压缩 [观察窗口投票]
问题 H2O 的逐 token 分数不稳定;方法 用一个「观察窗口」在 prompt 末尾统一投票选出最重要的 KV;核心 免训、稳定的 KV 压缩,成为长上下文推理的常用件。
PyramidKV(2406.02069,2024)
evict -> 层自适应预算 [浅层留多、深层留少]
问题 每层 KV 重要性不同却用同一预算;方法 按「浅层多留、深层少留」的金字塔分配 KV 预算;核心 层自适应预算,同预算下比均分更准。
Quest(2406.10774,2024)
evict -> 近零开销压缩 [用 Q 做重要性估计]
问题 现有驱逐要算满注意力分数、开销高;方法 只用量化后的 query 做重要性估计,绕过完整注意力;核心 近零开销的 KV 驱逐。
DMC(Dynamic Memory Compression)(2403.09636,Nawrot et al. 2024)
compress -> 固定预算内存 [每步决定合并或追加]
问题 KV 缓存随长度线性涨;方法 在每层每步动态决定「合并进已有 slot」还是「追加新 slot」,把内存压进固定预算,经轻量续训 retrofit 到预训练模型;核心 「压缩」而非「丢弃」,保留聚合信息。
YoCo(You Only Cache Once)(2405.05254,Sun et al. 2024)
compress -> 只缓存一次 KV [self-decoder + cross-decoder]
问题 常规 decoder 每层都缓存一份 KV;方法 decoder-decoder 架构:self-decoder 编码全局 KV 只缓存一次,cross-decoder 通过交叉注意力复用;核心 显存和预填充大幅下降,且可扩展到 1M token。
CacheGen(2310.07240,Liu et al. 2023)
compress -> KV 流式传输 [量化 + 算术编码]
问题 跨请求复用 KV 时,KV 传输带宽成为瓶颈;方法 用自定义量化 + 算术编码把 KV 压缩后流式传输;核心 把 KV 传输带宽降下来,加速长上下文的首次 token 时间。
GemFilter(Discovering the Gems in Early Layers)(2409.17422,2024)
evict(前层过滤) -> 1000× 输入压缩 [前层注意力挑「宝石」token]
问题 长上下文输入里大部分 token 无关紧要;方法 用早期层的注意力挑出少量关键 token(约 1%),后面的层只处理这些;核心 千倍级输入压缩,预填充和显存都大降。
Loki(Low-rank Keys for Sparse Attention)(2406.02542,2024)
sparse(低秩 key) -> 稀疏注意力加速 [低秩重构 QK]
问题 稀疏注意力的选择计算本身也贵;方法 用低秩分解近似 key,降低选 token 的开销;核心 让「先选再算」的稀疏注意力更便宜。
CompressKV(Semantic Retrieval Heads)(2508.02401,2025)
evict(GQA 感知) -> 生成前就知谁不重要 [语义检索头]
问题 大多数压缩方法把所有注意力头一视同仁地逐 token 启发式驱逐;方法 识别「语义检索头」,在生成前就知道哪些 token 不重要,做 GQA 感知的压缩;核心 从「事后启发式」变「事前语义判断」。
6. 位置编码 / 长度外推
另一条路不动注意力、只改位置编码,让训练时 4K 的模型直接外推到 128K/1M。演进是:RoPE 立起旋转位置标准 → ALiBi 用线性偏置免训外推 → Position Interpolation 线性缩放位置、微调 1000 步到 32K → YaRN 用 NTK 频率缩放 + 温度修正让外推不崩 → LongRoPE 进化搜索非均匀缩放冲到 2048K → Self-Extend / PoSE 追求免训或低成本外推。核心矛盾是「外推得越远、短上下文精度越受损」。
RoPE(Rotary Position Embedding)(2104.09864,Su et al. 2021)
rope -> 相对位置 [复数旋转编码]
问题 绝对位置编码难表达相对距离;方法 用旋转矩阵把位置编码进 QK 内积,天然带相对距离;核心 现代 LLM 默认位置编码,长上下文外推研究的起点;后续 PI / YaRN 指出它直接外推会崩,改成缩放频率——RoPE 线没被弃,成了缩放外推的主流底座。
ALiBi(Train Short, Test Long)(2108.12409,Press et al. 2021)
alibi -> 免训外推 [线性距离偏置]
问题 位置编码外推能力差;方法 给注意力加「随距离线性衰减」的偏置,不学位置编码;核心 零外推成本,最早系统论证「外推」这件事;后续主流模型(LLaMA 系)改回 RoPE + NTK/YaRN 缩放,ALiBi 这条免训线性偏置线基本被弃。
Position Interpolation(PI)(2306.15595,Chen et al. 2023)
pi -> 微调 1000 步到 32K [位置线性缩放]
问题 RoPE 直接外推到训练长度之外会崩;方法 把目标长度按比例线性压缩回训练区间(位置做线性插值),再少量微调;核心 长上下文外推的开山,证明「小步微调 + 位置插值」即可把 LLaMA 从 2K 拉到 32K;后续 YaRN 指出线性缩放破坏高频、丢短上下文精度,改成 NTK 非均匀缩放 + 温度修正——PI 的插值思想被继承、均匀缩放被改。
YaRN(Yet another RoPE extensioN)(2309.00071,Peng et al. 2023)
yarn -> 128K 外推 [NTK 频率缩放 + 注意力温度]
问题 PI 线性缩放会破坏高频、丢短上下文精度;方法 用 NTK-aware 非均匀缩放频率(低频多缩、高频少缩)+ 注意力温度修正;核心 免训/微调外推的主流方案,成为 Code Llama 等开源模型的外推默认件;后续 LongRoPE 指出均匀 NTK 仍损失短上下文精度,改进化搜索非均匀缩放——YaRN 的 NTK 思想被继承、缩放规则被改。
LongRoPE(2402.13753,Ding et al. 2024)
rope(非均匀) -> 2048K 外推 [进化搜索旋转角]
问题 均匀缩放频率损失短上下文精度;方法 用进化搜索找非均匀的旋转角缩放;核心 首次把上下文外推到 2048K(2M)。
Self-Extend(LLM Maybe LongLM)(2401.01325,Jin et al. 2024)
rope(免训) -> 外推 [分组 + 邻居 floor 除法]
问题 外推通常要微调,能不能免训;方法 用 floor 除法把远距离位置映射回训练区间,配分组注意力,完全免训;核心 零成本外推,揭示 LLM 自身已具备部分长上下文能力。
PoSE(Positional Skip-wise Training)(2309.10400,Zhu et al. 2023)
rope(skip-wise) -> 解耦训练/目标长度 [跳跃式位置训练]
问题 外推到目标长度要全长度微调、成本高;方法 用「跳跃式」位置分布训练,让训练长度和最终目标长度解耦;核心 小成本把上下文扩到 128K,且微调长度内性能更好。
ABF(Adjusting Base Frequency)(2401.07879,Xiong et al. 2024)
rope(基频) -> 外推 [调大 RoPE base]
问题 RoPE 外推需要正确的基频;方法 分析并调大 RoPE 的 base frequency;核心 外推训练的关键超参,补充了「为什么某些外推能成」的分析。
HoPE(High-frequency rotary Position Encoding)(ACL 2025)
rope(只留高频) -> 无长期衰减 [去掉低频分量]
问题 RoPE 的长期衰减让远处 token 交互变弱;方法 只保留 RoPE 的高频分量、去掉低频,从理论打破长期衰减;核心 位置编码与「长期衰减」解耦。
7. 线性注意力 / SSM(另一条路)
不稀疏化、也不驱逐,而是换掉 softmax 注意力本身,把复杂度从 $O(n^2)$ 压到 $O(n)$:RWKV 走 RNN 递推,Mamba 走选择性状态空间,Mamba-2 用 SSD 证明「SSM 和注意力是一家」。这条线的完整演进(DeltaNet / Gated DeltaNet / TTT / Titans,以及 Kimi K3、Qwen3-Next 的混合旗舰)单独成篇,见 linear-attention.html。
RWKV(2305.13048,Peng et al. 2023)
linear(RNN) -> $O(n)$ [WKV 线性注意力]
问题 Transformer 是 $O(n^2)$;方法 把注意力改成可 RNN 递推的线性形式;核心 独立提出的 $O(n)$ LLM 路线。
Mamba(Selective SSM)(2312.00752,Gu & Dao 2023)
ssm(selective) -> $O(n)$ [输入依赖状态转移]
问题 经典 SSM 转移矩阵固定、表达力弱;方法 让转移参数依赖输入(选择性 SSM)+ 硬件感知算法;核心 SSM 路线复兴,线性复杂度 + 内容感知。
8. 长上下文训练(怎么把 4K 训成 128K/1M)
长上下文不止是架构问题,也是「用什么数据、怎么低成本地训」的问题。这条线回答:怎么把 4K 的模型续训成 128K/1M,且不花一个完整预训练的钱。核心发现是「长上下文能力大多已在预训练里习得,续训主要是唤起它」——所以关键是数据工程和参数高效微调。
LongLoRA(Shifted Sparse Attention)(2309.12307,Chen et al. 2023)
sparse(shifted) -> 100K 低成本微调 [稀疏局部注意力 + LoRA]
问题 把长上下文模型全量微调太贵;方法 用 shifted sparse attention(分组交替局部窗口)做参数高效微调;核心 低成本把 Llama 扩到 100K,长上下文微调的代表方法。
LongQLoRA(2311.04879,Yang et al. 2023)
pi + qlora + shifted -> 单卡 32GB 扩到 8K+ [组合三件套]
问题 更少资源能不能扩上下文;方法 组合 Position Interpolation + QLoRA + LongLoRA 的 Shift Short Attention;核心 单张 32GB V100 即可把 LLaMA2 7B/13B 从 4096 扩到 8192,再进一步到更长。
Data Engineering for Scaling to 128K(2402.10171,Fu et al. 2024)
续训(数据工程) -> 128K 位置无关 [长上下文能力已习得]
问题 怎么高效地把模型续训到 128K;方法 提出「利用任意位置信息的能力大多已在大规模预训练中习得」,续训只需位置感知的数据工程;核心 长上下文续训的数据配方标杆,澄清了「数据 vs 架构」的贡献。
LongRecipe(2409.00509,Hu et al. 2024)
续训(高效) -> 长上下文泛化 [数据 + 训练 recipe]
问题 后预训练扩上下文资源密集;方法 给出一套高效 recipe,兼顾数据质量和训练效率;核心 用更少算力获得更好的长上下文泛化。
OLMo-3-1025 / Dolma3(HF,Allen AI)
续训 -> 长上下文 [Dolma3 长文本语料]
问题 公开长上下文模型缺透明训练数据;方法 全开源 7B 长上下文续训模型 + Dolma3 语料;核心 开源长上下文训练的可复现基线,是 HiLS 等论文的续训底座。
9. Benchmark(单独一节:怎么照出「真长」还是「假长」)
「宣称 128K」和「真能用到 128K」是两回事。评测线从合成检索(needle-in-haystack)走到真实任务(LongBench / LooGLE / ZeroSCROLLS),再到「深推理」(LongBench v2 / BABILong / Counting-Stars),最后 HELMET 反过来指出「只测 NIAH 会高估」。核心教训:检索容易、推理难、位置越靠中间越差。
Needle-in-a-Haystack(NIAH)(Kamradt 2023,博客/GitHub)
niah -> 检索压力测试 [长文本塞一根「针」]
问题 长上下文模型能不能真的从长文本里找回一个事实;方法 把一句无关的「针」藏进长文本任意深度,问模型找出来;核心 最流行的长上下文可视化测法,催生了「有效上下文长度」的讨论,也因过于简单被批「高估」。
Lost in the Middle(2307.03172,Liu et al. 2023)
analysis -> U 形位置效应 [开头结尾好、中间差]
问题 模型到底怎么用长上下文、信息位置有没有影响;方法 在多文档问答和 KV 检索上系统变换相关信息的位置;核心 发现「Lost in the Middle」——信息在开头和结尾表现好、在中间骤降,成为长上下文最著名的经验规律。
LongBench(2308.14508,Bai et al. 2023)
benchmark(双语多任务) -> 长上下文理解 [6 类 21 任务]
问题 缺系统长上下文理解评测;方法 中英双语、单/多文档、检索、摘要、代码、合成六类;核心 最常用的长上下文理解 benchmark。
RULER(2404.06654,Hsieh et al. 2024)
benchmark(合成检索) -> 真实上下文长度 [变体 needle]
问题 「宣称 128K」≠「真能用到 128K」;方法 用变体 needle-in-haystack(多针、多跳、聚合)测有效上下文长度;核心 照妖镜,揭示大多数模型的实际可用长度远低于宣称值。
∞Bench(InfiniteBench)(2402.13718,Zhang et al. 2024)
benchmark(100K+) -> 极长上下文 [检索/推理/长链]
问题 需要 100K+ 真实任务评测;方法 构造 100K 以上检索、推理、长链依赖;核心 极长上下文的压力测试。
L-Eval(2307.11088,An et al. 2023)
benchmark(长序列) -> 多任务 [20 类任务]
问题 早期缺标准化长序列评测;方法 覆盖推理/问答/摘要等 20 类长任务;核心 早期长上下文评测标准之一。
ZeroSCROLLS(2305.14196,Shaham et al. 2023)
benchmark(零样本) -> 长文本理解 [无训练集]
问题 长文本评测需要零样本、无数据泄露;方法 从 SCROLLS 改造 6 个任务 + 新增 4 个(含信息融合),只有测试/验证集;核心 零样本长文本理解基准,避免训练集污染。
LooGLE(2311.04939,Li et al. 2023)
benchmark(真实长文档) -> 长上下文理解 [6 类任务]
问题 早期长上下文基准偏短、偏简单、非真实;方法 构造超长真实文档、6 类任务、跨度长依赖;核心 揭示 LLM 在真实长上下文上表现远低于合成任务。
LongBench v2(2412.15204,2024)
benchmark(深推理) -> 8k~2M 词难题 [503 道 MCQ / 6 类]
问题 v1 偏检索、短模型也能蒙对;方法 503 道「检索不够、要真推理」的多选题,上下文 8k 到 2M 词;核心 区分「找得到」和「想得清」,旗舰主打的深度长上下文评测。
Counting-Stars(2403.11802,2024)
benchmark(多证据) -> 长上下文 [多证据 + 位置感知 + 可扩展]
问题 单针 NIAH 太简单、又难扩展到更复杂;方法 多证据、位置感知、可无限生成的合成基准;核心 用「多证据聚合」逼出模型真实的长上下文聚合能力。
BABILong(Reasoning-in-a-Haystack)(2406.10149,2024)
benchmark(推理 + 检索) -> 长上下文推理 [bAbI 事实埋进长文本]
问题 NIAH 只测检索、不测推理;方法 把 bAbI 推理任务的事实埋进超长无关文本,测「推理 + 检索」;核心 揭示很多模型的推理能力在长上下文下骤降,区分「检索」与「推理」。
HELMET(2410.02694,2024)
benchmark(综合) -> 全面评测 [7 类 7 任务]
问题 大家各测各的(NIAH 或任意子集),结论不可比、还高估;方法 7 类应用、7 个真实任务做整体评估;核心 证明只测 NIAH 会系统性高估,主张「全面多任务」评估。
Alice in Wonderland(Simple Tasks Show Reasoning Breakdown)(2406.02061,2024)
benchmark(简单任务) -> 推理崩塌 [数词频 / 查连词]
问题 SOTA 模型刷爆基准,真实推理能力到底如何;方法 用「数某词出现几次」这类简单任务测,发现模型在标准基准的简单版本上就崩;核心 揭示基准过拟合、推理能力被高估,是对「长上下文理解」的冷水。
10. 共识与分歧(速记版)
共识:
- 注意力不必是 $O(n^2)$:稀疏(Sparse Transformer → NSA/HiLS)和硬件高效实现(FlashAttention)都已成熟,长序列「算得动」不再是问题。
- attention sink 已被「内置 sink 参数」(GPT-OSS)或「门控消除 sink」(Gated Attention)两个方向解决,不再是瓶颈。
- KV 是主要显存瓶颈,驱逐/压缩(H2O → SnapKV/DMC/YoCo)和分页管理(PagedAttention)是免训的实用路线。
- 位置外推(PI → YaRN → LongRoPE)能把 4K 模型低成本拉到 128K/2M,但天花板有限。
- 「宣称长度」远大于「实际可用长度」,且信息在上下文中间会被「lost in the middle」——评测要看 RULER/LongBench v2 而非只看 NIAH。
分歧 / 难点:
- 稀疏 vs 线性 vs 混合:稀疏(NSA/MoBA)质量高但结构复杂,线性/SSM(Mamba)简单但表达力受限,2025 起的答案是「混合」(Qwen3-Next、Kimi K3),但配比多为经验值。
- 稀疏选择可不可微:手工规则(MInference)vs 端到端可微(HiLS/SeerAttention)——后者好但难训。
- 外推 vs 原生长训练:靠位置编码外推(PI/YaRN)省算力但天花板低,原生长上下文续训(Data Engineering 128K)贵但上限高。
- KV 压缩的「可压缩性」:越省越不准,驱逐(Scissorhands/FastGen)和压缩(DMC/YoCo)谁更适合哪类任务,尚无定论。
- 评测:合成检索(NIAH/RULER)高估、真实任务(LooGLE/HELMET)更难,缺一个「既难、又真实、又无污染」的统一标准。
说明:核心论文(StreamingLLM / H2O / Gated Attention / GPT-OSS / HiLS / FlashAttention / PI / YaRN 等)已读原文摘要/方法,其余为标题 + 通识归纳;所有 arXiv 号均逐一核对。稀疏注意力单独成篇:sparse-attention.html;线性/SSM 的完整演进见 linear-attention.html。