LayerNorm 和 BatchNorm 有什么区别?
简化版
LayerNorm 对单个样本在指定特征维上计算均值和方差,不依赖 batch,训练与推理行为一致,因此适合 Transformer 和变长序列。它保留每个样本独立统计,但归一化轴选错会改变语义和参数形状。
详细版
-
Transformer 中通常对每个 token 的 hidden dimension 做归一化。
-
可学习 γ、β 恢复各特征维的尺度与偏置。
-
LN 不使用 running mean/variance,小 batch 和自回归单 token 推理都稳定。
-
Pre-LN 把 LN 放在子层前,深层梯度通常更稳定;Post-LN 行为不同。
-
CNN 的 LayerNorm 若覆盖 C/H/W,会与按通道 BN 有本质差异。
完整版教学
一、归一化域决定哪些数被放在同一标尺
对形状 [B,T,D],标准 Transformer LN 为每个 (b,t) 单独汇总 D 个隐藏维。
一个 token 的统计不会受同 batch 的其他句子或其他 token 改变。
这种独立性适合变长与在线推理,却也会移除该 token 隐向量的整体均值和尺度;γ、β让模型重新学习有用的维度尺度。
二、底层机制与公式
mu_(b,t) = mean_d x[b,t,d]
var_(b,t) = mean_d (x[b,t,d]-mu)^2
y = gamma * (x-mu)/sqrt(var+eps) + beta
三、带数字的推演
某 token 向量 [1,3],均值 2、方差 1,忽略 ε 且 γ=1、β=0 后得到 [-1,1]。
另一个 token [10,12] 也独立变成 [-1,1],不会互相影响。
四、方案对比
| 方案/对象 | 核心特点 | 代价或边界 |
|---|---|---|
| BatchNorm | 跨 batch/空间按通道 | 依赖批统计 |
| LayerNorm | 单样本内按特征 | 适合序列与小 batch |
| RMSNorm | 仅按均方根缩放 | 省去中心化,计算略简 |
五、执行流程
[B,T,D] -> 固定 b,t -> 汇总 D 维 -> 标准化 -> γ/β
下一 token 独立重复;train/eval 使用完全相同公式
六、边界条件与工程代价
PyTorch LayerNorm(normalized_shape) 会归一化最后若干维。
传入 [C,H,W] 与只传 C 的含义完全不同,必须结合张量布局检查。
半精度下方差累加常使用 FP32;ε 太小可能数值不稳,太大又会主导小方差特征的缩放。
记忆钩子:回答 LayerNorm 先画出
[B,T,D],圈定每个 token 的 D 维统计。
七、常见误区与追问
-
误区:LayerNorm 是沿 batch 维归一化。 它对每个样本独立,在指定特征轴统计。
-
追问:为何没有 train/eval 差异? 它不维护跨 batch 的滑动统计量。
-
误区:LN 和 BN 只是名字不同。 统计域、参数语义与小批量行为都不同。
-
追问:Pre-LN 为什么更易训练深网络? 残差主路径更直接,梯度不必在每层末尾先穿过归一化。
-
追问:RMSNorm 少了什么? 它通常不减均值,只按均方根缩放。
八、加强记忆
回答 LayerNorm 先画出 [B,T,D],圈定每个 token 的 D 维统计。
再对比 BN 的跨样本统计和 RMSNorm 的不中心化,归一化轴就不会说错。