批归一化(Batch Normalization)的动机与实现原理
字数 1232 2025-11-09 02:59:31
批归一化(Batch Normalization)的动机与实现原理
一、问题背景
在深度神经网络训练过程中,每一层的输入分布会随着前一层参数更新而发生变化(称为内部协变量偏移),导致训练过程中需要不断调整参数来适应新的分布,从而降低训练效率。批归一化通过规范化每层的输入分布,缓解了这一问题。
二、批归一化的计算步骤
假设一个批次(batch)的数据为 \(X \in \mathbb{R}^{B \times d}\),其中 \(B\) 为批次大小,\(d\) 为特征维度。批归一化按如下步骤操作:
- 计算批次均值和方差
对每个特征维度 \(j\)(共 \(d\) 维),计算该批次内的均值与方差:
\[ \mu_j = \frac{1}{B} \sum_{i=1}^B X_{i,j}, \quad \sigma_j^2 = \frac{1}{B} \sum_{i=1}^B (X_{i,j} - \mu_j)^2 \]
(实际中方差计算常使用无偏估计,但为与推理一致,训练时多采用批次方差。)
- 规范化
将每个特征归一化为零均值和单位方差:
\[ \hat{X}_{i,j} = \frac{X_{i,j} - \mu_j}{\sqrt{\sigma_j^2 + \epsilon}} \]
其中 \(\epsilon\) 是为防止除零而添加的小常数(如 \(10^{-5}\))。
- 缩放与偏移
引入可学习的参数 \(\gamma_j\) 和 \(\beta_j\)(每个特征维度一组),恢复网络的表示能力:
\[ Y_{i,j} = \gamma_j \hat{X}_{i,j} + \beta_j \]
这一步使网络能够学习是否保留归一化效果(如 \(\gamma_j = \sqrt{\sigma_j^2 + \epsilon}, \beta_j = \mu_j\) 时可还原原始输入)。
三、训练与推理的区别
- 训练时:使用当前批次的统计量(\(\mu_j, \sigma_j^2\))进行归一化,并动态更新全局移动平均值(用于推理)。
- 推理时:使用训练过程中积累的全局均值 \(\mathbb{E}[\mu_j]\) 和方差 \(\mathbb{E}[\sigma_j^2]\)(通常通过指数移动平均计算),避免依赖批次。
四、作用与效果
- 加速收敛:减少内部协变量偏移,允许使用更大的学习率。
- 轻微正则化:批次内样本的噪声使输出带有随机性,类似Dropout的效果。
- 缓解梯度消失:规范化使激活值分布在稳定区间,避免梯度饱和。
五、局限性
- 批次较小时统计量估计不准确(可改用层归一化或实例归一化)。
- 递归神经网络中需谨慎应用(因时间步间统计量动态变化)。
通过以上步骤,批归一化成为深度学习中广泛使用的优化技术之一。