Ultralytics YOLO27: 加入候补名单。
获取 YOLO 许可
返回 Ultralytics 术语表

Batch Normalization

批归一化会对小批次中的每个通道进行标准化,再用学习得到的参数重新缩放。本文介绍相关数学原理、推理时的行为和局限。

批归一化(BatchNorm)是一种神经网络层,它使用当前小批次的均值和方差对输入的每个通道进行归一化,然后用两个可学习参数重新缩放结果。Sergey Ioffe 和 Christian Szegedy 于2015 年提出了它,让他们的 Inception 图像分类器仅用原来十四分之一的训练步数就达到相同的准确率。BatchNorm 支持使用更高的学习率,降低训练对权重初始化的敏感性,并成为卷积神经网络(CNNs)(如 ResNet)等模型的标准组件。

批归一化的工作原理#

对于卷积层,BatchNorm 会为每个通道计算一个均值 μ 和一个方差 σ²,统计范围涵盖批次中的每张图像和每个空间位置。每个激活值 x 随后经过两个步骤:

  1. 归一化:x̂ = (x − μ) / √(σ² + ε),其中较小的 ε(在 PyTorch 中默认为 1e-5)可避免除以零。
  2. 缩放与平移:y = γ·x̂ + β,其中 γ 和 β 是按通道学习的参数。它们让网络能够恢复适合下一层的均值和离散程度,包括完全撤销归一化。

BatchNorm 通常位于卷积层和激活函数之间。由于 β 已经添加了按通道的偏移量,前一卷积层的偏置是多余的,通常会禁用。

训练与推理#

训练期间,每次前向传播都会将批次统计量的指数移动平均值更新到运行均值和运行方差中。PyTorch 的 BatchNorm2d 默认会朝每个新批次的统计量移动 10%(momentum=0.1)。推理时,该层会改用这些运行平均值进行归一化,因此单张图像的预测结果不再取决于同一批次中的其他图像。model.train() 和 model.eval() 可以在这两种行为之间切换:

import torch

torch.manual_seed(0)
bn = torch.nn.BatchNorm2d(num_features=3)

# A batch of 8 three-channel feature maps with mean 5 and standard deviation 2
x = 5 + 2 * torch.randn(8, 3, 16, 16)

# Training mode normalizes with this batch's per-channel mean and variance
out = bn(x)
print(f"train mode: output mean {out.mean():.3f}, std {out.std():.3f}")

# The same call nudges the running averages 10% of the way toward the batch statistics
print(f"running mean {bn.running_mean[0]:.3f}, running var {bn.running_var[0]:.3f}")

# Eval mode normalizes with the running averages instead of the batch statistics
bn.eval()
out = bn(x)
print(f"eval mode:  output mean {out.mean():.3f}, std {out.std():.3f}")

在训练模式下,尽管输入均值为 5,输出均值仍为 0.000,标准差为 1.000。处理一个批次后,运行均值仅从 0 移至 0.496,运行方差从 1 移至 1.294,因此评估模式下的输出均值为 3.920。运行平均值需要几十个批次才能收敛;如果模型处于错误模式,或统计量尚未稳定就进行评估,其得分会远低于真实准确率。

推理时,BatchNorm 是固定的按通道线性变换,因此可以折叠到前面的卷积层中:卷积权重乘以 γ/√(σ² + ε),偏置变为 β − γμ/√(σ² + ε)。YOLO26中的标准卷积模块由无偏置卷积、BatchNorm 和 SiLU 激活组成;Ultralytics 会在预测和导出之前,将每个 BatchNorm 层融合到对应的卷积层中,从而移除该层,同时保持输出不变。

批归一化为何有效#

原论文认为,BatchNorm 的优势来自减少内部协变量偏移,即前面各层更新时每层输入分布发生的变化。后来的实验在 BatchNorm 层后注入随机分布偏移,发现训练几乎不受影响,并将其优势归因于更平滑的损失曲面和更可预测的梯度;这让优化器能够采取更大、更稳定的步长。让激活前的值保持接近零均值和单位方差,也能避免饱和激活函数落入平坦区域,从而有助于缓解梯度消失。

