BN层(批归一化) 的核心思想直接源自传统机器学习中的白化(Whitening) 操作。为了降低计算复杂度并保证操作的可微性,BN层对白化进行了近似与简化,在加速网络收敛的同时有效缓解了梯度消失。 [1, 2]
1. 什么是白化?
白化是一种数据预处理技术,包含去均值、方差归一化和去除特征间的相关性三个步骤。 [1]
目的: 将输入数据变换为零均值(E[x]=0)、单位方差(Var[x]=1),且特征之间互不相关。
问题: 白化操作(如PCA白化)计算成本过高(需求解协方差矩阵及求逆),且在每一层网络中计算白化并不处处可微,难以直接嵌入到反向传播中。 [1, 2, 3]
2. BN层对白化的妥协与近似
由于全白化计算量极大,BN层进行了两项关键妥协,以便将其作为网络的一层参与梯度下降: [1, 2]
特征独立假设: 不计算各维度间的协方差矩阵去相关,仅对每一个神经元的特征进行独立的标准化。
批量近似: 使用单个 Batch 内的数据均值和方差来近似整个数据集的分布,而非使用全局数据集。 [1]
3. BN层的计算步骤(以单批次为例)
对于一个输入特征 x,通过以下步骤转化为输出 y: [1, 2]
计算 Batch 均值: \mu_B = \frac{1}{m} \sum_{i=1}^{m} x_i
计算 Batch 方差: \sigma_B^2 = \frac{1}{m} \sum_{i=1}^{m} (x_i - \mu_B)^2
标准化: \hat{x}_i = \frac{x_i - \mu_B}{\sqrt{\sigma_B^2 + \epsilon}} (ε 为防止分母为0的极小数)
缩放与平移(恢复表达能力): y_i = \gamma \hat{x}_i + \beta
注: γ 和 β 为可学习参数。此步骤为了防止标准化强制将特征分布固定,导致网络丧失原有的非线性表达能力。