批归一化(Batch Normalization,BN) 是一种用于加速神经网络训练并提高模型稳定性的方法,通过在每一层对神经网络中的激活值进行标准化,使得每一层的输入保持在一个稳定的分布中,从而缓解梯度消失和梯度爆炸的问题,并加快训练过程。
1. 为什么需要批归一化?
在神经网络训练过程中,尤其是深度神经网络,层与层之间的参数不断更新,这导致网络中的每一层的输入分布会发生变化。这种现象被称为内部协变量偏移(Internal Covariate Shift)。它会导致训练变得更加困难,因为每一层的输入分布不稳定,会使得模型需要不断适应新的数据分布,从而影响模型的训练速度。
为了解决这个问题,批归一化被引入。批归一化通过将每一层的激活值标准化为均值为 0、方差为 1 的分布,使得每一层的输入数据保持相对稳定的分布,从而使得网络可以更快地学习和收敛。
2. 批归一化的基本步骤
批归一化的过程主要包括以下几个步骤:
-
计算批次的均值:
对于每一层的输入(例如激活值) x x x,计算其在当前 mini-batch 中的均值:
μ B = 1 m ∑ i = 1 m x i \mu_B = \frac{1}{m} \sum_{i=1}^{m} x_i μB=m1i=1∑mxi
其中 m m m 是 mini-batch 的样本数量, x i x_i xi 是第 i i i 个样本的输入。 -
计算批次的方差:
接下来计算 mini-batch 中输入的方差:
σ B 2 = 1 m ∑ i = 1 m ( x i − μ B ) 2 \sigma_B^2 = \frac{1}{m} \sum_{i=1}^{m} (x_i - \mu_B)^2 σB2=