第五章:计算机视觉(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 常见初始化方法

  1. Xavier 初始化(Glorot 初始化)
    适合 Sigmoid / Tanh 激活,保持输入输出方差一致。

  2. Kaiming 初始化(He 初始化)
    适合 ReLU 系列激活,避免方差缩小。

  3. 正交初始化
    通过生成正交矩阵保证特征不相关,适合 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:归一化 + 可学习参数,提升稳定性与收敛速度。

  • 权重初始化:合理初始化防止梯度异常。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