← 返回题目列表

小 Batch 训练 CNN 时 BatchNorm 不稳定怎么办?

中等 第 23 / 25 题 更新于 2026/09/19
卷积神经网络机器学习面试题模型训练

简化版

小 Batch 下 BatchNorm 的均值和方差估计噪声大,训练统计与推理滑动统计也更易失配。优先方案包括冻结预训练 BN、跨卡同步 SyncBN,或改用不依赖 batch 的 GroupNorm;具体选择取决于显存、分布式通信和迁移场景。

详细版

  • 不要只看每卡 batch,要区分普通 BN 的本地统计量与 SyncBN 的全局有效 batch。

  • 迁移学习样本少时,冻结 BN 的参数和 running statistics 往往比重新估计更稳。

  • GroupNorm 在每个样本内按通道组归一化,结果不受 batch size 影响。

  • 梯度累积不会增大 BN 的统计 batch,因为多个 micro-batch 仍分别前向。

  • 可用验证曲线、running statistics 漂移和 train/eval 输出差异诊断问题。

完整版教学

一、小批量首先伤害统计估计

BN 假设一个批次能近似当前特征分布。

检测和分割使用大图时,每卡可能只有 1~2 张,样本相关性又高,通道均值与方差会剧烈波动。

波动不仅给梯度加噪声,还会污染用于推理的滑动统计量。

训练模式看似正常、切到 eval 指标骤降,是典型信号。

二、底层机制与关键公式

SyncBN 在数据并行进程间聚合 sum(x)sum(x²),得到更大的统计样本;代价是每个 BN 层都需要通信。

GroupNorm 则把单样本的 C 个通道分 G 组,在组内跨通道和空间求统计。

冻结 BN 表示推理式使用已有 running statistics,并通常不再更新 γ/β

只设置 requires_grad=False 并不一定阻止 running statistics 更新,还需将 BN 保持 eval。

BN statistics domain: N * H * W per channel
GN statistics domain: (C/G) * H * W per sample

gradient accumulation != larger BN statistics batch

三、带数字的推演

4 张 GPU 每卡 2 张图:普通 BN 的有效 N 是 2,SyncBN 聚合后是 8。

若做 4 次梯度累积,优化器等效 batch 是 32,但每次 BN 仍只看到 2;累积不能替代同步统计。

四、方案对比与选择

方案/场景机制或优势主要代价
冻结 BN小数据迁移、已有可靠统计域偏移大时可能不匹配
SyncBN多卡且全局 batch 足够增加通信开销
GroupNormbatch=1/2 的检测分割需选择组数,预训练结构要匹配

五、实际执行流程

发现小 batch -> 比较 train/eval 指标 -> 检查 BN 统计漂移
-> 有可靠预训练统计: 冻结
-> 多卡通信可接受: SyncBN
-> 长期 batch 很小: GroupNorm

六、边界条件与工程代价

GN 的组数必须让通道数可整除,常见 G=32 不是定律;通道很少时可减少组数。

InstanceNorm 相当于更细的按样本通道归一化,可能抹去风格信息。

混合使用不同归一化会让权重迁移复杂。

替换预训练 BN 后最好重新微调,而不是假设 γ/β 可直接代表相同变换。

记忆钩子:先区分“优化 batch”和“统计 batch”:梯度累积只改变前者,SyncBN 才扩大后者。

七、常见误区与追问

  • 误区:梯度累积可以修复小 Batch 的 BN。 累积只延后参数更新,不合并各次前向的统计量。

  • 追问:冻结 BN 要冻结什么? 既要考虑 γ/β 梯度,也要停止 running mean/variance 更新。

  • 误区:SyncBN 没有代价。 逐层跨卡归约会增加通信和同步等待。

  • 追问:GN 为什么与 batch 无关? 它在单个样本内部按通道组和空间位置计算统计。

  • 追问:如何确认是 BN 导致的问题? 比较 train/eval 输出、监控滑动统计,并做冻结 BN 或 GN 的对照实验。

八、加强记忆

先区分“优化 batch”和“统计 batch”:梯度累积只改变前者,SyncBN 才扩大后者。

已有可信统计就冻结,多卡可通信就同步,长期极小 batch 则选 GN,并验证 train/eval 差距。