Transformer 17. Qwen 1 / Qwen 1.5 架构介绍以及与 Transformer、LLaMA 的对比

摘要 :本文在 Decoder Only TransformerLLaMA 架构 的基础上,按数据流顺序 介绍 Qwen 1(QWEN) 各模块:Tokenization、Embedding、位置编码(RoPE)、单层 Decoder 内的 RMSNorm、掩码多头自注意力、SwiGLU 前馈网络及输出层,并给出关键矩阵形状与公式推导 。文中用三方对照 突出 Qwen 与「经典 Decoder-only(Post-Norm + 绝对位置 + ReLU FFN)」、**LLaMA(Pre-Norm + RoPE + SwiGLU + 典型 4 d 4d 4d 中间维)**的差异;最后简述 Qwen 1.5推理期长上下文 技术。读者可将本文视为 LLaMA 篇的「平行章节」,公式记号与 LLaMA 架构 博文保持一致。

关键词:Qwen;Qwen1.5;Decoder-only;RMSNorm;Pre-Norm;SwiGLU;RoPE;Flash Attention;NTK-aware;GQA;大语言模型

同系列博文(便于串联阅读)


💡 理解要点 :可以把 Qwen 1 想成「LLaMA 同款骨架 (Decoder-only、Pre-Norm、RMSNorm、RoPE、SwiGLU)+ 几处论文里写明的改法 」:更大词表输入嵌入与输出投影不绑权QKV 线性层保留 biasFFN 中间宽度用 8 3 d \frac{8}{3}d 38d 而不是常见的 4 d 4d 4d ,以及报告重点写的推理期长文扩展标准 Transformer Decoder (见 LLaMA 架构)则是另一套「LayerNorm 顺序 + 在词嵌入上加位置向量 + ReLU FFN」的经典图画------三者的差别,下文用表格和公式一起钉死。

1. 概述:Qwen 在 Transformer 家族中的位置

Qwen Technical Report(arXiv:2309.16609)QWEN 描述为在 LLaMA 开源路线上的改进型 Decoder-only 模型:只有带因果掩码的多头自注意力前馈网络 ,没有 Encoder、没有交叉注意力;训练目标是「看前文、预测下一个 token」,与 Decoder Only Transformer 一致。

单层 Qwen Decoder 的流程与 LLaMA 同型:

RMSNorm → 掩码自注意力(RoPE + 可选 QKV bias)→ 残差 → RMSNorm → SwiGLU FFN → 残差

🔍 实际例子(Qwen-7B,报告表 1) : d model = 4096 d_{\text{model}}=4096 dmodel=4096,层数 N = 32 N=32 N=32,头数 h = 32 h=32 h=32。若当前序列长度 L = 2048 L=2048 L=2048,则每一层 的输入、输出张量形状都是 2048 × 4096 2048 \times 4096 2048×4096 ;最后一层取最后一个位置 的向量 h ∈ R 4096 \mathbf{h}\in\mathbb{R}^{4096} h∈R4096,乘以 W out ∈ R 4096 × V W_{\text{out}}\in\mathbb{R}^{4096\times V} Wout∈R4096×V ( V V V 为词表大小)得到 logits,再 Softmax 得到下一 token 分布。

下文先讲数据如何进入第一层 ,再展开单层内每一步的数学与形状 ,最后做三方架构对比Qwen 1.5 / 长上下文 补充。


2. 从输入到 Decoder:数据如何进入

模型不吃原始字符串,只吃 Token ID 序列 ;先 Tokenization ,再 Embedding位置信息RoPE 在注意力里注入,不像经典 Transformer 那样在输入端「词向量 + 位置向量」。

2.1 Tokenization:从文本到 Token 序列

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

矩阵视角 :长度为 L L L 的 ID 序列 ( w 0 , ... , w L − 1 ) (w_0,\ldots,w_{L-1}) (w0,...,wL−1),后面通过 Embedding 变成矩阵 X ∈ R L × d model X\in\mathbb{R}^{L\times d_{\text{model}}} X∈RL×dmodel ,第 i i i 行是第 i i i 个位置的向量。这里的 d model d_{\text{model}} dmodel模型隐层维度 (与 Qwen / LLaMA 配置表中的 Hidden size 同义):每个 token 的嵌入向量有多少维,整网中间张量的「宽度」就是多少(例如 Qwen-7B 中 d model = 4096 d_{\text{model}}=4096 dmodel=4096)。

Qwen 1 的做法 来源:Qwen Technical Report §2.2

  • 算法:BPE ;起点为 tiktokencl100k_base
  • 为中文等多语:扩充常用字词与其它语言符号。
  • 数字 :按 LLaMA 系列习惯拆成逐位 token,便于算术与代码。
  • 词表规模约 V ≈ 152 K V\approx 152\text{K} V≈152K

