论文链接:Language Models Can Control Their Own Attention 发表时间:2026年9月 机构:KAIST AI(Namgyu Ho、Huzama Ahmad、Woosung Koh、Se-Young Yun)+ Google DeepMind(Tal Schuster、Cicero Nogueira dos Santos)——高校与产业实验室合作,通讯作者来自 Google DeepMind 领域标签:cs.CL / 长上下文推理效率 / 稀疏注意力
一、论文背景
Transformer 的长上下文之痛。解码时,模型的每个注意力头都要对"当前 token 与全部历史 token"计算注意力——即使真正相关的只有几十个 token,Key-Value(KV)cache 也必须整个从显存读一遍。这在高吞吐部署中成为带宽灾难:以 Qwen-3.5-397B-A17B 为例,1M token 上下文意味着每个解码步要加载约 15GB 的 KV cache,量级相当于重新加载模型全部 17B 激活参数。模型 99% 的"阅读时间"花在了重读它根本不需要的内容上。
现有稀疏化方案的两个流派:
- 静态启发式:按位置(滑动窗口)或历史注意力热度保留 token。问题:注意力是查询相关的——用户下一个问题会指向哪里,固定规则无法预知,长上下文任务性能明显受损。
- 动态代理打分:每步用轻量打分器扫一遍 KV cache,挑出"重要"token。代表如 DeepSeek 等的检索式注意力。问题:每步仍是 O(N)——打分虽然便宜,但 N 百万 token 上打分依然要全量内存访问,只降常数不降复杂度。
一个朴素的追问:模型自己不知道哪些上下文相关吗?它写了那么多思维链,难道不能顺口说一句"我现在要看第 3 段"?如果模型能把注意力意图说出来,推理引擎就不需要任何打分器——直接按声明构造掩码即可。这就是本文的起点。
二、论文定位和关联工作
谱系一:静态稀疏注意力
- StreamingLLM / H2O 等:位置或热度启发式。区别:不感知查询,长依赖任务退化。
谱系二:查询感知的动态稀疏
- Quest / DeepSeek 检索式注意力:每步轻量打分。区别:仍需 O(N) 扫描;DA 把"定位"成本转为模型生成文本的一部分,引擎侧 O(1) 解析。
谱系三:结构化生成/工具化解码
- 工具调用、格式化输出:让模型输出机器可解析的结构。DA 的创新在于把这个思想用到注意力控制上——声明像 tool call 一样被引擎消费,但它改变的是计算图而非外部世界。
谱系四:训练时注入位置先验
- 与在预训练中植入位置偏置的方法不同,DA 零训练——现成模型直接可用,这也是它作为协议(protocol)而非模型(model)的定位。
| 维度 | 静态启发式 | 代理打分 | Declarative Attention |
|---|---|---|---|
| 查询感知 | 否 | 是 | 是(模型自声明) |
| 每步额外内存访问 | O(保留集) | O(N) | O(声明集) |
| 需要外部打分器 | 否 | 是 | 否 |
| 需要训练/改动模型 | 部分 | 是 | 否(即插即用) |
| 精度风险 | 高(硬丢弃) | 中 | 低(模型自己保留全局模式逃生门) |
定位结论:DA 开辟了稀疏注意力的第三条路——内生声明,与静态规则、外生打分正交,且与训练式方法可组合(论文明确把训练式 DA 留作未来工作)。
三、问题定义
具体问题:长上下文问答中,模型每步重读全部 KV cache,但它实际需要的只是上下文的一小块。
抽象问题:注意力的目标集合本质上是查询的函数,且模型在生成过程中自己就拥有关于这个函数的最好信息。问题转化为:如何让模型以引擎可解析的方式输出注意力意图,并让意图直接决定掩码?
形式化:把上下文预切成 K 个"magic chunk"(段)。生成分解为若干推理步,每步属于三种模式之一:
<global>:需要全上下文(掩码 = 全部段);<focus>:需要某个具名 chunk(掩码 = 该段);<local>:只需已生成的近期输出(掩码 = 空,仅保留 scaffold)。
推理引擎解析每个生成步的模式标签 → 按模式构造段级掩码 → 该步注意力只在掩码内计算与读取。约束:协议不限制模型何时、用哪种模式、用多少次——自由度完全在模型。
这个抽象的精妙之处:它把"预测注意力分布"这个连续、昂贵的问题,离散化为"从 3 个模式 + K 个段中选择"这个极小的决策空间——而这个空间恰好是 LLM 最擅长的语言任务(“我要看哪一段"一句话就能说清)。用语言接口消解了打分器的存在必要。
四、问题解法
4.1 三模式协议
系统提示告诉模型:上下文已切成编号的 magic chunk,你可以用三种标签控制自己的注意力:
<global>:自由浏览全文——用于初次定位、跨段整合;<focus>:指名一个 chunk 深读——用于锁定证据所在段;<local>:只在已生成内容上推理——用于总结、改写、格式化等不需要新证据的步骤。
scaffold(系统提示+问题+指令)在所有模式下永远保留。模型可以自由交替:典型轨迹是 <global> 定位 → <focus> 取证 → <local> 作答 → <focus> 换段 → ……这正是人类读长文档的方式。
4.2 引擎侧:从声明到掩码
自定义 vLLM 集成在每步生成时解析标签(字符串操作,O(1)),构造段级注意力掩码,跳过掩码外 KV 的读取。关键工程事实:掩码粒度是"段"而非 token,段是预切的,因此掩码构造不需要任何对 KV 内容的计算。
4.3 两个消融臂(实验设计的公平性保障)
- Vanilla:原始长上下文 + 完整注意力;
- DA-no-mask(DA^nm):完全相同的 DA 提示与分 chunk 格式,但不执行掩码;
- DA:完整协议。
DA^nm 与 Vanilla 的差 = 提示格式效应;DA 与 DA^nm 的差 = 掩码执行效应。这把"格式变化影响生成质量"与"掩码丢弃信息"两个混杂因素干净分离。
4.4 评估口径
15 个长上下文源(RULER 大海捞针系、LongBench v1/v2、LooGLE、ZeroSCROLLS),从 9K 到百万 token 的代码仓库 QA,覆盖单段检索与多段推理两类;LLM judge 打分(与 Gemini-3.1-Pro 一致性 r=0.99);报告准确率与 attended tokens(每步实际读取的 KV 位置总数)双指标,外加 roofline 估时。
五、评估指标与实验证据
主结果表(15 源平均)
| 模型 | 配置 | 准确率 | Attended tokens (M/样本) | token 降幅 |
|---|---|---|---|---|
| Gemma-4-31B | Vanilla | 87.01 | 13.43 | — |
| Gemma-4-31B | DA^nm | 87.01 | 22.31 | (更贵) |
| Gemma-4-31B | DA | 85.74 | 6.45 | -52.0% |
| Qwen-3.6-27B | Vanilla | 85.31 | 22.54 | — |
| Qwen-3.6-27B | DA | 82.56 | 15.52 | -31.1% |
精度代价仅 1.27pp / 2.75pp,且随模型规模增大而收窄(6 模型规模分析);百万 token 代码仓库 QA(LBv2/code_repo)上 Gemma 的读取量从 64.86M 降到 23.08M。
关键证据链
- DA^nm 的 token 反而更多(13.43→22.31):声明式输出本身会增加生成量——如果只看"提示会不会伤精度”(DA^nm vs Vanilla 精度持平),掩码带来的节省就不会被生成开销吃掉,但只有真正执行掩码(DA)才能拿到 52% 的净节省。
- 单段检索任务近乎无损(niah 系 100%→99.2–100%):证据集中在单段时,
<focus>机制是天然匹配。 - 多段推理损失略大(multi-span 类平均 -1.3~-3.6pp):需要跨段整合的任务中
<global>步数增多,协议在"漏读"与"读全"之间的保守倾向显现。
实验为什么能证明论点:三臂设计把增益来源锁定在掩码执行;attended tokens 是从注意力计算里直接记录的物理量而非估算;两种模型家族(Gemma/Qwen)一致性排除了单模型过拟合;精度-规模趋势支持"这是能力问题而非协议缺陷"的判断。
六、效果优势的根源解释
代理打分路线的根本约束:它把"找重要 token"建模为推理时的检索问题——无论打分器多轻,都要对 N 个 token 的 key 做一遍比较,内存访问是 O(N) 下界。这是范式内的优化极限:常数可以变小,复杂度不会消失。
DA 的第一性原理转变:注意力目标集合的信息已经存在于模型的生成分布中——模型在写下答案之前,“知道"自己要引用哪段(事实上思维链里经常自然出现"根据第 3 段……")。代理打分路线的问题等价于"用外部系统猜模型在想什么”,DA 把这个环节变成"让模型直接说"。信息传递方式从"旁路推断"变为"内生声明",引擎侧成本从 O(N) 比较 → O(1) 字符串解析。
为什么模型有能力声明准:两个机制支撑——(a) 注意力集中于少数 token 是已被反复实证的模型内禀性质(Child et al. 等),DA 只是给这个既成事实一个表达出口;(b) chunk 化把"选择"从 token 级(百万选几十)降为段级(几百选一),与模型的语义理解能力对齐——模型读段首即可判断相关性,这恰是语言理解而非数值打分。
为什么精度损失小且随规模收窄:协议保留了 <global> 逃生门——模型不确定时可以全文阅读,所以 DA 的下界是"退化为 Vanilla",而非硬丢弃带来的悬崖;更强模型遵循协议与自我定位的能力更好,错误声明更少,损失相应收窄。DA^nm 与 Vanilla 精度完全一致(87.01 vs 87.01)则证明协议本身不引入行为退化——所有精度损失都可归因于掩码漏读,且漏读是模型声明质量的问题而非机制缺陷。
七、必要知识反推
领域知识层:
- Transformer 注意力的计算与显存经济学:解码瓶颈在 KV 读取带宽而非 FLOPs——不懂 roofline 分析就无法论证"跳过读取"比"少算乘法"更值钱。
- 注意力稀疏性的实证文献(注意力熵集中、检索头、induction head 等)——“模型其实只用一小块上下文"的信念必须来自这些证据。
方法论知识层:
- 查询感知稀疏注意力的技术谱系与各自的 O(N) 下界——知道现有路线卡在哪,才能识别"让模型自己说"是范式逃逸而非又一版打分器。
- 提示工程与格式化输出的能力边界:现代指令模型能否稳定遵循自定义标签协议?这决定了协议的可行性。
- 严格的三臂消融设计(分离格式效应与掩码效应)——对照实验的因果纪律。
工程知识层:
- vLLM 推理引擎的注意力内核定制:段级掩码注入 paged attention、B200 部署、8K 生成长度管理。
- chunk 切分策略与 prompt 模板设计(magic chunk 的粒度影响声明粒度与掩码收益的平衡)。
- LLM-as-judge 评测基建:rubric 生成、judge 与强模型的一致性校准(r=0.99)。
知识融合的关键节点:核心融合点是把工具调用的"结构化输出→引擎执行"模式平移到注意力控制——这需要同时理解推理引擎的内核层(掩码如何变成省带宽)与模型的接口层(如何让模型可靠地说),两个社区(系统与对齐)的词汇表都熟练才能设计出这个协议。第二个融合点是 DA^nm 消融臂的设计:意识到"提示格式本身会改变生成量与生成质量"这个混杂因素,来自对 LLM 行为敏感性的经验,纯系统视角会漏掉它。
八、论文中可以提取的通用性灵感
让系统内部专家直接声明意图,好过旁路推断
- 核心思想:当一个子系统(模型)已拥有决策所需的最优信息时,给它一个结构化表达接口,胜过在外部建猜测系统(打分器)。
- 论文证据:DA 以 O(1) 解析替代 O(N) 打分,token 降 31%–52%。
- 推广场景:数据库查询优化器让应用声明访问意图;操作系统让进程声明内存使用模式;RAG 系统让用户 agent 声明检索意图再路由。
把连续决策离散化为"选择+逃生门”
- 核心思想:把难以直接优化的连续量(注意力分布)转化为小选择空间(3 模式 × K 段),并保留保守选项(global)作为安全下界。
- 论文证据:DA 下界是退化为 Vanilla,精度损失小且随规模收窄。
- 推广场景:智能体工具路由(枚举意图类别+兜底全文模式);文档审阅分级(精读/略读/存疑全读)。
外部化的能力未必需要训练
- 核心思想:协议(prompt 接口+引擎配合)能兑现模型既有的潜在能力,不必修改权重——先做协议版验证上限,再考虑训练版。
- 论文证据:零训练在现成 Gemma/Qwen 上拿到主要收益;训练式 DA 留作未来工作。
- 推广场景:结构化输出的函数调用能力、让模型自评置信度、让 agent 自声明预算上限。
消融要分离"接口效应"与"机制效应"
- 核心思想:任何带格式/协议变化的方法,都必须设一个"同格式但不执行"的对照臂,否则增益归因不清。
- 论文证据:DA^nm 揭示声明本身会让生成量增加 66%,只有掩码执行才带来净节省——没有这个臂,52% 的结论会被生成开销悄悄打折。
- 推广场景:评测任何 CoT/工具/格式类改进时设计"假执行"对照;A/B 实验中分离 UI 改版与逻辑改版。
注意力经济的降本位在"少读"不在"少算"
- 核心思想:长上下文系统的瓶颈是内存搬运带宽;优化应瞄准"减少数据移动"(掩码、分页、缓存)而非"减少浮点计算"。
- 论文证据:15GB KV/步 vs 17B 激活参数的量级对比;attended tokens 直降 52%。
- 推广场景:检索系统的读放大治理;特征仓库的按需加载;分布式训练的通信压缩优先于通信次数优化。