Transformer 20. Qwen 3 架构介绍:模块详解与相对 Qwen 1 / Qwen 2 的演进

摘要 :本文基于 Qwen3 Technical Report(arXiv:2505.09388)按数据流自洽展开§2 给出 整体架构总览 (Decoder-only 数据流、单 Block 示意,便于与社区导读对照);继而从 Tokenizer、Embedding、绑权 写到 单层 Decoder 内的 RMSNorm、GQA、RoPE、QK-Norm、因果注意力、SwiGLU FFN、输出层 ,并说明 长上下文(三阶段预训练、RoPE 基频 ABF、YARN、DCA)MoE(128 路由专家、top-8、无共享专家)思考 / 非思考模式 。文中在相应位置直接写出 Qwen 1、Qwen 2、Qwen 3 的差异对照,读者无需依赖系列其它篇即可读懂骨干;文末仍给出同系列链接便于延伸阅读。

关键词:Qwen3;QK-Norm;GQA;RoPE;RMSNorm;YARN;DCA;MoE;思考模式;大语言模型

同系列博文(延伸阅读)


💡 理解要点 :可以把 Qwen3 想成:仍是 Decoder-only (只有「因果自注意力 + 前馈」,没有 Encoder),整体仍是 Pre-Norm + RMSNorm + RoPE + SwiGLU + GQA 这一现代主流骨架。相对 Qwen2 ,报告强调的硬变化主要是:去掉 QKV 线性层的 bias ,改成在注意力里对 Q、K 做 QK-Norm 稳住尺度;词表 从 Qwen2 报告的 151,646 扩到 151,669MoE 改为 128 个路由专家、每 token 激活 8 个、不设共享专家 ,并加 global-batch 负载均衡思考 / 非思考 是后训练与聊天模板塑造的行为,不是多出来的神经网络层。


1. 概述:Qwen3 在系列中的位置

Qwen3 Technical ReportQwen3 定位为通义千问家族新一代 开放权重 大语言模型:含 稠密/DenseMoE ,总参约 0.6B~235B ;旗舰 Qwen3-235B-A22B 为 MoE(总参约 235B,每 token 激活约 22B )。许可证 Apache 2.0 。预训练数据约 36T tokens ,覆盖约 119 种语言与方言;后训练突出 思考(thinking)与非思考(non-thinking) 融于 同一套权重 ,以及 思考预算(thinking budget)

💡 稠密与 MoE 是什么?

  • 稠密(Dense) :每一层里 FFN(前馈子层)只有一套权重每个 token 前向时这套参数全部参与计算 。可以粗略理解成:模型有多大,每一步就算多大 ------显存里的权重规模与单次算量基本同量级。日常说的 Qwen3-8B、14B、32B 等,指的就是这种「整网共享同一条 FFN」的稠密型号。
  • MoE(Mixture of Experts,混合专家) :把 FFN 换成 很多个结构相同、参数彼此独立的小网络(专家) ,再配一个 门控(路由器) :对当前这个 token 只挑出 其中少数几个专家 来算,其余专家本步不算。效果是:仓库里可以装下非常大的总参数量 (例如 235B),但 每生成一个 token 实际用到的计算量只和「被激活的那几条支路」相当 (报告里的 A22B 就表示这类「每 token 激活约 22B」的量级)。像一家大医院有很多科室,问诊时不会每个科室都跑一遍 ,只请相关专家会诊。注意力层 在 MoE 型号里通常仍是 共享、全量计算 的;稀疏 主要发生在 FFN 上。更细的公式与 Qwen3 的 128 专家、top-8 设定见 §9

与 Qwen 1 / Qwen 2 对照

代际 注意力与归一 词表(报告口径) 稠密注意力头 长上下文主线
Qwen 1 MHA 为主 + QKV bias ;FFN 中间维常取 8 3 d \frac{8}{3}d 38d 约 152K 每头一套 KV 预训练较短 + 推理期 NTK 等技巧
Qwen 2 全系 GQA + QKV bias ;FFN 中间维按表 Intermediate Size 151,646 h q > h kv h_q>h_{\text{kv}} hq>hkv 训练末段 32K + RoPE 基频 10 6 10^6 106 + YARN + DCA
Qwen 3 全系 GQA + 无 QKV bias + QK-Norm;FFN 同「按配置表」 151,669 h q > h kv h_q>h_{\text{kv}} hq>hkv 三阶段预训练 + 长阶段 32K + ABF + YARN + DCA (推理约 训练窗容量)

🔍 读配置的提醒 :各型号 hidden_size、intermediate_size、num_key_value_heads、head_dim 等以 Hugging Face config.json 与官方发布 为准;下文稠密 / MoE 表摘自技术报告,若与某一 checkpoint 略有出入,以权重为准。


2. 整体架构总览

2.1 Decoder-only:只有「解码堆栈」

Qwen3 与 GPT / LLaMA / Qwen 前两代一样,是 Decoder-only 因果语言模型:

  • 没有 Encoder ,也 没有 Encoder--Decoder 之间的 交叉注意力
  • 每一层只有 带因果掩码的自注意力 + 前馈网络(FFN)
  • 训练目标:只看当前位置之前的 token,预测下一个 token(自回归)。

💡 直觉 :像只带「已读部分高亮」的阅读灯从左扫到右------每一步只能利用已经出现的词来猜下一个词,不能偷看未来。

2.2 宏观看:从字符串到 logits

整体数据流(可先假设 Batch=1):

复制代码
纯文本
  → Tokenizer(BBPE)→ token ID 序列,长度 L
  → Embedding 查表 → 矩阵 X ∈ ℝ^(L × d_model)
  → 堆叠 N 个「Transformer Block」(每层结构相同,参数不同)
  → 最后一层隐藏状态 H → 取最后一个位置 h(预测下一词)
  → LM Head(线性层;可与 Embedding 绑权或分开)
  → 词表 logits → Softmax → 下一 token 概率