💡 理解要点 :词表大 → 同样一句话往往更少的 token 数 (压缩率高),推理按 token 计费时更省;但 Embedding / 输出层 参数随 V V V 线性变大,是显存大户之一。

2.2 Embedding:从 Token ID 到向量

嵌入矩阵 (词表大小 V V V):

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

记号 :将 E E E 的第 w w w 行 (长度为 d model d_{\text{model}} dmodel 的行向量)转置为列向量 ,记为 e w \mathbf{e}_w ew,则

e w = E w ,   : ⊤ ∈ R d model . \mathbf{e}w = Ew,\\,:^\top \in \mathbb{R}^{d{\text{model}}}. ew=Ew,:⊤∈Rdmodel.

第 i i i 个位置的 token ID 为 w i w_i wi 时, Embedding ( w i ) = e w i \text{Embedding}(w_i)=\mathbf{e}_{w_i} Embedding(wi)=ewi(与「直接用行向量 E w i Ew_i Ewi」等价;下文统一用列向量,避免行/列混写)。

L L L 个位置按行堆叠成送入第一层 Decoder 的矩阵:

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.

绑权(weight tying)是什么,Qwen 1 为何用 untied

输出端 (预测下一 token):取最后一层输出 H ∈ R L × d model H\in\mathbb{R}^{L\times d_{\text{model}}} H∈RL×dmodel 的最后一个位置 ,得列向量 h ∈ R d model \mathbf{h}\in\mathbb{R}^{d_{\text{model}}} h∈Rdmodel( h \mathbf{h} h 的正式定义与 logits 公式见 §5 )。要把 h \mathbf{h} h 映射到词表上 V V V 个 logits,未绑权(untied) 时单独有可学习矩阵 W out ∈ R d model × V W_{\text{out}}\in\mathbb{R}^{d_{\text{model}}\times V} Wout∈Rdmodel×V 与可选 b out ∈ R V \mathbf{b}_{\text{out}}\in\mathbb{R}^V bout∈RV。

绑权(tied embedding):令

W out = E ⊤ , W_{\text{out}} = E^\top, Wout=E⊤,

输出线性层与嵌入矩阵共用参数 ,不再单独存放 W out W_{\text{out}} Wout。此时第 w w w 个 logit 为

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,

也就是 当前上下文表示 h \mathbf{h} h该词嵌入 e w \mathbf{e}_w ew内积 (再加偏置);输入端「词 w w w → 向量」与输出端「向量 → 词 w w w 的分数」在词表维上共用同一组 V V V 个 d model d_{\text{model}} dmodel 维方向。

💡 理解要点 :绑权可省约一整块 d model × V d_{\text{model}}\times V dmodel×V 的输出权重(参数量与显存上,相对「 E E E 与 W out W_{\text{out}} Wout 各一份」常从约 2 份系数降到 1 份);实证上 Press & Wolf (2017) 等表明 tying 常有利于困惑度。许多模型(含部分 LLaMA 实现)采用 tiedQwen 1 在报告中明确采用 untied 来源:Qwen Technical Report §2.3单独 维护 W out W_{\text{out}} Wout(及可选 bias), 强制 W out = E ⊤ W_{\text{out}}=E^\top Wout=E⊤,以换更大表达自由度;代价是词表维 V V V 已很大时,Embedding + 输出层 合计更显存敏感。

数值示例(Qwen-7B) : L = 2048 L=2048 L=2048, d model = 4096 d_{\text{model}}=4096 dmodel=4096 → Embedding 输出 2048 × 4096 2048\times 4096 2048×4096

2.3 位置编码:经典 Transformer、LLaMA 与 Qwen

2.3.1 经典 Decoder-only(见 Decoder Only Transformer 博文)
  • 时机 :Embedding 之后、进第一层之前 ,只做一次
  • 形式 :每个位置 p o s pos pos 一个向量 P E ( p o s ) ∈ R d model \mathrm{PE}(pos)\in\mathbb{R}^{d_{\text{model}}} PE(pos)∈Rdmodel(正弦/余弦或可学习),与词嵌入相加

I n p u t p o s = E m b e d p o s + P E ( p o s ) . \mathrm{Input}pos = \mathrm{Embed}pos + \mathrm{PE}(pos). Inputpos=Embedpos+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 ) . PE_{(pos, 2i)} = \sin\Big(\frac{pos}{10000^{2i/d_{\text{model}}}}\Big), \quad 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).

2.3.2 LLaMA 与 Qwen 的 RoPE:在注意力里转 Q、K

共同点不在 X X X 上加位置向量;在每一层 、算注意力分数 之前 ,对当前层的 Query、Key (按位置、按维度对)做 旋转 。记第 p o s pos pos 行经旋转后的向量为 Q ′ p o s , K ′ p o s Q'pos, K'pos Q′pos,K′pos,则仍算:

