Attention 之争
发布时间:
这两天看了 zartbot 一篇三万字的《详细分析一下 Attention, Sparse or Linear?》,从 Softmax 的最优输运推导一路算到 GPU 的 roofline。同一个作者还有一篇随笔谈 RSI,讲的是当系统连什么叫更好的评价标准都能改的时候,我们凭什么还把变化称为改进。中间我又拿 Kimi K3 的架构跟模型来回掰扯了好几轮。
我本来只想搞清楚一个很具体的问题:K3 那套 KDA 到底赌对了没有。看完还是不知道。而且不是我一个人不知道,现在好像谁也说不清。
2026 年 11 月 6 日 05:58:09 来更新了,K3 赌错了,K3.1 pro 更是赌错了,技术理想主义败给了现实,这条路在当前的中国完全走不通,带来的后果就是无限的等待,无限的 GPU 不足问题,现实就是这样。
我一直以为 Softmax 就是个归一化的工程习惯,谁想改都能改。那篇文章一上来就把这条路堵死了:如果你接受三个前提,即每个 Query 只有总量为 1 的注意力预算、用点积打分、用 Shannon 熵做正则,那这道单边最优输运问题的解唯一地就是 Softmax。分母那个归一化不是设计者加上去的技巧,是预算约束通过拉格朗日乘子自动逼出来的。目标函数严格凸,单纯形是凸紧集,极小点存在且唯一。
所以 Sparse 和 Linear 都在改前提。Sparse 缩小了可行域,只让一部分 token 进场比赛,进场的那些之间还是原汁原味的 Softmax 竞争;Linear 放弃了逐 Query 分布这个前提,不再为每个 Query 单独算一次,提前把历史压成一个固定大小的状态。
这两条路线签的是两份完全不同的合同。Sparse 是选择问题,Linear 是压缩问题。差别在失败模式的可逆性上:Sparse 选错了,信息还完完整整躺在 KV 里,这一层漏了下一层还有机会,这个 query 漏了下个 query 还有机会;Linear 压掉了就是压掉了,两段不同的历史一旦被压成同一个状态,后面无论怎么提问都分不开。文章里的比喻是两杯不同配方的糖水倒进了同一个杯子,之后换再高级的仪器也测不出原来是哪两杯。
这种碰撞是纯线性代数的必然,跟训练够不够或者 gate 调没调好无关。把 N 个 Key 的特征堆成矩阵,状态是它的转置乘 V,当 token 数超过特征维数,零空间维度至少是 N 减 r,一定存在非零的扰动加进 V 里而状态纹丝不动。有人会问 GDN、KDA 那种数据依赖的非线性门控能不能绕过去,绕不过去,只要状态维度固定、更新连续,拓扑维数不变性就挡在那儿,你没法把一张平面地图连续地铺到一条线上而不重叠。
容量之外还有个更基本的因果顺序问题:状态在看到未来 Query 之前就必须决定保留什么。文章里打的比方是图书馆在读者进门之前就得决定哪些书上架、哪些书销毁。Full Attention 可以为每个新 Query 重新扫描全部 Key,所有书都留在库房随查随取;Linear 只能查事先压好的统计量。这一条决定了它在精确复制、多键关联检索、多针 needle 这几类任务上会系统性地吃亏,Kimi Linear 自己的论文也承认了这一点。
遗忘门还有个两难。一个衰减速率只能定一种记忆寿命,但任务同时要求老信息保得住、过时信息清得快,写下两个不等式会发现解区间根本不相交,同一个旋钮拧不出两种转速。哪怕 α 取 0.99,每步只忘百分之一,已经非常接近不遗忘了,1000 步之后也只剩 0.99 的 1000 次方,两万分之一左右。放到 512K 上下文里,一条不再被访问的远古记忆基本等于湮灭。KDA 把标量门换成逐通道对角门,等于把一个旋钮换成一百多个,确实缓解了单一时间尺度的冲突,但它修的是怎么忘,没改变能装多少,登记簿的页数一页都没变厚。
K3 那个 3:1 混合,我觉得本身就是一份承认书。93 层里 69 层 KDA、24 层 Gated MLA 交错,最后一层保证是全局 MLA。Gated MLA 干的事就是周期性地把逐 token、可寻址的原始记忆还回来,打断所有信息都必须挤过同一个固定状态瓶颈的结构。相当于图书馆虽然大部分书按摘要归档了,但每隔几层还是留一个能直接进原始库房翻书的通道。这已经从架构层面承认了纯固定状态提供不了足够可靠的精确检索。
我一开始跟模型聊的时候,顺着网上的说法把 KDA、Gated MLA、Block AttnRes 全算成给 Linear 打补丁,这个被纠正了,纠得对。Block AttnRes 处理的是网络深度方向的信息压缩:93 层堆下来,早期层的表示在残差里被稀释,后面的层没法主动挑自己需要哪个深度的表示。它跟上下文时间方向的压缩根本不是一回事,修不了 KDA 的零空间。这三个组件其实在处理三个正交的问题:序列混合、精确检索、深度路由。把它们统称为补丁是记错了账。
但承认 Gated MLA 是逃生通道之后,有个更硬的推论跑不掉:混合架构的 KV Cache 下界,被那四分之一的 Full 层钉死了。它把随长度增长的 KV 容量降到纯 MLA 的约四分之一,却没法消掉。序列足够长之后主导每 token 延迟的还是那些 MLA 层。顺着这条线往前推一格就更清楚,K3 官方支持的是 1M 而不是 5M。真到 5M,69 层线性加 24 层二次,整体渐近复杂度还是二次的,那 24 层全局 MLA 会重新变成绝对主导项。1M 上非常划算的工程折中,不能线性外推到 5M。
Sparse 这边的账是另一种形态。它的数学部分出奇地简单,误差的唯一控制量是被删掉的那部分概率质量,注意不是 top-k 的 k。k 只是手段,漏掉多少预算才是关键:分布高度集中的时候很小的 k 就够,分布弥散的时候再大的 k 也白搭。难的全在工程侧,而且演进是一条很清晰的难题搬家链。DeepSeek 的 DSA 用低维、FP8、ReLU 打分的轻量索引器加 top-2048 立起了生产级配方,主注意力从平方降下来了,然后索引器自己变成了新瓶颈。有个 profiling 数字:30B 的 DSA 模型在 200K 上下文下,prefill 阶段索引器占总延迟的 81%,decode 也占 41%。干掉主要矛盾之后次要矛盾自动升格。后面 IndexCache 发现相邻层的 top-k 名单重合 70% 到 100%,干脆让多数层抄少数层的作业,砍掉四分之三的索引计算,200K prefill 快了 1.8 倍。
IndexCache 那篇里还有个负结果,比它的正面结论更有价值:用索引重叠率、输出余弦相似度这种局部指标来决定留哪些层,必然失败,哪怕配上全局最优的动态规划也一样,只有端到端的 LM 损失能看见误差在跨层传播里的级联伤害。评价指标必须跟最终目标对齐,优化一个聪明的替代品不如直接优化你真正在乎的东西。这句话在后面还会再撞一次。
腾讯那个 HiLS 干的是另一件事,把块摘要从 mean-pooling 换成 LogSumExp 的一阶展开,块内均匀时行为像 mean、一针独大时行为像 max,还把检索分数通过分层 Softmax 送进前向计算,让 LM 损失的梯度能直达 landmark。这一下把稀疏注意力的目标从逼近 full attention 改成了超过 full attention。而且实验里有个反直觉的观察,full attention 的检索能力会被持续训练侵蚀,稀疏架构反而把它固化成了结构属性,让稀疏带上了独立的归纳偏置。
再往后是 DeepSeek-V4 的 CSA 和 HCA,不再选哪些原始 token,先把每 4 个或者 128 个 token 压成一条摘要,再决定读哪些摘要,1M 上下文的 KV Cache 压到 BF16 GQA8 基线的 2% 左右。但注意这里块内的混合权重是 Query 无关的,某个 needle 在压缩时只分到很小的权重,之后 Query 再尖锐也放大不回来。这跟 Linear 的碰撞是同一性质的限制,只是碰撞半径被限制在块内那 4 个或 128 个 token 里,没扩散到整段历史。
所以这三种机制是一个按压缩率排列的连续谱系:Full 不压缩,CSA 是 4 倍有损压缩加稀疏选择,HCA 是 128 倍有损压缩加稠密读取,Linear 是全历史压进固定状态。压缩率越高,容量和带宽越省,Query 无关的损失越大,不存在跳出这个谱系的免费选项。Sparse 正在往 Linear 那边走半步,Linear 靠混合往 Full 那边走了半步,两边其实在往中间收敛。
后面讲 Infra 的部分才是重点,决定选型的根本在流量形态。一类流量是大量请求共享前缀:相同的系统提示词、相同的工具定义、同一个 prompt 分叉出多条 RL rollout、投机解码反复验证共同前缀。这类负载的核心指标是每个独特前缀只算一次,单条百万 token 的理论复杂度反倒排在后面。另一类是请求彼此都不一样但每条都特别长:每个用户上传一份不同的百万 token 文档、长时间自主跑的 coding agent、工具调用不断追加状态的 trajectory,缓存命中率天然很低。
这两类对两条路线的偏好几乎是反的,原因藏在缓存的语义里。Sparse 的前缀是一堆小 KV block,任意 token 边界都能切,靠 radix 树引用计数共享,全平台物理上只存一份;KDA 的前缀只能由那个位置的完整状态快照表示,不能任意切分,命中也不是引用计数而是 copy-on-restore,快照实体要拷进新请求的私有 slot,B 个并发就是 B 份。Sparse 的前缀复用兼具容量复用和计算复用,Linear 的前缀复用只有计算复用。投机解码更是把差异放到最大:Sparse 是 append-only 的,草稿被拒绝就把尾部 KV 丢掉、页表截断,零额外容量;KDA 的状态是原地连续更新的,一次投机七个 token 只接受三个,你得能恢复到第三个的状态,要么存中间状态要么 replay。
说公道话,KDA 也能做 prefix caching,vLLM 对 K3 已经支持了,解耦前缀匹配粒度和物理 state block、在选定边界存快照、每 32K 存一次 checkpoint、命中第二次才值得存。差别在复用粒度和缓存密度,但这一整套下来,工程复杂度确实明显更高。
于是产业分工就有解释了:DeepSeek、腾讯、GLM 这些做平台的选 Sparse,Kimi、Qwen 押 Linear 混合,MiniMax M2 干脆退回 Full。各家的业务基本盘不同。这套叙事我基本认同,但想加一条修正:把 DeepSeek 和腾讯归成同一种 MaaS 基本盘稍微糙了点。腾讯确实是典型的多租户平台型公司,DeepSeek 更像是极致单位算力效率的逻辑,而且有个很朴素、很少被提起的原因,它要继承 MLA 的既有权重和软件栈。V3.2 是通过 continued training 把 V3.1 的 MLA 模型转成 DSA 的,省去了从头换新架构的代价。技术路线的惯性也是一种真实约束,这个变量在纯技术讨论里几乎从不出现,但它可能比很多 benchmark 数字更能解释一家公司为什么选 A 不选 B。
顺手把现在这张牌桌记一下。Kimi K3 是 93 层里 69 层 KDA 加 24 层 Gated MLA,2.8T 总参数、104B 激活,1M 上下文;Qwen3.5-397B-A17B 是 GDN 混合,也是大约 3:1,262K 原生;DeepSeek-V4 是 CSA 和 HCA 交替,两级压缩率;GLM-5 用 DSA 加 IndexCache,索引器削一半换 1.2 到 1.3 倍端到端;MiniMax 最反复,M2 退回 full attention,M3 又带着块级稀疏的 MSA 回来了,1M 下每 token 算力大概只有二十分之一。Maxime Labonne 写过一句 nobody agrees on attention anymore,概括得挺准。一年前大家争的是 MoE 还是 dense,那个已经定了,现在所有分歧全部集中到 attention 上。而且这张牌桌上没有任何两家的选择是一样的,在一个所有人都能读到彼此论文、复现彼此结果的领域里,这种程度的不收敛本身就是个需要解释的现象。
MiniMax 那个反例是这场争论里最硬的一块经验证据。他们在 M2 上认真试过混合 SWA,跑了数万亿训练 token、试了多种配置,结果是标准 benchmark 套件上打平,但需要把长文档里散落的线索串起来的复杂多跳推理垮掉了。最后他们咬牙吃下了完整二次注意力的算力成本,回到 full attention。他们自己复盘里有一句:benchmark 是必要的工具,但它们本质上是对真实能力的有损抽象。
这句话的意思是,我们用来选架构的那把尺子,本身就是有损压缩的产物,而且它有损的方式恰好跟被测对象的失效模式重合。benchmark 的平均分是对能力的一次有损压缩,KDA 把历史压进固定状态也是一次有损压缩,两者丢掉的恰好是同一类跨越长距离、稀疏、需要精确串联的关联。多跳推理在平均分里只占几个百分点,但它正是压缩最先牺牲掉的。你在用一个有损压缩的评价器,去评判一个有损压缩的架构。
K3 的证据链也有同构的缺口。所有 matched-baseline 的对照实验都来自 48B/A3B 的研究模型,RULER 128k 是 84.3 对 MLA 的 81.3,MRCR 128k 是 29.6 对 22.6,但 2.8T 的旗舰上并没有一个同规模、同配方的 full-MLA 对照。技术报告给了个 5.65 对 5.77 的验证困惑度消融,那仍然是研究规模的证据在向上外推。这倒不是说 Moonshot 不诚实,而是这个对照实验根本做不起。按那篇文章里的粗略估算,一个 10T 级模型单次预训练成本在二三十亿量级,没有哪家公司会为了证明自己架构选对了再花二十亿跑一遍对照组。结果就卡在一个很尴尬的循环里:最需要严格对照的那个决策,恰好是最做不起对照实验的决策。另外 MRCR 128k 上 KDA 拿了 29.6 的最好成绩,但 29.6 这个绝对值本身说明的问题,比谁第一更值得看,纯属矮子里挑将军。
那两篇文章放在一起看会有种呼应感。RSI 那篇讲的核心是当系统连什么叫更好的评价标准都能修改时,我们凭什么仍然把变化称为改进,它给这种失效起了个名字叫 evaluator capture(评价器俘获)。架构选型是同一个问题的弱化版本,结构一模一样:提出改进的人同时挑选评价指标,评价指标本身有损而且损失方式跟被测对象的失效模式相关,对照实验成本高到无法执行只能跨规模外推,于是新架构更好这句话的可证伪性被大幅削弱了。
好在那篇给的解法可以原样搬过来。它要求真实的能力提升必须通过多个相互独立的评价面,包括冻结的、外部的、对抗的、现实的、分布外的评测,核心是一个叫 evaluator invariance 的性质:换一批独立裁判,提升仍然存在。翻到 Attention 上就是几条很具体的规矩。不要只报 128K 的 RULER,从 128K 到 1M 竞争者多 8 倍,注意力权重的上界按 1/N 收缩,想保持同样尖锐的选择 logit 间隔还得再涨一截,而模型压根没在这个长度上见过训练信号,所以 512K 到 1M 级别的检索数据是这场争论里最稀缺也最关键的证据。要专门测最会暴露压缩的任务:多针 needle、精确复制、同一个 key 多次更新后查历史版本、大量高度相似的 key、多跳跨文档推理,平均分会把这些全稀释掉。做不起同规模对照也行,但要把外推明说,别让它伪装成测量。最后真正该比的是真实流量下的有效完成任务数除以 GPU 小时、HBM 占用、网络传输和缓存管理成本。
RSI 那篇里还顺手提了条经验法则:判断不清楚的时候,把某个关键变量拉大两三个数量级。5M context 下 Linear 的状态矩阵还装得下吗?顺着这一问,很多看起来势均力敌的分歧会自己塌掉一边。这个方法便宜、快,而且不需要花二十亿。
说说我自己的判断。短期内 1M 以下、平台型流量,Sparse 更稳,理由在工程成熟度:前缀缓存、PagedAttention、请求分叉、投机解码、多租户调度,整套体系都是围着逐 token、可寻址的 KV 建起来的,保留这个抽象就继承了全部生态,放弃它每样都得重做一遍。Linear 的价值在低复用长轨迹,它赌的是每条轨迹都不一样、都很长、缓存命中很低,在 agent 和 RL rollout 成为主要负载的时代,这个赌注一点都不离谱,K3 把方向从读长文扩大到跑很久的 Agent 是个挺清晰的判断。混合是现状不是终局,KDA 的 KV 下界被 Full 层钉死在四分之一,CSA 的块内混合又引入了 Query 无关损失,两边都在往中间挪,说明谁都还没找到真答案。倒是有个挺显眼的空白:到现在还没人做 Linear 加 Sparse 的混合。
至于模块多等于设计错这个说法我不接受,大道至简我认,但简洁应该指约束更少,不是模块更少。不过有一种复杂度确实该警惕:需要一整套专用 kernel 才能兑现的收益。KDA 的 kernel 融合、AttnRes 跟 RMSNorm 的融合、混合 cache 的专门管理器、rollout 的 external KV pool 和 auto-throttling,在 Moonshot 自己的栈上这些收益都是真的,换个通用框架可能完全反过来,kernel launch 变多、中间状态物化、投机解码收益下降。这属于算法和系统协同设计的优势,跟纯算法优势的可迁移性差得很远,而在公开讨论里它们经常被混为一谈。
最要紧的还是先修评价器。在没有同规模同配方的对照、没有 512K 到 1M 级别的检索评测、没有真实流量下的单位成本数据之前,任何一方宣称胜利都只是在自己设计的尺子上赢了。在那之前,所有架构选择都是在下注:赌自己的流量形态、赌自己的工程栈、赌自己对未来负载的判断。既然是下注,那就诚实地把它叫下注,这比在一把有损的尺子上宣布胜利要靠谱得多。
参考
- zartbot:《详细分析一下 Attention, Sparse or Linear?》(微信公众号),以及同作者的《[随笔] 谈谈 RSI》
- Kimi Linear: An Expressive, Efficient Attention Architecture:KDA 与 3:1 混合的原始消融
- Kimi K3 Technical Report
- DeepSeek-V4: Towards Highly Efficient Million-Token Context Intelligence:CSA / HCA
- Why Did MiniMax M2 End Up as a Full Attention Model?,以及 LMSYS 的 No Free Lunch: Deconstruct Efficient Attention with MiniMax M2
- MiniMax Sparse Attention:M3 的 MSA
- Qwen3.5: Nobody Agrees on Attention Anymore
- Linear Attention at Frontier Scale: Kimi K3’s KDA Claim, Fact-Checked
- 苏剑林:将 Softmax Attention 线性化为 Gated DeltaNet
- Lilian Weng:Harness Engineering for Self-Improvement