位置信息 不写成「词嵌入 + 正弦位置向量」叠在 X X X 上,而是在 每一层注意力里Q、K 施加 RoPE (详见 §3.4 );超长输入 上的 YARN、DCA 等与 RoPE 配合,见 §7

2.3 单个 Transformer Block(稠密 Qwen3)

一个 Block = 注意力子层 + FFN 子层 ,两边都是 Pre-Norm + 残差

顺序 组件 作用(一句话)
1 RMSNorm 在进注意力前,把每个位置的向量尺度拉稳
2 因果 GQA 自注意力:多组 Query 共享较少组 Key/Value,省 KV Cache
3 RoPE 旋进 Q、K,编码 相对位置
4 QK-Norm Qwen3 特有 :点积 对 Q、K 归一化;与「去掉 QKV bias」配套
5 掩码 + Softmax + V + 拼接 + W O W_O WO 标准注意力输出,形状仍为 L × d model L \times d_{\text{model}} L×dmodel
6 残差 与进入本子层前的 hidden 相加
7 RMSNorm 再归一化后进 FFN
8 SwiGLU FFN 门控前馈,提供主要非线性
9 残差 得到本 Block 输出,作为下一层输入

MoE Qwen3自注意力整段 + 两侧 RMSNorm 与残差 与稠密相同;FFN 段 把「单个 稠密 SwiGLU」换成 门控 + 多专家 ,每个 token 只算其中 top- k k k 个专家§9)。

用 ASCII 画成单块数据流:

复制代码
                 ┌──────────────────────────────────────────────┐
  本层输入       │  形状 (Batch, SeqLen, d_model)               │
       ↓         │            ↓                                 │
  RMSNorm        │  Pre-Norm,逐行归一化,形状不变               │
       ↓         │            ↓                                 │
  因果 GQA       │  线性得 Q,K,V → RoPE(Q,K) → QK-Norm →        │
                 │  QK^T/√d_k → 因果掩码 → softmax → 乘 V       │
                 │  → 多头拼接 → W_O                            │
       ↓         │            ↓                                 │
       + ←──────┼── 残差(加「进注意力前」的 hidden)            │
       ↓         │            ↓                                 │
  RMSNorm        │            ↓                                 │
       ↓         │            ↓                                 │
  FFN            │  稠密:SwiGLU;MoE:门控 + 稀疏专家(§9)     │
       ↓         │            ↓                                 │
  本层输出       │  + 残差 → 下一层 或 最后的 LM Head(§10)   │
                 └──────────────────────────────────────────────┘

💡 和 2017 年「经典 Transformer Decoder」示意图差在哪? 经典图常是 Post-Norm 、在 Embedding 上加绝对位置 、FFN 用 ReLU 。Qwen3 用的是 Pre-Norm + RMSNorm + RoPE + SwiGLU + GQA + QK-Norm ,且 无 Encoder------这是当前开源 LLM 常见配方。

2.4 推理时的形状与复杂度直觉

  • 每一层主路径上,每个 token 仍是 d model d_{\text{model}} dmodel 维 ;整句可记为 L × d model L \times d_{\text{model}} L×dmodel进出一层形状不变
  • 自注意力 在长度 L L L 上两两算相似度,主项 O ( L 2 ) O(L^2) O(L2) ;工程上常用 FlashAttention 等融合实现,避免显式存满 L × L L \times L L×L 矩阵。
  • FFN 对每个位置 独立 计算,不混合不同位置;GQAKV CacheKV 头数 增长,而非随 Query 头数满额增长。

🔍 实际例子 :Qwen3-8B 常见配置 d model = 4096 d_{\text{model}}=4096 dmodel=4096, N = 36 N=36 N=3632 个 Q 头 / 8 个 KV 头 。若 L = 2048 L=2048 L=2048,每层主路径张量多为 2048×4096 ;缓存里 K、V 只按 8 组 存,而不是 32 组。

下文 §3 起按模块拆开,写公式并与 Qwen 1 / Qwen 2 对照。


3. 从文本到第一层 Decoder:Tokenizer、Embedding、绑权与位置

模型不直接读字符串,只读 token ID 序列 。流程可记为:字符串 → Tokenizer → ID 序列 → Embedding 矩阵 X X X位置 不写在 X X X 上,而在后面每一层的 RoPE 里旋进 Q、K。

3.1 Tokenizer:BBPE 在做什么

直觉 :像把一句话切成一块块「乐高」;每块对应词表里一个 token ,计算机里是一个整数 ID

Qwen3 沿用 Qwen 系列的 byte-level BPE(BBPE) :先在 UTF-8 字节 上建立可合并单元,再迭代合并高频片段,减轻多语 OOV(词表外) 问题,并兼顾 压缩率(同样字数用更少 token,推理常按 token 计费)。

来源:Qwen3 Technical Report §2 写明词表规模为 151,669 ,相对 Qwen2 报告中的 151,646 多出 23 个 token(系列迭代中新增特殊符号等)。

💡 理解要点 :词表越大,同样文本往往 token 数越少 ,但 Embedding 矩阵 与(若 untied)输出层 的参数量随词表维 线性变大,是显存大户之一。

工程注记 :你看到的 config.jsonvocab_size 有时是 151936大于 151669 的整数 ,多为 张量对齐 / padding (方便 GPU 块对齐),与 Qwen2 技术报告里「分布式下嵌入行数可能大于名义词表」是同一类现象------算参数量、建 nn.Embedding 行数时,以该 checkpoint 的配置为准

补充阅读 :社区博文 Qwen3 架构深度解析(Cialtion)控制 token、ChatML 模板、动态 batch / packing 有入门向整理;其中参数表若与官方不一致,以 arXiv:2505.09388config.json 为准。

3.2 Embedding:从 ID 到矩阵 X X X

