一句话定义:Batch Normalization(批归一化,简称 BN)是在训练时,对每一个小批量(mini-batch)样本的同一个特征维度,统一做“减均值、除标准差”的标准化,再乘一个可学习的缩放、加一个可学习的偏移,把中间层的数值拉回稳定区间。
打个比方:把一个班学生的考试原始分换算成标准分。每个班自己算平均分和标准差,换算之后,不管卷子难易,分数都能放在同一把尺子上比较。关键也在这里:这个标准分依赖于“同班同学是谁”——班里换了一批人,换算结果就变了。BN 同样如此,它的统计量来自当前这个 batch。
它解决什么问题:深层网络里,前面一层的参数一更新,后面一层看到的输入分布就跟着漂移,后面的层得不停追赶新分布,训练容易震荡、收敛慢。BN 把每层输入稳定在均值 0、方差 1 附近,于是可以用更大的学习率、对参数初始化不那么挑,还因为每个 batch 的统计量自带噪声,顺带有轻微正则化效果。
和 AI 词典:LayerNorm">LayerNorm 的区别:两者都是归一化,区别在于“对谁求平均”。
| 对比项 | Batch Normalization | Layer Normalization |
|---|---|---|
| 统计范围 | 跨样本,在同一特征上算 | 单个样本内部,跨特征算 |
| 依赖 batch | 是,batch 大小和组成影响结果 | 否,单条样本即可算 |
| 常见场景 | CNN 图像任务、batch 较大 | RNN、Transformer、变长序列、小 batch |
| 推理时 | 使用训练时累积的固定统计量 | 每条样本现算,无此问题 |
为什么推理时必须固定统计量:训练时每个 batch 的均值和方差都在变;而推理时可能一次只来一条样本,根本凑不出“一个班”。所以训练过程中会用滑动平均把各 batch 的统计量累积下来,推理时统一用这套固定值,保证同一条输入永远得到同一个输出。这也是训练和推理结果偶有细微差异的来源之一。
对从业者的意义:BN 基本是 CNN 的默认组件,但它对 batch 大小敏感,batch 太小会不稳;多卡训练时通常需要跨卡同步统计量。做在线推理、边缘设备或变长序列时,往往改用 LayerNorm 或 GroupNorm。对普通人:这解释了为什么同一个模型换个批量大小表现会变,也解释了“批量大小”为什么是训练模型时要拧的旋钮之一。具体实现细节和推荐配置,以各框架官方文档为准。
