Skip to content

01. Normalization(归一化)

为什么深层网络需要归一化?RMSNorm 如何稳定训练?


🎯 学习目标

完成本模块后,你将能够:

  • ✅ 理解梯度消失/爆炸问题的本质
  • ✅ 理解归一化如何稳定激活分布
  • ✅ 理解 RMSNorm vs LayerNorm 的区别
  • ✅ 理解 Pre-LN vs Post-LN 的优劣
  • ✅ 从零实现 RMSNorm

📚 学习路径

1️⃣ 快速体验(10 分钟)

先运行实验,建立直觉:

bash
cd experiments

# 实验 1:看看没有归一化会发生什么
python exp1_gradient_vanishing.py

# 实验 2:对比四种配置
python exp2_norm_comparison.py --quick

你会看到

  • 无归一化:激活值标准差迅速衰减到 0(梯度消失)
  • Post-LN:训练初期 loss 震荡
  • Pre-LN + RMSNorm:稳定收敛 ✅

2️⃣ 理论学习(30 分钟)

阅读教学文档:

核心内容

  • Why: 为什么需要归一化?
  • What: RMSNorm 是什么?
  • How: 如何验证?

3️⃣ 代码实现(15 分钟)

查看真实代码:

关键文件

  • model/model_minimind.py:95-105 - RMSNorm 实现
  • model/model_minimind.py:359-380 - TransformerBlock 中的使用

4️⃣ 自测巩固(5 分钟)

完成自测题:


🔬 实验列表

实验目的时间数据
exp1_gradient_vanishing.py证明归一化的必要性10秒合成数据
exp2_norm_comparison.py对比四种配置5分钟TinyShakespeare
exp3_prenorm_vs_postnorm.pyPre-LN vs Post-LN8分钟TinyShakespeare

运行所有实验

bash
cd experiments
bash run_all.sh

💡 关键要点

1. 为什么需要归一化?

无归一化的深层网络:
Layer 1: std = 1.00
Layer 2: std = 0.85
Layer 3: std = 0.62
Layer 4: std = 0.38
...
Layer 8: std = 0.016  ← 梯度几乎消失!

直觉:像水龙头装"水压稳定器",无论输入如何变化,输出都保持稳定。


2. RMSNorm vs LayerNorm

特性LayerNormRMSNorm
计算步骤减均值 + 除标准差除 RMS
参数量2d (γ, β)d (γ)
速度快 7-64%
半精度稳定性较差更好

结论:RMSNorm 更简单、更快、更稳定。


3. Pre-LN vs Post-LN

python
# Post-LN(旧方案)
x = x + Attention(x)          # 先计算
x = LayerNorm(x)              # 后归一化

# Pre-LN(现代方案)
x = x + Attention(Norm(x))    # 先归一化
x = x + FFN(Norm(x))          # 再计算

优势

  • ✅ 残差路径更"干净"(梯度直达)
  • ✅ 深层网络(>12 层)更稳定
  • ✅ 学习率容忍度更高

📊 预期结果

完成实验后,你会在 experiments/results/ 看到:

  1. gradient_vanishing.png

    • 无归一化:标准差衰减曲线
    • 有归一化:标准差保持稳定
  2. norm_comparison.png

    • 四条 loss 曲线对比
    • NoNorm 在 500 步后 NaN
    • Pre-LN 最稳定
  3. prenorm_vs_postnorm.png

    • Pre-LN vs Post-LN 的收敛速度对比

✅ 完成检查

学完本模块后,你应该能够:

理论

  • [ ] 用自己的话解释梯度消失问题
  • [ ] 说出 RMSNorm 的数学公式
  • [ ] 解释 Pre-LN 为什么比 Post-LN 好

实践

  • [ ] 从零实现 RMSNorm
  • [ ] 能画出 Pre-LN Transformer Block 的数据流图
  • [ ] 能调试归一化相关的训练问题

直觉

  • [ ] 能用类比解释归一化的作用
  • [ ] 能预测去掉归一化会发生什么
  • [ ] 能解释为什么现代 LLM 选择 Pre-LN + RMSNorm

🔗 相关资源

论文

博客

视频


🎓 下一步

完成本模块后,前往: 👉 02. Position Encoding(位置编码)

学习 Transformer 如何处理位置信息,理解 RoPE 的原理。

基于 MiniMind 项目的学习笔记