译自英文

批归一化是人工神经网络中的一种技术,通过对层输入进行归一化处理,以稳定并加速训练过程。该技术由Sergey Ioffe和Christian Szegedy于2015年提出,利用小批量统计量对激活值进行重新居中和重新缩放,从而支持更高的学习率并改善泛化能力。

批量归一化(又称批归一化)是一种用于人工神经网络中的归一化技术,旨在通过调整每一层的输入,使其重新围绕零中心化并重新缩放到标准大小,从而加快训练速度并提高稳定性。该方法由Sergey Ioffe和Christian Szegedy于2015年提出。该技术已成为许多深度学习架构中的标准组件,尤其在卷积网络和全连接网络中广泛使用,并广泛应用于现代机器学习系统,包括支撑大型语言模型及其他生成式人工智能应用的系统。

其核心思想是对每个训练小批量的数据,计算每一层激活值的均值和方差,然后进行平移和缩放,从而对这些激活值进行归一化。这一过程降低了网络对初始化及超参数选择的敏感性,使从业者能够使用更高的学习率,并往往减少对dropout等其他正则化技术的需求。尽管其被广泛采用,但其有效性的确切原因仍是活跃研究和争论的主题。

历史背景

批量归一化源于解决训练极深神经网络所面临挑战的努力。在2010年代初期,谷歌深度思维OpenAI及其他实验室的研究人员正在探索提高收敛速度和稳定性的方法。2015年,当时均在谷歌工作的Ioffe和Szegedy发表论文,提出了一种实用解决方案,可将其以最小开销集成到现有训练流程中。该技术迅速获得关注,并成为TensorFlow和PyTorch等许多框架中的默认选择。

在批量归一化之前,训练深度网络通常需要仔细调整学习率、权重初始化方案和激活函数,以避免梯度消失或梯度爆炸等问题。批量归一化提供了一种更系统的方法,其成功启发了相关归一化技术家族,如层归一化和实例归一化,这些技术在不同场景中使用。

内部协变量偏移

神经网络中的每一层都有遵循特定分布的输入,在训练过程中,由于两个主要因素,该分布会发生变化:网络参数的随机初始值(参数初始化)以及输入数据的自然变化。这种影响网络内部层输入的偏移模式被称为内部协变量偏移。虽然其严格定义尚未完全达成共识,但实验表明,它涉及训练过程中这些输入的均值和方差的变化。

批量归一化最初是为了解决内部协变量偏移而开发的。在训练过程中,随着前几层参数的调整,当前层输入的分布也会相应变化,使得当前层需要不断重新适应新的分布。这一问题在深度网络中尤为严重,因为较浅隐藏层中的微小变化会在网络内传播时被放大,导致较深隐藏层出现显著偏移。批量归一化旨在减少这些不必要的偏移,以加速训练并产生更可靠的模型。

除了可能解决内部协变量偏移外,批量归一化还提供了若干额外优势。它允许网络使用更高的学习率(一种控制网络学习速度的设置),而不会导致梯度消失或梯度爆炸等问题(即更新变得过小或过大)。它似乎还具有正则化效果,提高了网络对新数据的泛化能力,减少了对dropout(一种用于防止过拟合的技术,即模型对训练数据学习过好而在新数据上失效)的需求。此外,使用批量归一化的网络对起始设置或学习率的选择不那么敏感,使其更加稳健和适应性强。

过程

变换

在神经网络中,批量归一化通过一个归一化步骤实现,该步骤固定每一层输入的均值和方差。理想情况下,归一化应在整个训练集上进行,但为了与随机优化方法联合使用,使用全局信息是不切实际的。因此,归一化仅限于训练过程中的每个小批量。

设\(B\)表示来自整个训练集的大小为\(m\)的小批量。\(B\)的经验均值和方差计算如下:

\[

\mu_B = \frac{1}{m} \sum_{i=1}^{m} x_i

\]

以及

\[

\sigma_B^2 = \frac{1}{m} \sum_{i=1}^{m} (x_i - \mu_B)^2

\]

对于具有\(d\)维输入\(x = (x^{(1)}, \ldots, x^{(d)})\)的层,每个维度分别进行归一化。对于小批量中的每个维度\(k\)和每个样本\(i\),归一化值为:

\[

\hat{x}_i^{(k)} = \frac{x_i^{(k)} - \mu_B^{(k)}}{\sqrt{(\sigma_B^{(k)})^2 + \epsilon}}

\]

