1.7 现代 Transformer 架构:从原始设计到当代默认配方#
自 2017 年原始 Transformer(1.3 · 注意力与 Transformer)提出以来,其架构经过反复消融实验的筛选,已收敛为一套几乎所有当代大模型(Llama、Qwen、DeepSeek、Gemma 等)共同采用的默认配方。
本课沿用斯坦福 CS336(2025 春)第 3 讲Architectures & Hyperparameters的框架,逐项阐明每一处替换为何种设计、动机为何[^cs336]。
核心问题
- 能比较 Post-Norm、LayerNorm、正弦位置、ReLU-FFN、MHA 与 bias 的现代替代方案。
- 能推导 RMSNorm、SwiGLU 与 RoPE 的结构作用,以及 SwiGLU 中间维取 $\tfrac{8}{3}d$ 的依据。
- 能沿 KV-Cache 压缩主线区分 MHA、MQA、GQA 与 MLA。
- 能使用长宽比、头维与词表规模等经验约束判断模型形状是否合理。
- 能区分 z-loss、logit soft-cap、QK-Norm 与 QK-Clip 的稳定性作用,并比较主流模型配方。
图 1给出当代 Pre-Norm Transformer block 的数据流。本节逐一分析各部件的选择依据与放置位置。
原始 Transformer 确立了注意力机制加前馈层堆叠这一可行路线,但其若干部件的选择以功能可用为标准,并未针对堆叠数百层、训练规模达万亿 token、且需在推理时节省显存的生产场景做优化。此后近八年间,各处部件在具体约束下被逐项替换:归一化的位置若不当会导致深层训练发散,因而被移入残差流;激活函数表达力不足,被替换为门控结构;
绝对位置编码无法外推至长序列,被替换为旋转式的相对编码;推理阶段 KV-Cache 占用过大,则通过令多个注意力头共享缓存来缓解。这些改动各自针对一个具体约束,彼此独立且相互兼容,最终沉淀为一套通用的默认配方。
需要强调的是,这套配方的收敛由经验驱动:它并非由单篇论文确立,而是经由大量替换某一部件、重新训练、比较困惑度的消融实验(ablation)反复筛选而成。因此,本课在阐述每个设计选择时,都会同时说明它替换了什么、解决了何种问题、代价何在。理解这一层因果关系,比记住某一时期流行何种部件更有价值,因为流行的具体选择会随时间变化,而其背后的动机与约束相对稳定。
下表先给出结论,逐项对照原始设计与2024–2026 默认的差异,后续各节再展开论证:
| 部件 | 原版 Transformer(2017) | 今天的默认配方 | 换的理由(一句话) |
|---|---|---|---|
| 归一化位置 | Post-Norm(子层之后) | Pre-Norm(子层之前,残差流内) | 深层可训、不用小心翼翼调 warmup |
| 归一化类型 | LayerNorm | RMSNorm | 省一次减均值、省 bias,快约 5% |
| 前馈层 | ReLU-FFN(两个矩阵) | SwiGLU(门控,三个矩阵) | 门控更强,困惑度更低 |
| 位置编码 | 正弦绝对位置 | RoPE(旋转相对位置) | 相对位置、可外推到长上下文 |
| 注意力 | MHA(每头独享 KV) | GQA / MLA | 砍 KV-Cache,推理省显存 |
| 偏置项 | 各线性层带 bias | 去 bias | 优化更稳、不掉分 |
| 稳定性 | 无 | z-loss / soft-cap / QK-Norm / QK-Clip | 超大规模久跑不出 loss 尖峰 |
一、归一化:置于何处、采用何种#
定义与动机#
归一化(normalization)的作用是把每一层激活的幅度约束到一个稳定的区间,使后续层的输入分布不至于随深度失控。深层网络中每层的线性变换都会对信号的量级产生放大或收缩,若不加约束,量级会随层数累积并偏离常态,导致前向数值溢出、反向梯度爆炸或消失。归一化在层与层之间将信号重新缩放回标准量级,从而使梯度得以稳定地沿深度回传。
原始 Transformer 在归一化上做出的两个默认选择,归一化置于何处(Post 还是 Pre)与采用何种算子(LayerNorm 还是 RMSNorm),今天均已被替换。这两处改动看似细微,却直接决定了网络能否稳定地堆叠至数十乃至上百层,构成当代大模型走向深层的基础。
① 位置:Post-Norm → Pre-Norm#
原始设计将 LayerNorm 置于子层之后、残差相加之外,即 $x \leftarrow \mathrm{LN}(x + \mathrm{Sublayer}(x))$,称为 Post-Norm。其缺陷在于破坏了残差连接(residual connection)的恒等性质。
残差连接的设计目的,是让输入 $x$ 能够原样穿过各层、仅在其上叠加各层计算出的修正量,从而为梯度提供一条无衰减的回传通路。而 Post-Norm 在每次残差相加之后又施加一次归一化,使恒等映射不再保持:反向传播时梯度每经过一层就被该层归一化的缩放因子乘一次,数十层的缩放因子连乘后倾向于指数放大或指数衰减,难以稳定在 1 附近。
其后果是深层(24 层、48 层及更多)训练时梯度不稳、loss 曲线易出现尖峰,工程上须依赖精心设计的学习率 warmup(前数千步将学习率从接近 0 缓慢提升)才能勉强维持稳定,稍有偏差即发散。层数越深该问题越严重,而当代大模型常达上百层,Post-Norm 已不适用。
当前主流改用 Pre-Norm,即将归一化置于子层之前、残差通路之内:
$$x \leftarrow x + \mathrm{Sublayer}\big(\mathrm{Norm}(x)\big)$$归一化被移入子层内部(作用于 $\mathrm{Sublayer}$ 的输入),残差相加 $x + (\cdots)$ 则位于归一化之外。经此调整,残差主干恢复为纯恒等通路:$x$ 直接叠加到输出上,其间不再插入任何缩放。归一化仅负责将进入注意力或前馈子层的输入调整到标准量级,而不干扰主干上梯度的传播。
因此反向传播时梯度可沿主干无衰减回传,训练曲线更平滑,对 warmup 的依赖显著降低,数百层的深层网络也能稳定训练。这一改动的代价近乎为零,仅是同一归一化算子的位置调整,而收益是可训练更深的网络,因此迅速成为标准做法。
CS336 第 3 讲明确总结:当代架构已收敛到 Pre-Norm + RMSNorm + GLU 这一组合,几乎所有 2023 年之后的主流开源模型都遵循它1。
Pre-Norm 更稳定的机制:将 $L$ 层堆叠,Pre-Norm 的输出可写成 $x_0 + \sum_l \mathrm{Sublayer}_l(\cdot)$,每层向主干叠加一个修正量,残差主干的方差随层数线性增长而非指数爆炸;反向传播时梯度沿主干直达,不被中间的归一化反复缩放。Post-Norm 则每层都将主干重新归一化一次,深层的梯度信号因此被逐层削弱。
② 类型:LayerNorm → RMSNorm#
位置确定后,再看采用何种归一化算子。原始设计使用 LayerNorm(层归一化):对一个 $d$ 维向量依次执行四步,计算各分量均值并减去(中心化,将数据平移至均值为 0)、除以标准差(标准化,将幅度缩放至方差为 1)、乘以一个可学习的逐元素缩放 $g$、加上一个可学习的偏置 $b$。前两步为统计校准,后两步为可学习参数。
RMSNorm(Root Mean Square Layer Normalization,Zhang & Sennrich 于 2019 年提出)对此作了简化:它发现减均值一步可以省去,仅按向量的均方根(Root Mean Square,各分量平方的平均再开根号)重新缩放即可2:
$$\mathrm{RMSNorm}(x)=\frac{x}{\mathrm{RMS}(x)}\odot g,\qquad \mathrm{RMS}(x)=\sqrt{\frac{1}{d}\sum_{i=1}^{d} x_i^2+\epsilon}$$相较 LayerNorm,RMSNorm 省去了求均值、减均值与加偏置三步,仅保留逐元素缩放 $g$。这一简化之所以有实际收益,在于归一化属于访存密集型(memory-bound)算子:其瓶颈不在浮点乘加的数量,而在于将整个激活张量从显存搬入计算单元、算完再搬回的往返。因此省去减均值减少的浮点运算量本身有限,但它省去了一整趟中间结果的读写往返。
在具有数十亿参数、包含成百上千次归一化调用的大模型中,这些节省累积起来相当可观。实测表明,改用 RMSNorm 可使预训练速度约提升 5%(该数字取自 CS336 的实测总结,具体幅度随硬件与实现而异),而下游效果与 LayerNorm 基本持平。
因此 Chinchilla、LLaMA 全系乃至几乎所有后续开源大模型,均采用将 RMSNorm 置于 Pre-Norm 位置的 Pre-RMSNorm 组合3。这印证了当代架构设计的一条原则:凡可去除又不损失效果的部件即应去除,每一处这样的删减都是净收益的效率提升。
数值例子:设 $x=[3,-4,0,0]$($d=4$,$\epsilon$ 忽略)。$\mathrm{RMS}(x)=\sqrt{(9+16+0+0)/4}=\sqrt{6.25}=2.5$,于是 $\mathrm{RMSNorm}(x)=[1.2,\,-1.6,\,0,\,0]\odot g$。LayerNorm 还须先减去均值 $-0.25$,RMSNorm 则跳过这一步。
当 $x$ 的均值本就接近 0(残差流中常见此情形),两者结果几乎等价,而 RMSNorm 省去了对应计算。
③ 去掉 bias#
沿着凡可去除即去除的原则,当代模型还普遍删去了线性层与归一化层中的偏置项(bias):注意力的 Q、K、V 三个投影矩阵、前馈层的两三个矩阵、乃至输出词表 logits 的 LM head,均只保留权重矩阵而不含偏置向量。线性层的运算为 $y = xW + b$,其中 $b$ 即偏置。删去它的理由有二。
其一是优化更稳定:偏置项在大规模训练中引入额外自由度,也带来额外数值波动,去除后训练曲线更平滑。其二是几乎不损失效果:实验反复表明,在有 LayerNorm 或 RMSNorm 的架构中偏置带来的表达力增益极小,删去后模型效果基本不变。
历史上少数模型曾保留偏置,例如 Qwen2.5 在 QKV 投影上特意保留了 bias(据其技术报告,有助于外推),但下一代 Qwen3 又将其去除并改用 QK-Norm。这一演进印证了去 bias正逐步成为不可逆的共识(详见后文各家配方对照表)。
④ 2024–2025 新变体:双重归一化与 QK-Norm#
Pre-Norm 虽已解决深层训练的基本稳定性问题,但当训练规模达到千亿、万亿参数时仍存在可进一步加固之处,由此在 2024–2025 年间出现了两个新变体。
双重归一化(Pre + Post)在子层前后各施加一次归一化,入口一道(Pre,稳定输入)、出口一道(Post,稳定输出),代表模型有 Grok、Gemma2、OLMo2。其效果是同时约束子层输入与其贡献给主干的修正量幅度。代价是每层多一次归一化开销,换来的是超大规模训练中更低的失稳概率;
对于训练周期长达数月、算力成本达数百万美元的项目而言,这一开销换取的稳定性提升是划算的。
QK-Norm 则将归一化直接施加于注意力的 query 与 key。具体做法是在计算注意力点积之前,对 query 向量与 key 向量各做一次 RMSNorm 或 LayerNorm(通常置于 RoPE 旋转位置编码之后),将其模长固定在一个尺度上。
这样,无论训练过程中 Q、K 的数值如何漂移,其点积得到的 attention logits 规模都被约束,softmax 便不会因某个 logit 骤然变大而数值失稳,softmax 对极端输入高度敏感,单个离群值即可使分布退化为 one-hot、导致梯度归零。该机制在小 batch、小头数或低精度训练时尤为重要。
Gemma3、Qwen3 均已采用;正如第六节将说明的,QK-Norm 正逐步取代 logit soft-cap,成为 2025 年之后稳定性方案的主流选择。
二、前馈层:GLU 家族取代普通 FFN#
定义与动机#
Transformer 块含两个子层:注意力子层负责在序列各位置之间交换信息,前馈层(FFN,Feed-Forward Network)则对每个位置逐点施加非线性变换以加工特征。前馈层承载了模型相当大一部分参数量与记忆容量,其设计直接影响模型的表达力。
原始 FFN 采用线性 → 激活(ReLU)→ 线性三步结构:先用一个矩阵将 $d$ 维向量升至更宽的中间维 $d_{ff}$,经 ReLU 激活(将负值截为 0),再用第二个矩阵降回 $d$ 维。其非线性完全由单个 ReLU 提供,且 ReLU 对每个通道的作用是二值的,负值段整体置零、正值段整体保留,缺乏对通道内信号强度的连续调节能力。
门控线性单元(GLU,Gated Linear Unit)针对这一局限引入了并行的门控支路。原始 FFN 只有一条支路计算通道的输出值,GLU 则并联出第二条支路专门计算每个通道的门控系数,再将两条支路的输出逐元素相乘。
相较 ReLU 对通道信号的二值取舍,GLU 的门控系数是输入的连续函数,模型得以根据当前输入动态、连续地决定每个通道放行的信号强度。这种内容 × 门控的乘性结构提供了更细粒度的控制,从而增强表达力。
核心公式#
Shazeer(2020)系统比较了 GLU 家族4。GLU 的通式为:
$$\mathrm{GLU}(x)=\sigma(xW)\otimes(xV)$$将门控激活替换为 Swish(亦称 SiLU,$\mathrm{Swish}(z)=z\cdot\sigma(z)$)即得 SwiGLU,替换为 GELU 则得 GEGLU。完整前馈层写作:
$$\mathrm{FFN}_{\text{SwiGLU}}(x)=\big(\mathrm{Swish}(xW)\otimes (xV)\big)\,W_2$$其中 $xV$ 经 Swish 激活后作为门控支路(决定放行强度)、$xW$ 为内容支路(决定输出内容)、$W_2$ 将逐元素相乘的结果投影回 $d$ 维。值得注意的是,GLU 需要三个权重矩阵($W$、$V$、$W_2$),比原始 FFN 的两个矩阵多出一个;这个额外的门控矩阵正是下文中间维取 $\tfrac{8}{3}d$ 而非 $4d$ 的原因。
Shazeer 在论文中对 ReLU、GELU、Swish 及其各自的门控版本做了系统消融对比,结论是 GEGLU 与 SwiGLU 的困惑度最优(困惑度越低表示语言建模越好)。作者在论文结尾坦言这些改进有效的原因或许只能归于运气,但实验证据充分,SwiGLU 由此成为当代几乎所有大模型的默认前馈层。
为什么中间维取 $\tfrac{8}{3}d$#
一个容易忽略的细节:普通 FFN 只有两个矩阵($d\times d_{ff}$ 和 $d_{ff}\times d$),常取 $d_{ff}=4d$。GLU 多了一个门控矩阵($W$、$V$、$W_2$ 共三个)。若照搬 $d_{ff}=4d$,参数量与算力会额外增加 50%。为使其与原$d_{ff}=4d$ 的两矩阵 FFN参数与算力持平,GLU 将中间维按因子 $\tfrac{2}{3}$ 缩小:
$$d_{ff}\approx \tfrac{2}{3}\times 4d=\tfrac{8}{3}\,d\approx 2.67\,d$$该 $\tfrac{2}{3}$ 因子的来源直接:GLU 有三个矩阵、普通 FFN 有两个,$\tfrac{2}{3}$ 恰好抵消多出的那个矩阵的开销,使两种前馈层在相同 $d$ 下参数量与算力相等,从而可作公平对比。Shazeer 论文中的示例即将 $d_{ff}$ 从 3072 降至 2048($2048 = 3072 \times \tfrac{2}{3}$)。
理解这一点后,各家模型配置文件中看似不整齐的中间维便不再费解:它们并非整齐的 $4d$,而是先算出 $\tfrac{8}{3}d\approx 2.67d$,再向上取整为对硬件张量核心友好的整数(通常是 128 或 256 的倍数,以利 GPU 并行)。
以 Llama3-8B 为例,$d=4096$,按 $\tfrac{8}{3}d$ 约为 10922,而实际配置 $d_{ff}=14336\approx 3.5d$,各家会在此基准附近,依据自身算力预算与硬件对齐要求略作上调或下调。因此,当 FFN 中间维不是整齐的 $4d$ 时,这正是 GLU 参数持平设计的体现,而非配置错误。
三、位置编码:从绝对到 RoPE#
本节只负责把位置编码放回现代架构默认配方的全景中。自注意力本身不知道 token 的原始顺序,因此模型必须另行注入位置;技术路线从加入输入 embedding 的正弦/可学习绝对位置,发展到直接修改 attention logit 的相对位置偏置与 ALiBi,再收敛到当前主流的 RoPE。
RoPE 不在最底层给 token embedding 加一个位置向量,而是在每一层注意力中按位置旋转 Q/K。它对位置 $m$、$n$ 分别施加绝对旋转,却利用 $R_m^\top R_n=R_{n-m}$ 使 Q/K 点积显式依赖相对位移。
公式为何成立、频率如何覆盖局部与长程、KV-Cache offset 如何处理,以及位置插值和 YaRN 如何扩展上下文,统一在独立教程正文页 1.8 · 位置编码与 RoPE 推导。
这里需要区分公式能计算更大的位置编号与模型能理解更长的上下文。原生 RoPE 超出训练长度仍会发生相位与 attention 分布偏移,不能因为它没有固定位置表就断言可以无限外推;长窗口必须同时核对训练长度、rope_theta、缩放方法和长文本微调配方。四、注意力变体:为推理压缩 KV-Cache#
定义与动机#
本节的四个变体的动机均来自推理而非训练。如 1.4 · 资源核算 所述,自回归解码逐个生成 token,每生成一个新 token 都需令其对前面所有已生成 token 计算注意力。
为避免每步重算历史序列的注意力(其复杂度随长度平方增长),实现上会将每个位置算出的 K、V 向量缓存下来,即 KV-Cache。它以显存换取速度:缓存大小等于层数 × 头数 × 头维 × 序列长度 × 批大小(并发请求数),随序列长度与并发数线性增长。
在长上下文、高并发的服务场景中,KV-Cache 常比模型权重本身更占显存,从而直接决定单卡可同时服务的用户数与可支持的上下文长度。
由此确立了一个明确的优化目标:在减少 K、V 缓存的同时尽量不损失模型质量。MHA → MQA → GQA → MLA 这条演进主线正是围绕该目标展开,其共同思路是令多个 query 头共享更少的 K、V,区别仅在共享的粒度与方式。
需注意的是,这些改动主要作用于 K、V 的头数,query 头数通常保持不变,query 仅在当前步使用一次、不进入缓存,减少它并不节省显存。