词表大小记为 V V V(叙述 Qwen3 报告时用 151669 ;实现上可能按 vocab_size 取更大嵌入表)。嵌入矩阵

E ∈ R V × d model . E \in \mathbb{R}^{V \times d_{\text{model}}}. E∈RV×dmodel.

第 w w w 行 转置为列向量 e w = E w , : ⊤ ∈ R d model \mathbf{e}w = Ew,:^\top \in \mathbb{R}^{d{\text{model}}} ew=Ew,:⊤∈Rdmodel。长度为 L L L 的序列 ( w 0 , ... , w L − 1 ) (w_0,\ldots,w_{L-1}) (w0,...,wL−1) 堆成

X = e w 0 ⊤ ⋮ e w L − 1 ⊤ ∈ R L × d model . X = \begin{bmatrix} \mathbf{e}{w_0}^\top \\ \vdots \\ \mathbf{e}{w_{L-1}}^\top \end{bmatrix} \in \mathbb{R}^{L \times d_{\text{model}}}. X= ew0⊤⋮ewL−1⊤ ∈RL×dmodel.

进入第一层 Decoder 的就是 X X X没有 在 X X X 上加「正弦位置向量」(那是经典 GPT 式做法)。

3.3 绑权(Weight Tying)与 Qwen 三代策略

预测下一 token :堆叠 N N N 层后得 H ∈ R L × d model H \in \mathbb{R}^{L \times d_{\text{model}}} H∈RL×dmodel,取 最后一个位置 h = H L − 1 , : ⊤ \mathbf{h} = HL-1,:^\top h=HL−1,:⊤。

  • 未绑权(untied) :单独有 W out ∈ R d model × V W_{\text{out}} \in \mathbb{R}^{d_{\text{model}} \times V} Wout∈Rdmodel×V, s = W out ⊤ h + b out \mathbf{s} = W_{\text{out}}^\top \mathbf{h} + \mathbf{b}_{\text{out}} s=Wout⊤h+bout,再 s o f t m a x ( s ) \mathrm{softmax}(\mathbf{s}) softmax(s)。
  • 绑权 :令 W out = E ⊤ W_{\text{out}} = E^\top Wout=E⊤,则 s w = h ⊤ e w + ( b out ) w s_w = \mathbf{h}^\top \mathbf{e}w + (b{\text{out}})w sw=h⊤ew+(bout)w,省一整块 d model × V d{\text{model}} \times V dmodel×V 的输出权重。

三代对照(概括):

  • Qwen 1 :报告明确 untied(大词表下换表达自由度)。
  • Qwen 2小模型 tied,大模型 untied(如 0.5B/1.5B True,7B/72B False)。
  • Qwen 3 (报告表 1):0.6B / 1.7B / 4B → Tie Yes8B / 14B / 32B → No ;MoE 以 config.json 为准。

3.4 位置编码:经典方式 vs Qwen 系列(RoPE)

经典 Decoder-only (如原版 GPT 叙述):在 Embedding 之后只做一次 , I n p u t p o s = E m b p o s + P E ( p o s ) \mathrm{Input}pos=\mathrm{Emb}pos+\mathrm{PE}(pos) Inputpos=Embpos+PE(pos),正弦形式可写为

P E ( p o s ,   2 i ) = sin ⁡ ( p o s 10000 2 i / d model ) , P E ( p o s ,   2 i + 1 ) = cos ⁡ ( p o s 10000 2 i / d model ) . \mathrm{PE}{(pos,\,2i)} = \sin\Big(\frac{pos}{10000^{2i/d{\text{model}}}}\Big), \quad \mathrm{PE}{(pos,\,2i+1)} = \cos\Big(\frac{pos}{10000^{2i/d{\text{model}}}}\Big). PE(pos,2i)=sin(100002i/dmodelpos),PE(pos,2i+1)=cos(100002i/dmodelpos).

Qwen 1 / 2 / 3 共同点不在 X X X 上加绝对 PE ;在 每一层 、算 Q K ⊤ QK^\top QK⊤ 之前 ,对 Q、K 施加 RoPE(旋转位置编码) :让每个位置的 Q、K 向量在 d k d_k dk 维里按位置旋转,使得注意力分数 S i j S_{ij} Sij 能体现 相对位置 (如依赖 i − j i-j i−j),利于 外推更长序列 。旋转 不改变 Q , K Q,K Q,K 的形状,仍是 L × d k L \times d_k L×dk。

长上下文上的演进

  • Qwen 1 :预训练上下文相对短,报告侧重 推理期 NTK-aware RoPE、LogN、窗口等 组合技巧
  • Qwen 2 :预训练 末段拉到 32K ,RoPE 基频 常从 10 4 10^4 104 调到 10 6 10^6 106 ,再配合 YARNDCA 扩到约 128K 量级。
  • Qwen 3三阶段预训练 (见 §7 ),长阶段 32K ;同样用 ABF 把基频抬到 10 6 10^6 106 ,配合 YARN + DCA ,报告称推理上可获得相对训练窗约 4 倍 的序列容量。
3.4.1 位置与注意力线性层:Qwen 1 vs 2 vs 3
项目 Qwen 1 Qwen 2 Qwen 3
RoPE 作用于 Q、K Q、K Q、K
QKV 线性层 bias
Q/K 额外归一化 无(靠 bias 等) 无单独 QK-Norm QK-Norm§5

4. RMSNorm 与 Pre-Norm:每层先归一化再进子层

Pre-Norm 指:先 RMSNorm,再进注意力或 FFN,再与残差流相加;相对 Post-Norm(先子层再 LN),深层训练往往更稳。

对单行向量 x ∈ R d model \mathbf{x} \in \mathbb{R}^{d_{\text{model}}} x∈Rdmodel,RMSNorm 先算均方根尺度( ε \varepsilon ε 防除零):

