输入关键词开始搜索

Qwen3.5 Gated DeltaNet 核心机制解析

Gated DeltaNet 架构流程图

graph TD
    %% 定义样式
    classDef storage fill:#f9f,stroke:#333,stroke-width:2px,stroke-dasharray: 5 5;
    classDef core fill:#ff9,stroke:#f66,stroke-width:3px,rx:10,ry:10;
    classDef proj fill:#e1f5fe,stroke:#0277bd,stroke-width:2px;
    classDef norm fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px;

    %% 输入
    Input(hidden_states
B, L, D) --> InputPadding[apply_mask_to_padding_states] InputPadding --> SplitNet subgraph SplitNet [投影与分支] direction TB P_qkv(in_proj_qkv
Linear):::proj --> QKV_raw(B, 2K+V, L) P_z(in_proj_z
Linear):::proj --> Z_raw(B, L, H, Dv) P_b(in_proj_b
Linear):::proj --> B_raw(B, L, H) P_a(in_proj_a
Linear):::proj --> A_raw(B, L, H) end %% 卷积处理 QKV_raw --> Transpose1[Transpose 1,2] Transpose1 --> Conv1d(conv1d
Depthwise Causal Conv):::proj %% 缓存判断逻辑 Conv1d --> Condition{use_precomputed_states?
Cache Valid and L=1} %% 路径 A: 递归更新 (推理) Condition -- Yes --> RecurrentPath[recurrent_gated_delta_rule] C_Conv_In(conv_states):::storage -.-> RecurrentPath C_Rec_In(recurrent_states):::storage -.-> RecurrentPath %% 路径 B: 分块计算 (训练/预填充) Condition -- No --> ChunkPath[chunk_gated_delta_rule] %% 核心计算模块 subgraph GatedDeltaNet [核心机制: Gated DeltaNet] direction TB RecurrentPath & ChunkPath --> QKV_post[Transpose and Split] QKV_post --> Q(Query) QKV_post --> K(Key) QKV_post --> V(Value) B_raw --> Sigmoid[Sigmoid] --> Beta(β) A_raw --> Softplus[Softplus + dt_bias] LogA(A_log):::storage --> Exp[Exp and Neg] Softplus & Exp --> Mul --> G(g - Gate) Q & K & V & G & Beta --> CoreAlgo[[Delta Rule
State Update and Retrieval]]:::core end %% 缓存更新 CoreAlgo -.-> C_Conv_Out(Update Conv Cache):::storage CoreAlgo -.-> C_Rec_Out(Update Rec Cache):::storage %% 输出处理 CoreAlgo --> AttnOut(core_attn_out) Z_raw --> Z(z - Gating) subgraph OutputStage [输出与归一化] direction LR AttnOut --> Norm(Qwen3_5MoeRMSNormGated
or FusedRMSNormGated):::norm Z --> Norm Norm --> P_out(out_proj
Linear):::proj end P_out --> Output(Output
B, L, D)

架构解析

输入与投影

hidden_states 进入网络,首先通过 4 个并行的线性层(Projection)被映射到不同的空间:生成原始的 QKV 混合体、用于最后门控的 z、以及控制状态更新的 a 和 b。

卷积层

在计算注意力之前,QKV 混合体先经过一个因果卷积层(Causal Conv1d)。这有助于模型捕捉局部上下文信息。

缓存与状态切换

这是一个关键的逻辑分支。根据是否使用缓存(推理阶段,序列长度为 1),模型会选择:

  • recurrent_gated_delta_rule(推理路径):使用前一时刻的缓存状态进行增量更新
  • chunk_gated_delta_rule(训练路径):并行处理整个序列

核心机制:Gated DeltaNet

这是代码最核心的部分。它将生成的 Q、K、V 与通过 a 和 b 计算出的门控信号 g(Gate,用于遗忘)和 β(Beta,用于写入强度)结合。

“Delta Rule” 逻辑在这个模块中实现——它不像普通线性注意力那样简单地累加 Key-Value,而是根据当前的 Key 对历史状态进行”修正”更新。

输出与门控 RMSNorm

核心注意力的输出 core_attn_out 不会直接输出,而是与最开始分支出的 z 信号一起进入一个特殊的 RMSNorm(Qwen3_5MoeRMSNormGated)。这个 Norm 层不仅做归一化,还使用 z 对结果进行门控融合(类似 SwiGLU 机制),最后通过 out_proj 映射回原始维度。

总结

这个架构充分体现了 Qwen3.5 线性注意力层的设计思想:利用卷积增强局部性,利用 Delta Rule 增强长期记忆的精确度,通过门控机制控制信息流,并实现推理时 O(1) 的复杂度。