在大屏或电脑上体验更佳——动画和操作区域更宽敞。
输入

批归一化

批归一化(BatchNorm)用训练统计组的均值和方差标准化每个隐藏通道,再施加可学习的缩放 γ 和平移 β。本课六层网络在第 50 轮的激活峰值从 64.35 降至 9.15,留出 BCE 从 0.6911 降至 0.0985。先看单个通道的变换,再固定每次优化更新为 32 个样本,只改变统计组大小。

逐步演示:一个通道的四次变换

全连接层的一个通道在统计组中有 Nstats 个值 z₁, …, zᴺ。下标 B 表示批统计量:

μᴮ = (1 / Nstats) Σᵢ zᵢ

σ²ᴮ = (1 / Nstats) Σᵢ (zᵢ − μᴮ)²

这里方差除以 Nstats。标准化和仿射变换为:

ẑᵢ = (zᵢ − μᴮ) / √(σ²ᴮ + ε)

yᵢ = γẑᵢ + β

本课 ε = 10⁻⁵。通道值相同时方差为零,ε 防止除零;反向传播也用到这个分母。

动画选择第 4 层、第 1 个通道,每个点代表统计组中的一个样本。减均值把点云中心移到零;除以标准差调整分布宽度,使方差接近一。γ = 1、β = 0 从恒等仿射变换开始,与其他参数一起学习。最后才经过 ReLU。

沿哪个轴统计

全连接层的每个特征通道各有一组 μᴮ、σ²ᴮ、γ、β,均值和方差沿统计组的样本轴计算。对每个样本跨通道归一化属于层归一化等方法;把所有层、所有通道混成一个均值也是另一种操作。“归一化激活”必须说明统计轴。

训练与评估的统计量

训练用当前统计组的均值和方差变换该组。本课为控制变量,每个含 32 个样本的优化批只更新一次运行统计量,使用完整批的统计量,动量为 0.9:

μrun ← 0.9 μrun + 0.1 μopt(32)

方差用相同的更新形式。μopt(32) 来自全部 32 个样本,不是某个较小统计组。

评估使用运行均值和方差,不从一个留出样本重新估计,也不依赖同批评估的其他样本。固定模型和输入时,普通推理因此可重复。若评估仍用即时组统计量,测到的就不是部署时的推理过程。

六层网络对照实验

两条轨道都用 2 → 12 × 6 → 1 ReLU 网络、64 个固定双月训练点和 400 个留出点。输出为 sigmoid,损失为二元交叉熵。小批量 SGD 每次更新用 32 个样本。初始权重来自固定高斯样本,标准差为 2.5 / √fan_in,让六层网络对激活尺度敏感。

默认优化批 B = 32、统计组 Nstats = 32、学习率 η = 0.1。第 50 轮,无归一化轨道的最大隐藏层原始预激活达到 64.35,留出 BCE 为 0.6911,分类几乎停滞。BatchNorm 轨道对应值为 9.15 和 0.0985。

第 300 轮,BatchNorm 留出 BCE 为 0.0572,准确率 98%。无归一化轨道后来恢复,BCE 达到 0.0901;第 50 轮仍能揭示此前的不稳定过程。这里改变的是训练轨迹,不只是终点分数。初始化、残差连接、优化器、激活函数、数据尺度和架构都会影响结果,不能据此断言没有 BatchNorm 必然发散。

统计组大小为何重要

只有两个样本时,均值和方差估计容易波动。动画从固定通道池抽取八组固定随机样本;Nstats = 2 的均值范围比 32 宽。

训练比较固定优化批为 32,每轮仍更新两次,只改变 BatchNorm 统计组。第 300 轮,Nstats = 32 的留出 BCE 为 0.0572、准确率 98%;Nstats = 2 为 2.3795、37.5%。这样隔离了统计估计粒度,未混入优化批缩小带来的梯度噪声和更新次数变化。

32 不是通用门槛。这个结果说明,统计组太小会让训练变换不稳定。难以获得代表性统计组的任务,可考虑沿其他轴估计的层归一化或组归一化。

控制项

统计组可选 2、8、32,只让 BatchNorm 轨道在训练时把 32 个原始激活划成小组。优化批始终为 32,每轮两次更新。

学习率可选 0.003、0.03、0.1,两条轨道使用相同值。“Slow steps”预设固定 Nstats = 32,将 η 降至 0.003;过程稳定,但在 300 轮预算内留出 BCE 只降到 0.4586。稳定与收敛速度是两件事。

边界情况

  • 常量通道:方差为零,ε 保证结果有限。标准化后全为零,再应用 γ、β。
  • 单样本统计组:方差总为零,中心化信号消失。公式可算,但不适合本课这一层的训练,所以从 Nstats = 2 开始。
  • 两个样本:仍有信号,但本次估计波动使留出准确率低于随机猜测基线。
  • 尚未训练的运行统计量:刚初始化就切到评估,不能获得数据分布。需先积累有代表性的运行估计。

常见错误

  • 只减均值,漏掉方差缩放和可学习的 γ、β。
  • 跨错轴计算;全连接 BatchNorm 对每个通道沿样本轴统计。
  • 省略 ε,使常量或近常量通道的分母失效。
  • 推理用当前批统计量,让预测依赖同行样本。
  • 混淆优化批与统计组,或认为两个样本的估计既然有定义就足够可靠。
  • 把 BatchNorm 当成通用补救。它会影响优化,也常有正则化作用,但不能修复所有架构、数据、学习率和批设置。
  • 用不同数据、初始化、优化器、学习率或预算的结果解释单一机制。

模型范围

本课使用一个固定种子的合成双月数据、小型全连接网络、sigmoid/BCE 和 32 样本 SGD。在每个隐藏仿射层后、ReLU 前放 BatchNorm。训练可用虚拟统计组;运行统计量仍从 32 个原始激活更新一次,避免引入第二个变量。

输入、初始参数、运行统计量和提交后的参数量化到小数点后 11 位,使浏览器与 Node 的长轨迹一致。指标每十轮采样,并保留第 10、50、300 轮的精确检查点。实际系统还可能使用卷积或同步 BatchNorm、混合精度、不同动量约定、残差连接,以及微调时冻结的统计量。本课用于研究训练统计边界,不代表每个模型都应加入 BatchNorm。