R M S ( x ) = ε + 1 d model ∑ j = 1 d model x j 2 , \mathrm{RMS}(\mathbf{x}) = \sqrt{\varepsilon + \frac{1}{d_{\text{model}}}\sum_{j=1}^{d_{\text{model}}} x_j^2}, RMS(x)=ε+dmodel1j=1∑dmodelxj2 ,

R M S N o r m ( x ) = x R M S ( x ) ⊙ γ , \mathrm{RMSNorm}(\mathbf{x}) = \frac{\mathbf{x}}{\mathrm{RMS}(\mathbf{x})} \odot \boldsymbol{\gamma}, RMSNorm(x)=RMS(x)x⊙γ,

其中 γ \boldsymbol{\gamma} γ 为可学习缩放。不减均值、无平移 β \boldsymbol{\beta} β,比 LayerNorm 更省算。

矩阵形式 : X ∈ R L × d model X \in \mathbb{R}^{L \times d_{\text{model}}} X∈RL×dmodel 逐行 RMSNorm,输出仍为 L × d model L \times d_{\text{model}} L×dmodel

💡 理解要点 :RMSNorm 像「只按长度把向量拉到相似尺度,不管重心在哪」,配合 Pre-Norm,让后面的注意力与 FFN 输入分布更稳定。Qwen 1 / 2 / 3 在这一点上是一致的。


5. 分组查询注意力(GQA):MHA、GQA、MQA 与 Qwen 三代

本节三个缩写对应的全称如下(后文仍多用缩写书写):

缩写 英文全称 中文常称
MHA Multi-Head Attention 多头注意力
GQA Grouped-Query Attention 分组查询注意力
MQA Multi-Query Attention 多查询注意力

GQA 作为 MHA 与 MQA 之间的折中,由 Ainslie et al.(2023)系统讨论;直观上:MHA 每头自有 K/V,MQA 全头共享一套 K/V,GQA 则是多组 Q 头分组共用较少的 K/V 头。

5.1 为什么需要「分组」

自回归推理每一步都要缓存历史位置的 K、V (KV Cache)。多头注意力 若让每个 Query 头各自对应一套 K、V(MHA ),缓存随 头数 线性涨。GQA多个 Q 头共用同一组 K、V ,在 输出形状仍是 L × d model L \times d_{\text{model}} L×dmodel 的前提下,减少 KV 参数量与缓存体积

  • MHA : h q = h kv = h h_q = h_{\text{kv}} = h hq=hkv=h,每个 Q 头有自己的 K ( t ) , V ( t ) K^{(t)}, V^{(t)} K(t),V(t)。
  • GQA : h q > h kv h_q > h_{\text{kv}} hq>hkv,常令 g = h q / h kv g = h_q / h_{\text{kv}} g=hq/hkv 为整数;连续 g g g 个 Q 头 共用 一组 K ( u ) , V ( u ) K^{(u)}, V^{(u)} K(u),V(u)。
  • MQA : h kv = 1 h_{\text{kv}}=1 hkv=1,所有 Q 头共用 一套 K、V(最省缓存,容量最紧)。
项目 MHA GQA
Q 头 / KV 头 h q = h kv h_q = h_{\text{kv}} hq=hkv h q > h kv h_q > h_{\text{kv}} hq>hkv
约束 d model = h q   d k d_{\text{model}} = h_q\, d_k dmodel=hqdk 同左
单层 Attn 输出形状 L × d model L \times d_{\text{model}} L×dmodel 同左
KV Cache(粗) ∝ h q \propto h_q ∝hq ∝ h kv \propto h_{\text{kv}} ∝hkv

Qwen 三代 :Qwen1 报告基线以 MHA 为主;Qwen1.5 起部分规格引入 GQA;Qwen2 稠密全系 GQAQwen3 稠密全系仍为 GQA (报告表 1:如 8B 为 32 Q / 8 KV)。

5.2 分组规则

记 t = 1 , ... , h q t = 1,\ldots,h_q t=1,...,hq 为 Query 头下标, u = 1 , ... , h kv u = 1,\ldots,h_{\text{kv}} u=1,...,hkv 为 KV 组下标, g = h q / h kv g = h_q / h_{\text{kv}} g=hq/hkv,则

u = ⌊ t − 1 g ⌋ + 1. u = \left\lfloor \frac{t - 1}{g} \right\rfloor + 1. u=⌊gt−1⌋+1.

例如 h q = 32 ,   h kv = 8 ,   g = 4 h_q=32,\,h_{\text{kv}}=8,\,g=4 hq=32,hkv=8,g=4 :头 1--4 共用 K ( 1 ) , V ( 1 ) K^{(1)},V^{(1)} K(1),V(1),头 5--8 共用 K ( 2 ) , V ( 2 ) K^{(2)},V^{(2)} K(2),V(2),依此类推。

5.3 线性投影:Qwen3 QKV bias

子层入口: X ~ 1 = R M S N o r m ( X in ) \tilde{X}1 = \mathrm{RMSNorm}(X{\text{in}}) X~1=RMSNorm(Xin),下文简记为 X ∈ R L × d model X \in \mathbb{R}^{L \times d_{\text{model}}} X∈RL×dmodel。

什么叫「有 QKV bias」 :全连接 / 线性投影一般写为 y = x W + b y = x W + b y=xW+b 。其中 W W W 把 d model d_{\text{model}} dmodel 维映到输出维;b b bbias,偏置 )是与当前输入 x x x 无关 的可学习向量,给输出的每一维加一个常数平移 。若没有 bias,则 y = x W y = x W y=xW,相当于变换必过原点 ;加上 bias 后,超平面可以整体平移 ,表达更灵活。在注意力里,bias 会进入 Q K ⊤ QK^\top QK⊤ 前的 logits,相当于在「各键方向有多容易被 attend」上增加一层与 token 内容无关的基线偏移

