跳转至

Batch Normalization

批标准化是神经网络中最常用的组件之一。

image-20221208231504504

Batch Normalization 的过程

Batch Normalization 通过将每一层的原始输出进行标准化(减去均值,除以标准差),还可以乘以\(\gamma\)(Scale),再加上\(\beta\)(Offset)。\(\gamma\)\(\beta\)都是超参数,可以用神经网络训练它们。

具体的数学公式如下。

求第\(l\)层的批均值:

\[ \mu=\frac{1}{m} \sum_{i=1}^m Z^{l(i)} \]

求第\(l\)层的批方差:

\[ \sigma^2=\frac{1}{m} \sum_{i=1}^m\left(Z^{l(i)}-\mu\right)^2 \]

批标准化的结果:

\[ \hat{Z}^l=\gamma * \frac{Z^l-\mu}{\sqrt{\sigma^2+\varepsilon}}+\beta \]

经过上述操作,即可将\(Z^l\)转换为\(\hat{Z}^l\)

在批标准化中,可优化的参数是\(\gamma\)\(\beta\)。如果没有\(\gamma\)\(\beta\),则批标准化的运算就为常规的 z-score 标准化。

为什么要加上参数\(\gamma\)\(\beta\)

\(\gamma\)\(\beta\)是可优化的参数,至少可以让它们取值为 \(\sqrt{\sigma^2+\varepsilon}\)\(\mu\),这样就可以将批标准化的结果转换为原始的 \(Z^l\)。这意味着,批标准化的结果不会比不使用批标准化的结果差。

image-20221208231504504

Batch Normalization 的 Python 实现

只要加上

Python
keras.layers.BatchNormalization()

image-20221208232015838

Batch Normalization 的优点

Batch Normalization 可以使神经网络具有以下优点:

加快训练速度

  • 标准化后的值的分布更加相似,因此可以用更大的学习率进行梯度下降,这可以加快训练速度。

image-20221208230551827

对梯度下降的初始值更加不敏感

  • 如果没有标准化,那么梯度下降的初始点选得不一样,迭代的次数可能差别非常大。标准化后,所有的点离最优点的距离都差不多,因此对初始值不敏感。

image-20221208230846371

在一定程度上缓解过拟合问题

标准化会将原始数据的极端值变换为合理的区间,因此模型的输出受训练集的极端值的影响更小,在测试集上的泛化能力更强。

学习视频

评论