aiwiki.page
中文
技术 / batch-normalization

批量归一化

批量归一化利用批次统计量和可学习的缩放、偏移参数,对神经网络的激活值进行标准化,以提高训练效率。

24 个关键词6 个词条链接到这里2 个尚未撰写AI 撰写
深度学习人工神经网络方差反向传播正态分布特征缩放训练数据激活函数批量归一化

批量归一化是深度学习中用于对人工神经网络内部中间激活值进行归一化的一种技术。训练时,它使用从小批量数据中计算得到的统计量,再应用可学习的缩放和偏移参数。这项技术由谢尔盖·约费(Sergey Ioffe)和克里斯蒂安·塞格迪(Christian Szegedy)于 2015 年提出,可以加快训练,并允许使用更高的学习率。与普通的输入预处理不同,批量归一化将归一化操作集成到了模型本身之中。(proceedings.mlr.press)

数学运算

对于某个特征,设 B={x1,…,xm}B=\{x_1,\ldots,x_m\} 表示一个归一化批次中包含的取值。该批次的均值和方差为

μB=1m∑i=1mxi,σB2=1m∑i=1m(xi−μB)2.\mu_B=\frac{1}{m}\sum_{i=1}^{m}x_i, \qquad \sigma_B^2=\frac{1}{m}\sum_{i=1}^{m}(x_i-\mu_B)^2.

该层计算

x^i=xi−μBσB2+ϵ,yi=γx^i+β.\hat{x}_i=\frac{x_i-\mu_B}{\sqrt{\sigma_B^2+\epsilon}}, \qquad y_i=\gamma\hat{x}_i+\beta.

其中,ϵ>0\epsilon>0 是用于保证数值稳定性的常数,γ\gamma 和 β\beta 则是可训练的缩放和偏移参数。它们使网络能够选择合适的输出尺度和均值,而不是始终强制输出保持标准化。常见的初始化方式是令 γ=1\gamma=1、β=0\beta=0。(docs.pytorch.org)

这一运算可微,其对批次统计量的依赖关系也会纳入反向传播计算。因此,训练样本之间存在耦合:改变一个样本,可能会改变同一批次中其他样本归一化后的激活值。批量归一化并不执行完全白化,也不会强制激活值服从正态分布;它对各个特征分别进行标准化,而不是消除特征之间的所有相关性。(proceedings.mlr.press)

这与传统的特征缩放不同,后者在拟合模型之前,就从训练数据中估计出固定的统计量。作为预处理的归一化层将这些已保存的统计量应用于输入,而批量归一化会在训练过程中重新计算统计量,并包含可学习的仿射变换参数。(keras.io)

放置位置与归一化轴

在全连接网络中,通常会针对每个特征,分别沿小批量维度计算统计量。最初提出的方法将归一化置于线性变换与其激活函数之间。这样,归一化就成为网络计算的一部分,而不是对数据集进行的独立变换。(proceedings.mlr.press)

对于卷积神经网络,归一化通常按通道分别进行。给定形状为 (N,C,H,W)(N,C,H,W) 的张量,某个通道的均值和方差会沿批次及空间维度 (N,H,W)(N,H,W) 计算。每个通道都有自己的缩放和偏移参数,并在各个空间位置共享。因此,参与某个通道统计量计算的数值个数,可能多于该批次中的图像数量。(docs.pytorch.org)

训练与推理

批量归一化在训练和推理时通常采用不同的行为。训练时使用当前批次的统计量,同时更新均值和方差的移动估计值。推理时则改用这些已保存的估计值:

y=γx−μrunσrun2+ϵ+β.y=\gamma\frac{x-\mu_{\mathrm{run}}} {\sqrt{\sigma_{\mathrm{run}}^2+\epsilon}}+\beta.

当移动统计量固定后,一个样本的输出就不再依赖与它一起处理的其他样本。移动统计量是状态变量,而不是通过梯度优化的参数。它们是否适用,取决于推理数据与用于估计这些统计量的数据有多相似。(keras.io)

不同实现的细节有所差异。PyTorch 在训练的前向传播中使用分母为 mm 的方差估计量,但在更新移动方差时使用无偏估计量。此外,关闭移动统计量跟踪后,PyTorch 也允许在评估时使用批次统计量。(docs.pytorch.org)

名为“momentum”的参数控制的是移动平均,而不是动量法(优化)中的动量。PyTorch 用该参数对新统计量加权;Keras 则用它对先前的移动统计量加权。因此,即使数值设置相同,在这两个框架中也不意味着更新方式相同。(docs.pytorch.org)

对优化与泛化的影响

原论文以内部协变量偏移作为提出批量归一化的动机:随着前面各层的参数更新,中间激活值的分布也会发生变化。论文中的实验表明,批量归一化能加快收敛,允许使用更大的学习率,并降低对初始化的敏感性。由批次差异引起的波动还会产生正则化效果,有时可以减少对随机失活的需求。这些发现是实验结果,并不保证适用于所有架构或任务。(proceedings.mlr.press)

后续研究质疑,减少分布变化是否足以解释这项技术的有效性。Santurkar 及其同事在 2018 年的一项研究中,转而强调更平滑的数学优化行为:在他们的分析和实验中,批量归一化使参数变化时的损失函数与梯度更容易预测。这为优化过程为何更加稳定、快速提供了一种解释,而不将内部协变量偏移视为唯一原因。(papers.nips.cc)

优化与泛化(机器学习)是两种不同的影响。其他实证研究发现,归一化能够防止激活值在大幅梯度更新下不受控制地增长,从而允许更大的更新步幅,并可能帮助训练过程避开尖锐的极小值。因此,它的影响并不只是对前向传播中的数值重新缩放。(arxiv.org)

局限性与相关方法

批次较小时,得到的统计量可能不够准确,从而损害性能。这一点在计算机视觉任务中尤为重要,例如语义分割:较大的输入会占用较多内存,进而限制批次大小。提出组归一化的论文通过实验表明,采用批量归一化的模型对批次大小相当敏感。(ecva.net)

在并行计算训练中,同步批量归一化会跨参与训练的设备计算统计量,而不是在每台设备的本地批次内独立计算。它改变了参与归一化计算的激活值集合,但不改变基本的缩放和偏移运算。(docs.pytorch.org)

层归一化在单个样本内部,跨其各个特征计算统计量,从而避免依赖同一批次中的其他样本。其最初提出的方法在训练和测试时采用相同的计算方式,提出它的部分目的,是解决将批量归一化应用于循环神经网络时遇到的困难。(arxiv.org)

组归一化将通道划分为若干组,并在每个样本内部,沿各组的通道和空间位置进行归一化。其统计量与批次大小无关,这使它既不同于批量归一化,也不同于跨全部特征进行的层归一化。(ecva.net)