S i j = Q ′ i ⋅ K ′ j d k . S_{ij} = \frac{Q'i \cdot K'j}{\sqrt{d_k}}. Sij=dk Q′i⋅K′j.

RoPE 的设计使得 S i j S_{ij} Sij 能体现 i i i 与 j j j 的相对位置 (如依赖 i − j i-j i−j),对外推更长序列 往往比「只在输入加一次绝对 PE」更友好。详见 LLaMA 架构 §2.3

Qwen 相对 LLaMA 的实现注记 来源:Qwen Technical Report §2.3:RoPE 里与频率相关的缓冲(inverse frequency)用 FP32 存,减轻低精度下的数值误差;不改变 Q , K Q,K Q,K 的形状,仍是 L × d k L\times d_k L×dk

2.3.3 对比小结(三列)
维度 经典 Decoder-only LLaMA Qwen 1
注入时机 进网络前 一次 每层注意力内 同 LLaMA
注入对象 Embedding 相加 只旋 Q、K 同 LLaMA
位置类型 绝对 位置向量 相对 关系进 Q K ⊤ QK^\top QK⊤ 同 LLaMA
进入第一层的 X X X Emb + PE \text{Emb}+\text{PE} Emb+PE 仅 Emb \text{Emb} Emb 仅 Emb \text{Emb} Emb
额外实现细节 --- 依实现而定 RoPE 频率表倾向 FP32

2.4 小结:进入第一层 Decoder 的矩阵

  • Tokenization :文本 → 长度 L L L 的整数 ID。
  • Embedding : E ∈ R V × d model E\in\mathbb{R}^{V\times d_{\text{model}}} E∈RV×dmodel → X ∈ R L × d model X\in\mathbb{R}^{L\times d_{\text{model}}} X∈RL×dmodel
  • 位置 I n p u t = E m b + P E \mathrm{Input}=\mathrm{Emb}+\mathrm{PE} Input=Emb+PE;RoPE 在 §3.2 的注意力里处理。

3. Qwen Decoder 单层:每一步的矩阵计算与推导

单层由两个子层组成,均为 Pre-Norm + 子层 + 残差

  1. RMSNorm掩码多头自注意力Add
  2. RMSNormSwiGLU FFNAdd

设本层输入为 X in ∈ R L × d model X_{\text{in}}\in\mathbb{R}^{L\times d_{\text{model}}} Xin∈RL×dmodel。

3.1 RMSNorm(Root Mean Square Layer Normalization)

作用 :对每一行 (每个 token 位置的 d model d_{\text{model}} dmodel 维向量)做缩放归一化不减去均值------比 LayerNorm 少算均值、少一组 shift 参数,计算更省。

对 x ∈ R d model \mathbf{x}\in\mathbb{R}^{d_{\text{model}}} x∈Rdmodel( X X X 的一行),先算均方根尺度:

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 d model \boldsymbol{\gamma}\in\mathbb{R}^{d_{\text{model}}} γ∈Rdmodel:

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⊙γ.

形状 :输入 X X X,输出逐行 RMSNorm,仍为 L × d model L\times d_{\text{model}} L×dmodel

💡 与标准 Transformer 的对比 :Post-Norm 的 LayerNorm 是「先子层、加残差、再 LN」且含 减均值、除方差、 β \boldsymbol{\beta} β 平移 」。Qwen 与 LLaMA 一样选 Pre-Norm + RMSNorm ,训练深层更稳、式子更短------细节对照见 LLaMA 架构 §3.1

