Batch Normalization
Batch Normalization让训练更稳
批归一化(Batch Normalization,简称 BN)是深度神经网络训练中对 mini-batch 各特征维度做标准化的技术,由 Google 研究员 Sergey Ioffe 与 Christian Szegedy 于 2015 年提出,能显著加速收敛并提升训练稳定性,成为现代 CNN 的标配组件。
概述
批归一化的核心目标是稳定每层的输入分布,使深层网络可用更大学习率更快收敛。
- 归一化位置:通常插在线性变换之后、激活函数之前(也有放激活后的变体)
- 可学习参数:每个特征维度各有一对 γ(缩放)和 β(偏移),确保归一化不限制模型表达能力
- 官方动机:论文将 BN 归因于缓解「内部协变量偏移」(Internal Covariate Shift),即前层参数更新导致后层输入分布持续漂移
- 后续质疑:Santurkar 等(2018)研究表明 BN 的收益更可能来自对损失曲面的平滑效果,而非直接消除分布偏移
- 实测效果:原论文报告在 ImageNet 分类任务上以约 1/14 的训练步数达到相同精度
工作原理
BN 在训练与推理两个阶段行为不同,需明确区分。
- 训练阶段:对当前 mini-batch 计算每个特征维度的均值 μ 和方差 σ²,标准化公式为 x̂ = (x − μ) / √(σ² + ε)
- 仿射变换:标准化后经 y = γx̂ + β 恢复任意分布,γ 与 β 均通过反向传播学习
- 推理阶段:使用训练时以滑动平均方式积累的全局运行均值与方差,推理结果与 batch 大小无关
- 卷积网络中的统计维度:在批次和空间(H×W)维度共同统计,每个通道各有独立的 (γ, β)
- ε 的作用:分母加极小常数(如 1e-5)防止方差为零时除零崩溃
主要归一化变体
BN 沿批次维度统计,由此衍生出多种针对不同场景的归一化方案。
- Layer Normalization(LN):在单样本的特征维度上归一化,与 batch 大小无关,是 Transformer / BERT / GPT 系列的标配
- Instance Normalization(IN):在单样本单通道内归一化,常用于风格迁移任务
- Group Normalization(GN):将通道分组后在组内归一化,专为小 batch 场景设计,在目标检测(Mask R-CNN 等)中广泛使用
- RMSNorm:去掉均值中心化步骤,只做方差归一化,LLaMA 系列采用此方案以降低计算开销
应用场景
BN 在图像视觉任务中是标准配置,但在序列模型中已被 LN 广泛取代。
- 图像分类:ResNet、InceptionV3、EfficientNet 等主流骨干网络均大量使用 BN
- 目标检测与分割:Faster R-CNN、YOLO 系列训练时依赖 BN;小 batch 场景(如 2 张图/GPU)改用 GN
- 生成对抗网络:DCGAN 的生成器中使用 BN;判别器一般改用 Spectral Normalization 以提升稳定性
- 不适用场景:Transformer 类语言模型(BERT、GPT 全系列)和 RNN 默认使用 LN 而非 BN
局限与常见误区
BN 存在若干实践中易踩坑的限制。
- 小 batch 失效:batch size 过小(如 ≤ 4)时单批统计噪声极大,训练不稳定,应换用 GN 或 LN
- 不适合 RNN:不同时间步特性差异大,BN 在时间维度统计意义不明确,序列模型通常用 LN
- 训练/推理模式切换:推理时必须切换到 eval 模式使用全局统计量,否则结果随 batch 构成抖动
- 误区——BN 即正则化:BN 的正则化副作用(可减少对 Dropout 的依赖)只是副产物,不能替代专用正则化策略
- 误区——BN 越多越好:在 Transformer 中强插 BN 往往损害性能,归一化方式须与架构匹配
发展脉络
BN 提出后迅速成为深度学习标配,并持续催生新的归一化研究。
- 2015:Ioffe 与 Szegedy 在 arXiv 发布 BN 论文(1502.03167),同年于 ICML 2015 正式发表;ResNet 将 BN 纳入标准残差块
- 2016:Ba 等人提出 Layer Normalization,为 Transformer 类模型铺路
- 2017:Transformer(「Attention Is All You Need」)采用 LN,BN 在 NLP 领域开始淡出
- 2018:Wu 与 He 提出 Group Normalization,解决小 batch 目标检测场景的局限;Santurkar 等质疑内部协变量偏移理论,提出平滑损失曲面才是关键
- 2020 年后:LLaMA 等大语言模型普遍采用 RMSNorm,BN 在 CNN 图像任务中仍是主流
常见误解
日常交流中容易听到的简化说法,未必准确,但能帮助理解误解从何而来。
- 「让训练更稳」
- 「深度学习必修课」
- 「跟 Batch Normalization 是一回事吗」
相关术语
和本术语关联紧密的其他词条,便于串联理解。
🎯 考点练习
含该术语的高频面试题,含标准答案与追问。
- 高级概念查看详解 →
在 PyTorch 中创建神经网络模型的步骤有哪些?
PyTorch 建模范式:定义 nn.Module 子类实现 forward → 准备 DataLoader → 选 loss 和 optimizer → 写训练循环(zero_grad、forward、backward、step)→ 验证与保存 checkpoint。
- 高级概念查看详解 →
深度学习中的「深度」指什么?
深度学习中的 depth 指网络堆叠的可学习层数;层数越多表示能力越强,但也带来梯度传播与优化困难,需配合残差连接、归一化等技术才能稳定训练。
- 中级概念查看详解 →
Dropout 层如何帮助防止过拟合?
Dropout 训练时以概率 p 随机将神经元输出置零,迫使网络不依赖少数神经元,等价于训练指数级子网络集成,从而减轻过拟合。
- 中级概念查看详解 →
PyTorch 张量的 .grad 属性有什么作用?
PyTorch 中 .grad 属性保存该张量对损失的偏导数,反向传播后优化器读取 .grad 更新参数;非叶子节点梯度默认不保留,训练前需 zero_grad 清零。
延伸阅读
从知识库精选 2 篇文章,帮助深入理解该术语。
外部参考
维基百科:查看「Batch Normalization」词条本页内容为本站原创撰写;维基百科链接仅作延伸参考。
