TellWorldAI 世界档案
问档案English

首页›原理

原理

批归一化

批归一化把每一层的输入在小批量上重新中心化到零、缩放到单位方差,使深度网络的训练更快、更稳定。

时代 深度学习

是什么

批归一化(batch normalization)是一种用来训练神经网络的技术:它把每一层的输入重新中心化到零,并重新缩放到单位方差,让训练变得更快、更稳定[1]。它不是在整训练集上做统计,而是按维度在一个小批量(mini-batch)上对每一层的激活值做归一化[1]。

怎么工作

训练深度网络时,许多层的参数是一起更新的。前面某几层的参数一动,后面一层收到的输入分布就跟着变,后面这层等于在一个不断移动的目标上学习。批归一化处理的正是这件事:让每一层看到的数据尺度保持稳定。

举一个具体的例子。假设某一层对一小批样本输出激活值,同一维度上每个样本都有一个数。批归一化把这一小批样本在该维度上的数值收集起来,算出均值和方差,再减去均值、除以标准差,这个维度上的输出就被拉回到零附近、尺度约为 1[1]。归一化是按维度、按小批量进行的,用到的统计量来自这一小批样本,而不是整个训练集[1]。它也不是训练前的一次性预处理,而是被写进模型架构里,对每个训练小批量都执行一遍[2]。

从哪来

Sergey Ioffe 和 Christian Szegedy 在 2015 年的论文《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》中提出了这一方法[1]。这篇论文 2015 年 2 月首次提交,它把深层网络难以训练归结为「内部协变量偏移(internal covariate shift)」:前面各层的参数变化时,每一层收到的输入分布也随之改变[2]。作者的对策是把归一化纳入模型架构,对每个训练小批量做归一化[2]。

带来了什么

论文报告说,这样做可以用高得多的学习率,初始化也不必那么小心,同时还起到正则化的作用,某些情况下可以不再需要 dropout[2]。批归一化让网络可以用更大的学习率而不至于出现梯度消失或梯度爆炸[1],也使训练对初始参数和学习率的选择不那么敏感[1]。把它用在一个当时最好的图像分类模型上,达到同样精度所需的训练步数减少了 14 倍[2]。

解释的修正

原论文把好处归因于减小内部协变量偏移[1]。2018 年,Santurkar 等人发表了一组实验,其中包括一个加入噪声的 VGG-16,结果与这一解释相矛盾;他们认为真正的原因是批归一化让损失曲面变得更平滑[1]。方法依然有效,但关于它为什么有效的说法被改写了。

局限与相关方法

批归一化的统计是跨一个批量做的,这使同一批内的样本不再相互独立、也不再同分布,可能让梯度估计变差[1]。与它相关的一种方法是层归一化(layer normalization),由 Ba、Kiros 和 Hinton 在 2016 年提出[1]。

注释与来源

  1. Batch normalizationhttps://en.wikipedia.org/wiki/Batch_normalization
  2. Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shifthttps://arxiv.org/abs/1502.03167

引用本页: 批归一化. TellWorld, https://www.tellworld.net/zh/learn/batch-normalization. 更新于 2026-11-07