Qwen 1 / Qwen 2 :Q、K、V 三个线性层都带 各自的 bias。以第 t t t 个 Q 头为例,可写成( 1 L \mathbf{1}_L 1L 为长度 L L L 的全 1 向量, ( b Q ( t ) ) ⊤ (b_Q^{(t)})^\top (bQ(t))⊤ 按行广播到 L × d k L \times d_k L×dk 的每一行):

Q ( t ) = X W Q ( t ) + 1 L ( b Q ( t ) ) ⊤ , K ( u ) = X W K ( u ) + 1 L ( b K ( u ) ) ⊤ , V ( u ) = X W V ( u ) + 1 L ( b V ( u ) ) ⊤ . Q^{(t)} = X W_Q^{(t)} + \mathbf{1}_L (b_Q^{(t)})^\top, \quad K^{(u)} = X W_K^{(u)} + \mathbf{1}_L (b_K^{(u)})^\top, \quad V^{(u)} = X W_V^{(u)} + \mathbf{1}_L (b_V^{(u)})^\top. Q(t)=XWQ(t)+1L(bQ(t))⊤,K(u)=XWK(u)+1L(bK(u))⊤,V(u)=XWV(u)+1L(bV(u))⊤.

Qwen 3 :报告写明 remove QKV-bias ,即去掉 上述三项中的 1 L b ⊤ \mathbf{1}_L \mathbf{b}^\top 1Lb⊤,只保留:

Q ( t ) = X W Q ( t ) , K ( u ) = X W K ( u ) , V ( u ) = X W V ( u ) , Q^{(t)} = X W_Q^{(t)}, \quad K^{(u)} = X W_K^{(u)}, \quad V^{(u)} = X W_V^{(u)}, Q(t)=XWQ(t),K(u)=XWK(u),V(u)=XWV(u),

其中 Q ( t ) ∈ R L × d k Q^{(t)} \in \mathbb{R}^{L \times d_k} Q(t)∈RL×dk, K ( u ) , V ( u ) ∈ R L × d k K^{(u)}, V^{(u)} \in \mathbb{R}^{L \times d_k} K(u),V(u)∈RL×dk。

5.4 RoPE 与 QK-Norm 的顺序(Qwen3 关键)

对 Q ( t ) Q^{(t)} Q(t)、 K ( u ) K^{(u)} K(u) 的 每一行 (每个位置)在 d k d_k dk 维内做 RoPE形状不变

随后在算点积 之前QK-Norm (常用 RMSNorm ,作用在 每个 head 的 d k d_k dk 维 上):

Q ~ ( t ) = N o r m ( Q ( t ) ) , K ~ ( u ) = N o r m ( K ( u ) ) , S ( t ) = Q ~ ( t ) ( K ~ ( u ) ) ⊤ d k ∈ R L × L . \tilde{Q}^{(t)} = \mathrm{Norm}\big(Q^{(t)}\big), \quad \tilde{K}^{(u)} = \mathrm{Norm}\big(K^{(u)}\big), \quad S^{(t)} = \frac{\tilde{Q}^{(t)} (\tilde{K}^{(u)})^\top}{\sqrt{d_k}} \in \mathbb{R}^{L \times L}. Q~(t)=Norm(Q(t)),K~(u)=Norm(K(u)),S(t)=dk Q~(t)(K~(u))⊤∈RL×L.

💡 直觉 :去掉 bias 后,深层里 Q、K 范数容易漂,点积 logits 会过大或过小;在 head 维上把 Q、K 拉回稳定尺度 ,Softmax 更不容易塌成 one-hot 或过于均匀。V 通常不做与 Q、K 对称的 QK-Norm(以官方实现为准)。

实现顺序 (Hugging Face transformersQwen3 ):线性 → RoPE → q_norm / k_norm → Q K ⊤ / d k QK^\top/\sqrt{d_k} QK⊤/dk 。这与「先 Norm 再 RoPE」在数值上 不等价,移植代码时要对齐顺序。

与 Qwen 2 对比 :Qwen2 这一显式 QK-Norm,而用 QKV bias 等稳定训练;Qwen3 去掉 bias ,用 QK-Norm 接棒。

5.5 因果掩码、Softmax、输出头 W O W_O WO

对 S ( t ) S^{(t)} S(t) 加上 因果掩码 (位置 i i i 不能看 j > i j>i j>i,上三角为 − ∞ -\infty −∞),行内 softmax 得 A ( t ) A^{(t)} A(t),再

h e a d ( t ) = A ( t ) V ( u ) ∈ R L × d k . \mathrm{head}^{(t)} = A^{(t)} V^{(u)} \in \mathbb{R}^{L \times d_k}. head(t)=A(t)V(u)∈RL×dk.

拼接与输出投影:

C o n c a t = h e a d ( 1 )   ∥   ⋯   ∥   h e a d ( h q ) ∈ R L × d model , A t t n O u t = C o n c a t   W O , W O ∈ R d model × d model . \mathrm{Concat} = \big\\mathrm{head}\^{(1)} \\,\\\|\\, \\cdots \\,\\\|\\, \\mathrm{head}\^{(h_q)}\\big \in \mathbb{R}^{L \times d_{\text{model}}}, \quad \mathrm{AttnOut} = \mathrm{Concat}\, W_O, \quad W_O \in \mathbb{R}^{d_{\text{model}} \times d_{\text{model}}}. Concat=head(1)∥⋯∥head(hq)∈RL×dmodel,AttnOut=ConcatWO,WO∈Rdmodel×dmodel.

残差: X mid = X in + A t t n O u t X_{\text{mid}} = X_{\text{in}} + \mathrm{AttnOut} Xmid=Xin+AttnOut。

训练/推理可用 Flash Attention不显式存满 L × L L \times L L×L 的情况下等价完成上述计算。

5.6 注意力子层维度小结(Qwen3)

