Norm 和模型初始化
Why BN 的两种解释
https://kexue.fm/archives/6992
- 减少的 Internal Covariate Shift,从而稳定乃至加速了训练
- 通过规范化输入,来降低梯度的 L 常数,让 loss 曲面更平滑,加速收敛
-
L 约束,本质是抗干扰性,扰动不敏感

-
梯度下降的公式

-
c. 带入之后,得到结论:要么减小 η,要么减小 L

从上面的推导,可以发现,训练稳定性有两个核心因素:
- 梯度 $\nabla_\theta f(\theta)$ 估计是否正确
- e.g. 激活值、梯度的数值精度溢出;All-reduce 累加数值精度错误
- 学习率是否满足梯度下降的条件
- e.g. 要避免 softmax 退化成 one-hot 导致 loss 曲面不平滑(ill-conditioned)
- e.g. 学习率没有超过 $\eta_{max}$
LLM 中的 Norm
-
Pre-Norm / Post-Norm / DeepNorm
Pre-Norm 是 $x=x+F(Norm(x))$,Post-Norm 是 $x=Norm(x+F(x))$
Deep-Norm 是 $x=Norm(\alpha \cdot x+ \beta \cdot F(x))$,可以去调残差的比例
-
原版 BERT 用的是 Post-Norm,后来 GPT 时代都改成了 Pre-Norm 了。Pre/Post-Norm 都是在 hidden 维度上做的,不涉及分 head
-
Post-Norm 层数很深时梯度反传不回去了
- 导致训练初期,后面的层就在糟糕的表征上猛学。所以一般只能用小学习率和大 warmup 让前面的层也先慢慢学好,一开大学习率就不稳定。同时可以用一些初始化方法,缩小前几层的方差(从而增大梯度),见图中 Post-LN-init

https://arxiv.org/pdf/2203.00555
-
Pre-Norm 残差提供了梯度的 “绿色通道”,但会导致方差按层累计增大
- 方差过大后,$F(LN(x))的方差<<\sigma^2(x)$,导致较深的层趋近于 Identity 映射,网络更新几乎都走残差了。这也是为什么特别深的 Pre-LN 模型把后面的层删去后,影响很小的原因。
- 所以 Pre-LN 需要人为来扩大前几层的方差,从而抑制前几层的梯度。e.g. 图中 Scaled-Embed 就是把 embedding 的输出给 scale up。知乎 zhihu -模型初始化如何影响训练稳定性?

https://arxiv.org/pdf/2312.16903
-
不管 Pre-Norm 还是 Post-Norm,本质是配平浅层和深层的方差/梯度,确保数值稳定
-
检查方法:逐层打印 gradien Norm,把趋势图画出来

Mix-FN:https://arxiv.org/pdf/2412.13795v1
-
标准注意力 vs. QK-Norm
-
为什么标准注意力机制 $QK^T$ 要除以$\sqrt{d}$ ?

https://kexue.fm/archives/8620#NTK参数化
-
Learnable QK-norm
- $softmax(g.\hat Q \hat K^T)V$,其中 $\hat Q$,$\hat K$ 是归一化之后的 tensor,$g$ 是缩放因子
- QK-norm 是分 head 做的,而不是 hidden size 上统一做的
-
Pangu-Ultra 中的 Sandwich Norm + Tiny Init
- 保留残差,Post-LN 进一步抑制 Attention FFN 的输出方差
- Tiny Init 降低整体方差

https://arxiv.org/pdf/2504.07866
-
Layer-Norm 和 RMS Norm 区别
RMS 更快,并且去掉了减去 center 这一步。实验证明几乎影响不大(并且去掉了可能产生的 bias)
Seed Paper
Hyper-connections
https://arxiv.org/abs/2409.19606 , Defa Zhu, Hongzhi Huang, Zihao Huang et al.