系列:前沿架构解码手记

前沿架构解码手记(六):Gated DeltaNet——Conv1D 先抓局部、Gated Delta Rule 再压全局的线性注意力层

0. 为什么单聊这一层

fa1–fa4 讲的是怎么把注意力改轻(稀疏 / 压缩 / 混合 SSM)。但这一篇要聊的 Gated DeltaNet(GDN)走得更远——它不是注意力,而是一类线性注意力 / 递归状态空间层,核心靠一个固定大小的「状态矩阵」在每次 token 上做增量更新,把全局历史压进 O(d²) 的定长张量里。

它的层结构非常干净,只有两个算子:

两者形成「先局部卷积、后全局线性注意力」的层级:Conv1D 解决短程依赖和位置,Recurrent State 以 O(n·d²) 把长历史压缩成定长状态。下面这张图就是它的完整链路。

xₜ(当前 token) Q / K / V 投影(Linear)· 无 RoPE 位置信息交给 Conv1D,不引入 RoPE 算子 1 · Causal Conv1D(深度可分离因果卷积 + SiLU) 维护 conv_state 滑动窗口 → 局部上下文 + 位置感知 Q′ = Conv1D(Q) + SiLU K′ = Conv1D(K) + SiLU V′ = Conv1D(V) + SiLU 算子 2 · Recurrent State Update(Gated Delta Rule) 门控 αₜ, βₜ(数据依赖) α 遗忘 · β 写入 Sₜ:每 head 一个 d_v × d_k 矩阵(定长)

Sₜ = Sₜ₋₁ · αₜ ( I − βₜ kₜ kₜᵀ ) + βₜ vₜ kₜᵀ δ-rule 写入 − 衰减门控 αₜ 遗忘历史 · 复杂度 O(n·d²)

↑ 递归传递:Sₜ 作为下一时刻 Sₜ₋₁,定长状态跨 token 滚动 oₜ(层输出)
图:Gated DeltaNet 层两级算子。算子 1 在 Q/K/V 投影后各做一层深度可分离因果卷积 + SiLU(维护 conv_state 滑动窗口);算子 2 接收卷积后的 Q′/K′/V′ 与数据依赖门控 αₜ、βₜ,执行 Gated Delta Rule 更新定长状态矩阵 Sₜ 并输出。Conv1D 管局部 + 位置,Recurrent State 管全局线性注意力。

1. 算子 1:Causal Conv1D(局部 + 位置)

位于 Q/K/V 投影之后,对 Q、K、V 三个分支分别做:

它的作用有两层:

  1. 短程依赖建模:卷积天然聚合邻近 token,弥补线性注意力「只看全局状态、对局部不敏感」的短板。
  2. 位置感知(替代 RoPE):GDN 层完全不使用 RoPE,位置信息就靠这层因果卷积的局部感受野来提供——所以文档里「Causal Conv1D 类似位置编码或短程依赖建模」的判断是准确的。

2. 算子 2:Recurrent State Update(Gated Delta Rule)

这是 GDN 的核心。它接收卷积后的 Q′/K′/V′,以及两个数据依赖的门控信号:

完整公式(含衰减门控 αₜ):

Sₜ = Sₜ₋₁ · αₜ ( I − βₜ kₜ kₜᵀ )  +  βₜ vₜ kₜᵀ

逐项读:

注意:文档里写的 Sₜ = Sₜ₋₁ − βₜ(Sₜ₋₁φ(kₜ))φ(kₜ)ᵀ + βₜ vₜ φ(kₜ)ᵀ 是不包含 αₜ 衰减门控的朴素 Delta Rule 形式,与原始论文一致;但 GDN 的完整公式必须包含 αₜ 衰减项,否则就退化成了没有遗忘机制的线性注意力。

3. 位置编码:无 RoPE

GDN 层不使用旋转位置编码(RoPE)。整层的绝对 / 相对位置线索都来自:

这正是 GDN 能保持线性复杂度、又不过度依赖位置编码注入的原因。

4. 状态维度:是矩阵,不是向量

ssm_state 的形状是每个注意力头一个 d_v × d_k 矩阵(而非单向量):

文档里「状态矩阵(或向量)」的表述略模糊,应明确为矩阵:每个头持有一张 d_v × d_k 的定长表,递归地在上面做「遗忘 + 校正 + 写入」。

5. 复杂度:为什么是线性

当序列很长(n ≫ d)时,O(n·d²) 显著低于 O(n²·d),这正是 GDN 能撑长上下文、且 KV Cache 不随序列爆炸的根本原因——它的「记忆」是一张定长矩阵,而不是逐 token 的 KV 列表。

6. 与 Qwen3.5 / 3.6 / 3.8 的关系(型号勘误)

文档里出现的 qwen3.8-27B 这一确切型号如今确认真实存在——早期本文判断其「不存在」有误,已据 2026-08-28 仓库快照扫描更正(交叉验证见(七)Qwen3.8 双 checkpoint 对比)。Qwen3.8 系列主档是 2.4T-A95B 这类 MoE 模型,同时也存在 27B 稠密 这一档 checkpoint。

但有一点是确凿的:Gated DeltaNet 架构(GDN 层)确实是 Qwen3.5 / 3.6 / 3.8 系列的核心组件,是这一系列能在长上下文下保持线性推理成本的关键模块之一。所以——

7. 文档交叉验证后的四处修正小结

结合原始论文(Yang et al., Gated DeltaNet, ICLR 2025)与 Qwen3.5/3.6/3.8 系列实现代码交叉验证,整体描述基本正确,四处需修正:

#修正点文档原表述正确表述
1型号名称qwen3.8-27B27B 稠密 checkpoint 真实存在(2026-08-28 仓库扫描确认,此前「不存在」判断已撤销);GDN 是 Qwen3.5/3.6/3.8 核心组件 ✅
2完整公式仅含 β 的 Delta Rule须加衰减门控 α:Sₜ = Sₜ₋₁·αₜ(I − βₜ kₜkₜᵀ) + βₜ vₜkₜᵀ
3位置编码提了一句 Conv1D「类似位置编码」准确——GDN 完全无 RoPE,位置靠因果卷积 + 状态滚动
4状态维度「状态矩阵(或向量)」略模糊明确为每 head 一个 d_v × d_k 矩阵(定长,与序列长无关)
一句话记忆:Gated DeltaNet = Conv1D 抓局部/位置 + Gated Delta Rule 压全局;状态是每头一张定长 d_v×d_k 矩阵,靠 α 遗忘、β 写入,全程无 RoPE、复杂度 O(n·d²)。它是 Qwen3.5/3.6/3.8 系列线性推理成本的核心支柱之一。

下一篇预告:GDN 与 Mamba / 线性注意力家族(GLA、RWKV、RetNet)的横向对比——它们都在「用定长状态替代 KV 列表」,但状态更新规则完全不同。

觉得有用?欢迎点赞、收藏,或请作者喝咖啡 ☕️

支付宝收款码

支付宝

微信收款码

微信

💬 留言

评论由 Giscus 驱动(基于 GitHub Discussions)。 当前仓库 NaphJohn/LLM-blog 尚未启用 Discussions:请在 GitHub 仓库 Settings → General → Features 勾选 Discussions 后刷新本页,评论区即自动显示。