在 8.1 节完成训练框架选型、环境配置和集群初始化后,真正的训练循环启动之前,还有一道极其关键的“暗门”——模型初始化。很多预训练失败的案例,Loss 在第一步就炸成 NaN,或者训练了半个月发现收敛速度远慢于预期,追根溯源往往是初始化或结构配置出了问题。本节把这件事拆开讲:参数怎么撒到初始状态、权重分布如何影响早期稳定性,以及模型结构配置背后的工程权衡。
一、参数初始化:为什么“从零开始”不是真从零
神经网络的参数在训练前必须被赋予初始值。听起来简单,但大模型对初始状态极其敏感。175B 参数的 GPT-3,如果所有权重初始化为 0,模型会完全丧失表达能力;如果初始标准差太大,第一层就可能输出天文数字,导致梯度爆炸。
核心目标:让每个神经元在训练第一步输出的信号强度处于“可处理范围”,既不至于淹没在数值精度里,也不至于撑爆 FP16/BF16 的表示范围。
1.1 经典初始化方法:Xavier 与 He
- Xavier / Glorot 初始化:适用于激活函数对称(如 tanh、线性)的场景。核心思想是根据输入输出维度调整初始化方差,使信号在前向和反向传播中的方差大致守恒。
- He / Kaiming 初始化:专为 ReLU 及其变种设计。由于 ReLU 会把一半的神经元输出归零,He 初始化把 Xavier 的方差乘以 2,补偿信息损失。
大模型实用认知:今天的主流 LLM(GPT、Llama、Qwen 等)在 FFN 中使用 SwiGLU 或 GELU,在注意力层无激活或 Softmax 缩放,因此He 初始化或其变体更常见。但具体实现上,各框架(PyTorch、Megatron、DeepSpeed)的默认行为不同,务必核对。
1.2 Transformer 各组件的初始化策略
标准 GPT-style Decoder 不是“一刀切”初始化,不同模块有精细差异:
| 模块 | 常见初始化策略 | 工程原因 |
|------|---------------|----------|
| Token Embedding | 正态分布 N(0, σ²),σ 较小(如 0.02)或直接 Xavier | 词表规模大(如 32k–150k),方差过大会让初始词向量距离过远 |
| Q/K/V 投影矩阵 | Xavier / He,或配合 1/√d_head 的注意力缩放 | 控制注意力分数初始幅度,避免 Softmax 进入饱和区 |
| 输出投影(Output LM Head) | 常与 Embedding 共享权重并共享初始化;若独立,则 std 显著减小(如乘以 0.5 或 1/√dim) | 防止初始阶段输出分布过于尖锐,导致 Loss 爆炸 |
| FFN 中间层 | He / Megatron 默认;SwiGLU 的 gate 与 up 投影通常同分布 | 大模型 FFN 维度极宽(如 11008、28672),方差需严格控制 |
| LayerNorm / RMSNorm | γ(gain)初始化为 1,β(bias)初始化为 0;RMSNorm 的 weight 初始化为 1 | 保证训练初期每层输出尺度稳定,避免归一层“放大噪声” |
| 偏置项(Bias) | Attention 的 Q/K/V/O 投影常不设 bias;FFN 可设或不设 | 减少参数量,降低过拟合风险;现代大模型趋向于“无 bias 简化” |
踩坑实录:某千卡集群训练 65B 模型,前 10 步 Loss 从 11 正常下降到 9,第 11 步突然跳到 1e4 然后 NaN。排查三天发现是某仓库代码在 TP(张量并行)切分后,输出层初始化标准差未按切分维度修正,导致初始 logits 方差被放大了 √N 倍。分布式环境下的初始化一致性是隐雷。
1.3 初始化的数值范围:一个经验锚点
对隐藏维度为 d_model(如 4096、8192)的模型,权重初始标准差 σ 的常见取值:
- 小模型(< 1B):
σ ≈ 0.02是常见默认。 - 大模型(7B–70B):多用
σ = 1 / √(2 * d_model)或框架内置的init_method。 - 超大模型(> 100B):
σ需要更保守,有时对最后一层单独缩放,避免早期 Softmax 过度自信。
关键原则:d_model 越大,单个权重的影响经矩阵乘法累加后越容易被放大,因此 σ 通常随维度增加而减小。
二、权重分布:方差控制与早期稳定性
初始化完成后,所有权重构成一个高维随机分布。这个分布在训练早期的演化轨迹,直接决定了能否熬过“黑暗前 1000 步”。
2.1 初始分布应该长什么样?
绝大多数 LLM 采用正态分布(高斯分布)或均匀分布初始化。正态分布更常见,因为:
- 大数定律下,多层线性变换后的输出仍近似正态;
- 便于通过标准差精确控制尾部概率(避免极端值)。
权重分布的方差守恒(Variance Scaling)是核心关注点。如果第 L 层的输出方差是第 1 层的 100 倍,深层网络会迅速失控。Transformer 通过以下机制共同维持稳定:
- 残差连接(Residual Connection);
- LayerNorm / RMSNorm;
- 注意力分数缩放(Scale factor 1/√d_head);
- 谨慎的初始化标准差。
2.2 Post-Norm vs Pre-Norm:初始化敏感度的分水岭
这是结构配置与初始化交互的经典案例:
- Post-Norm(原始 Transformer):LayerNorm 放在残差之后。训练极不稳定,对初始化极度敏感,大模型基本已被弃用。
- Pre-Norm(GPT-3、Llama、Qwen 等主流选择):LayerNorm 放在残差分支内部,主通路直接相加。这大幅降低了对初始化精度的依赖,允许使用更大的学习率和更深的网络。
实用结论:如果你今天从零预训练一个 10B 以上模型,必须用 Pre-Norm(或 RMSNorm)。Post-Norm 在 1B 规模就可能让你调试初始化到崩溃。
2.3 预训练早期的 Loss Spike
即使初始化完美,大模型在训练初期(前几百到几千步)也常出现 Loss Spike(损失尖峰):Loss 突然从 8 跳到 80,然后可能自动回落,也可能直接 NaN。
这与权重分布的关系:
- 初始化分布的尾部(极端值)在数据并行中遇到特定 batch 的离群样本,触发梯度爆炸;
- 缓解手段:梯度裁剪(Gradient Clipping)、学习率 Warmup(详见 4.4 节)、以及更保守的初始化。
工程经验:观察前 100 步的梯度范数(Gradient Norm)和权重范数(Weight Norm)曲线。如果梯度范数在 Warmup 期结束后仍剧烈震荡,往往是初始化方差偏大或数据中存在异常长序列。
三、模型结构配置:炼大模型的“配方”
初始化不是孤立的技术点,它服务于你选定的模型结构。结构配置(Model Configuration)是预训练前最重要的工程决策之一,因为它一旦启动就几乎无法中途更改。
3.1 核心超参数及其耦合关系
一个标准 Decoder-only 模型的配置由以下变量锁定:
| 超参数 | 符号 | 作用 | 约束条件 |
|--------|------|------|----------|
| 隐藏层维度 | d_model (或 hidden_size) | 每层向量的宽度,决定模型的“脑容量密度” | 通常是 128 的倍数(GPU 友好) |
| 层数 | n_layers | Transformer Block 的堆叠深度 | 与 d_model 共同决定参数量的大头 |
| 注意力头数 | n_heads | 并行注意力的分支数 | d_model 必须能被 n_heads 整除,得到 d_head |
| 每头维度 | d_head = d_model / n_heads | 单头注意力的内部维度 | 影响注意力计算复杂度和表达能力 |
| FFN 中间维度 | d_ff (或 intermediate_size) | 前馈层先升维再降维的“瓶颈”宽度 | 通常是 d_model 的 2.7–4 倍;SwiGLU 常用 8/3 倍 |
| 词表大小 | vocab_size | 模型认识的 Token 种类数 | 32k–150k 常见,需向上取整到 64 的倍数(张量并行友好) |
| 上下文长度 | max_position_embeddings | 单次能处理的 Token 上限 | 初始训练长度与最终长度可能不同(见 8.6 节) |
| 注意力变体 | — | 如 GQA(Grouped Query Attention)、Sliding Window | 影响 KV-Cache 显存和推理速度 |
关键耦合公式(参数估算):
总参数量 ≈ 2 × d_model² × n_layers + 词表参数量(vocab_size × d_model) + FFN 参数量
更粗略地,对标准 Decoder-only 模型:
总参数量 ≈ 12 × n_layers × d_model² (当 d_ff ≈ 4 × d_model 时)
3.2 常见尺寸的典型配方
以下给出业界主流开源模型的配置参考,供你在设计新模型时直接对标:
| 模型规模 | d_model | n_layers | n_heads | d_ff | 备注 |
|----------|-----------|------------|-----------|--------|------|
| ~1B | 2048 | 24 | 16 | 5504–8192 | 端侧/手机候选 |
| ~7B | 4096 | 32 | 32 | 11008–14336 | 开发者黄金尺寸,单卡微调友好 |
| ~13B | 5120 | 40 | 40 | 13824–16384 | 性价比拐点,推理需 2×A100 |
| ~30B | 6656 | 60 | 52–60 | 17920–28672 | 企业级应用,多卡必需 |
| ~70B | 8192 | 80 | 64 | 22016–28672 | 能力接近 GPT-4 早期版本 |
| ~400B+ | 16384 | 126+ | 128 | 53248+ | Llama 3.1 405B 级别,万卡训练 |
设计原则:在总参数量预算下,增加
n_layers(深度)通常比单纯加宽d_model更有利于复杂模式学习,但过深的网络会加剧梯度消失和通信开销。因此主流趋势是“深而适中宽”,配合 GQA 降低推理显存。
3.3 GQA / MQA:结构配置对推理的直接影响
- MHA(Multi-Head Attention,全头注意力):每个头独立的 K/V 投影,表达力最强,但推理时 KV-Cache 显存与头数成正比。
- GQA(Grouped Query Attention):多查询头共享同一组 K/V 投影(如 Llama 2/3、Qwen 2)。
n_kv_heads < n_heads,典型比例为 1/4 或 1/8。显存大幅下降,长上下文推理必备。 - MQA(Multi-Query Attention):极端情况下所有头共享 1 组 K/V,速度最优但可能损失质量。
实用建议:新模型预训练如无特殊理由,直接采用 GQA。这是 2023 年后 LLM 的事实标准。
3.4 词表与嵌入:被低估的参数量占比
当 vocab_size = 150,000,d_model = 8192 时,仅 Embedding + Output Head 的参数量就达到 2 × 150k × 8192 ≈ 2.4B。这意味着一个 7B 模型的词表相关参数占了超过 30%。
- 多语言模型需要大词表(覆盖中文、日文、韩文等),但会稀释每层的“非词表”参数量;
- 纯英文/代码模型可用小词表(如 32k),把参数预算留给 Transformer 层。
工程取舍:训练中文为主的模型,词表不宜盲目照搬 Llama 的 32k,建议至少 50k–100k;但过大的词表会拖慢 Softmax 计算,需配合张量切分优化。
四、工程落地的实用真相
真相 1:初始化种子(Seed)决定调试期的 Sanity Check
在千卡集群上,设置全局统一的随机种子是基本要求。但注意:数据并行(DP)的不同 rank 应加载不同数据子集,而模型并行(TP/PP)的不同 rank 应对同一层做切分后保持初始化一致。Megatron-LM 和 DeepSpeed 的初始化代码差异很大,混用框架时极易在此处产生静默错误。
真相 2:继承初始化(Warm-Start)能救命
如果你要做 Continue Pre-training(在开源模型上续训)或从中期 Checkpoint 恢复,不要重新随机初始化。继承已有权重不仅能节省计算,更重要的是继承了已收敛的权重分布,避免早期震荡。即使是换词表(如从 32k 扩到 100k),也应做嵌入层插值而非完全重新随机。
真相 3:结构配置错误是最贵的错误
学习率调错了可以改,数据配比失衡可以调,但如果在训练了 100B Token 后发现 n_layers 设少了导致容量不足,或 d_model 与 n_heads 没整除导致代码 crash,代价是数周时间和数百万算力成本的沉没。启动全量训练前,务必用一个小规模 dummy run(如 1B 参数、1B Token)验证结构、初始化和收敛性。
真相 4:BF16 与初始化范围
现代大模型普遍使用 BF16(Brain Floating Point)混合精度训练。BF16 的尾数位比 FP16 少,对小数值的分辨率更粗。这意味着过于保守的初始化(权重接近 0)在 BF16 下可能出现大量零值或精度损失。实践中,BF16 训练的初始化标准差通常比 FP16 略大 10%–20%,或确保前向传播迅速将激活值抬升到 BF16 的有效表示区间。
五、小结
模型初始化不是“随机撒点数字”的仪式,而是预训练稳定性的第一道闸门。核心要点:
- 参数初始化需按模块区分策略:Embedding 保守、Q/K/V 配合注意力缩放、Output Head 尤其要克制;
- 权重分布的方差控制是早期不炸 Loss 的生命线,Pre-Norm 架构是现代大模型的默认选择;
- 结构配置是算力、效果、推理成本的三方博弈,7B/13B/70B 的配方已被开源社区充分验证,如无颠覆性创新,建议站在巨人肩膀上微调比例;
- 分布式一致性和精度格式(BF16/FP16)会让初始化策略产生微妙的工程差异。
完成初始化后,这些被精心撒下的随机权重即将迎来真正的试炼——8.3 节将带你进入训练执行全流程:数据加载、前向计算、反向传播与参数更新,以及分布式环境下这一切如何被精确编排。