步骤 张量 形状
Pre-Norm 后 X X X L × d model L \times d_{\text{model}} L×dmodel
每 Q 头(RoPE + QK-Norm 后仍同形) Q ( t ) Q^{(t)} Q(t) 等 L × d k L \times d_k L×dk,共 h q h_q hq 份
每 K/V 组 K ( u ) , V ( u ) K^{(u)},V^{(u)} K(u),V(u) L × d k L \times d_k L×dk,共 h kv h_{\text{kv}} hkv 份
每头分数 S ( t ) S^{(t)} S(t) L × L L \times L L×L
子层输出 A t t n O u t \mathrm{AttnOut} AttnOut L × d model L \times d_{\text{model}} L×dmodel

6. 前馈网络:SwiGLU(Qwen 1 / 2 / 3 同型,宽度按代际变)

第二子层: X ~ 2 = R M S N o r m ( X mid ) \tilde{X}2 = \mathrm{RMSNorm}(X{\text{mid}}) X~2=RMSNorm(Xmid),再 SwiGLU FFN ,最后残差 X out = X mid + F F N O u t X_{\text{out}} = X_{\text{mid}} + \mathrm{FFNOut} Xout=Xmid+FFNOut。

SwiGLU 形式(与 LLaMA / Qwen2 同族):

S w i G L U ( X ~ ) = ( σ swish ( X ~ W 1 ) ⊙ ( X ~ W 3 ) ) W 2 , \mathrm{SwiGLU}(\tilde{X}) = \big(\sigma_{\text{swish}}(\tilde{X} W_1) \odot (\tilde{X} W_3)\big) W_2, SwiGLU(X~)=(σswish(X~W1)⊙(X~W3))W2,

其中 σ swish ( z ) = z ⋅ σ ( z ) \sigma_{\text{swish}}(z)=z\cdot\sigma(z) σswish(z)=z⋅σ(z), ⊙ \odot ⊙ 为逐元素乘; W 1 , W 3 ∈ R d model × d ff W_1,W_3 \in \mathbb{R}^{d_{\text{model}} \times d_{\text{ff}}} W1,W3∈Rdmodel×dff, W 2 ∈ R d ff × d model W_2 \in \mathbb{R}^{d_{\text{ff}} \times d_{\text{model}}} W2∈Rdff×dmodel, d ff d_{\text{ff}} dff 为 intermediate_size

三代中间维对照

  • Qwen 1 (报告):常写 d ff = 8 3 d model d_{\text{ff}} = \frac{8}{3} d_{\text{model}} dff=38dmodel (约 2.67 d 2.67d 2.67d),与 LLaMA 常见 4 d 4d 4d 不同。
  • Qwen 2 / Qwen 3不再 用单一比例概括,各尺寸以配置表 / config.json 为准 (例如公开 Qwen3-8Bintermediate_size12288 ,约 3 d 3d 3d 当 d = 4096 d=4096 d=4096)。

