什么是批量归一化(Batch Normalization)?它的作用是什么?代码举例讲解

批量归一化(Batch Normalization)是一种用于训练神经网络的技术。它的思想是:对网络中的每一层的输入进行归一化,使其均值接近0,方差接近1。

批量归一化的主要作用是:

  1. 避免内层神经元输出值过大或过小,保持稳定。这可以加速训练速度,避免梯度消失或爆炸。
  2. 减轻了深层神经网络的初始化依赖问题。不需要精挑细选初始值,模型收敛速度更快。
  3. 一定程度上有正则化的效果。可以稍微缓解过拟合问题。

批量归一化在训练和测试过程中的计算方式不同:

  • 训练过程:使用当前mini-batch的数据计算均值和方差,进行归一化。
  • 测试过程:使用训练过程计算的均值和方差进行归一化。

代码示例:

python
# 训练过程
bn = torch.nn.BatchNorm1d(num_features) 
output = bn(input)

# 计算均值和方差  
bn.running_mean 
bn.running_var

# 测试过程  
bn = torch.nn.BatchNorm1d(num_features)  
bn.eval()   # 评估模式 
output = bn(input)

在训练过程中,批量归一化层将使用当前mini-batch的数据计算均值和方差,并保存为运行值(running_mean和running_var)。

在测试过程中,批量归一化层将使用训练过程计算的运行值(running_mean和running_var)进行归一化。