14. Qwen 家族:从 QKV 偏置到混合注意力
上一篇看到,Llama 1 到 3.3 一直是同一份 modeling_llama.py,代际差别几乎都在 config.json 里。Qwen 走了另一条路线:起点同样是 RMSNorm、SwiGLU、RoPE 这套配方,但几乎每一代都在注意力子层上动一处,从保留 QKV 偏置、到改用 QK-Norm、再到把四分之三的注意力层换成线性注意力,最新一版又换上了块级稀疏注意力。同时它覆盖的尺寸跨度很大,从本系列实践用的 0.5B 小模型,一直到 2.4T 总参数的 MoE。
这一篇沿着 Qwen 各代回答四个问题:每一代在注意力、归一化、MoE 和词嵌入上做了什么选择、为什么;Qwen3 以后的“思考模式”是不是一种新架构;小模型为什么都共享词嵌入;以及资料助手选 Qwen 时,从规格表里该看哪几个字段。各代配置以 2026 年 10 月下旬 Qwen 官方 Hugging Face 仓库的 config.json、模型卡和 Transformers 5.21.0 源码为准;其中 qwen3_5、qwen3_5_moe、qwen4_exp 三个实现都对应已经发布的官方权重。
八次发布的时间线
按 Transformers 里的实现划分,Qwen 只有四套主干代码:qwen2(Qwen1.5、Qwen2、Qwen2.5 共用)、qwen3 / qwen3_moe、qwen3_next(Qwen3.5、3.6、3.8 的 qwen3_5 基本是它加上视觉部分),以及 qwen4_exp。下面按这四段讲。
起点:Llama 配方加一个 QKV 偏置
2023 年的第一代 Qwen 技术报告写得很明确:和 Llama 一样去掉了大多数线性层的偏置,但保留了 Q、K、V 三个投影的偏置,理由是能增强长度外推能力。另外两处和 Llama 不同的选择是:输入词嵌入和输出层不共享,用更多显存换效果;词表约 15.2 万,比 Llama 2 的 3.2 万大得多,中文一个词常常就是一个 token。
这个偏置一直保留到 Qwen2.5。Transformers 的 Qwen2Attention 里能直接看到:
python
self.q_proj = nn.Linear(hidden, n_heads * head_dim, bias=True)
self.k_proj = nn.Linear(hidden, n_kv_heads * head_dim, bias=True)
self.v_proj = nn.Linear(hidden, n_kv_heads * head_dim, bias=True)
self.o_proj = nn.Linear(n_heads * head_dim, hidden, bias=False)除此之外,qwen2 的实现和 Llama 几乎一样,modular_qwen2.py 就是从 Llama 的类继承过来改的。
2024 年 2 月的 Qwen1.5 把代码换成了 Transformers 标准实现(model_type 从这时起就叫 qwen2),上下文 32K,rope_theta 1,000,000,多数尺寸仍是 MHA。同期的 Qwen1.5-MoE-A2.7B 是家族里第一个 MoE。
2024 年 6 月的 Qwen2 做了两件和 Llama 3 类似的事。第一,全部尺寸改用 GQA。Qwen1.5-7B 是 32 个 Q 头配 32 个 KV 头,每 token KV 是 512 KiB;Qwen2-7B 是 28 个 Q 头配 4 个 KV 头:
text
Qwen2-7B KV/token = 2 × 28 层 × 4 头 × 128 × 2 字节 = 57,344 B = 56 KiB只有 Qwen1.5-7B 的 1/9。第二,长上下文的做法:预训练最后阶段把长度从 4,096 拉到 32,768,同时把 RoPE 基频从 10,000 改成 1,000,000,推理时再用 YaRN 和双块注意力(DCA,把长序列切块后分块内、块间两种方式算相对位置)外推到 131,072(第 07 篇讲 YaRN)。0.5B 和 1.5B 从这一代开始共享词嵌入,后面单独讲原因。
2024 年 9 月的 Qwen2.5 结构字段和 Qwen2 完全相同,训练数据从 7T 增加到 18T token。本系列实践篇用的 Qwen2.5-0.5B-Instruct 就是这一代:24 层、隐藏维 896、14 个 Q 头、2 个 KV 头、FFN 中间维 4864、共享词嵌入,按 config 算出 494,032,768 个参数(含 QKV 偏置),每 token KV 只有 12 KiB,实践篇会逐层拆开它。2025 年 1 月的 Qwen2.5-1M 系列仍是同一结构,把 rope_theta 提到 10,000,000,并在 config 里加了双块注意力的参数。
Qwen3:去掉偏置,改用 QK-Norm
2025 年 4 月的 Qwen3 在注意力子层上做了第一次实质改动。下面这张图把四代注意力子层并排画出,左边两列就是这一节要讲的变化,右边两列后面再看:
Qwen3 技术报告的原话是:去掉 Qwen2 使用的 QKV 偏置,在注意力中引入 QK-Norm 以保证训练稳定。QK-Norm 是在 Q、K 投影之后、RoPE 之前,对每个头的 128 维向量各做一次 RMSNorm。和 Llama 相比,源码里只多了两行:
python
q = q_norm(q_proj(h).view(L, n_heads, 128)) # 每个头单独做 RMSNorm
k = k_norm(k_proj(h).view(L, n_kv_heads, 128))
q, k = apply_rotary_pos_emb(q, k, cos, sin) # 之后与 Llama 相同为什么需要它?注意力分数是 Q 和 K 的点积,训练中如果某些头的 Q、K 长度不断变大,点积会大到 softmax 几乎变成独热分布,梯度变得很小或很不稳定,表现为训练损失突然跳高(loss spike)。RMSNorm 把每个头的 Q、K 都拉回固定尺度,再由可学习的缩放权重决定“多尖锐”,点积的上限就被控制住了。技术报告没有单独解释为什么同时去掉偏置,只给出了“为了训练稳定”这一个目标。第 06 篇把 QK-Norm 和其他稳定性技巧放在一起比较。
Qwen3 还有一处容易忽略的变化:head_dim 固定为 128,和隐藏维脱钩。Qwen3-0.6B 的隐藏维是 1024,却有 16 个 Q 头,Q 的总宽度是 16 × 128 = 2048,比隐藏维还大;o_proj 再从 2048 投回 1024。这说明 num_attention_heads × head_dim = hidden_size 只是一个习惯,不是约束,读 config 时要直接看 head_dim 字段(第 18 篇)。
稠密模型的 KV 头数也从 Qwen2 的 4 个(7B)变成了 8 个。官方报告没有解释原因,从结果看,Qwen3-8B 每 token KV 是 2 × 36 × 8 × 128 × 2 = 147,456 B,也就是 144 KiB,是 Qwen2-7B 的 2.6 倍。资料助手要把 32K token 的员工手册放进上下文时,Qwen2-7B 需要约 1.75 GiB 的 KV Cache,Qwen3-8B 需要约 4.5 GiB。选型时这个差别要算进显存预算(推理系列第 04 篇)。
Qwen3-MoE:更细的专家,不设共享专家
Qwen 的 MoE 配置换过三次,可以从 config 里直接读出来:
| 模型 | 路由专家 | 每 token 选 | 专家中间维 | 共享专家 | 总参数 / 激活 |
|---|---|---|---|---|---|
| Qwen1.5-MoE-A2.7B | 60 | 4 | 1408 | 有(中间维 5632) | 14.3B / 2.7B |
| Qwen2-57B-A14B | 64 | 8 | 2560 | 有(中间维 20480) | 57B / 14B |
| Qwen3-30B-A3B | 128 | 8 | 768 | 无 | 30.5B / 3.3B |
| Qwen3-235B-A22B | 128 | 8 | 1536 | 无 | 235B / 22B |
Qwen2-57B-A14B 的技术报告说明它由 Qwen2-7B “升级”而来(upcycling):用稠密模型的 FFN 初始化专家,每个细粒度专家再随机重置一半参数,避免所有专家一模一样。到了 Qwen3,报告写明“和 Qwen2.5-MoE 不同,Qwen3-MoE 去掉了共享专家”,并改用全局批次(global-batch)的负载均衡损失,鼓励专家各自专门化。
用 Qwen3-30B-A3B 手算一下激活比例:
text
每个专家参数 = 3 × 2048 × 768 = 4,718,592
每层 128 个专家 = 6.04 亿,48 层 = 290 亿,占总参数 30.5B 的 95%
每 token 选 8 个:每层 3,775 万,48 层 = 18.1 亿
再加注意力和词嵌入 → 激活约 3.3B路由器是标准的 softmax → 取前 8 → 重新归一化(norm_topk_prob: true)。路由、负载均衡和共享专家的利弊在第 10 篇里详细比较,这里只记住 Qwen3 的选择:专家切得更细、数量更多,并且不保留“人人必经”的共享专家。下一代 Qwen3-Next 又把共享专家加了回来。
思考与非思考:同一套权重,靠训练和模板切换
Qwen3 最受关注的功能是“思考模式”:同一个模型,开启时先在 <think>...</think> 里写一段推理再回答,关闭时直接回答。这不是一种新架构。证据可以从三处看到。
第一,config 和源码里没有任何“思考”相关的结构。Qwen3-8B 只有一个 Qwen3ForCausalLM 类。2025 年 7 月 Qwen3 改为分别发布 Instruct-2507 和 Thinking-2507 两个版本,把 Qwen3-30B-A3B 这两个版本的 config.json 逐字段比较,两份完全相同;Qwen3-Next-80B-A3B 的 Instruct 和 Thinking 也一样。区别只在权重值,也就是训练。
第二,开关在对话模板里。Qwen3 的 chat_template 里有这样一段:如果调用 apply_chat_template(..., enable_thinking=False),模板会在助手回复开头直接插入一对空的 <think>\n\n</think>\n\n。模型看到“思考已经结束”,就直接往下写答案。开启时模板什么都不插,模型按训练习惯自己先写 <think>。用户在消息里写 /think、/no_think 的“软开关”,也是训练时教会模型识别的文本指令。
第三,技术报告把它放在后训练章节:在已经会长链推理的模型上继续做监督微调,把思考和非思考两种数据混在一起训练,称为“思考模式融合”;“思考预算”(思考到一定长度就截断、要求模型基于已有思考作答)也是在这个基础上实现的。后面的版本继续在训练上调整:Qwen3.5 默认开启思考、不再支持 /think 软开关;Qwen3.6 的模型卡说明它额外训练过“保留历史消息中的思考内容”,通过 preserve_thinking 选项开启;Qwen3.8 又加了 reasoning_effort 控制思考深度。训练系列第 12 篇讲推理能力怎样训练出来。
思考模式对架构的影响只体现在推理成本上:思考内容也是正常生成的 token,会占 KV Cache、占生成时间。员工问“年假怎么申请?”,答案就在检索到的制度原文里,开启思考可能先多生成几百个 token 才开始回答,首字延迟明显变长,答案质量却未必更好。这类查询直接关闭思考更合适;需要跨多条制度推算假期天数时再打开。Qwen3 模型卡还特别提醒两点:思考模式不要用贪心解码,否则容易无限重复;多轮对话的历史里默认只保留最终回答、不带思考内容,官方模板已经这样处理,自己拼接 prompt 的框架要注意照做。
Qwen3-Next:混合注意力、高稀疏 MoE 与 MTP
2025 年 9 月的 Qwen3-Next-80B-A3B 是 Qwen 第二次大改,模型卡把它概括为四点:混合注意力、高稀疏 MoE、训练稳定性改进和多 token 预测(MTP)。
混合注意力。 48 层按“3 层 Gated DeltaNet + 1 层门控注意力”重复 12 次。Gated DeltaNet 是一种线性注意力,用一个固定大小的状态矩阵代替 KV Cache,状态随每个新 token 按“遗忘一部分、写入一部分”更新,机制在第 12 篇。剩下的 12 层仍是标准的全局注意力,但做了三处修改(上图第三列):q_proj 的输出宽度翻倍,一半作为 Q,一半作为门;注意力输出逐元素乘以 sigmoid(门) 后才进 o_proj,让每个头可以“关掉”自己不需要的输出;head_dim 从 128 增大到 256,而 RoPE 只作用于其中 64 维(partial_rotary_factor: 0.25)。
为什么不全换成线性注意力?固定大小的状态装不下任意长的历史,纯线性模型在“从长文里找出原句”这类召回任务上明显吃亏。每 4 层保留 1 层全局注意力,就是给精确召回留一条路。这种结构对显存的好处可以直接算:
text
全局注意力层 KV/token = 2 × 12 层 × 2 头 × 256 × 2 字节 = 24,576 B = 24 KiB
36 层 Gated DeltaNet:每层状态 32 头 × 128 × 128 = 524,288 个数,与上下文长度无关资料助手把 10 万 token 的员工手册整本放进去:Qwen3-8B 需要约 13.7 GiB 的 KV Cache,Qwen3-Next 的全局层约 2.3 GiB,外加一份大小固定的线性注意力状态。代价也要说清:线性注意力的状态只保存“到当前为止”的压缩结果,不能像 KV Cache 那样按位置截断,推理引擎要做前缀缓存就得在特定位置额外保存状态快照(推理系列第 10 篇)。
高稀疏 MoE。 512 个专家,每 token 选 10 个路由专家再加 1 个共享专家,专家中间维只有 512。共享专家的输出还要乘以一个 sigmoid(shared_expert_gate(x)),由每个 token 自己决定用多少。总参数 80B、激活 3B,激活比例 3.75%,比 Qwen3-30B-A3B 的约 11% 还低得多。模型卡给出的结果是,Qwen3-Next-80B-A3B-Base 以 Qwen3-32B-Base 约 10% 的训练成本取得更好的下游表现,32K 以上上下文的推理吞吐约是后者的 10 倍。
稳定性。 模型卡提到“零中心、带权重衰减的 LayerNorm”。源码 Qwen3NextRMSNorm 的输出是 x̂ × (1 + weight),weight 初始化为 0。普通 RMSNorm 的缩放权重从 1 开始,如果对它做权重衰减,会被往 0 拉;改成零中心的写法后,权重衰减把缩放往 1 拉,于是可以放心地对归一化权重也加衰减,限制它在训练中异常变大。
MTP。 训练时额外学习预测更远的 token,模型卡说它既提升预训练效果,也加速推理。config.json 里能看到相关字段,但 Transformers 加载时会忽略 mtp.* 权重;模型卡给出的 vLLM、SGLang 启动命令里,MTP 模块作为投机解码的草稿模型使用(推理系列第 15 篇)。MTP 的结构在 DeepSeek 一篇里展开。
Qwen3.5 到 3.8:混合结构进入主线
2026 年 2 月发布的 Qwen3.5 把 Qwen3-Next 的结构带进了主线,尺寸从 0.8B 一直到 397B-A17B。读 modular_qwen3_5.py 可以确认:它的注意力、MLP、RMSNorm、MoE 都直接继承 Qwen3-Next,Gated DeltaNet 只是把合并的输入投影拆成了 in_proj_qkv、in_proj_z、in_proj_b、in_proj_a 四个;视觉编码器继承自 Qwen3-VL。和 Qwen3-Next 相比,变化主要在三处:
- 原生多模态。模型卡称为“统一视觉-语言基座”,在多模态 token 上做早期融合训练。小到 0.8B 的模型也带视觉编码器,类名是
Qwen3_5ForConditionalGeneration,位置编码用交错的多维 RoPE(mrope_section: [11, 11, 10]),图像和视频怎样编码见第 17 篇。 - 词表从 151,936 扩到 248,320,支持的语言从 Qwen3 的 119 种扩到 201 种。
- 规模。397B-A17B 有 60 层(15 组 3+1)、512 个专家选 10 + 1 个共享专家,全局层每 token KV 只有 30 KiB。
之后的版本继续沿用这套实现。2026 年 4 月的 Qwen3.6(27B、35B-A3B)和 8 月的 Qwen3.8(27B,以及纯文本的 2.4T-A95B),model_type 仍是 qwen3_5 或 qwen3_5_moe,同尺寸的结构字段和 3.5 一致,改进在训练和后训练上。Qwen3.8-2.4T-A95B 有 92 层(23 组 3+1)、隐藏维 8192,是目前家族里最大的模型。
Qwen3.8-Flash-Next:Transformers 里的 qwen4_exp
Transformers 里还有一个目录叫 qwen4_exp。它对应的官方权重是 2026 年 8 月发布的 Qwen3.8-Flash-Next,模型卡称其为“这套架构下的第一个开放权重版本”;目前没有以 Qwen4 命名发布的模型,目录名不能当作发布计划来读。它在 Qwen3.5 的基础上又改了三处,读 modular_qwen4_exp.py 能对上:
- Qwen 稀疏注意力(QSA)。12 个全局注意力层前加了一个小的索引器:4 个查询头、1 个共享键头,维度 128。它把可见的历史 token 每 4 个分成一块,块内的键取平均作为块的代表,和当前 token 的查询打分,选出得分最高的 512 块(共 2,048 个 token),再加上末尾凑不满一块的几个 token,生成一张掩码交给门控注意力。于是每个全局层每一步最多只看约 2,048 个位置,而不是全部历史。这是“按块选”而不是“按 token 选”,和 DeepSeek 的稀疏注意力的比较见第 11 篇。
- 门控残差(Gated Residual)。残差流从 1 条加宽到 4 条并行的 2,560 维向量。每个子层先用一个随输入变化的“读门”把 4 条流混成一份输入,算完后再用“写门”按不同比例加回 4 条流;层里不再有单独的
input_layernorm,归一化放在这一步里做。这相当于把第 06 篇里“每层只往一条残差流上加”的结构换成了多条可学习混合的流。 - n-gram 嵌入。第 2 层额外查一张很大的表:把当前 token 和前 1、2 个 token 组成的二元、三元组合哈希成索引去取向量,再用门控加进隐藏状态。这张表有 510 亿参数,但每个 token 只查几行,几乎不增加计算,而且适合卸载到 CPU 内存。
模型卡给出的规模是:125B 总参数、6B 激活,另有 51B n-gram 嵌入和 4B MTP;48 层、隐藏维 2560,512 个专家选 10 + 1 个共享专家。许可证也换了:不是 Apache 2.0,而是 Qwen Community License 1.0。
许可证
Qwen 各代的许可差别比 Llama 大,同一代里不同尺寸也可能不同:
| 版本 | 许可证 |
|---|---|
| Qwen、Qwen1.5 | Tongyi Qianwen 许可 |
| Qwen2 | 72B 为 Tongyi Qianwen 许可,其余 Apache 2.0 |
| Qwen2.5 | 3B 为 Qwen Research 许可(研究用途),72B 为 Qwen 许可(月活超过 1 亿须申请),其余 Apache 2.0 |
| Qwen3、Qwen3-Next、Qwen3.5、Qwen3.6 | Apache 2.0 |
| Qwen3.8-27B | Apache 2.0 |
| Qwen3.8-2.4T-A95B | Qwen3.8-Max License |
| Qwen3.8-Flash-Next | Qwen Community License 1.0 |
后两种新许可证允许商用和修改,但附加了条件:产品月活超过 1 亿或月收入超过 2,000 万美元时,要在界面上显著标出模型名;从事模型即服务(MaaS)或 AI 编程、办公助手业务的,需要另行取得授权(Qwen3.8-Max License 只对这类业务中 12 个月收入超过 5,000 万美元的公司要求授权)。只在内部使用、不向第三方提供模型能力的,不受第二条限制。企业内部的资料助手一般属于这种情况,但具体以许可证原文为准。
小模型为什么共享词嵌入
Qwen 从 Qwen2 开始,0.5B、1.5B(Qwen2.5 还有 3B,Qwen3 有 0.6B、1.7B、4B,Qwen3.5 有 0.8B、2B、4B)都打开了 tie_word_embeddings,更大的模型则不共享。原因在下面这张图里:
Qwen 的词表有 15 万行,这张表的大小只和词表、隐藏维有关,不随模型变小而变小。Qwen2.5-0.5B 的隐藏维是 896,一张表就是 151,936 × 896 = 136,134,656 个参数,占全模型 27.6%。如果输出层再存一份,总参数从 4.94 亿涨到 6.30 亿,两张表占 43.2%,真正做计算的 24 层只剩一半多一点。共享以后,这 1.36 亿参数可以留给层数和宽度。反过来,Qwen3-8B 的两张表各只占 7.6%,共享省下的比例很小;第一代 Qwen 的报告也说明过,不共享能换来更好的效果,所以大模型都分开存。Qwen3.5 把词表扩到 24.8 万后,0.8B 的一张表就有 2.54 亿参数,小模型更离不开共享。
共享省的是参数和显存,不是计算。输出层每个 token 都要做一次 [896] × [896, 151936] 的矩阵乘法,约 1.36 亿次乘加;0.5B 模型解码器层的非嵌入参数约 3.58 亿,所以输出层大约占每 token 计算量的四分之一。另一个限制是,输入和输出被迫用同一组向量:词嵌入要让意思相近的 token 靠近,输出层要让“该接在后面的 token”得分高,两件事并不完全一致。小模型接受这个约束换参数,大模型宁可多存一份。第 02 篇讲了词嵌入共享的机制。
规格表
逐项取自各模型官方仓库的 config.json;上下文一列是 config 里的 max_position_embeddings(Qwen3 原版写 40,960,模型卡说明原生 32,768、用 YaRN 可到 131,072)。混合架构的 Q/KV 头指全局注意力层。
稠密模型
| 模型 | 层数 | 隐藏维 | Q / KV 头(head_dim) | FFN 中间维 | 词表 | 上下文 | RoPE | 共享嵌入 | 注意力 |
|---|---|---|---|---|---|---|---|---|---|
| Qwen1.5-7B | 32 | 4096 | 32 / 32(128) | 11008 | 151,936 | 32,768 | θ 1e6 | 否 | QKV 偏置,MHA |
| Qwen2-0.5B | 24 | 896 | 14 / 2(64) | 4864 | 151,936 | 131,072 | θ 1e6 | 是 | QKV 偏置 |
| Qwen2-7B | 28 | 3584 | 28 / 4(128) | 18944 | 152,064 | 131,072 | θ 1e6 | 否 | QKV 偏置 |
| Qwen2.5-0.5B | 24 | 896 | 14 / 2(64) | 4864 | 151,936 | 32,768 | θ 1e6 | 是 | QKV 偏置 |
| Qwen2.5-7B | 28 | 3584 | 28 / 4(128) | 18944 | 152,064 | 131,072 | θ 1e6 | 否 | QKV 偏置 |
| Qwen2.5-72B | 80 | 8192 | 64 / 8(128) | 29568 | 152,064 | 131,072 | θ 1e6 | 否 | QKV 偏置 |
| Qwen3-0.6B | 28 | 1024 | 16 / 8(128) | 3072 | 151,936 | 40,960 | θ 1e6 | 是 | QK-Norm |
| Qwen3-8B | 36 | 4096 | 32 / 8(128) | 12288 | 151,936 | 40,960 | θ 1e6 | 否 | QK-Norm |
| Qwen3-32B | 64 | 5120 | 64 / 8(128) | 25600 | 151,936 | 40,960 | θ 1e6 | 否 | QK-Norm |
| Qwen3.5-0.8B | 24 | 1024 | 8 / 2(256) | 3584 | 248,320 | 262,144 | θ 1e7,转 25% 维度,M-RoPE | 是 | 3 GDN + 1 门控注意力 |
| Qwen3.5-27B | 64 | 5120 | 24 / 4(256) | 17408 | 248,320 | 262,144 | θ 1e7,转 25% 维度,M-RoPE | 否 | 3 GDN + 1 门控注意力 |
MoE 与混合模型
| 模型 | 层数 | 隐藏维 | Q / KV 头(head_dim) | 专家配置(路由 选 k + 共享,专家中间维) | 词表 | 上下文 | RoPE | 共享嵌入 | 注意力 |
|---|---|---|---|---|---|---|---|---|---|
| Qwen1.5-MoE-A2.7B | 24 | 2048 | 16 / 16(128) | 60 选 4 + 共享 5632,1408 | 151,936 | 8,192 | θ 1e6 | 否 | QKV 偏置 |
| Qwen2-57B-A14B | 28 | 3584 | 28 / 4(128) | 64 选 8 + 共享 20480,2560 | 151,936 | 131,072 | θ 1e6 | 否 | QKV 偏置 |
| Qwen3-30B-A3B | 48 | 2048 | 32 / 4(128) | 128 选 8,无共享,768 | 151,936 | 40,960(2507 版 262,144) | θ 1e6(2507 版 1e7) | 否 | QK-Norm |
| Qwen3-235B-A22B | 94 | 4096 | 64 / 4(128) | 128 选 8,无共享,1536 | 151,936 | 40,960(2507 版 262,144) | θ 1e6(2507 版 5e6) | 否 | QK-Norm |
| Qwen3-Next-80B-A3B | 48 | 2048 | 16 / 2(256) | 512 选 10 + 1 共享,512 | 151,936 | 262,144 | θ 1e7,转 25% 维度 | 否 | 3 GDN + 1 门控注意力 |
| Qwen3.5-35B-A3B | 40 | 2048 | 16 / 2(256) | 256 选 8 + 1 共享,512 | 248,320 | 262,144 | θ 1e7,转 25%,M-RoPE | 否 | 3 GDN + 1 门控注意力 |
| Qwen3.5-397B-A17B | 60 | 4096 | 32 / 2(256) | 512 选 10 + 1 共享,1024 | 248,320 | 262,144 | θ 1e7,转 25%,M-RoPE | 否 | 3 GDN + 1 门控注意力 |
| Qwen3.8-2.4T-A95B | 92 | 8192 | 64 / 4(256) | 512 选 10 + 1 共享,2048 | 248,320 | 262,144 | θ 1e7,转 25% | 否 | 3 GDN + 1 门控注意力 |
| Qwen3.8-Flash-Next | 48 | 2560 | 24 / 2(256) | 512 选 10 + 1 共享,640 | 248,320 | 262,144 | θ 1e7,转 25%,M-RoPE | 否 | 3 GDN + 1 QSA;4 路残差;n-gram 嵌入 |
许可证见上一节。GDN 指 Gated DeltaNet。
读这两张表,Qwen 的主线很清楚:Qwen1.5 到 2.5 是带 QKV 偏置的 Llama 式结构,靠 GQA 把 KV 压小;Qwen3 用 QK-Norm 换掉偏置、把 head_dim 固定为 128,MoE 走向更细的专家;Qwen3-Next 开始把四分之三的注意力层换成 Gated DeltaNet,MoE 稀疏到 3.75% 的激活比例,并在 Qwen3.5 以后成为主线;Qwen3.8-Flash-Next 又把剩下的全局注意力改成按块选择的稀疏注意力。思考模式贯穿 Qwen3 之后的各代,但它是训练和对话模板的产物,config 里找不到它。小模型共享词嵌入,是因为 15 万到 25 万行的词表在 1B 以下的模型里会吃掉四分之一以上的参数。下一篇拆解 DeepSeek:它在 KV 压缩上走了另一条路,用 MLA 把每个 token 的缓存压成一个低秩向量,再配合细粒度 MoE 和 MTP。
