Gated DeltaNet
Paper · ICLR 2025 · arXiv 2412.06464

Gated DeltaNet:用一条公式,同时管住「该忘的忘掉」和「该记的记准」

线性注意力把整段历史压成一个矩阵记忆。Mamba2 会给所有记忆均匀衰减,DeltaNet 能精确替换单条记忆——但两者各自都有一种场景直接失灵。 这篇论文把它们合成一条规则,并配了一套能在 GPU 上跑得动的分块并行算法。

Gated Delta Networks: Improving Mamba2 with Delta Rule arXiv 2412.06464 ↗ 代码 ↗
TL;DR · 30 秒抓住核心

线性注意力的状态 S 本质是一张 key→value 关联表,容量受模型维度限制;序列一长,不同的 key 就会挤进同一片空间,论文称之为 memory collision。

Mamba2 每步把所有关联乘上一个衰减系数——想只忘掉其中一条,做不到,只能「全部一起淡出」。
DeltaNet 能精确地把某条 key 的旧 value 擦掉再写新的——但上下文切换时想整片清空,它也做不到。

Gated DeltaNet 的做法是:先乘 α 做全局缩放,再按 β 做定向擦写。α=0 就是清空,β 控制替换强度,一条公式覆盖两者的全部行为。

16.42
Wiki 困惑度(1.3B)
Mamba2 16.56 / DeltaNet 17.71
16.6
LongBench 平均分
Mamba2 13.5 / DeltaNet 13.6
≈ DeltaNet
训练吞吐
比 Mamba2 低 2–3K tok/s
01

线性注意力的记忆,到底是什么

先把这个「矩阵记忆」讲清楚,后面的两条路才看得懂。

标准注意力的代价是 KV cache 随序列长度线性增长。线性注意力换了个思路:把历史压进一个固定大小的状态矩阵,用一次矩阵乘法读出。

St = St-1 + vt kt⊤      ot = St qt
加性写入:每个新 token 把自己的 v·kᵀ 外积叠加进状态;查询时用 q 取出对应分量

关键在于:v kᵀ 是一个秩 1 的关联。状态 S 就是这些关联的叠加,能存下多少条互不干扰的关联,取决于 S 的秩上限,也就是模型维度 d。

核心矛盾

序列长度超过维度,就必然发生「记忆碰撞」

当需要记住的 key-value 对多于 d,它们无法再保持正交,只能叠在同一个方向上。此时再查询某个 key,取回的是多条关联的混合值——检索精度直接崩掉。这不是训练不够,是结构性的容量上限。

于是问题变成:如何在固定大小的状态里,尽量少地发生碰撞?论文的答案是——让模型学会「什么时候该整体淡出,什么时候该精确擦除某一条」。这就引出后面两种机制。

02

已有两条路,各自失灵在相反的地方

这是全文最关键的一张对照:两者的强项,恰好是对方的盲区。

Mamba2

全局衰减

每步把所有关联统一乘上衰减系数 αt,再叠加新的 v·kᵀ。

强项:能快速整体淡出,换话题时干净利落。

盲区:它不区分哪条关联重要。想只丢掉过期的那一条?做不到——只能连有用的信息一起衰减。

DeltaNet

定向擦写

先沿当前 key 方向擦掉旧值,再写入新值,写入强度由 β 控制。

强项:单条关联可以精确替换,不会被旧值污染。

盲区:它没有全局清空能力。上下文切换时,上一段的内容会长期残留在状态里,干扰后续检索。

证据:S-NIAH 上三种失败模式各不相同

S-NIAH 是「针在草堆里」的检索任务:上下文里埋一个 key-value 对,最后用 key 问 value。论文设计了三个变体,分别压测三种能力。切换下方基准,可以看到谁在哪一栏塌掉。

Mamba2 DeltaNet Gated DeltaNet

三条结论正好对应上面两张卡片的盲区:

03

把两条规则乘在一起

论文的全部创新,就是下面这一行。

St = St-1 · αt · (I − βt kt kt⊤) + βt vt kt⊤
Eq. 10 · 蓝色是 Mamba2 的全局门控,紫色是 DeltaNet 的定向擦除;两者相乘,不冲突

拆开看就是三步:

论文从在线学习的角度给了它一个统一解释:这个更新等价于带自适应权重衰减的测试时 SGD。α 就是权重衰减项,β 就是学习率。Mamba2 只有衰减没有回归目标,DeltaNet 只有回归没有衰减——Gated DeltaNet 两者都有。

自己动手:看三种规则怎么处理同一段序列

下面是一个最简化的记忆模拟。四个槽位代表四条 key 的关联,每个槽位存一个二维 value。切换规则、拖动 α / β,点按钮写入。

当前状态
先点「写入 A」和「写入 B」,再点「覆写 A」,对比三种规则的差别。

建议按这个顺序试:

这个模拟简化了什么?点开看与真实公式的差异

模拟里四个 key 取的是正交的 one-hot 向量,所以「槽位」和「维度」一一对应,擦除项 (I − β k kᵀ) 恰好只作用于目标槽位。

真实模型里 key 是稠密向量,不会严格正交——擦除一个方向时,会不可避免地轻微影响其他方向,这正是「近似擦除」的含义,也是碰撞问题的根源。模拟保留了机制层面的因果,省略了这种交叉干扰。