三者对比#
| 变体 | K/V 头数 | KV-Cache | 质量 | 代表模型 |
|---|---|---|---|---|
| MHA(多头,原版) | 每个查询头各一份 K、V | 最大 | 最好、最贵 | 原版 Transformer、GPT-2 |
| MQA(多查询) | 所有查询头共享一份 K、V | 缩小 $\approx$ 头数倍 | 可能略降 | PaLM、早期解码器 |
| GQA(分组查询) | 分 $G$ 组、组内共享 K、V | 折中($\approx 4\times$ 压缩) | 接近 MHA | Llama2/3、Qwen2.5/3、Mistral |
先看两个极端。MHA(Multi-Head Attention,多头注意力)是原始做法,每个 query 头各配一组独享的 K、V,缓存最大、质量最好、代价也最高。MQA(Multi-Query Attention,多查询注意力)走向另一极端,令所有 query 头共享同一组 K、V,缓存缩小至原来的约头数分之一,节省显存最为显著;
但由于所有头被迫共用同一份 K、V,表达多样性受损,质量可能略降。
GQA(Grouped-Query Attention,分组查询注意力,Ainslie et al. 2023)是当前最主流的折中方案5。它将 $n$ 个 query 头分为 $G$ 组,每组内部共享一组 K、V。
当 $G=n$ 时每头一组、退化为 MHA,$G=1$ 时全部共享、退化为 MQA,GQA 以单一参数 $G$ 将两个极端连成连续谱,从而可在节省显存与保持质量之间调节。工程上典型取 $G=8$ 左右,即可将 KV-Cache 压缩至约原来的 $\tfrac{1}{4}$ 而困惑度几乎不降,该配置为 Llama2/3、Qwen、Mistral 等模型共同采用。
GQA 还支持 uptraining(增量训练):无须从头训练,而是取一个已训好的 MHA checkpoint,将每组内多头的 K、V 投影取平均合并为一组,再以约 5% 的原预训练算力继续训练一小段,即可平滑转为 GQA 版本且几乎不掉分。这一低成本转换能力,是 GQA 得以快速普及的重要原因。
MLA:DeepSeek 的低秩压缩#
GQA 的思路是令头之间共享,DeepSeek-V2/V3 的 MLA(Multi-head Latent Attention,多头潜在注意力)则采取另一路径:不减少头数,而是从压缩表示入手。
它观察到 K、V 中存在大量冗余,于是先用一个降维矩阵将每个位置的 K、V 低秩联合压缩为一个较小的 latent(潜在)向量,压缩维 $d_c$ 约 512,远小于所有头拼接后的原始维度 $n_h\cdot d_h$。推理时缓存中仅存储该 latent,需要计算注意力时再用升维矩阵将其还原为完整的 K、V。
缓存的仅是低秩压缩表示而非完整 K、V,需用时现场重建,因而缓存体积大幅缩小。
此处有一个技术难点:RoPE 是施加于 K 的位置旋转,若 K 被压缩为 latent 再还原,旋转无法干净地传递到 latent 上。DeepSeek 的解法是配一路解耦的 RoPE,单独保留一小份专门携带位置信息的维度,绕过压缩、直接旋转,从而在压缩 K、V 的同时保留位置信息。
借助 MLA 与自研的稀疏专家结构 DeepSeekMoE,DeepSeek-V3 支撑起 671B 总参数、每 token 仅激活 37B、128 个注意力头的规模,同时将 KV-Cache 压缩得比 GQA 更彻底。MLA 由此成为 GQA 之外的另一条主流范式,尤其受到追求超长上下文与高并发推理效率的团队采用。
五、超参的经验法则#
前几节讨论的是采用何种部件,本节讨论部件的规模,即如何确定模型的形状(宽度 $d_{model}$、深度 $n_{layers}$、头数、词表大小等超参数)。这些取值并非可任意填写,而有一套经反复验证的经验法则,遵循它们可省去大量试错。CS336 第 3 讲汇总了一组实用经验1,以下逐项说明其取值与依据。
前馈比 $d_{ff}/d_{model}\approx 4$,即前馈层中间维约为模型宽度的 4 倍;若使用 GLU,则按第二节的推导调整为等效的 $\approx \tfrac{8}{3}$,以抵消额外门控矩阵的开销。长宽比 $d_{model}/n_{layers}\approx 128$ 是宽度与深度的典型配比。
Kaplan 等(2020)在缩放定律研究中发现,该比值附近存在一条较宽的 loss 平坦带:只要落在合理区间,偏深或偏浅对最终效果影响都不大;但又深又窄(层数极多而每层很窄)或又浅又宽(层数很少而每层极宽)这类极端形状则明显不划算,前者难训、后者浪费6。
实践中 GPT-3、LLaMA 系列均取 128 附近,早期的 GPT-2 small 取 64。
头维度 $d_{head}=d_{model}/n_{heads}$ 由宽度除以头数决定,业界常将其固定在 64 或 128,再据此反推头数,这一尺寸与 GPU 张量核心及 FlashAttention 等高效注意力实现的对齐最佳。词表大小呈增大趋势,早期模型约三五万,当代生产模型多在 100K–250K 之间。
词表增大有两方面动因:支持更多语种,以及对相同文本用更少 token 表示,更高的压缩率意味着相同上下文长度可容纳更多内容,这一点呼应 1.2 · Token 与嵌入 中关于分词的讨论。
以 Llama3 为例,其词表为 128K,其中约 100K 来自 tiktoken 基础词表,另加约 28K 面向非英语语种的 token。
dropout 在预训练阶段通常关闭。dropout 用于抑制过拟合,而大模型以单遍(single-epoch)方式扫过海量数据、几乎每条样本仅见一次,不存在过拟合,此时启用 dropout 反而丢弃信息、拖慢收敛;只有在数据量小、可能重复多遍的微调阶段才会重新考虑启用。
权重绑定(weight tying,令输入词嵌入矩阵与输出 LM head 共享同一份权重)的取舍取决于规模:小词表、小模型常采用它以节省参数,因为此时嵌入矩阵占总参数比例较大;大词表、大模型则多不绑定,因为嵌入占比很小、节省有限,而强行共享反会约束输入端与输出端各自的表达自由度,导致轻微掉分。
形状对性能相对不敏感:Lilian Weng 在 2026-06 的《Scaling Laws, Carefully》中复盘 Kaplan 的结论,模型形状(深与宽)在约 40× 的宽区间内对最终性能影响很小,社区经验因此收敛到 $d_{model}/n_{layers}\approx 128$ 这一默认值。因此不宜在长宽比上过度调参,将算力投入数据与规模上收益更高[^weng]。
六、稳定性:维持超大规模长时训练不崩溃#
当训练规模达到千亿、万亿参数并持续数周乃至数月时,数值稳定性成为一个突出问题。规模越大、训练越久,浮点运算出现异常的概率越高,尤其在为节省显存而广泛使用的 bf16 半精度下,某个中间量骤然变得极大或极小,即可能使 loss 曲线出现尖峰(loss spike)。尖峰轻则拖慢收敛,重则导致训练崩溃,而重启训练意味着数十万美元算力的损失。
因此,维持长时训练稳定本身即是超大规模项目的一项核心工程。除 1.5 · 从零训一个 Transformer 中讲过的通用手段(学习率 warmup、梯度裁剪)外,近年在架构层面还发展出一组专门机制,其共同目标是将某个容易失控的量从源头约束在安全范围内。
z-loss(由 PaLM 提出)针对输出 softmax 的配分函数 $Z=\sum_j \exp(\text{logits}_j)$(softmax 的分母项,度量所有 logits 指数之和的量级),在损失中额外加入正则项 $\alpha\cdot\log^2 Z$,将 $\log Z$ 温和地拉向 0、即将 $Z$ 拉回 1 附近,从而防止 logits 整体漂移至过大的绝对值。
logits 一旦过大,其 exp 运算在 bf16 下极易溢出,且词表越大、需求和的项越多、风险越高,因此 z-loss 在bf16 加大词表的组合中尤为重要(OLMo2、DCLM 等均采用)。
logit soft-cap(Gemma2)用 $\tanh$ 对 logits 做软性封顶,$\text{logits}\leftarrow c\cdot\tanh(\text{logits}/c)$。由于 $\tanh$ 的取值范围为 $(-1, 1)$,无论输入多大,输出都被限制在 $(-c, c)$ 之内:小值近乎原样通过,大值被平滑压回。
相较硬截断会使梯度归零,$\tanh$ 在封顶的同时保留了梯度。Gemma2 为注意力层设 $c=50$、为末端输出层设 $c=30$。
QK-Norm(第一节已介绍)与事后封顶不同,它在计算注意力点积之前就对 Q、K 各做一次归一化,从源头约束 attention logits 的规模,因而比事后 soft-cap 更为根本。正因如此,Gemma3 直接以 QK-Norm 替换了 Gemma2 的 logit soft-cap。
这一取舍具有代表性,体现了 2025 年源头归一化优于事后封顶的方法论转向。
QK-Clip / MuonClip(Kimi K2,Moonshot 2025)将 attention logit 的控制进一步推进到权重层面,配合 Muon 优化器使用:每一步 Muon 更新参数之后,检查注意力 logit 是否超过阈值 $\tau$(初始设为 100),若超出则直接按比例重缩放投影权重矩阵 $W_q$、$W_k$ 本身。
将 logit 拉回阈值以下,不仅约束输出,更从产生输出的权重上着手。
凭借该机制,Kimi K2 在总量 15.5T token、万亿参数量级的 MoE 预训练中实现了全程零 loss 尖峰、无须任何人工干预重启7,在此规模下这是极难得的稳定性,堪称 2025 年超大规模训练稳定性的代表工作。
七、2024–2026 各家实际配方对照#
前六节逐一拆解了各个部件,本节将其组合还原到整机层面,考察过去两三年最具代表性的几个开源大模型如何实际组合这些设计选择。下表列出它们的关键差异。
可以看到一个清晰的规律:这些模型的底座高度一致,均为 Pre-Norm + RMSNorm + SwiGLU + RoPE,真正的区别仅在两处,注意力采用何种压缩方案(GQA 或 MLA),以及采用何套稳定性机制。这印证了本课开头的判断:架构已经收敛,创新集中于少数仍在演进的前沿环节。
| 模型(年份) | 注意力 | 稳定性关键 | 规模亮点 | 具体例子 |
|---|---|---|---|---|
| Llama3(2024)8 | GQA,8 KV 头 | 标准配方 | 405B 使用 126 层、宽度 16384、128 个 Q 头 | 每 16 个 Q 头共享一组 K/V,KV-Cache 头数为 MHA 的 $1/16$ |
| Qwen2.5(2024)9 | GQA | QKV-bias | dense 与 MoE 全系列 | 同一注意力投影显式学习 Q、K、V 偏置,模型家族覆盖稠密与专家版本 |
| Qwen3(2025)10 | GQA | QK-Norm | 去除 QKV-bias | 每个头先归一化 Q/K,再进入点积,稳定注意力 logit 尺度 |
| DeepSeek-V3(2024)11 | MLA + DeepSeekMoE | 低秩 KV 潜变量 | 671B 总参数与 37B 激活参数 | 历史 token 缓存低秩 latent,查询阶段再恢复内容与位置分量 |
| Gemma2(2024)12 | 局部 4096 与全局 8192 交替 | logit soft-cap 及双 RMSNorm | 两组 GQA | 注意力 logit 以 50 为上限,最终输出 logit 以 30 为上限 |
| Gemma3(2025)13 | 5 层局部配 1 层全局 | QK-Norm | 局部窗 1024,最大上下文 128K | 五层在 1024 窗口内聚合,第六层建立全局信息通路 |
| Kimi K2(2025)7 | MoE 注意力 | MuonClip 与 QK-Clip | 1T 参数、15.5T token | 谱范数超过阈值 $\tau=100$ 时缩放权重,训练记录保持零 loss 尖峰 |
CS336 第 3 讲也点出两个 2024–25 的结构性趋势:双重归一化(Pre+Post,Grok/Gemma2/OLMo2)和稀疏/滑窗 + 周期性全局注意力(Llama4/Gemma),后者是支撑 10M+ 上下文的关键1。
小结#
- 当代 Transformer 的默认配方是一套逐项替换而成的组合:Pre-Norm + RMSNorm 使残差主干保持恒等、省去一次减均值、预训练约提速 5%
- 去 bias 与 SwiGLU(门控 FFN,配 $d_{ff}\approx\tfrac{8}{3}d$ 以保持算力持平)增强表达力
- RoPE 在每层旋转 Q/K,使点积携带相对位置,但长上下文仍需匹配的缩放与训练
- GQA 或 MLA 通过分组共享或低秩压缩 K、V 来削减 KV-Cache
- 超参上,长宽比取 $\approx 128$、头维取 64–128、词表取 100K–250K、预训练关闭 dropout
- 稳定性由 z-loss / logit soft-cap / QK-Norm / QK-Clip 保障
- 这一骨架即是当前 Llama、Qwen、DeepSeek、Gemma、Kimi 所共有的架构基础
上一节:1.6 · 混合专家 MoE | 下一节:1.8 · 位置编码与 RoPE | 本章总览:第 1 章 · 大模型基础
参考文献#
Stanford CS336《Language Modeling from Scratch》(Spring 2025), Lecture 3: Architectures & Hyperparameters(transcript). https://www.textpurr.com/transcript/stanford-cs336-lang-modeling-from-scratch-spring-2025-lec-3-architectures-hyperp ↩︎ ↩︎ ↩︎
Zhang & Sennrich. Root Mean Square Layer Normalization(RMSNorm). 2019. https://arxiv.org/abs/1910.07467 ↩︎
Pre-RMSNorm and Pre-CRMSNorm Transformers(RMSNorm 背景、LLaMA/Chinchilla 采用). 2023. https://arxiv.org/abs/2305.14858 ↩︎
Shazeer. GLU Variants Improve Transformer(SwiGLU / GEGLU,含 $\tfrac{8}{3}d$ 中间维). 2020. https://ar5iv.labs.arxiv.org/html/2002.05202 ↩︎
Ainslie et al. GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints. 2023. https://arxiv.org/abs/2305.13245 ↩︎ ↩︎
Kaplan et al. Scaling Laws for Neural Language Models(长宽比 / aspect ratio). 2020. https://arxiv.org/pdf/2001.08361 ↩︎
Moonshot AI. Kimi K2: Open Agentic Intelligence(MuonClip / QK-Clip). 2025. https://arxiv.org/html/2507.20534v1 ↩︎ ↩︎
Grattafiori et al. The Llama 3 Herd of Models. 2024. https://arxiv.org/abs/2407.21783 ↩︎
Qwen Team. Qwen2.5 Technical Report. 2024. https://arxiv.org/pdf/2412.15115 ↩︎
Qwen Team. Qwen3 Technical Report(QK-Norm、移除 QKV-bias). 2025. https://arxiv.org/html/2505.09388v1 ↩︎
DeepSeek-AI. DeepSeek-V3 Technical Report(MLA + DeepSeekMoE). 2024. https://arxiv.org/abs/2412.19437 ↩︎
Gemma Team (Google DeepMind). Gemma 2: Improving Open Language Models at a Practical Size(局部/全局交替、logit soft-cap). 2024. https://arxiv.org/pdf/2408.00118 ↩︎
Gemma Team (Google DeepMind). Gemma 3 Technical Report(QK-Norm 替换 soft-cap、5:1 局部/全局). 2025. https://arxiv.org/html/2503.19786v1 ↩︎