Appearance
GDN(Gated DeltaNet)——Qwen3.8 Flash Next 的递归线性注意力层:不存 KV cache,历史压缩进每层固定大小的状态矩阵,用 delta 规则做"先探测、再写残差"的可改写记忆,配逐头衰减门与 sigmoid 输出门。每 4 层里 3 层是 GDN,第 4 层留给门控 GQA + QSA 稀疏注意力负责精确检索。
它解决什么
与 KDA(GLM 5.3)完全同一类问题:标准注意力的 kv-cache 随 token 数线性增长。GDN 把"对历史的加权检索"改写为递归状态更新——每层 48 个 v 头各持一个 128×128 的 f32 状态矩阵(48 v 头共享 16 个 k 头,v 头 j 配 k 头 j % 16),每 token O(1) 刷新,内存与上下文长度无关。Qwen3.8 48 个 trunk 层里 36 层是 GDN——3/4 的层零 KV,这是它敢把原生上下文做到 262144 token 的底气。混合架构兜底也同款:每第 4 层保留完整(但块稀疏)注意力,把精确回忆补回来。
递归更新五步(qwen4_ref_linear,ds4.c:67353)
- 深度 4 短卷积:q/k/v 过 3 步滚动卷积历史 + silu——极短程局部记忆
- 归一化:q、k 逐头 L2 归一化,q 乘
1/√128 - 逐头衰减:
g = exp(A · softplus(a + dt_bias))——可学习遗忘门 - Delta 规则:
H *= g; δ = (v − H·k) · sigmoid(β); H += k ⊗ δ; o = H·q——先用 k 探测状态里已记住的,只把残差写回去;对比朴素线性注意力H += k ⊗ v(只稀释、永不修正),delta 规则能改写已存关联 - 输出门:RMSNorm 后乘
sigmoid(z)(lin_gate投影)
数学骨架与 KDA 一致;工程差异在头组织(v 头多于 k 头、权重平铺)、状态布局([Hv][128][128] f32)与卷积/门控的投影来源(布局遵循 llama.cpp qwen4exp GGUF:norm gamma 折叠成 1+w,ssm_a 存 -exp(A_log))。
执行侧
- prefill 是逐 token 扫描(scan):一个 token 的输出依赖前一个 token 之后的状态,无法在 token 维度并行——Qwen prefill 的层内并行度远低于纯注意力模型,靠 T 行宽批(Part 6 §4s)摊
- decode / 批处理:GDN 状态天然"每 session 一份",批处理时 dense 权重工作(投影、MoE)按行共享,递归步通过行表(
ds4_gpu_qwen4_gdn_row,metal/qwen4.metal)逐 session 读写各自状态 - 会话快照:状态进 checkpoint payload;推测解码拒绝草稿时恢复 pre-verify 状态快照而不是重放图(Part 4 §5)
- 磁盘 KV 检查点包含递归状态:回退到更早位置时,保留下来的前缀在下一次求值时重放