/ LLM Algorithms
[LLM Algorithms-2] Gated DeltaNet: Teaching Linear Attention to Overwrite and Forget
A derivation of Gated DeltaNet from linear attention, covering error-driven Delta Rule updates, global decay, parallel training, recurrent inference, memory capacity, and comparisons with Transformers and Mamba.
标准 Attention 把每个历史 token 的 key 和 value 留在 KV Cache 中,查询时再回看整段历史。它的检索能力很强,但训练时的注意力矩阵随序列长度二次增长,推理时的 KV Cache 也会越来越大。
Linear Attention 选择了另一条路:不再保存完整历史,而是把 key-value 关系压进一个固定大小的矩阵状态。这样,训练和推理对序列长度都可以做到线性复杂度,但新的问题也随之出现:如果状态只会做加法,已经写进去的错误或过期信息该怎么修改?
Gated DeltaNet 的答案是把两种记忆操作放进同一条递推公式:
- 用 Delta Rule 沿指定 key 的方向擦除旧值、写入新值;
- 用 decay gate 对整个状态做衰减,控制全局遗忘。
它的核心不是“用某种技巧近似 Softmax”,而是构造一个可以在线读写的固定容量关联记忆:
本文从最简单的线性注意力开始,一步步推导 Gated DeltaNet,并解释它为什么既像 Linear Attention,又像 RNN 和状态空间模型。
1. 起点:把历史 KV 压进一个状态#
先约定每个时刻的向量和状态维度:
| 符号 | 维度 | 含义 |
|---|---|---|
| 当前 token 的读取地址 | ||
| 当前 token 的写入地址 | ||
| 准备写入的内容 | ||
| 截至时刻 的压缩记忆 |
为保持公式简洁,本文省略 batch 和 head 下标,并采用 的矩阵方向约定。其他实现可能把状态转置成 ,此时公式的左右乘顺序会相反,但机制不变。
最简单的 causal linear attention 可以写成:
每个外积 都把一组 key-value 关联写进状态。展开递推式可得:
因此读取结果是:
这仍然具有 Attention 的基本结构:用 query-key 相似度给历史 value 加权。区别在于,标准 Attention 显式保留每一项,Linear Attention 则提前把它们聚合进 。
1.1 它为什么是线性的#
标准 Attention 需要形成一个 的相似度矩阵,序列维度上的计算量通常是 。递推状态只需为每个 token 更新一次 ,总计算量约为:
自回归推理时也不必保存随 增长的完整 KV Cache,只需保留固定大小的 。这正是 Linear Attention 对长上下文有吸引力的原因。
1.2 纯加法状态的问题#
上述状态只能不断累加:
旧状态 + 新的 key-value 外积如果模型先读到:
Alice lives in Paris.后来又读到:
Alice moved to London.理想行为是用 London 覆盖 Paris。纯加法更新却会把两条关联都叠加到状态中:
它写入了 London,却没有显式删除 Paris。随着上下文增长,冲突和干扰会不断积累。
2. Delta Rule:先读旧值,再写入误差#
Delta Rule 不直接写入完整的 ,而是先问:当前状态在 这个地址上已经存了什么?
从旧状态读取:
计算目标值和旧值之间的误差:
最后只把误差写回 对应的方向:
其中 是更新强度:
- :基本不修改当前关联;
- :强烈覆盖当前关联;
- 中间值:只完成一部分纠正。
与纯加法线性注意力相比,区别可以概括为:
纯加法:写入新值
Delta:写入“新值 - 当前读到的旧值”2.1 展开后可以看到“擦除 + 写入”#
将 Delta 更新展开:
这个形式把两个动作清楚地分开了:
Delta Rule 并不是模糊地“忘掉一点历史”,而是根据当前 key 选择要修改的状态方向。
2.2 为什么 key 通常需要归一化#
若 ,矩阵
具有清晰的几何意义:
- 在 方向上,缩放系数为 ;
- 在与 正交的方向上,缩放系数为 。
因此,当 时,它会完全擦除 方向的旧内容;当 时,它保持状态不变。
更直接地,把更新后的状态重新作用到 上:
在 key 已归一化且 时:
不管这个地址之前存了什么,更新后都会被替换成新值。
2.3 用“搬家”例子重新理解#
假设状态已经记住:
读到 Alice 搬去 London 后,模型产生:
于是更新量近似为:
它显式减去 Paris,再加入 London。这正是纯加法状态缺少的覆盖能力。
3. Delta Rule 也可以看成在线梯度下降#
Delta Rule 并不是为神经网络凭空发明的更新。它与经典的 Widrow-Hoff Rule、Least Mean Squares 更新有直接联系。
把状态矩阵视为一个在线学习的线性映射:
当前 token 提供一条训练样本 ,其平方误差为:
对 求梯度:
以 为步长做一次梯度下降:
正好得到:
这给出了一个很有意思的理解:
模型的权重通过训练阶段的反向传播学习;模型的矩阵状态则在每次前向传播中执行一个微型在线学习算法。
外层网络负责学会生成什么 key、value 和步长,内层状态负责在上下文中快速建立或修正关联。
4. 为什么还要加 Gate#
Delta Rule 擅长修改某个 key 方向上的记忆,但它只是一种定向操作。如果上下文已经整体失效,一次秩一更新无法快速清理所有与 不对齐的旧信息。
例如:
- 文档进入新章节;
- 对话突然切换话题;
- 一个 episode 或样本结束;
- 旧工作记忆应随时间整体衰减;
- 当前 token 相当于一次状态重置。
为此,Gated DeltaNet 引入衰减门 。其核心更新是:
等价地:
这里通常有:
两种门控的职责不同:
| 组件 | 回答的问题 | 作用范围 |
|---|---|---|
| 旧上下文整体还应保留多少? | 整个状态 | |
| 当前地址需要被改写多少? | 对应的方向 | |
| 修改状态的哪里? | 写入地址 | |
| 写入什么? | 新内容 | |
| 从哪里读? | 读取地址 |
4.1 衰减门负责全局遗忘#
当 时,旧状态基本保留;当 时,旧状态被大幅清空。
如果暂时忽略 Delta 项,连续的门控递推为:
更早写入的内容会乘上后续所有衰减门:
因此,网络可以学习不同的记忆时间尺度:某些 head 快速遗忘,适合局部模式;另一些 head 长期保留,适合跨段依赖。
4.2 Delta 门负责定向覆盖#
决定当前 key 方向上擦除旧值和写入新值的强度。它不是简单的 input gate,因为它同时控制:
和:
也就是说,增大 会同步加强“删旧”和“写新”。这保证覆盖操作前后一致。
4.3 为什么误差项里也有 #
Gated DeltaNet 先将旧状态衰减为 ,再计算这个衰减后状态在 上的旧值:
因此误差应当是:
而不是 。这使“全局遗忘后再定向覆盖”的语义保持一致。
5. 一条公式中的三种记忆操作#
把核心公式完全展开:
因此,Gated DeltaNet 每一步都可以执行三种操作:
- Retain:保留仍然有效的历史;
- Erase:删除某个地址上的旧内容;
- Write:把新内容写入这个地址。
可以用一段简化伪代码表示:
state = zeros(num_heads, value_dim, key_dim)
for x in sequence:
q = query_projection(x)
k = normalize(key_projection(x))
v = value_projection(x)
alpha = decay_gate(x)
beta = update_gate(x)
decayed_state = alpha * state
old_value = decayed_state @ k
error = v - old_value
state = decayed_state + beta * outer(error, k)
output = state @ q真实模型会使用多头状态、输出门、归一化、短卷积、输出投影与残差连接,但最关键的记忆过程就是这几行。
6. 一个典型 Gated DeltaNet 层包含什么#
Gated DeltaNet 不是只有一条递推式。一个完整 block 通常可以抽象为:
输入
-> 归一化
-> Q / K / V 投影
-> decay gate alpha
-> update gate beta
-> Gated Delta 状态更新
-> query 读取状态
-> 输出门与输出投影
-> 残差连接
-> MLP / SwiGLU
-> 残差连接多头实现为每个 head 维护一份独立状态:
不同 head 可以学到不同的:
- key-value 子空间;
- 记忆时间尺度;
- 写入强度;
- 局部模式与长期依赖分工。
门控一般由输入动态生成。例如,更新门可以写成:
衰减门则常采用能保证范围和数值稳定性的指数参数化,例如:
具体代码库的参数化会不同,但目标相同:保证旧状态不会因为 gate 自身而无界放大,同时让模型能学习从短期到长期的衰减速度。
7. 训练为什么需要分块并行#
递推形式很适合 decode:每来一个 token,读取一次旧状态并更新一次即可。但如果训练时也逐 token 执行,GPU 会因为串行依赖而难以充分利用并行算力。
把更新统一写成:
其中:
连续展开可得:
这说明一段 token 的更新可以被组合成“输入状态到输出状态”的整体变换。实际实现通常会:
- 把长序列切成多个 chunk;
- 在 chunk 内组合低秩状态变换;
- 用大矩阵乘法并行计算 chunk 内输出;
- 在 chunk 之间递推或扫描状态。
由于每个 都是“衰减后的单位阵减秩一矩阵”,实现可以利用这种低秩结构和紧凑表示,避免显式形成所有稠密状态转移矩阵。
最终,同一个模型通常有两种等价执行路径:
| 场景 | 执行方式 | 特点 |
|---|---|---|
| 训练 / Prefill | Chunkwise Parallel | 用矩阵乘法提高吞吐 |
| 自回归 Decode | Recurrent | 每个 token 只维护固定状态 |
工程上最重要的验证之一,就是确保 parallel、chunkwise 和 recurrent 三条路径在数值误差范围内一致。
8. 复杂度与推理状态#
对单个 head,状态大小为:
单 token 更新需要矩阵-向量乘和外积,主要计算量约为:
长度为 的序列总计算量约为:
对序列长度是线性的。自回归推理时,缓存大小不随上下文长度增长。
但“线性复杂度”不等于在所有场景中都更快。真实性能还取决于:
- 每个 head 的状态维度;
- chunk 大小;
- batch size 和序列长度;
- kernel 是否融合;
- GPU 对矩阵乘法的利用率;
- 是否包含短卷积和额外门控;
- 当前阶段是 prefill 还是 decode。
短序列上,高度优化的 FlashAttention 可能仍然更快;长序列和长时间 decode 才更容易体现固定状态的优势。
9. 与其他架构的关系#
9.1 与普通 Linear Attention#
最简单的线性注意力是:
它只能累加。Gated DeltaNet 则增加了两种删除能力:
做全局衰减, 做定向擦除。
9.2 与门控线性注意力#
普通门控线性注意力常写成:
它可以整体遗忘,却不能精确替换某个 key 的旧 value。DeltaNet 刚好相反:定向覆盖很强,但缺少独立的全局衰减。Gated DeltaNet 将两者合并。
| 模型 | 状态转移 | 主要能力 |
|---|---|---|
| 纯线性注意力 | 不断累加 | |
| 门控线性注意力 | 全局衰减 | |
| DeltaNet | 定向覆盖 | |
| Gated DeltaNet | 全局衰减 + 定向覆盖 |
9.3 与 Transformer#
Transformer 显式保存每个历史位置:
Gated DeltaNet 则将历史压缩进:
| Transformer | Gated DeltaNet |
|---|---|
| 保存 token 级 KV 历史 | 保存固定大小的压缩状态 |
| 可以直接访问历史位置 | 通过内容方向访问关联记忆 |
| Attention 通常随 增长 | 序列计算量通常随 增长 |
| KV Cache 随上下文增长 | Decode 状态大小固定 |
| 精确检索能力强 | 可能受容量与干扰限制 |
Gated DeltaNet 不是 Softmax Attention 的无损重排,也不是简单的 kernel approximation。它更像是用一种固定容量记忆系统替换显式 token 检索。
9.4 与 Mamba 和状态空间模型#
选择性状态空间模型可以抽象为:
Gated DeltaNet 同样是输入相关的循环状态更新,但它的状态是矩阵,且转移结构具有明确的 key-value 解释:
两者的共同点包括:
- 推理状态大小固定;
- 输入决定状态保留、写入和读取;
- 训练依赖并行扫描或分块算法;
- 适合长序列和流式推理。
区别在于,Mamba 更强调选择性状态空间动力学,Gated DeltaNet 更强调内容寻址的关联记忆和 Delta Rule。论文标题中的“Improving Mamba2 with Delta Rule”也正是在说明:它保留类似 Mamba2 的门控衰减,再把纯衰减状态转移增强为可定向覆盖的低秩变换。
10. 固定状态的代价:容量与干扰#
固定状态带来线性推理和固定缓存,也意味着任意长历史都必须被压缩进有限维矩阵。它不可能无损保存无限多条独立关联。
假设两个 key 很接近:
更新 对应的 value 时,也容易影响 方向的记忆。如果两者接近正交:
它们才能相对独立地共存。
因此,实际记忆容量取决于:
- key 和 value 的维度;
- key 的分布是否容易冲突;
- head 数量与子空间划分;
- 门控是否学会及时删除过期信息;
- 同时需要保留多少条独立关联;
- 任务需要模式记忆还是逐字精确回忆。
这揭示了 Gated DeltaNet 最根本的工程取舍:
11. 优势、局限与适用场景#
11.1 主要优势#
线性序列复杂度。 不需要构造 注意力矩阵,更适合长序列。
固定大小的推理状态。 自回归生成时,状态不会像 KV Cache 一样随上下文持续增长。
能够覆盖旧记忆。 Delta Rule 显式计算新旧值误差,比纯加法状态更适合事实修正、变量赋值和状态更新。
同时支持局部与全局遗忘。 负责定向擦除, 负责整体衰减。
具有内容寻址能力。 query、key 和矩阵状态保留了 Linear Attention 的键值记忆语义。
11.2 主要局限#
精确回忆能力受限。 随机字符串复制、稀疏证据定位和逐字引用等任务,显式 Attention 往往更有优势。
状态干扰不可避免。 不同 key 不完全正交时,写入一条关联可能破坏另一条关联。
状态本身并非免费。 每层、每个 head 都要维护 矩阵;维度设计不当时,固定状态仍可能很大。
高效训练实现复杂。 理论递推很简洁,实际却依赖 chunkwise 算法、数值稳定处理和高质量 GPU kernel。
难以还原 token 级来源。 历史已经混合进矩阵状态,不像 Attention map 那样容易观察当前输出来自哪个具体位置。
11.3 更适合的场景#
- 长文本语言建模;
- 流式输入和持续到达的时间序列;
- 长时间自回归生成;
- KV Cache 成为显存瓶颈的部署;
- 需要在线修改工作记忆的任务;
- 对固定内存占用有要求的推理环境。
11.4 更需要谨慎的场景#
- 必须无损保留大量历史细节;
- 需要从超长上下文精确复制原文;
- 强依赖随机位置访问;
- 中短序列且 FlashAttention 已经非常高效;
- 任务主要瓶颈不在 Attention 或 KV Cache。
12. 为什么 Hybrid 往往是务实选择#
Linear Recurrent 模块与 Full Attention 并不是非此即彼。一个自然的混合架构是:
多数层:Gated DeltaNet / Linear Attention / SSM
少数层:Full Attention多数线性层承担模式建模、局部处理和低成本状态传播;少量 Full Attention 层提供精确 token 检索。这样可以在三方面折中:
- 降低长上下文计算和缓存成本;
- 保留一定的精确回看能力;
- 避免要求固定状态承担所有历史细节。
是否需要 Hybrid,最终取决于模型要解决的问题。如果任务更像“持续维护世界状态”,Delta Rule 很自然;如果任务更像“从档案库中精确找回某一行文字”,显式 Attention 更自然。
13. 常见误区#
13.1 Gated DeltaNet 等价于 Softmax Attention#
不等价。它没有保存完整 token 级 KV,也没有执行相同的 Softmax 归一化。两者采用的是不同记忆机制。
13.2 Delta Rule 就是一个普通写入门#
不准确。普通 input gate 只控制写入多少,Delta Rule 同时根据当前读到的旧值执行定向擦除和纠错写入。
13.3 有 Gate 就不需要 Delta Rule#
全局 decay gate 能让所有旧信息一起变弱,却不能精确替换某个 key 对应的 value。两种机制解决的问题不同。
13.4 固定状态意味着零缓存#
不准确。模型仍要缓存矩阵状态,有些实现还包含卷积状态。准确说法是:主要递推状态通常不随上下文长度增长。
13.5 线性复杂度意味着一定更快#
不一定。短序列、较大状态维度或缺少优化 kernel 时,Full Attention 可能具有更高的实际吞吐。
13.6 能覆盖就等于不会遗忘重要信息#
覆盖能力只是提供了一种操作。模型仍需通过训练学会生成合适的 key、 和 ;错误门控同样会导致过早遗忘或记忆污染。
14. 最后用一条演进链路记住#
从最简单的状态开始:
它只能增加信息。DeltaNet 改成:
它可以覆盖指定地址。Gated DeltaNet 再加入全局衰减:
于是,五个变量各自回答一个明确问题:
| 变量 | 问题 |
|---|---|
| 旧状态整体保留多少? | |
| 修改哪个记忆地址? | |
| 这个地址修改多少? | |
| 写入什么新内容? | |
| 从状态的哪里读取? |
如果只记一句话,可以记成:
Gated DeltaNet 是一个由神经网络控制的在线关联记忆:它用固定大小的矩阵压缩历史,用 query-key 做内容寻址,用 Delta Rule 覆盖具体记忆,再用 decay gate 决定整个过去还值得保留多少。
参考资料#
- Yang et al., Gated Delta Networks: Improving Mamba2 with Delta Rule, 2024.
- Yang et al., Parallelizing Linear Transformers with the Delta Rule over Sequence Length, 2024.
- Dao and Gu, Transformers are SSMs: Generalized Models and Efficient Algorithms Through Structured State Space Duality, 2024.
- Katharopoulos et al., Transformers are RNNs: Fast Autoregressive Transformers with Linear Attention, 2020.