← 返回题目列表

LayerNorm 和 BatchNorm 有什么区别?

中等 第 20 / 25 题 更新于 2026/09/19
深度学习机器学习面试题模型训练

简化版

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 的不中心化,归一化轴就不会说错。