3.2 带掩码的多头自注意力(含 RoPE 与 Qwen 的 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 X X 表示 X ~ 1 \tilde{X}_1 X~1。

约定 :头数 h h h, d k = d model / h d_k = d_{\text{model}}/h dk=dmodel/h。Qwen-7B: d model = 4096 d_{\text{model}}=4096 dmodel=4096, h = 32 h=32 h=32 → d k = 128 d_k=128 dk=128。

3.2.1 线性投影得到 Q、K、V(含 Qwen 的 bias)

第 t t t 个头( t = 1 , ... , h t=1,\ldots,h t=1,...,h):

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

其中 W Q ( t ) , W K ( t ) , W V ( t ) ∈ R d model × d k W_Q^{(t)},W_K^{(t)},W_V^{(t)}\in\mathbb{R}^{d_{\text{model}}\times d_k} WQ(t),WK(t),WV(t)∈Rdmodel×dk,bias 为 d k d_k dk 维, 1 L \mathbf{1}_L 1L 为全 1 列向量,使得 bias 按位置广播

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

线性层里的 bias 是干什么的? 没有 bias 时, q = W ⊤ x q = W^\top x q=W⊤x 是过原点的超平面 ;加上 bias 相当于 q = W ⊤ x + b q = W^\top x + b q=W⊤x+b,给每个维度一个与输入无关的平移 。在注意力里,它会在 Q K ⊤ QK^\top QK⊤ 形成的 logits 上整体改变「各键方向相对谁更容易被 attend」,相当于多了一类可学习的基线偏移

为什么 Qwen 1 专门保留 QKV 的 bias? 报告写明:其余多数层去掉 bias (沿袭 PaLM 等做法),但 在注意力的 QKV 线性层上保留 bias ,动机是增强长度外推 等与 RoPE 相关的行为,并引用 Su (2023b) 的讨论 来源:Qwen Technical Report §2.3。直观上:RoPE 主要约束 Q , K Q,K Q,K 的几何关系;bias 给 logits 留出一部分不随内容旋转而完全确定的自由度,实践中有时能缓和「训练长度 → 更长推理」时的分布偏移(是否有效依实现与规模而定,以论文与后续工作为准)。

小结LLaMA ≈ 无 QKV biasQwen 1 = 有 QKV bias(其余层仍多无 bias),这是二者在注意力上的显式工程差异之一。

3.2.2 RoPE 作用于 Q、K

对 Q ( t ) , K ( t ) Q^{(t)},K^{(t)} Q(t),K(t) 的每一行 (每个 p o s pos pos)在 d k d_k dk 维内做 RoPE 旋转,得到仍记为 Q ( t ) , K ( t ) Q^{(t)},K^{(t)} Q(t),K(t)(数值已变、形状不变)。

推导直觉(二维一对) :把 d k d_k dk 维看成 d k / 2 d_k/2 dk/2 个二维平面。对频率 ω \omega ω,位置 m m m 的旋转可写成 2 × 2 2\times 2 2×2 块乘在 ( q 2 i , q 2 i + 1 ) (q_{2i},q_{2i+1}) (q2i,q2i+1) 上;两个位置 m , n m,n m,n 的内积会带上 ( m − n ) ω (m-n)\omega (m−n)ω 的相位差,从而让 注意力只依赖相对位置差(严格推导见 RoPE 原文 Su et al., 2021)。

3.2.3 注意力分数、因果掩码与 Softmax

未归一化分数矩阵(单头):

S ( t ) = Q ( t ) ( K ( t ) ) ⊤ d k ∈ R L × L . S^{(t)} = \frac{Q^{(t)} (K^{(t)})^\top}{\sqrt{d_k}} \in \mathbb{R}^{L\times L}. S(t)=dk Q(t)(K(t))⊤∈RL×L.

因果(自回归)掩码 :不允许位置 i i i 看见 j > i j>i j>i。令 M i j = 0 M_{ij}=0 Mij=0 若 j ≤ i j\le i j≤i,否则 M i j = − ∞ M_{ij}=-\infty Mij=−∞(实现常用极大负数):

S ~ i j ( t ) = S i j ( t ) + M i j . \tilde{S}^{(t)}{ij} = S^{(t)}{ij} + M_{ij}. S~ij(t)=Sij(t)+Mij.

每一行 i i i 做 softmax(只在 j ≤ i j\le i j≤i 处非零):

A i j ( t ) = exp ⁡ ( S ~ i j ( t ) ) ∑ k = 1 L exp ⁡ ( S ~ i k ( t ) ) . A^{(t)}{ij} = \frac{\exp(\tilde{S}^{(t)}{ij})}{\sum_{k=1}^{L}\exp(\tilde{S}^{(t)}_{ik})}. Aij(t)=∑k=1Lexp(S~ik(t))exp(S~ij(t)).

输出(矩阵形式):

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

这就是「缩放点积注意力 + 因果掩码 」的完整推导链:线性投影(+bias)→ RoPE → Q K ⊤ / d k QK^\top/\sqrt{d_k} QK⊤/dk → 加掩码 → softmax → 乘 V V V

3.2.4 多头拼接与输出投影

C o n c a t = h e a d ( 1 )   ∥   ⋯   ∥   h e a d ( h ) ∈ R L × d model , \mathrm{Concat} = \big\\mathrm{head}\^{(1)} \\,\\\|\\, \\cdots \\,\\\|\\, \\mathrm{head}\^{(h)}\\big \in \mathbb{R}^{L\times d_{\text{model}}}, Concat=head(1)∥⋯∥head(h)∈RL×dmodel,

A t t n O u t = C o n c a t   W O , W O ∈ R d model × d model . \mathrm{AttnOut} = \mathrm{Concat}\, W_O, \quad W_O\in\mathbb{R}^{d_{\text{model}}\times d_{\text{model}}}. AttnOut=ConcatWO,WO∈Rdmodel×dmodel.

3.2.5 残差

X mid = X in + A t t n O u t ∈ R L × d model . X_{\text{mid}} = X_{\text{in}} + \mathrm{AttnOut} \in \mathbb{R}^{L\times d_{\text{model}}}. Xmid=Xin+AttnOut∈RL×dmodel.

维度小结表

步骤 张量 形状
RMSNorm 后 X X X L × d model L\times d_{\text{model}} L×dmodel
每头 Q , K , V Q,K,V Q,K,V Q ( t ) , K ( t ) , V ( t ) Q^{(t)},K^{(t)},V^{(t)} Q(t),K(t),V(t) L × d k L\times d_k L×dk
logits S ( t ) S^{(t)} S(t) L × L L\times L L×L
注意力权重 A ( t ) A^{(t)} A(t) L × L L\times L L×L
每头输出 h e a d ( t ) \mathrm{head}^{(t)} head(t) L × d k L\times d_k L×dk
多头输出 A t t n O u t \mathrm{AttnOut} AttnOut L × d model L\times d_{\text{model}} L×dmodel

训练时可用 Flash Attention不显式物化完整 L × L L\times L L×L 的前提下等价完成上述计算 来源:Qwen Technical Report §2.4

3.3 前馈网络:SwiGLU(Qwen 的 8 3 d \frac{8}{3}d 38d 中间维)

作用 :对每个位置独立做非线性变换,是模型表达力的主要来源之一。

形式 (与 LLaMA 同族,差在 d ff d_{\text{ff}} dff):

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 ⊙ 为逐元素乘。

Qwen 与 LLaMA 的关键数字 来源:Qwen Technical Report §2.3:LLaMA 常用 d ff = 4 d model d_{\text{ff}} = 4 d_{\text{model}} dff=4dmodel ;Qwen 1 取 d ff = 8 3 d model d_{\text{ff}} = \frac{8}{3} d_{\text{model}} dff=38dmodel (实现常对齐为整数)。记 X ~ 2 = R M S N o r m ( X mid ) \tilde{X}2=\mathrm{RMSNorm}(X{\text{mid}}) X~2=RMSNorm(Xmid):

  • Z 1 = X ~ 2 W 1 Z_1=\tilde{X}2 W_1 Z1=X~2W1, W 1 ∈ R d model × d ff W_1\in\mathbb{R}^{d{\text{model}}\times d_{\text{ff}}} W1∈Rdmodel×dff, Z 1 ∈ R L × d ff Z_1\in\mathbb{R}^{L\times d_{\text{ff}}} Z1∈RL×dff。
  • Z 3 = X ~ 2 W 3 Z_3=\tilde{X}2 W_3 Z3=X~2W3, W 3 ∈ R d model × d ff W_3\in\mathbb{R}^{d{\text{model}}\times d_{\text{ff}}} W3∈Rdmodel×dff。
  • Z = σ swish ( Z 1 ) ⊙ Z 3 Z=\sigma_{\text{swish}}(Z_1)\odot Z_3 Z=σswish(Z1)⊙Z3。
  • F F N O u t = Z W 2 \mathrm{FFNOut}=Z W_2 FFNOut=ZW2, W 2 ∈ R d ff × d model W_2\in\mathbb{R}^{d_{\text{ff}}\times d_{\text{model}}} W2∈Rdff×dmodel。
  • 残差 : X out = X mid + F F N O u t X_{\text{out}}=X_{\text{mid}}+\mathrm{FFNOut} Xout=Xmid+FFNOut。

💡 直觉 :SwiGLU 比单层 ReLU-FFN 多一路「门」;若中间维还用 4 d 4d 4d,参数量会很大。Qwen 把中间维缩到 8 3 d ≈ 2.67 d \frac{8}{3}d\approx 2.67d 38d≈2.67d ,相当于在「门控表达能力 」与「参数/显存」之间再折中一次。

3.4 单层 Qwen Decoder 的完整数据流(汇总)

  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. A t t n O u t = M a s k e d M u l t i H e a d ( X ~ 1 ) \mathrm{AttnOut}=\mathrm{MaskedMultiHead}(\tilde{X}_1) AttnOut=MaskedMultiHead(X~1)(内含 QKV bias、RoPE、掩码、 W O W_O WO)
  3. X mid = X in + A t t n O u t X_{\text{mid}}=X_{\text{in}}+\mathrm{AttnOut} Xmid=Xin+AttnOut
  4. X ~ 2 = R M S N o r m ( X mid ) \tilde{X}2=\mathrm{RMSNorm}(X{\text{mid}}) X~2=RMSNorm(Xmid)
  5. 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)( d ff = 8 3 d model d{\text{ff}}=\frac{8}{3}d_{\text{model}} dff=38dmodel)
  6. 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 形状不变。