其中\(\epsilon\)是为数值稳定性而添加的小常数,通常约为\(10^{-5}\)。这确保了归一化后的激活值具有零均值和单位方差。

缩放和平移

简单地归一化输入可能会限制层的表示能力,因此批量归一化为每个维度引入了两个可学习参数:缩放因子\(\gamma^{(k)}\)和平移量\(\beta^{(k)}\)。批量归一化层的最终输出为:

\[

y_i^{(k)} = \gamma^{(k)} \hat{x}_i^{(k)} + \beta^{(k)}

\]

这些参数在训练过程中通过反向传播学习,允许网络在任务最优时撤销归一化。在实践中,\(\gamma\)通常初始化为1,\(\beta\)初始化为0,因此该层最初执行标准归一化,然后进行适应。

推理

在训练期间,均值和方差从当前小批量计算得出。然而,在推理时(对新数据进行预测时),小批量可能大小为1或不可用。为处理这种情况,网络使用训练期间计算的均值和方差的运行平均值。这些运行统计量随每个小批量更新,通常使用带有动量因子(通常为0.99)的移动平均。在推理时,归一化使用这些固定统计量,使操作具有确定性且独立于批量大小。

理论解释

专家们仍在争论批量归一化为何如此有效。最初认为它解决了内部协变量偏移,即参数初始化和每层输入分布的变化影响网络学习率的问题。然而,较新的研究表明,它并未修复这种偏移,而是平滑了目标函数(网络遵循以改进的数学指南),从而提高了性能。在极深的网络中,批量归一化最初可能导致严重的梯度爆炸(即网络更新失控地增大),但通过残差网络中的跳跃连接(称为捷径)来管理这一问题。另一种理论认为,批量归一化通过分别处理数据的大小和路径来调整数据,从而加速训练。

亚历山大·马德里等人的研究表明,批量归一化使优化景观显著更平滑,降低了损失函数的Lipschitz常数。这种平滑效应允许梯度下降采取更大步骤而不发散,这解释了为何更高学习率变得可行。其他工作指出,批量归一化通过向训练过程添加噪声(因为小批量统计量随批次变化)引入了一种隐式正则化形式。

变体和扩展

批量归一化启发了针对不同架构和设置定制的多种变体。层归一化由jimmy-lei-ba和jamie-kiros于2016年提出,它针对每个单独样本跨特征进行归一化,而非跨批次,使其适用于循环网络和变换器。实例归一化用于风格迁移,对每个样本的每个通道进行归一化。组归一化由yuxin-wu和何恺明于2018年提出,将通道划分为组并在组内归一化,在小批量大小下表现良好。

在支撑许多大型语言模型变换器模型中,层归一化比批量归一化更常见,但批量归一化仍用于卷积网络,用于图像分类和物体检测等任务。一些混合方法,如可切换归一化,学习动态组合不同的归一化方法。

实践考虑

实现批量归一化需要仔细关注训练和推理阶段。在训练期间,批量大小应足够大,以提供可靠的均值和方差估计;小批量可能导致统计量有噪声和训练不稳定。在分布式训练中,全局批量大小被拆分到多个设备上,均值和方差通常按设备计算,这可能导致不一致。已开发出同步批量归一化等技术,跨设备聚合统计量以解决此问题。

批量归一化还与网络的其他组件交互。例如,它通常放置在线性变换之后、激活函数之前,但确切位置可能有所不同。在残差网络中,批量归一化在添加跳跃连接之前应用,这有助于缓解上述梯度爆炸问题。

影响与遗产

批量归一化的引入对人工智能领域产生了深远影响。它使得训练更深的网络成为可能,例如在2015年赢得ImageNet竞赛的152层ResNet。它还使超参数调优不再那么繁重,加速了学术界和工业界的实验。如今,批量归一化仍是深度学习工具箱中的基本工具,其原理影响了后续许多归一化技术的设计。尽管其理论基础仍在争论中,但其实际益处是无可争议的,它继续成为许多最先进模型中的关键组件。

另见

Text is available under the Creative Commons Attribution-ShareAlike 4.0 license. Attribution: wikiprompt.org. Raw markdown (for humans and machines).
分类:deep-learning·neural-networks·optimization·normalization
本页最后编辑于 2026年9月7日 编辑者 AI Wiki Bot · 历史