Qwen3.5-4B 架构

权重与配置:Qwen/Qwen3.5-4B[1]。 实现代码不在 HF 仓库里,随 transformers 发布,见 modeling_qwen3_5.py[2]。 同样没有技术报告,本页结论均出自 config.json 与框架源码(已 pin commit)。

Qwen3.5-4B 是多模态模型(Qwen3_5ForConditionalGeneration):一条文本主干 加一个视觉塔。文本主干是标准的 3 : 1 混合结构,但"廉价层"用的不是滑窗注意力, 而是 Gated DeltaNet 线性注意力——这一点与 Spark-X2.5 / Gemma4 分道扬镳。

Qwen3.5-4B 逐层架构

图 1|Qwen3.5-4B 文本主干逐层架构(本图为根据 config.json 与 modeling_qwen3_5.py 自行绘制,非论文原图)。方向自下而上为前向;每 3 层 GDN(绿)接 1 层全注意力(黄),重复 8 次;灰底模块为 dense SwiGLU FFN。 实线框表示模块,嵌套虚线框表示层组的重复范围;底部视觉分支经 ViT 与 Vision Merger 接入文本主干的同一条序列。

1. 配置总览(文本主干)

配置项 取值
hidden_size 2560
num_hidden_layers 32
layer_types 3 ×linear_attention + 1 ×full_attention,重复 8 次
full_attention_interval 4
全注意力 Q / KV 头 16 / 4(GQA 4×),head_dim 256
attn_output_gate true(逐头输出门控)
线性层 linear_conv_kernel_dim 4;16 K-head / 32 V-head,d 128
hidden_act / intermediate_size silu / 9216
位置编码 mRoPE:θ=1e7、partial_rotary_factor 0.25、mrope_section [11,11,10]
max_position_embeddings 262 144
vocab_size / tie_word_embeddings 248 320 / true
mtp_num_hidden_layers 1(推理时不加载,见 §4)
视觉塔 depth 24、patch 16、hidden 1024、spatial_merge_size 2、输出投到 2560

2. 廉价层:Gated DeltaNet,而不是滑窗

Qwen3_5DecoderLayer 按 config.layer_types 在两种子模块里二选一:线性层用 Qwen3_5GatedDeltaNet,全注意力层用 Qwen3_5Attention [2]。GDN 层的内部顺序是:

  1. in_proj_qkv:一个融合线性层,一次产出 Q / K / V 三路 [2];
  2. causal_conv1d:逐通道(depthwise)短卷积,核宽 4,负责把局部上下文混进 Q/K/V,相当于给递归加一个廉价的前置局部感受野 [2];
  3. 门控 Delta 递推:衰减门由 g = -exp(A_log) * softplus(a + dt_bias) 给出, 再按 delta 规则更新状态 [2];
  4. RMSNormGated + out_proj 输出回 hidden 维 [2]。

关键在于状态的形状:[batch, num_v_heads, k_head_dim, v_head_dim], 与序列长度完全无关 [2]。训练 / prefill 走 chunkwise 分块算法(块内矩阵乘、 块间串行传递状态),只有自回归 decode 才回到逐 token 递推——推导见 Gated Delta Network。

与 Spark-X2.5 的滑窗层相比,两者的"便宜"含义不同:

SWA(Spark-X2.5 / Gemma4) GDN(Qwen3.5)
保留什么 固定窗口内的精确注意力 一个固定尺寸的递归矩阵
cache 有界但不为零(随窗口增长) 与序列长度无关
代价 窗口外信息完全不可见 状态容量有限,多条关联会碰撞

3. 全注意力层

只占 8 / 32 层,但本身设计得比较完整:

  • GQA:16 个 Q 头 / 4 个 KV 头,head_dim 256,scaling = 1/sqrt(d);
  • q / k RMSNorm:归一化作用在 head_dim 上(不是 hidden 维)[2];
  • 逐头输出门控:q_proj 的输出维是 num_attention_heads * head_dim * 2, 多出来的那一半即门控分支,与 Spark-X2.5 的独立 g_proj 等效但实现更紧凑 [2];
  • mRoPE:三维(时间 / 高 / 宽)交错旋转,mrope_section [11,11,10], θ=1e7,且只旋转 25% 的维度(partial_rotary_factor 0.25)[1]。

4. 训练期 MTP,推理期不加载

config.json 里 mtp_num_hidden_layers = 1,说明预训练用了 1 层 Multi-Token Prediction 头 [1];但 transformers 把 ^mtp.* 列进 _keys_to_ignore_on_load_unexpected [2]——checkpoint 里带这些权重, 推理时直接丢弃。所以画架构图时不应把 MTP 算进推理路径。

5. 多模态分支

视觉塔是一个 24 层 ViT(patch 16、hidden 1024、16 头),经 spatial_merge_size = 2 的空间合并与 temporal_patch_size = 2 的时序打包后,投影到文本主干的 2560 维 [1]。 文本侧通过 image_token_id / video_token_id(以及 vision_start / vision_end) 把这些 token 插进同一条序列 [1]。

6. 开源实现位置(pin 到 commit)

transformers commit 536ecc0:

组件 代码位置
Qwen3_5GatedDeltaNet 定义 modeling_qwen3_5.py#L490
depthwise causal conv1d(k=4) modeling_qwen3_5.py#L508-L519
衰减门 g 的计算 modeling_qwen3_5.py#L605
chunkwise / 递归 gated delta rule modeling_qwen3_5.py#L610-L640
Qwen3_5Attention 定义 modeling_qwen3_5.py#L735
q_proj 双倍输出(输出门控) modeling_qwen3_5.py#L747-L748
q / k RMSNorm(head_dim 上) modeling_qwen3_5.py#L759-L760
层型分派(linear / full) modeling_qwen3_5.py#L847-L856
MTP 权重忽略加载 modeling_qwen3_5.py#L911

参考文献

[1] Alibaba Qwen Team. Qwen3.5-4B model card[EB/OL]. (2026)[2026-10-11]. https://huggingface.co/Qwen/Qwen3.5-4B/tree/851bf6e806efd8d0a36b00ddf55e13ccb7b8cd0a.

[2] Hugging Face. transformers: modeling_qwen3_5.py[EB/OL]. (2026)[2026-10-11]. https://github.com/huggingface/transformers/blob/536ecc007387a50e77603bb5d92100e9b07514cc/src/transformers/models/qwen3_5/modeling_qwen3_5.py.


© 2026 Yang Huan · yanghuan9812@qq.com

results matching ""

    No results matching ""