层归一化(Layer Normalization,LayerNorm) 对单个样本、单个位置的隐向量做标准化:减去均值、除以标准差,再用可学习的 (\gamma,\beta) 仿射回去。它不是正则开关(与 Dropout 不同),训练和推理同一套公式。Ba et al.(2016)提出;原版 Transformer / BERT / GPT-2 的默认归一化。
段末注释:归一化(normalization) 指把激活重新标到可计算的尺度;LayerNorm 的统计量沿特征维算,不沿 batch。后文 LN 即 LayerNorm。
系列导读:5050.大模型-算法要点-0
1. 作用
| 层面 | LN 在干什么 |
|---|---|
| 稳尺度 | 残差叠加后激活不会一层层漂到极大/极小 |
| 稳梯度 | 深层反向传播时,输入分布不那么漂 |
| 可学习回放 | (\gamma,\beta) 允许网络「再拉伸、再平移」,不是把表示钉死成标准正态 |
没有 LN(或等价物),几十层残差很容易在训练前期炸掉。它不替代学习率 warmup,也不替代梯度裁剪。
2. 功能 / 机制
对最后一个维度 (d)(hidden size)上的向量 (\mathbf{x}):
[
\mu=\frac{1}{d}\sum_{i=1}^{d}x_i,\qquad
\sigma^{2}=\frac{1}{d}\sum_{i=1}^{d}(x_i-\mu)^{2}
]
[
\mathrm{LN}(\mathbf{x})=\boldsymbol{\gamma}\odot\frac{\mathbf{x}-\mu}{\sqrt{\sigma^{2}+\varepsilon}}+\boldsymbol{\beta}
]
(\boldsymbol{\gamma},\boldsymbol{\beta}) 可学习,初值通常 (1) 与 (0)。(\varepsilon) 防除零,是超参。
社区默认实现:PyTorch nn.LayerNorm(normalized_shape)。model.eval() 不改变 LN 公式(与 BatchNorm 不同:BN 推理用滑动均值,LN 始终用当前向量自己的 (\mu,\sigma))。

插在残差的哪一侧决定深网好不好训:
| 写法 | 公式 | 谁在用 |
|---|---|---|
| Post-LN | (\mathrm{LN}(\mathbf{h}+\mathrm{Sub}(\mathbf{h}))) | 原版 Transformer、ProteinMPNN norm(h+drop(Δ)) |
| Pre-LN | (\mathbf{h}+\mathrm{Sub}(\mathrm{LN}(\mathbf{h}))) | GPT-2 及之后多数 Decoder |
Post-LN 把归一化放在残差相加之后,深了容易不稳,更依赖 warmup。Pre-LN 让子层吃到已归一的输入,残差主干保持「公路」,百层也可训。
3. 默认经验值
| 项 | 常见值 | 备注 |
|---|---|---|
| (\varepsilon) | (10^{-5}) | GPT-2 layer_norm_epsilon;过小在 FP16 易炸 |
| (\gamma,\beta) | 可学习,init (1,0) | 推理必须加载,不是纯超参 |
| 位置 | 现代 LLM Pre-LN | 浅网 / 2017 原论文 Post-LN |
| 与 Dropout | 常写成 (\mathrm{LN}(h+\mathrm{Drop}(\Delta))) | Dropout 打增量,LN 打相加后(Post)或子层前(Pre) |
不要把 (\varepsilon) 训/推设成两套:长期生成会慢慢漂 logits。
4. 整体应用
- 架构:每个 Attention / FFN 子层各一块 LN;词嵌入后有时再加一块。
- 训练:始终参与前向;(\gamma,\beta) 走反向传播。AdamW 常不对 (\gamma,\beta) 做 weight decay。
- 推理:公式不变,无
eval()开关。量化 / 内核融合时要复用同一 (\varepsilon)。
HuggingFace:layer_norm_eps / layer_norm_epsilon。
5. 使用案例
BERT / 原版 Transformer:Post-LN + (\varepsilon=10^{-5})。
GPT-2:转向 Pre-LN,仍用 LN 而非 RMSNorm。
ProteinMPNN:EncLayer / DecLayer 三处 LayerNorm,Post-LN(先残差加 Dropout,再 Norm)。
6. 易混对照
| 名称 | 差在哪 |
|---|---|
| RMSNorm | 不去 (\mu),通常无 (\beta);LLaMA 系默认,见本系列 03 |
| BatchNorm | 沿 batch 统计;推理用滑动平均。序列变长 / 小 batch 的 LLM 不用 |
| Dropout | 训练随机掩码;LN 是确定性仿射 |
参考
- Ba et al., Layer Normalization, 2016.
- Vaswani et al., Attention Is All You Need(Post-LN)。
- 实现:
torch.nn.LayerNorm。