Batch Normalization:深层网络训练加速的经典解读

Batch Normalization:深层网络训练加速的经典解读

本文为原创论文解读,主要参考 Dive into Deep Learning 1.0.3 的 Batch Normalization 章节,并结合 Sergey Ioffe 与 Christian Szegedy 在 ICML 2015 发表的论文 Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift。D2L 文档采用 Creative Commons Attribution-ShareAlike 4.0 International License,示例代码采用 modified MIT license;本文仅做结构化原创解读与必要公式、实验图引用,图片来自 D2L 页面并已按顺序做本地备份。

1. 为什么深层网络需要“层内标准化”

在输入数据进入模型前,我们通常会做标准化:减去均值、除以标准差,让各维特征落在比较相近的尺度上。这个朴素处理对优化很重要,因为优化器面对的是一个尺度更稳定的问题。

Batch Normalization 的关键洞察是:既然输入层需要标准化,中间层的激活也可能需要类似处理。深度网络训练时,前面层参数不断变化,后面层看到的输入分布也随之漂移。Ioffe 与 Szegedy 将这种现象称为 internal covariate shift,并提出在网络内部插入一个可训练的标准化层。

从今天的视角看,“减少 internal covariate shift”并不是 BN 成功的完整理论解释。D2L 也特别提醒:BN 的实际价值更稳妥地体现在三件事上:改善数值尺度、允许更激进的学习率、通过小批量统计引入一定噪声从而带来正则化效果。

2. 核心公式:先标准化,再把自由度还给网络

给定一个小批量 (\mathcal{B}),对其中某个待归一化的中间变量 (\mathbf{x}),Batch Normalization 的形式可以写成:

$$
\operatorname{BN}(\mathbf{x}) =
\boldsymbol{\gamma} \odot
\frac{\mathbf{x} - \hat{\boldsymbol{\mu}}{\mathcal{B}}}
{\hat{\boldsymbol{\sigma}}
{\mathcal{B}}}

  • \boldsymbol{\beta}
    $$

其中小批量均值与方差来自当前 batch:

μ ^ B = 1 ∣ B ∣ ∑ x ∈ B x , σ ^ B 2 = 1 ∣ B ∣ ∑ x ∈ B ( x − μ ^ B ) 2 + ϵ \hat{\boldsymbol{\mu}}_{\mathcal{B}} = \frac{1}{|\mathcal{B}|}\sum_{\mathbf{x}\in\mathcal{B}}\mathbf{x}, \qquad \hat{\boldsymbol{\sigma}}_{\mathcal{B}}^2 = \frac{1}{|\mathcal{B}|}\sum_{\mathbf{x}\in\mathcal{B}} (\mathbf{x}-\hat{\boldsymbol{\mu}}_{\mathcal{B}})^2 + \epsilonμ^B=B1xBx,σ^B2=B1xB(xμ^B)2+ϵ

(\epsilon) 是避免除零的稳定项;(\boldsymbol{\gamma}) 与 (\boldsymbol{\beta}) 是可学习参数。这里最容易被忽略的是后半步:BN 并不是强行把所有中间表示固定成零均值、单位方差,而是先把尺度拉回稳定区间,再让网络通过可学习的缩放和平移决定需要恢复多少表达自由度。

3. 放在全连接层和卷积层时有什么不同

在全连接层里,BN 通常作用在仿射变换之后、非线性激活之前:

h = ϕ ( BN ⁡ ( W x + b ) ) \mathbf{h} = \phi(\operatorname{BN}(\mathbf{W}\mathbf{x}+\mathbf{b}))h=ϕ(BN(Wx+b))

直觉上,它稳定的是每个隐藏单元在一个 batch 内的输出尺度。

卷积层里则要考虑空间结构。对形状为 ((N,C,H,W)) 的特征图,BN 通常按通道 (C) 分别维护统计量:同一个通道在 batch 维和空间维上的所有位置共同估计均值与方差。这样做保留了卷积“通道语义一致”的结构假设,也让每个通道有自己的 (\gamma) 与 (\beta)。

这也是为什么框架里常见两个不同接口:BatchNorm1d面向向量或序列特征,BatchNorm2d面向卷积特征图。实现细节不同,但目标一致:让中间激活的尺度不至于在训练中失控。

