第3章:神经网络核心
训练神经网络之批量归一化
1. 批量归一化的动机
- 内部协变量偏移问题:神经网络训练过程中,各层输入的分布会随参数更新而改变,导致训练效率下降
- 梯度消失/爆炸缓解:通过规范化激活值范围,改善梯度流动
- 允许更高学习率:减少对参数初始化的敏感度,使网络更稳定
2. 技术原理
2.1 基本操作
对于mini-batch :
- 计算均值:
- 计算方差:
- 归一化:
- 缩放平移:(为可学习参数)
2.2 关键特性
- 训练/推理差异:
- 训练时使用batch统计量
- 推理时使用移动平均统计量
- 维度处理:对全连接层按特征维度归一化,对卷积层按通道维度归一化
3. 实现细节
3.1 反向传播公式
需对及归一化操作求导:
3.2 代码示例(PyTorch)
import torch.nn as nn
class Net(nn.Module):
def __init__(self):
super().__init__()
self.fc1 = nn.Linear(784, 256)
self.bn1 = nn.BatchNorm1d(256)
self.fc2 = nn.Linear(256, 10)
def forward(self, x):
x = self.bn1(F.relu(self.fc1(x)))
return self.fc2(x)
4. 变体与改进
| 方法 | 核心改进 | 适用场景 |
|---|---|---|
| Layer Norm | 沿特征维度归一化 | RNN/Transformer |
| Instance Norm | 对每个样本单独归一化 | 风格迁移 |
| Group Norm | 将通道分组后归一化 | 小batch size情况 |
5. 实验效果分析
- CIFAR-10对比实验:
- 无BN:测试准确率78.2%(学习率0.01)
- 有BN:测试准确率84.7%(学习率0.1)
- 收敛速度提升2-3倍(达到相同精度所需的epoch数)
6. 注意事项
- batch size影响:过小的batch size会导致统计量估计不准
- 与dropout的配合:BN可能减少对dropout的依赖
- 特殊网络结构:在RNN中需使用时间步独立的归一化方式
经典论文引用:Ioffe & Szegedy (2015) "Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift" 首次系统提出BN方法
