【第五章:计算机视觉-项目实战之图像分类实战】2.图像分类实战-(3)批量归一化(Batch Normalization)和权重初始化的重要性
第五章:计算机视觉(Computer Vision)- 项目实战之图像分类
第二部分:图像分类实战
第三节:批量归一化(Batch Normalization)和权重初始化的重要性
1. 引入背景
在深度神经网络训练中,我们常遇到两个核心问题:
训练不稳定:梯度在传播中可能出现消失或爆炸。
收敛缓慢:学习率难以设置,参数更新震荡明显。
两个关键技术有效缓解这些问题:批量归一化(Batch Normalization, BN) 与 权重初始化。
2. 批量归一化(Batch Normalization, BN)
BN 是一种对网络层输入进行归一化的技术,保证数据在每一层都保持稳定分布。
2.1 公式
对一个 mini-batch 的输入 xx,BN 过程如下:
其中:
,
:mini-batch 的均值与方差
ϵ:防止除零的常数
γ,β:可学习的缩放和平移参数
2.2 BN 的优势
缓解梯度消失/爆炸:归一化后激活值保持稳定。
加快收敛:训练更高效。
正则化作用:一定程度上减少过拟合。
2.3 PyTorch 示例
import torch.nn as nn# 定义一个带 BN 的卷积层
conv_bn = nn.Sequential(nn.Conv2d(64, 128, kernel_size=3, padding=1),nn.BatchNorm2d(128),nn.ReLU()
)
3. 权重初始化的重要性
即使有 BN,良好的权重初始化仍然至关重要。
3.1 常见初始化方法
Xavier 初始化(Glorot 初始化)
适合 Sigmoid / Tanh 激活,保持输入输出方差一致。Kaiming 初始化(He 初始化)
适合 ReLU 系列激活,避免方差缩小。正交初始化
通过生成正交矩阵保证特征不相关,适合 RNN 等结构。
3.2 PyTorch 示例
import torch.nn as nn
import torch.nn.init as init# 定义一个卷积层
conv = nn.Conv2d(3, 64, kernel_size=3)# Kaiming 初始化
init.kaiming_normal_(conv.weight, mode='fan_in', nonlinearity='relu')# Xavier 初始化
linear = nn.Linear(256, 128)
init.xavier_uniform_(linear.weight)
4. BN 与权重初始化的关系
权重初始化 → 决定网络初始分布
BN → 保证训练过程中分布稳定
两者结合,使得深度网络能更高效、更稳定地训练。
5. 小结
BN:归一化 + 可学习参数,提升稳定性与收敛速度。
权重初始化:合理初始化防止梯度异常。