4. 训练模式和推理模式不是同一件事

BN 最容易踩坑的地方,是训练和推理行为不同。

训练时,BN 使用当前小批量的均值和方差。这样会带来一点随机性:同一张图片和不同样本组成 batch 时,归一化结果可能略有差异。这种噪声一方面让训练目标更复杂,另一方面也可能形成类似 Dropout 的正则化。

推理时则不能依赖当前 batch。线上请求可能一次只来一条样本,或者 batch 构成完全不可控。因此框架会在训练过程中维护移动平均的均值与方差,推理时使用这组全局估计值。这个差异解释了很多实践问题:模型切换到eval()后结果变化、batch size 太小时 BN 不稳定、迁移学习时是否冻结 BN 统计量等。

一个简化的训练逻辑可以写成:

iftraining:mean=batch.mean(axis=reduce_axes)var=batch.var(axis=reduce_axes)running_mean=momentum*running_mean+(1-momentum)*mean running_var=momentum*running_var+(1-momentum)*varelse:mean=running_mean var=running_var y=gamma*(x-mean)/sqrt(var+eps)+beta

这段伪代码省略了张量形状广播,但保留了 BN 的核心机制:batch 统计、移动平均、可学习缩放和平移。

5. D2L 的 LeNet 实验说明了什么

D2L 用 Fashion-MNIST 上的 LeNet 演示了两种路径:先手写一个 BatchNorm 层,再使用框架内置的 BatchNorm 层。实验的重点不是追求某个单点精度,而是观察带 BN 的 LeNet 能在较大学习率下稳定训练。

图 1 对应 D2L 的“from scratch”实现:模型把 BN 插入卷积层和全连接层后,再训练 Fashion-MNIST。它展示的是 BN 不是一个只能依赖框架黑箱的技巧;只要理解均值、方差、移动平均和可学习参数,就可以直接实现。

图 2 则对应框架内置实现。工程上我们通常会选择这种写法,因为它处理了设备、精度、广播、训练/推理状态等边界条件。手写实现适合理解机制,内置实现适合生产训练。

6. 为什么 BN 会成为经典组件

BN 的经典地位来自它解决了一个非常工程化的问题:深层网络能不能更快、更稳定地训起来。它与 ResNet 几乎同时把“训练很深的 CNN”变成常规实践,后来也成为图像模型中的默认组件之一。

不过,BN 并不是没有代价。它依赖 batch 统计,因此对 batch size 敏感;它在分布式训练中可能需要同步 BN;它会让训练和推理路径出现状态差异;在小 batch、序列建模或某些生成模型里,LayerNorm、GroupNorm、RMSNorm 等替代方案可能更合适。

更重要的是,BN 提醒我们区分“有效方法”和“完整解释”。原论文用 internal covariate shift 解释 BN 的作用,这个说法直观、有传播力,但后续研究对它是否构成充分解释提出了质疑。一个更稳健的表述是:BN 通过重标定中间激活、改善优化尺度、引入小批量噪声,使深层网络训练更容易。

7. 实践备忘

  • batch 太小时,BN 统计量噪声会过大,效果可能变差。
  • 推理前要确认模型已切到 eval/inference 模式,否则 BN 会继续使用 batch 统计。
  • 迁移学习时,是否冻结 BN 的 running mean/variance 需要结合目标数据规模判断。
  • 卷积网络中 BN 很常见;Transformer 系列更常用 LayerNorm/RMSNorm。
  • 如果训练不稳定,BN 可以和学习率、初始化、残差连接一起考虑,而不是孤立调参。

参考来源与授权说明

  1. Dive into Deep Learning 1.0.3, “Batch Normalization”, Aston Zhang, Zachary C. Lipton, Mu Li, Alexander J. Smola. 原文链接:https://en.d2l.ai/chapter_convolutional-modern/batch-norm.html
  2. Sergey Ioffe, Christian Szegedy. “Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift.” ICML 2015, PMLR 37:448-456. 论文页面:https://proceedings.mlr.press/v37/ioffe15.html
  3. D2L License Summary:文档内容采用 Creative Commons Attribution-ShareAlike 4.0 International License,示例代码采用 modified MIT license。本文为原创中文解读,保留来源署名和链接;文中使用的 D2L 图像来自上述 D2L 页面并已本地备份。