另外,论文里 α 和 β 都是由当前输入动态生成的标量(经过线性投影 + 激活),不是全局常数;模拟里用滑块代替,是为了让你手动感受它们的作用范围。

04

公式好写,难的是怎么在 GPU 上训

逐 token 递推意味着训练必须串行,等于放弃 GPU。论文的第二个贡献是一个分块并行算法。

递推式 St = f(St-1) 天然是串行的:训练时无法像注意力那样把一个 batch 的整条序列并行算完。论文的解法和线性注意力圈的通用做法一致——分块(chunkwise):

工程关键

WY 表示 / UT 变换

块内递推里反复出现 (I − β k kᵀ) 的连乘。论文用 WY 表示把它整理成一个三角矩阵求逆的形式(UT 变换),从而把整个块的计算改写成几次标准矩阵乘法——这才是 GPU 真正擅长的形状。

附录 A 给了扩展 WY 表示在门控情形下的推导,这是让「门控 + delta」不至于比纯 delta 慢太多的原因。

结果就是论文报告的吞吐:Gated DeltaNet 与 DeltaNet 几乎同速,说明加入门控的额外开销很小;两者都比 Mamba2 慢 2–3K tokens/s,代价来自更复杂的转移矩阵。混合架构(把部分层换成滑窗注意力)反而比纯线性层更快,所以在他们的最终模型里用了混合。

05

落成模型长什么样

论文 Figure 1:两种混合排布 + 单个 block 的内部结构。

N×N\timesGated DeltaNetMLPSWAMLPOutputsGated DeltaNet-H2Gated DeltaNet-H1Mamba2MLPGated DeltaNetMLPSWAMLPOutputsBlock DesignGated Delta Rule InputsLinearConv𝒗\bm{v}LinearConvL2𝒌\bm{k}LinearConvL2𝒒{\bm{q}}Lin.Lin.α{\alpha}β{\beta}LinearNormLinearOutputs
图 1:Gated DeltaNet 的混合架构(左、中)与 block 内部设计(右)。原图来自论文,矢量渲染。
展开说明 ▸
  • 左:Gated DeltaNet-H1 —— 每个子层是「Gated DeltaNet 或 SWA(滑窗注意力)」+ MLP,按一定比例交替堆叠。论文里常用 3:1,即三层线性 + 一层注意力。
  • 中:Gated DeltaNet-H2 —— 把线性层拆成两种交替:Gated DeltaNet 和 Mamba2,再夹 SWA。这样在同一模型里混合两种状态更新机制。
  • 右:Block Design —— 单个 block 的内部数据流。输入分别经线性投影得到 q、k、v、α、β;q/k/v 先过短卷积和 SiLU(q、k 额外做 L2 归一化以保证训练稳定),α、β 只做线性投影;然后进入 Gated Delta Rule 更新状态并读出。
  • 输出侧 —— 读出结果先过归一化,再和一条从输入直连过来的门控信号逐元素相乘,最后做输出投影。这条直连支路就是图右侧那个 ⊗ 的上方来路。
  • 为什么混合 —— 纯线性层在长序列检索上仍有短板,掺入少量滑窗注意力可以补上局部精确检索能力,同时保持整体线性复杂度。论文也报告混合后吞吐反而更高,因为注意力部分有高度优化的 FlashAttention kernel 可用。

值得注意的是,这个 block 的宏结构几乎照搬 Llama:仍是「token mixer + SwiGLU MLP」的堆叠,只是把 self-attention 换成了 gated delta rule。这意味着它可以作为一个即插即用的替换层,而不需要重新设计整个网络。

06

效果:全线小胜,长上下文赢得最多

所有模型同为 1.3B 参数、100B tokens 的 FineWeb-Edu,条件完全对齐。

模型Wiki ppl ↓LMB ppl ↓常识推理 avg ↑LongBench ↑
Mamba216.5612.5654.8913.5
DeltaNet17.7116.8852.1413.6
Gated DeltaNet16.4212.1755.3216.6
Transformer++18.5318.3252.2511.0
Gated DeltaNet-H116.0712.1256.40—
Gated DeltaNet-H215.9112.5556.18—

几个值得注意的点:

07

什么时候它不够用

论文自己的数据里,就能读出三条边界。

边界一

固定容量仍然是硬上限

S-NIAH-2 在 8K 时 Gated DeltaNet 只有 29.6,S-NIAH-3 在 4K 只有 27.6。门控和 delta 优化的是有限容量内的信息管理,并没有扩大容量本身。序列继续变长,碰撞依然会发生。

边界二

纯线性层仍不如混合

从 Table 3 看,H1 / H2 在几乎所有指标上都优于纯 Gated DeltaNet。也就是说,局部精确检索这一点,还是得靠少量真注意力兜底。工程上直接上纯线性层并不是最优解。

边界三

吞吐不是免费的

门控几乎不增加开销(与 DeltaNet 同速),但整体仍比 Mamba2 慢 2–3K tokens/s,因为转移矩阵更复杂。如果场景对吞吐极度敏感、且不要求强检索,Mamba2 仍有优势。

一句话总结:Gated DeltaNet 解决的是「同样的记忆容量下,怎么管得更好」,而不是「把容量做大」。这也是为什么 Qwen3-Next、Kimi Linear 这类模型选择把它当作混合架构里的「线性那几层」,而不是完全取代注意力。