批量归一化(Batch Normalization)是一种用于训练神经网络的技术。它的思想是:对网络中的每一层的输入进行归一化,使其均值接近0,方差接近1。
批量归一化的主要作用是:
- 避免内层神经元输出值过大或过小,保持稳定。这可以加速训练速度,避免梯度消失或爆炸。
- 减轻了深层神经网络的初始化依赖问题。不需要精挑细选初始值,模型收敛速度更快。
- 一定程度上有正则化的效果。可以稍微缓解过拟合问题。
批量归一化在训练和测试过程中的计算方式不同:
- 训练过程:使用当前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)进行归一化。