长上下文推理里,模型该记住多长的历史,不是玄学问题,是明明白白摆在key-value状态矩阵里的工程账。7月27日,AI基础设施公司Doubleword在官方博客发了一篇技术长文,创始人兼技术骨干Jamie Dborin执笔,系统推导Kimi Delta Attention(KDA)——最新Kimi和Qwen模型家族用到的线性注意力变体——是怎么从最基础的softmax attention一步步演化出来的。
这篇文章的价值不在又抛出一个新公式,而在把"长文本注意力怎么省内存"这件事拆成了一套可以逐层复现的工程逻辑:写入、遗忘、读取,每一步都对应具体的矩阵操作。对长上下文模型研发和推理基础设施团队,这更像一张能按图施工的路线图,不是一个只能膜拜的黑箱结果。
Doubleword拆解KDA:核心变化是按key通道独立遗忘
推导路径是一条技术演进链:softmax attention → linear attention → DeltaNet → Gated DeltaNet → KDA。每一步解决同一个问题的不同侧面:模型要不要记住某段历史,记多久,用什么方式覆盖旧记忆。
softmax attention的做法很直接:每个新词都要回头看一遍全部历史key-value。序列越长,缓存和计算量涨得越快。
linear attention把历史压缩成一个固定大小的状态矩阵,换来线性复杂度,代价是丢了softmax的归一化和"选择性"——新信息只会叠加到旧状态上,不会覆盖。
DeltaNet在这里补了一刀:不再直接把value写进状态,先问状态"你现在觉得这个key对应什么value",算出预测误差,只写入误差部分。写入逻辑从"叠加"变成"纠错"。
Gated DeltaNet又加了一道全局遗忘门,状态在写入前先按统一比例整体衰减一次。到了KDA,变化只有一处,但影响不小:原来那个统一的标量遗忘系数,换成了一个按key维度展开的对角矩阵。某个记忆通道可以立刻清零,另一个通道可以原封不动地保留。
| 机制 | 状态大小 | 写入方式 | 遗忘粒度 |
|---|---|---|---|
| softmax attention | 随序列线性增长 | 直接查看全部历史key-value | 无遗忘机制 |
| linear attention | 固定 | 叠加写入 | 无遗忘机制 |
| DeltaNet | 固定 | 只写预测误差 | 无遗忘机制 |
| Gated DeltaNet | 固定 | 只写预测误差 | 一个标量,全局统一衰减 |
| KDA | 固定 | 只写预测误差 | 对角矩阵,按key通道独立衰减 |
为什么重要:长上下文的瓶颈,正从"算得动"移向"记得住"
原文提到,最新一代Qwen和Kimi的模型家族都已经在用DeltaNet系列的线性注意力变体。这说明"按通道遗忘"不是一次孤立的论文创新,已经进了主力模型的架构选项里。
这条演进链给出的实际信息是:模型状态的写入和遗忘方式,正变成一个可以精细调参的工程对象。不再是黑箱里"注意力算得快不快"这一句话能带过的事。
原文最后给出recurrent和chunkwise两套Triton kernel实现思路,也印证了这一点。同一套状态更新逻辑,要分别为"逐token解码"和"整段并行训练与预填充"两种场景写不同的执行路径。
值得盯住的限制:对研发和infra团队分别意味着什么
原文通篇是数学推导和kernel实现思路,没有给出任何吞吐、显存占用或成本下降的实测数字,也没有拿KDA和标准softmax attention做基准对比。它证明的是KDA在结构上"更精细",不是KDA在效果上"更好"。
对长上下文模型研发团队,这篇文章更适合当验证方向的参考。先在自己的任务上测按通道遗忘对检索、代码理解、多轮对话这类长文本场景有没有实际收益,再决定要不要把KDA换进模型架构,不要照搬论文结论直接迁移。
对推理基础设施团队,recurrent kernel服务逐token解码,chunkwise kernel服务并行训练和预填充。两条路径在自己的硬件上要分别评估实现和调优成本,不是换个attention模块就能完事。
对要做架构选型和算力预算判断的技术负责人,现阶段更实际的动作是先跑一轮自己的基准测试,再决定要不要把KDA或类似路线写进下一轮预算,不要把这篇推导当成省钱依据。
