Qwen3.5 架构解析:Gated DeltaNet + Full Attention 混合架构
模型: Qwen3.5-9B
机构: 阿里巴巴 / 通义实验室
Gated DeltaNet 论文: Gated Delta Networks: Improving Mamba2 with Delta Rule (ICLR 2025) | arXiv:2412.06464
一句话总结: Qwen3.5 用 3 层 Gated DeltaNet(线性注意力)+ 1 层 Full Attention 的混合架构,在保持模型质量的前提下大幅压缩 KV cache 和推理开销,并内置 MTP module 支持投机解码。
一、Qwen3.5-9B 参数概览
以 Qwen3.5-9B 为例,核心配置如下:
| 参数 | 值 |
|---|---|
| 总层数 | 32 |
| 隐藏维度 | 4096 |
| FFN 中间维度 | 12288 |
| 词表大小 | 248,320 |
| 最大上下文 | 262,144(原生),1,010,000(YaRN 扩展) |
| MTP module | 1 层 |
| 架构布局 | 8 × (3 × Gated DeltaNet + 1 × Full Attention) |
32 层里有 24 层是 Gated DeltaNet(线性注意力),只有 8 层是标准的 Full Attention——3/4 的层不需要维护随序列增长的 KV cache。
二、宏观架构:3+1 混合设计
Qwen3.5 的 32 层按固定模式排列:每 4 层为一个 block,前 3 层是 Gated DeltaNet,第 4 层是 Full Attention。
1 | Block 0: [GDN] [GDN] [GDN] [FullAttn] Layer 0- 3 |
为什么用混合而不是纯用一种?
1 | 纯 Full Attention: |
三、Full Attention 层
Qwen3.5 的 Full Attention 层使用 Grouped-Query Attention (GQA) + Partial RoPE + 输出门控:
| 参数 | 值 |
|---|---|
| Q heads | 16 |
| KV heads | 4(GQA 4:1) |
| head_dim | 256 |
| 位置编码 | Partial RoPE(25% 维度) |
| 输出门控 | attn_output_gate = true |
GQA:4 个 Q head 共享 1 个 KV head
16 个 Q head,只需要 4 个 KV head。KV cache 的显存直接省 4 倍。
Partial RoPE:只编码 25% 的维度
head_dim=256,但只有 64 个维度(25%)做旋转位置编码。其余 192 个维度不带位置信息,专注于内容语义。
1 | head_dim = 256 |
这样做的好处是:位置信息和语义信息解耦,模型在做长距离检索时不会被位置编码干扰。
M-RoPE:多模态位置编码
Qwen3.5 是原生多模态模型,RoPE 的 64 个位置维度进一步拆成三段:
1 | mrope_section = [11, 11, 10] |
文本输入时三段使用同一个位置索引;图像输入时 H 和 W 段使用 2D 空间位置;视频输入时三段分别编码高度、宽度和帧号。
四、Gated DeltaNet:核心创新
Gated DeltaNet 是 Qwen3.5 中 24 层线性注意力的核心。要理解它,先从标准 linear attention 一步步演进。
4.1 标准 Linear Attention
去掉 softmax 后,attention 可以写成 RNN 形式——维护一个状态矩阵
问题是:只能加,不能删。旧的 KV 对永远留在状态里,信息越积越多,最终互相干扰(”记忆碰撞”)。
4.2 Mamba2:加入衰减门控
Mamba2 引入一个衰减因子
问题是:衰减是全局的。如果想忘掉某个特定的 KV 对,必须把所有记忆一起衰减——“为了忘掉一个人,忘掉了整个世界”。
4.3 DeltaNet:精准替换
DeltaNet 走了另一条路——不做全局衰减,而是用 delta rule 精准修改特定的 KV 关联:
1 | 1. S_{t-1} (I - β_t k_t k_t^T):先把 k_t 对应的旧 value 擦除 |
问题是:只能改,不能批量清。当上下文切换时(比如从一段话跳到另一段话),需要快速清空所有旧记忆,但 delta rule 只能一个一个替换。
4.4 Gated DeltaNet:两者结合
Gated DeltaNet 把衰减门控和 delta rule 合并成一个公式:
1 | α_t → 控制全局衰减(Mamba2 的能力):需要清空记忆时 α_t → 0 |
论文在 Needle-in-a-Haystack 测试中验证了这种互补性:
| 能力 | Mamba2 | DeltaNet | Gated DeltaNet |
|---|---|---|---|
| 长期记忆保持 | 差(衰减太快) | 好 | 好 |
| 信息过滤(去噪) | 好 | 差(无法清空) | 好 |
| 复杂模式记忆 | 差 | 中 | 好 |
4.5 Qwen3.5 中的具体配置
| 参数 | 值 | 含义 |
|---|---|---|
| linear_num_key_heads | 16 | Key head 数量 |
| linear_num_value_heads | 32 | Value head 数量(比 Key 多一倍) |
| linear_key_head_dim | 128 | 每个 Key head 的维度 |
| linear_value_head_dim | 128 | 每个 Value head 的维度 |
| linear_conv_kernel_dim | 4 | 短卷积核大小 |
几个值得注意的设计选择:
Value head 比 Key head 多一倍。 状态矩阵
短卷积(kernel=4)。 在 Q, K 投影之后加一个长度为 4 的因果卷积,捕获局部 n-gram 模式。Linear attention 擅长全局记忆但弱于局部模式,短卷积正好补上这个短板。
五、推理时的状态开销对比
32 层中两种层的推理开销差异很大:
1 | Full Attention(8 层): |
GDN 层的状态开销是固定的 ~13 MB,不管上下文是 1K 还是 262K。而 8 层 Full Attention 的 KV cache 会随序列线性增长。混合架构的设计意图就是:用 3/4 的层做固定开销推理,只让 1/4 的层承担 KV cache 的增长。
六、MTP Module:内置投机解码
Qwen3.5 内置了 1 个 Multi-Token Prediction module(mtp\_num\_hidden\_layers: 1),可直接用于投机解码加速推理。
1 | mtp_num_hidden_layers: 1 → 1 个 MTP module |
串行设计意味着这个 module 可以自回归循环复用——和 EAGLE 的 Autoregression Head 本质相同,支持树形草稿展开和动态剪枝。
主流推理框架已经支持 Qwen3.5 的 MTP 投机解码:
1 | # SGLang |
需要注意的是,Gated DeltaNet 层在树形验证时不能直接用 tree attention mask——因为线性注意力的 RNN 状态是累加的,不支持 mask 隔离分支。需要在分支点 fork 状态矩阵,每个分支独立演化。详细讨论参见投机解码系列。
七、位置编码与长上下文
RoPE 配置
1 | rope_theta: 10,000,000(10M,比 LLaMA 的 10K 大 1000 倍) |
rope\_theta 越大,RoPE 的频率越低,位置编码的”衰减”越慢——模型在更远的距离上仍能感知位置差异。10M 的 theta 配合 256K 上下文是标准配置。
YaRN 扩展到 1M+
通过 YaRN(Yet another RoPE extensioN)可以将上下文从 262K 扩展到 1,010,000:
1 | { |
factor=4.0 意味着把位置编码的有效范围拉伸 4 倍:262K × 4 ≈ 1M。
八、Vision Encoder
Qwen3.5 是原生多模态模型,Vision Encoder 的结构:
| 参数 | 值 |
|---|---|
| 架构 | ViT |
| 层数 | 27 |
| 隐藏维度 | 1152 |
| 注意力头数 | 16 |
| Patch 大小 | 16 × 16 |
| 空间合并 | 2 × 2(4 倍压缩) |
| 输出维度 | 4096(对齐文本隐藏维度) |
视觉 token 经过 ViT 编码后,通过 spatial\_merge\_size=2 的 2×2 合并,将视觉 token 数量压缩到 1/4,再投影到 4096 维与文本 token 对齐后送入主干网络。
九、总结
Qwen3.5 的架构设计围绕一个核心取舍展开:用 Gated DeltaNet 的固定状态换取推理效率,用穿插的 Full Attention 层补回精确检索能力。
1 | 核心架构选择: |
这套设计在端侧推理场景下尤其有价值:固定状态的 GDN 层不吃 KV cache 显存,Full Attention 层通过 GQA 进一步压缩,加上内置的 MTP module 支持投机解码——是目前对端侧部署最友好的大模型架构之一。