Batch Normalization/zh
| Article | |
|---|---|
| Topic area | Deep Learning |
| Difficulty | Intermediate |
| Prerequisites | Neural Networks, Backpropagation |
批归一化(通常缩写为 BatchNorm 或 BN)是一种通过对每一层的输入进行归一化来提升深度神经网络速度、稳定性和性能的技术。该技术由 Ioffe 和 Szegedy 于 2015 年提出,已成为大多数现代深度学习架构中的标准组件。
内部协变量偏移
批归一化最初的动机是解决内部协变量偏移——即在训练过程中,随着前层参数的更新,每一层输入的分布会发生变化的现象。这种不断变化的分布迫使每一层持续适应,从而减慢收敛速度,并要求谨慎的初始化和较小的学习率。
尽管内部协变量偏移的确切作用一直存在争议(Santurkar 等人,2018 年认为 BatchNorm 的益处更多源于平滑损失函数的地形),但该技术在实践中的有效性已得到充分确认。
批归一化算法
训练阶段
对于给定层中激活值的小批量 $ \mathcal{B} = \{x_1, \dots, x_m\} $,BatchNorm 按如下步骤进行:
步骤 1. 计算小批量的均值和方差:
- $ \mu_{\mathcal{B}} = \frac{1}{m} \sum_{i=1}^{m} x_i, \qquad \sigma_{\mathcal{B}}^2 = \frac{1}{m} \sum_{i=1}^{m} (x_i - \mu_{\mathcal{B}})^2 $
步骤 2. 归一化:
- $ \hat{x}_i = \frac{x_i - \mu_{\mathcal{B}}}{\sqrt{\sigma_{\mathcal{B}}^2 + \epsilon}} $
其中 $ \epsilon $ 是一个小常数(例如 $ 10^{-5} $),用于保证数值稳定性。
步骤 3. 使用可学习参数 $ \gamma $ 和 $ \beta $ 进行缩放和平移:
- $ y_i = \gamma \hat{x}_i + \beta $
参数 $ \gamma $ 和 $ \beta $ 在训练期间学习得到。如果恒等变换是最优的,它们能够恢复网络表示该变换的能力,从而确保归一化不会降低模型的表达能力。
推理阶段
在推理阶段,单个小批量的统计量并不可靠(输入可能只是一个样本)。BatchNorm 转而使用在训练过程中通过指数移动平均累积的总体均值和方差的运行估计值:
- $ \mu_{\mathrm{running}} \leftarrow (1 - \alpha)\, \mu_{\mathrm{running}} + \alpha\, \mu_{\mathcal{B}} $
- $ \sigma^2_{\mathrm{running}} \leftarrow (1 - \alpha)\, \sigma^2_{\mathrm{running}} + \alpha\, \sigma^2_{\mathcal{B}} $
其中 $ \alpha $ 是动量参数(通常为 0.1)。这些固定的统计量确保推理时输出的确定性。
优势
- 更高的学习率:通过约束激活值的分布,BatchNorm 允许使用更大的步长而不会发散。
- 对初始化的敏感性降低:使用 BatchNorm 的网络对不良权重初始化具有更强的容忍性。
- 正则化效果:小批量统计量引入的噪声起到了轻度正则化的作用,有时可以减少对 Dropout 的需求。
- 更快的收敛速度:训练通常只需较少的 epoch 即可达到给定的性能水平。
放置位置
BatchNorm 通常应用于激活函数之前(如原始论文中所述),尽管一些实践者将其放在激活函数之后。对于卷积层,归一化按通道在空间维度和批量维度上执行。
归一化的替代方法
| 方法 | 归一化范围 | 使用场景 |
|---|---|---|
| Batch Norm | 批量和空间维度,按通道 | 大批量的 CNN |
| Layer Norm | 所有通道和空间维度,按样本 | Transformer、RNN、小批量 |
| Instance Norm | 仅空间维度,按样本和通道 | 风格迁移、图像生成 |
| Group Norm | 通道分组,按样本 | 目标检测、小批量训练 |
层归一化(Ba 等人,2016 年)在单个样本内的所有特征上进行归一化,使其独立于批量大小。这是 Transformer 架构中的标准选择。
组归一化(Wu 和 He,2018 年)将通道划分为多个组,并在每个样本的每个组内进行归一化。它弥合了 Layer Norm 和 Instance Norm 之间的差距,在批量过小以致无法获得可靠批量统计量时表现良好。
局限性
- 在批量极小时性能会下降,因为批量统计量会变得嘈杂。
- 在训练(批量统计量)和推理(运行统计量)行为之间引入了差异。
- 在没有填充或掩码的情况下,不能直接应用于变长序列。
- 在多设备分布式训练中使用运行统计量时需要谨慎处理。
另见
参考文献
- Ioffe, S. and Szegedy, C. (2015). "Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift". ICML.
- Ba, J. L., Kiros, J. R. and Hinton, G. E. (2016). "Layer Normalization". arXiv:1607.06450.
- Wu, Y. and He, K. (2018). "Group Normalization". ECCV.
- Santurkar, S. et al. (2018). "How Does Batch Normalization Help Optimization?". NeurIPS.