规格速查(Qwen 1 报告表 1)

规模 Hidden Heads Layers
1.8B 2048 16 24
7B 4096 32 32
14B 5120 40 40

4. GQA(Grouped-Query Attention):主要见于 Qwen 1.5 部分规格

4.1 MHA 与 GQA 区别(是什么、为什么)

MHA(Multi-Head Attention,多头注意力)

  • Query / Key / Value 头数相同 ,记为 h h h。第 t t t 个头各自有投影 W Q ( t ) , W K ( t ) , W V ( t ) W_Q^{(t)}, W_K^{(t)}, W_V^{(t)} WQ(t),WK(t),WV(t),得到 Q ( t ) , K ( t ) , V ( t ) ∈ R L × d k Q^{(t)}, K^{(t)}, V^{(t)} \in \mathbb{R}^{L\times d_k} Q(t),K(t),V(t)∈RL×dk, d k = d model / h d_k = d_{\text{model}}/h dk=dmodel/h。
  • 直觉 : h h h 个「小专家」从 h h h 个子空间各算一遍注意力,再拼回 d model d_{\text{model}} dmodel 维。
  • 推理时的代价 :自回归每步都要缓存已生成位置Key 和 Value 。总缓存量与 KV 头数 成正比------MHA 里 每个注意力头各有一份 K、V ,头数多 → KV Cache 显存大、读写多。