🔍 数值例子(Qwen3-8B,HF config.json : d model = 4096 d_{\text{model}}=4096 dmodel=4096, d ff = 12288 d_{\text{ff}}=12288 dff=12288,36 层;单序列 L = 4096 L=4096 L=4096 时每层主路径 4096 × 4096 4096 \times 4096 4096×4096


7. 长上下文:Qwen3 的三阶段预训练与 YARN、DCA

7.1 三阶段在做什么(报告 §3.2)

  1. General(S1) :约 30T+ tokens,序列长度 4,096------广谱学语言与世界知识。
  2. Reasoning(S2) :约 5T 高质量数据(STEM、代码、推理、合成数据比例升高),仍 4,096 ,并 加快学习率衰减------强化推理相关分布。
  3. Long Context数百 B tokens,序列 32,768 ;长文样本约 75% 落在 16K~32K25%4K~16K ------让优化目标直接覆盖 万级 token 的因果依赖

与 Qwen 1 对比 :Qwen1 长文多靠 推理期技巧 「补」上去;Qwen2/Qwen3 把 32K 级长阶段训练写进主线,根分布就更「见过长距离」。

7.2 RoPE 基频 ABF( 10 4 → 10 6 10^4 \to 10^6 104→106)

RoPE 用一组与维度相关的频率决定「转多快」。把 底数 / base frequency 从常见的 10 4 10^4 104 提到 10 6 10^6 106 (报告称 ABF 路径),相邻 token 在多数频率上相位差更小,极长距离 上相对位置仍可比区分,减轻「超出训练长度后位置编码失效」一类问题。Qwen 2 与 Qwen 3 的长线叙述都包含这一取向

7.3 YARN:给注意力做「随长度缩放」的外推修正

YARN (YaRN;Peng et al., 2023)在需要 超过训练所见长度 或平滑拉长有效窗口时,对注意力里的 权重 / logits 尺度与目标长度相关的重缩放 ,缓解外推时注意力过度集中或涣散。报告表述为 rescaling the attention weights for better length extrapolation 。它属于 前向路径上的修改 ,可与 换数据再训 正交使用。

7.4 DCA:分块利用「块内 + 块间」关系

Dual Chunk Attention(DCA) (An et al., 2024)把超长序列划成多个 chunk

  • 整条序列能放进一个 chunk ,DCA 与标准全序列自注意力结果相同(便于兼容短上下文行为)。
  • 超过单块容量 ,则在 块内 保持常规 token--token 注意力,并 额外 利用 跨 chunk 的相对位置信息,减轻 块边界 上的信息断裂。

与 YARN 分工DCA结构上分块 + 位置关系YARN注意力尺度上的外推修正。二者可与 GQA、RoPE、QK-Norm 同栈。

7.5 Qwen3 报告中的组合效果

在长阶段 32K 训练基础上,配合 ABF、YARN、DCA ,报告称推理时可获得相对训练窗口约 four-fold 的序列容量(机制上限;产品默认上下文仍以各型号说明与推理框架为准)。


8. 单层数据流汇总(Qwen3 稠密)

  1. X ~ 1 = R M S N o r m ( X in ) \tilde{X}1 = \mathrm{RMSNorm}(X{\text{in}}) X~1=RMSNorm(Xin)
  2. 线性投影得 Q ( t ) Q^{(t)} Q(t)、 K ( u ) K^{(u)} K(u)、 V ( u ) V^{(u)} V(u)(无 bias
  3. 对 Q、K 做 RoPE ,再做 QK-Norm 得 Q ~ ( t ) \tilde{Q}^{(t)} Q~(t)、 K ~ ( u ) \tilde{K}^{(u)} K~(u)
  4. 因果 GQA: S ( t ) = Q ~ ( t ) ( K ~ ( u ) ) ⊤ / d k S^{(t)}=\tilde{Q}^{(t)}(\tilde{K}^{(u)})^\top/\sqrt{d_k} S(t)=Q~(t)(K~(u))⊤/dk → mask → softmax → 乘 V ( u ) V^{(u)} V(u) → 拼接 → W O W_O WO
  5. X mid = X in + A t t n O u t X_{\text{mid}} = X_{\text{in}} + \mathrm{AttnOut} Xmid=Xin+AttnOut
  6. X ~ 2 = R M S N o r m ( X mid ) \tilde{X}2 = \mathrm{RMSNorm}(X{\text{mid}}) X~2=RMSNorm(Xmid)
  7. F F N O u t = S w i G L U ( X ~ 2 ) \mathrm{FFNOut} = \mathrm{SwiGLU}(\tilde{X}_2) FFNOut=SwiGLU(X~2)
  8. X out = X mid + F F N O u t X_{\text{out}} = X_{\text{mid}} + \mathrm{FFNOut} Xout=Xmid+FFNOut

主路径形状恒为 L × d model L \times d_{\text{model}} L×dmodel

8.1 稠密规格速查(报告表 1)

模型 Layers Heads (Q / KV) Tie Embedding Context Length
Qwen3-0.6B 28 16 / 8 Yes 32K
Qwen3-1.7B 28 16 / 8 Yes 32K
Qwen3-4B 36 32 / 8 Yes 128K
Qwen3-8B 36 32 / 8 No 128K
Qwen3-14B 40 40 / 8 No 128K
Qwen3-32B 64 64 / 8 No 128K

9. MoE:仅替换 FFN;Qwen3 相对 Qwen2 的路由差异

MoE 层只替换每个 Decoder 块里的 FFN注意力子层 (GQA、RoPE、QK-Norm、无 QKV bias)与稠密 同型

9.1 门控与 top- k k k(与 Qwen2 数学骨架相同)

单 token 向量 x ∈ R d model x \in \mathbb{R}^{d_{\text{model}}} x∈Rdmodel(批上即 L × d model L \times d_{\text{model}} L×dmodel 逐行)。门控网络输出 logits ℓ = G ( x ) \boldsymbol{\ell} = G(x) ℓ=G(x), p = s o f t m a x ( ℓ ) p = \mathrm{softmax}(\boldsymbol{\ell}) p=softmax(ℓ)。设共有 n n n 个 路由专家 R i R_i Ri(结构与 SwiGLU FFN 同类),top- k k k 选指数集合 t o p k ( p ) \mathrm{topk}(p) topk(p),则路由支路常写为

y route = ∑ i   ∈   t o p k ( p ) p i   R i ( x ) . y_{\text{route}} = \sum_{i\,\in\,\mathrm{topk}(p)} p_i\, R_i(x). yroute=i∈topk(p)∑piRi(x).

(具体是否对 top- k k k 内 p i p_i pi 再归一化,以 官方实现 为准。)

9.2 Qwen2 MoE vs Qwen3 MoE(报告)

项目 Qwen2-57B-A14B(典型叙述) Qwen3 MoE(报告)
路由专家数 / 每 token 激活 64,top-8 128top-8
共享专家 (如 8 个 shared,每 token 必算)
负载均衡 报告未细述 global-batch load balancing loss

去掉共享专家 后,一层 MoE FFN 输出可 由路由支路组成:

y = ∑ i   ∈   t o p k ( p ) p i   R i ( x ) . y = \sum_{i\,\in\,\mathrm{topk}(p)} p_i\, R_i(x). y=i∈topk(p)∑piRi(x).

9.3 MoE 规格(报告表 2)

模型 Layers Heads (Q / KV) # Experts (Total / Activated) Context Length
Qwen3-30B-A3B 48 32 / 4 128 / 8 128K
Qwen3-235B-A22B 94 64 / 4 128 / 8 128K

命名30B-A3B = 总参约 30B,每 token 激活约 3B235B-A22B 同理。


10. 输出层(LM Head)

堆叠 N N N 层后 H ∈ R L × d model H \in \mathbb{R}^{L \times d_{\text{model}}} H∈RL×dmodel,自回归取 h = H L − 1 , : ⊤ \mathbf{h} = HL-1,:^\top h=HL−1,:⊤。

  • untied : s = W out ⊤ h + b out \mathbf{s} = W_{\text{out}}^\top \mathbf{h} + \mathbf{b}_{\text{out}} s=Wout⊤h+bout, P = s o f t m a x ( s ) P=\mathrm{softmax}(\mathbf{s}) P=softmax(s)。
  • tied : W out = E ⊤ W_{\text{out}}=E^\top Wout=E⊤, s w = h ⊤ e w + ( b out ) w s_w = \mathbf{h}^\top \mathbf{e}w + (b{\text{out}})_w sw=h⊤ew+(bout)w。

MoE 不改变 LM Head 形状;词表维 V V V 以报告 151669 与实现 vocab_size 共同为准。


11. 思考模式、非思考模式与思考预算(后训练与模板)

不改变 上文任何矩阵维数:同一套权重可通过 SFT / RLchat template 学会:有时先输出长 思维链 ,有时直接答;用户可用 /think/no_think 等开关(默认与细节见报告表 9 与 tokenizer_config 示例)。

思考预算 :思考 token 达到阈值时可插入提示,让模型结束思考段、续写最终答案;报告称部分能力来自 融合训练后的涌现,未必单独设计 loss。

强到弱蒸馏 :小模型可用旗舰 logits 蒸馏 ,报告给出约 1/10 GPU hours 量级的经验节省。

与 Qwen 1 / 2 对比 :Qwen1/2 后训练以 SFT、DPO 等为主叙述;Qwen3 额外强调 thinking + non-thinking 统一预算蒸馏流水线


12. 总览:Qwen 1 / Qwen 2 / Qwen 3 架构对照表

维度 Qwen 1 Qwen 2 Qwen 3
骨干 Decoder-only,Pre-Norm,RMSNorm,RoPE,SwiGLU 同左 同左
稠密注意力 报告基线 MHA 全系 GQA 全系 GQA
QKV bias
Q/K 稳定化 bias + RoPE 等 同左 QK-Norm(RoPE 后、点积前)
FFN 中间维 报告常 8 3 d \frac{8}{3}d 38d 表列 Intermediate Size 同 Qwen2(按配置)
词表(报告) ~152K 151,646 151,669
Embedding untied(报告) 小 tied / 大 untied 小多款 tied ,8B+ 多 untied(表 1)
长上下文 推理技巧 + 1.5 产品 32K 等 训练 32K + 10 6 10^6 106 + YARN + DCA 三阶段 + 长阶段 32K + ABF + YARN + DCA
MoE --- 共享专家 + 路由,64/8 等 128/8无共享专家,global-batch 均衡
预训练规模(报告量级) 较低代数据量 ~7T 量级 ~36T
对齐亮点 --- SFT + DPO 等 思考/非思考统一 + 预算 + 蒸馏

13. 各环节参数量(粗算思路,与 Qwen 1 / 2 一致)

记 d = d model d = d_{\text{model}} d=dmodel, N N N 为层数, V V V 为嵌入行数(实现上可能等于 vocab_size)。

模块 数量级要点
Embedding V ⋅ d V \cdot d V⋅d;若 untied ,另加约 d ⋅ V d \cdot V d⋅V 的 W out W_{\text{out}} Wout
每层注意力 W Q W_Q WQ 约 d × ( h q d k ) d \times (h_q d_k) d×(hqdk); W K , W V W_K,W_V WK,WV 各 d × ( h kv d k ) d \times (h_{\text{kv}} d_k) d×(hkvdk); W O W_O WO 约 d × d d \times d d×d;Qwen3 QKV bias 的三项小向量
每层 RMSNorm 子层前各一处 γ \boldsymbol{\gamma} γ,约 2 d 2d 2d / 层(Pre-Norm 两处)
每层 SwiGLU 4   d   d ff 4\, d\, d_{\text{ff}} 4ddff 量级(两路上升 + 一下降)
MoE 总参随专家数累加;每 token 激活 只算 top- k k k 个专家(+ Qwen2 若有 shared 则再加共享支路)

14. 参考文献与链接汇总

主题 链接
Qwen3 Technical Report https://arxiv.org/pdf/2505.09388
Qwen2 Technical Report https://arxiv.org/pdf/2407.10671
Qwen(Qwen1)Technical Report https://arxiv.org/pdf/2309.16609
同系列:Qwen 1 / Qwen 1.5 https://blog.csdn.net/zyctimes/article/details/159692526
同系列:Qwen 2 https://blog.csdn.net/zyctimes/article/details/159762115?spm=1001.2014.3001.5501
Decoder Only Transformer https://blog.csdn.net/zyctimes/article/details/158771582?spm=1001.2014.3001.5501
LLaMA 架构 https://blog.csdn.net/zyctimes/article/details/158923114?spm=1001.2014.3001.5501
DeepWiki:Qwen3 核心概念 https://deepwiki.com/QwenLM/Qwen3/3-model-architecture-and-core-concepts
社区导读(Cialtion) https://haxxorcialtion.github.io/papers/qwen3_architecture_guide.html
Qwen3 从零实现(Ahead of AI;付费) https://magazine.sebastianraschka.com/p/qwen3-from-scratch
相关推荐
朴马丁6 小时前
预制菜的“数字厨房”:PLM如何支撑菜品标准化与供应链高效协同?
大数据·人工智能·食品行业·流程行业plm
小沈同学呀6 小时前
SpringAI+MCPServer实战-StreamableHTTP协议打造企业级AI工具服务
人工智能·微服务架构·springai·mcpserver·javaai·streamablehttp
net3m336 小时前
一阶软件低通滤波器算法
人工智能·算法
武汉唯众智创6 小时前
边缘端部署 AI 心理分析:自研边缘主机跑通人脸 + 语音双模态推理,不用云端算力详解
人工智能·ai心理健康·校园心理健康·多模态推理·人脸情绪识别·语音情感分析·心理健康信息化平台
IT_陈寒6 小时前
Python的线程池把我坑惨了,原来异步不是万能的
前端·人工智能·后端
水木流年追梦6 小时前
大模型入门-大模型优化方法12-YaRN 长文本外推技术
人工智能·分布式·算法·正则表达式·prompt
Litluecat6 小时前
2026年6月6日科技热点新闻
人工智能·科技·热点·每日
小旭95276 小时前
Spring AI Alibaba 从入门到实战:一站式掌握企业级 AI 应用开发
java·人工智能·spring
ting94520006 小时前
Minimi 深度技术剖析:macOS 端侧全量上下文采集与 Claude 本地 RAG 联动架构详解
macos·架构·策略模式
tianxiaxue16 小时前
企微如何使用AI生成推荐话术?
人工智能·企业微信