由于每个样本都使用随机抽取批次的统计量进行归一化,BatchNorm 还会引入噪声,起到温和的正则化作用;原论文报告称,在某些情况下,它可以免去使用 dropout。

局限性#

  • 小批次:每个设备上的图像数量较少时,批次统计量会变得嘈杂。每个 GPU 处理 2 张图像时,组归一化(在每张图像内部按通道组计算统计量)在 ResNet-50 上的 ImageNet 错误率比 BatchNorm 低 10.6%。
  • 多 GPU 训练:除非将层转换为 SyncBatchNorm,否则每个 GPU 都会使用批次中分配给自己的部分进行归一化。SyncBatchNorm 会跨设备汇总统计量,但需要额外的通信开销。
  • 序列模型:可变长度序列与依赖批次的统计量不太匹配,因此 Transformer 使用层归一化。
  • 数据归一化:在预处理期间对原始输入进行一次缩放,例如将像素值除以 255。BatchNorm 则会在每个训练步骤对每一层的中间激活值进行归一化。
  • 层归一化:对每个样本自身的特征进行归一化,因此训练和推理时的行为完全一致,也不受批次大小影响。RMSNorm 是一种不减去均值的简化变体,常用于大语言模型。
  • 组归一化:将每张图像的通道拆分为多个组,并在每组内进行归一化,适用于使用小批次训练的检测和分割模型。
  • 实例归一化:分别对每张图像的每个通道进行归一化,从而去除图像各自的对比度。无论在训练还是测试时,将 BatchNorm 换成实例归一化,都显著提升了快速神经风格迁移的质量。

探索解决方案

体育领域的计算机视觉

体育领域的计算机视觉

了解 Ultralytics YOLO 如何通过球员和球追踪、表现分析、教练洞察及运动员康复,推动体育视觉技术的发展。
了解详情
航空影像计算机视觉

航空影像计算机视觉

使用 Ultralytics YOLO 将无人机和航空影像转化为农业、水产养殖、保护工作和地理空间分析的实时洞察。
了解详情
航空航天中的计算机视觉

航空航天中的计算机视觉

使用 Ultralytics YOLO 将计算机视觉应用于航空航天领域,包括飞机检查、跑道 FOD 检测、机场地面作业和复合材料缺陷检测。
了解详情
安防领域的计算机视觉

安防领域的计算机视觉

使用 Ultralytics YOLO 模型守护每个场所。视觉 AI 可用于周界监控、威胁检测、车牌识别和工作场所安全。
了解详情
机器人领域的计算机视觉

机器人领域的计算机视觉

使用 Ultralytics YOLO 模型提升智能机器的能力。机器人领域的视觉 AI 可用于自主导航、感知、目标跟踪和实时控制。
了解详情
物流中的计算机视觉

物流中的计算机视觉

借助 Ultralytics YOLO 模型优化物流流程。视觉 AI 可用于包裹检查、分拣、车辆跟踪和仓库安全实时监控。
了解详情
零售中的计算机视觉

零售中的计算机视觉

借助 Ultralytics YOLO 模型重新构想零售。视觉 AI 可用于库存跟踪、货架监控、排队管理和更深入的客户洞察。
了解详情
医疗领域的计算机视觉

医疗领域的计算机视觉

借助 Ultralytics YOLO 模型构建医疗解决方案。医疗领域的视觉 AI 可加快医学影像处理、优化诊断并监测患者。
了解详情
制造业中的计算机视觉

制造业中的计算机视觉

利用 Ultralytics YOLO 模型优化制造流程。视觉 AI 可用于质量控制、缺陷检测、个人防护装备合规检查和装配线自动化。
了解详情
汽车领域的计算机视觉

汽车领域的计算机视觉

利用 Ultralytics YOLO 模型在汽车领域应用计算机视觉。视觉 AI 可提升道路安全、驾驶辅助和车辆自动化水平,让道路更智能。
了解详情
农业中的计算机视觉

农业中的计算机视觉

借助 Ultralytics YOLO 模型,将视觉 AI 引入智慧农业。为作物监测、牲畜追踪和精准农业提供支持,从而提高产量并实现更智能的生产。
了解详情

让我们携手构建 AI 的未来!

开启你的旅程,迎接机器学习的未来