GQA(Grouped-Query Attention,分组查询注意力)

  • Query 头数 h q h_q hq 与 Key/Value 头数 h kv h_{\text{kv}} hkv 拆开 ,且 h kv < h q h_{\text{kv}} < h_q hkv<hq (通常 h q h_q hq 整除 h kv h_{\text{kv}} hkv)。
  • g = h q / h kv g = h_q / h_{\text{kv}} g=hq/hkv 个 Query 头共用 同一组 K , V K,V K,V(同一套 W K , W V W_K,W_V WK,WV 对应的头)。每个 Q 头仍算自己的注意力权重,但 去同一个(或同一组)K、V 上取加权
  • 直觉 :「看的角度」(Query)可以很多,但「记忆里供检索的键值槽」(KV)可以少开几份,在表达力与显存之间折中
  • 与 MHA 相比输出张量形状不变 ------多头输出仍拼成 L × d model L\times d_{\text{model}} L×dmodel,再乘 W O W_O WO;变的是 K、V 的参数量与推理时缓存的 KV 体积 ,大致按 h kv / h q h_{\text{kv}}/h_q hkv/hq 比例下降。

极端情况(便于对照)

  • MHA : h kv = h q h_{\text{kv}} = h_q hkv=hq(每头自有 KV)。
  • MQA(Multi-Query Attention) : h kv = 1 h_{\text{kv}} = 1 hkv=1,所有 Q 头共享一份 K 和 V;KV 最省,但容量最紧。
  • GQA :介于两者之间,多组 KV 头被多组 Q 头复用。
项目 MHA GQA
Q 头数 / KV 头数 h q = h kv = h h_q = h_{\text{kv}} = h hq=hkv=h h q > h kv h_q > h_{\text{kv}} hq>hkv
每头 d k d_k dk 常取 d model / h q d_{\text{model}}/h_q dmodel/hq 同左,保证拼接维仍为 d model d_{\text{model}} dmodel
单层输出形状 L × d model L\times d_{\text{model}} L×dmodel 同左
推理 KV Cache(粗) 正比于 h q h_q hq 份 K、V 正比于 h kv h_{\text{kv}} hkv 份 K、V

配置里常写 num_attention_heads = h q h_q hq,num_key_value_heads = h kv h_{\text{kv}} hkv;二者相等即为 MHA。

4.2 在 Qwen 系列中的位置

Qwen 1 技术报告中的基线以标准 MHA ( h q = h kv h_q=h_{\text{kv}} hq=hkv)描述为主。

Qwen1.5-32B 在官方博客中说明:与同系列其它尺寸相比,主要结构差异是引入 GQA ,以利于推理效率 参考:https://qwenlm.github.io/blog/qwen1.5-32b/。更细的矩阵形状与 LLaMA 架构 §4 一致。其它规格是否 GQA 以各模型 config.json 为准。


5. 输出层:线性层与 Softmax

最后一层输出 H ∈ R L × d model H\in\mathbb{R}^{L\times d_{\text{model}}} H∈RL×dmodel。自回归预测下一 token 时,取最后一个位置 的列向量( e w \mathbf{e}_w ew 见 §2.2):

h = H L − 1 ,   : ⊤ ∈ R d model . \mathbf{h} = HL-1,\\,:^\top \in \mathbb{R}^{d_{\text{model}}}. h=HL−1,:⊤∈Rdmodel.

Qwen 1 使用独立输出权重 (untied): W out ∈ R d model × V W_{\text{out}}\in\mathbb{R}^{d_{\text{model}}\times V} Wout∈Rdmodel×V,logits 列向量 s ∈ R V \mathbf{s}\in\mathbb{R}^V s∈RV,

s = W out ⊤ h + b out . \mathbf{s} = W_{\text{out}}^\top \mathbf{h} + \mathbf{b}_{\text{out}}. s=Wout⊤h+bout.

等价地( h ⊤ \mathbf{h}^\top h⊤ 为 1 × d model 1\times d_{\text{model}} 1×dmodel):

s ⊤ = h ⊤ W out + b out ⊤ . \mathbf{s}^\top = \mathbf{h}^\top W_{\text{out}} + \mathbf{b}_{\text{out}}^\top. s⊤=h⊤Wout+bout⊤.

下一 token 分布:

P ( next ) = s o f t m a x ( s ) . P(\text{next})=\mathrm{softmax}(\mathbf{s}). P(next)=softmax(s).

绑权 时令 W out = E ⊤ W_{\text{out}}=E^\top Wout=E⊤,第 w w w 个 logit 为 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( e w \mathbf{e}_w ew 见 §2.2 )。Qwen 1 明确不采用绑权 来源:Qwen Technical Report §2.3。后继 Qwen2 则按模型规模在 tied / untied 间切换。


6. 与标准 Transformer Decoder、LLaMA 的架构对比

6.1 整体结构

项目 标准 Encoder-Decoder Transformer 经典Decoder-only LLaMA Qwen 1
编码器
Decoder 子层 掩码自注意力+交叉注意力+FFN 掩码自注意力+FFN 掩码自注意力+FFN 同 LLaMA
位置信息 常在与 Emb 相加 常在与 Emb 相加 RoPE 在 Q , K Q,K Q,K 同 LLaMA + FP32 频率等实现细节

6.2 组件级对比(强调 Qwen 差异)

组件 经典Decoder-only LLaMA Qwen 1
归一化 多为 LayerNorm RMSNorm RMSNorm
归一化位置 常为 Post-Norm Pre-Norm Pre-Norm
FFN ReLU: d → 4 d → d d\to 4d\to d d→4d→d SwiGLU , d ff = 4 d d_{\text{ff}}=4d dff=4d SwiGLU , d ff = 8 3 d d_{\text{ff}}=\frac{8}{3}d dff=38d
位置编码 正弦/可学习,+ 到 Emb RoPE 于 Q , K Q,K Q,K 同左 + QKV bias、RoPE 实现精度取舍
词表 / 输出 依模型 常较小 V V V、可 tied V ∼ 152 K V\sim 152\text{K} V∼152Kuntied
长文(报告) 依实现 生态内外推 推理期 NTK / LogN / 窗口等组合

6.3 单层公式对比(便于一眼看出「顺序」差异)

经典 Post-Norm Decoder 一层 (与 Decoder-only 一致的精神):

O u t = L N 2 ( F F N ( L N 1 ( A t t n ( X ) + X ) ) + L N 1 ( A t t n ( X ) + X ) ) . \mathrm{Out} = \mathrm{LN}_2\big(\mathrm{FFN}(\mathrm{LN}_1(\mathrm{Attn}(X)+X)) + \mathrm{LN}_1(\mathrm{Attn}(X)+X)\big). Out=LN2(FFN(LN1(Attn(X)+X))+LN1(Attn(X)+X)).

LLaMA / Qwen(Pre-Norm)

h = X + A t t n ( R M S N o r m ( X ) ) , O u t = h + F F N ( R M S N o r m ( h ) ) . h = X + \mathrm{Attn}(\mathrm{RMSNorm}(X)), \qquad \mathrm{Out} = h + \mathrm{FFN}(\mathrm{RMSNorm}(h)). h=X+Attn(RMSNorm(X)),Out=h+FFN(RMSNorm(h)).

Qwen 在 A t t n \mathrm{Attn} Attn 内含 QKV biasRoPE ;在 F F N \mathrm{FFN} FFN 内为 SwiGLUd ff = 8 3 d model d_{\text{ff}}=\frac{8}{3}d_{\text{model}} dff=38dmodel


7. 长上下文:Qwen 1 在推理期的外推(不改变单层形状)

预训练上下文 2048 来源:Qwen Technical Report §2.4。更长序列依赖推理期 技巧,例如:NTK-aware RoPE 插值dynamic NTKLogN-Scaling (按长度比缩放注意力 logits)、窗口注意力按层分配不同窗口 。报告表 3 表明组合后可在 8K+ 仍保持合理困惑度。读实现时重点看:RoPE 底数/缩放attention scale稀疏/局部 mask


8. Qwen 1.5:在 Qwen 1 骨架上的产品化迭代

Qwen1.5 介绍:多规格 Base/Chat、统一约 32K 上下文 、合并进 Hugging Face Transformers ≥ 4.37.0 (免 trust_remote_code)、量化与 vLLM 等生态。架构上 仍以 Decoder-only + Pre-Norm + RMSNorm + RoPE + SwiGLU 为主;Qwen1.5-32B 明确加入 GQA 参考:https://qwenlm.github.io/blog/qwen1.5-32b/。对齐(DPO/PPO 等)属 post-training,不改变 §3 的算子类型。


9. 各环节参数量简要(与 Decoder-onlyLLaMA 对照)

记 d = d model d=d_{\text{model}} d=dmodel, N N N 为层数, V V V 为词表大小。

模块 Qwen 1 相对 LLaMA 的要点
Embedding V ⋅ d V\cdot d V⋅d,untied 时另加 d ⋅ V d\cdot V d⋅V 量级给 W out W_{\text{out}} Wout(与 LLaMA tied 方案比通常更大)
RoPE 无额外大量可训练参数(实现级 buffer)
每层注意力 与 LLaMA 同为约 4 d 2 4d^2 4d2 级( W Q , W K , W V , W O W_Q,W_K,W_V,W_O WQ,WK,WV,WO);Qwen 多 QKV bias ( 3 h d k = 3 d 3hd_k=3d 3hdk=3d,常可忽略相对 d 2 d^2 d2)
每层 RMSNorm 两处,各 d d d 个 γ \gamma γ → 2 d 2d 2d
每层 SwiGLU W 1 , W 3 ∈ R d × d ff W_1,W_3\in\mathbb{R}^{d\times d_{\text{ff}}} W1,W3∈Rd×dff, W 2 ∈ R d ff × d W_2\in\mathbb{R}^{d_{\text{ff}}\times d} W2∈Rdff×d, d ff = 8 3 d d_{\text{ff}}=\frac{8}{3}d dff=38d → 权重约 3 ⋅ d ⋅ d ff + d ff ⋅ d = d ⋅ d ff ⋅ 4 3\cdot d\cdot d_{\text{ff}} + d_{\text{ff}}\cdot d = d\cdot d_{\text{ff}}\cdot 4 3⋅d⋅dff+dff⋅d=d⋅dff⋅4 ;因 d ff d_{\text{ff}} dff 小于 LLaMA 的 4 d 4d 4d,FFN 参数少于 LLaMA 同宽模型

10. 小结

  • 数据进模型 :BPE(大词表)→ X ∈ R L × d X\in\mathbb{R}^{L\times d} X∈RL×d 经典式 E m b + P E \mathrm{Emb}+\mathrm{PE} Emb+PE;位置在 RoPE 里进 Q , K Q,K Q,K。
  • 单层Pre-Norm RMSNormMHA(QKV bias + RoPE + 因果掩码) + 残差 → RMSNormSwiGLU( d ff = 8 3 d d_{\text{ff}}=\frac{8}{3}d dff=38d) + 残差;形状恒为 L × d L\times d L×d
  • 相对 LLaMA更大 V V VuntiedQKV bias更窄 FFN 中间维 、报告强调的推理长文组合。
  • 相对经典 Decoder-only(10Pre-Norm + RMSNormRoPESwiGLU无输入端绝对 PE
  • Qwen 1.5 :生态与 32K32B 等规格见 GQAconfig.json
相关推荐
奔跑中的小象5 小时前
统信UOS + 天数AI卡部署SGLang服务手册
人工智能·uos·sglang·天数智芯
DevSecOps选型指南5 小时前
中国版Mythos,为何是悬镜安全灵脉CodeAI?
人工智能·安全
Shockang5 小时前
LangGraph 状态机实战
人工智能
刹那芳华19925 小时前
循环神经网络的从零开始实现(RNN)
人工智能·rnn·深度学习
阿童木写作5 小时前
跨境图片翻译工具多合一,批量图片视频字幕翻译加智能抠图
人工智能·python·音视频·语音识别
科技之门5 小时前
AI3D从建模到贴图、绑骨和动画的完整流程怎么做?V2Fun完整工作流指南
人工智能·3d·贴图
宇宙第一小趴菜5 小时前
二、机器学习的应用领域和发展史
人工智能·机器学习
前端开发江鸟6 小时前
我写过 MCP Server,却一直以为 MCP 只有 Tool
人工智能
天国梦6 小时前
自习室智能化升级避坑指南:天学网AI智习室方案实测与选型建议
大数据·人工智能
阿里云云原生6 小时前
可用性从 99.9% 跃升至 99.995%:畅捷通如何用 AI 重塑运维底座?
运维·网络·人工智能