欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 八卦 > 【深度学习基础/面试高频问题】常见的归一化

【深度学习基础/面试高频问题】常见的归一化

2025/6/1 15:43:31 来源:https://blog.csdn.net/weixin_43571113/article/details/148005724  浏览:    关键词:【深度学习基础/面试高频问题】常见的归一化

归一化

    • 批量归一化
      • 1)背景知识
      • 2)研究方法
      • 3)结论
      • 4)代码
    • 层归一化
      • 1)背景知识
      • 2)研究方法
      • 3)实验
      • 4)总结
    • 实例归一化
      • 1)背景知识
      • 2)研究方法
    • 组归一化
      • 1)背景知识

批量归一化

  • 参考论文:Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

1)背景知识

深度神经网络的训练复杂性在于,随着训练的进行,每一层的输入分布会因为前一层参数的变化而变化。这种现象称为内部协变量偏移,它导致训练速度变慢,需要较低的学习率和谨慎的参数初始化,并且使得训练具有饱和非线性的模型变得非常困难。文章提出通过归一化层输入来解决这个问题。这个观点后来被证明是错误的,具体请看我之前的文章BN层能够优化训练的真正原因

深度学习在视觉、语音以及许多其他领域极大地推动了技术的发展。随机梯度下降(SGD)已被证明是训练深度网络的有效方法,SGD的变体,如动量(Sutskever等人,2013)和Adagrad(Duchi等人,2011),已被用于实现最先进的性能。SGD优化网络的参数Θ,以最小化损失。
在这里插入图片描述
其中 x_1 … x_N 是训练数据集。在SGD中,训练是分步骤进行的,在每一步中,我们考虑一个大小为 m 的小批量数据 x_1 … x_m。使用小批量数据来近似计算损失函数相对于参数的梯度。
在这里插入图片描述
使用小批量的样本而不是一次一个样本,有几方面的好处首先,小批量上的损失梯度是整个训练集上梯度的一个估计,随着批量大小的增加,这个估计的质量会提高。其次,由于现代计算平台提供的并行计算能力,对一个批量进行计算通常比对单个样本进行 \( m \) 次计算要高效得多。

尽管随机梯度方法简单且有效,但它需要仔细调整模型的超参数,特别是优化中使用的学习率,以及模型参数的初始值。训练过程的复杂性在于,每一层的输入都受到所有前一层参数的影响——随着网络的加深,对网络参数的小改动会放大。

每一层输入分布的变化带来了问题,因为每一层都需要不断地适应新的分布。当一个学习系统的输入分布发生变化时,我们说它经历了协变量偏移(Shimodaira, 2000)。这通常通过领域自适应(Jiang, 2008)来处理。然而,协变量偏移的概念可以扩展到整个学习系统之外,应用到它的各个部分,比如子网络或单层。考虑一个计算如下内容的网络实际上是,输入经过BN层调整后,损失函数会变得更加平滑,方便快速找到最低点。而不是先前凹凹凸凸的损失函数,导致lr过小找不到最低点,lr过大则在最低点两侧反复横跳。和输入是否偏移、分布是否一致稳定并没有多大关系
在这里插入图片描述
其中 F1 和 F2 是任意的变换,参数 Theta_1 和 Theta_2 需要被学习以最小化损失l。学习Theta_2 可以被看作是将输入 x = F_1(u, Theta_1 喂入子网络。
在这里插入图片描述
例如,一个梯度下降步骤。
在这里插入图片描述
例如,对于批量大小为 m 和学习率为 α 的梯度下降步骤,与输入为x 的独立网络 F2 的梯度下降步骤完全等价。因此,使训练更高效的输入分布特性–比如训练数据和测试数据具有相同的分布一也适用于子网络的训练。因此,保持x的分布随时间固定是有益的。这样theta2就不需要重新调整以补偿 x 分布的变化。

以上这些公式,是一个多层网络逐层优化的推导,先对第一层进行优化,优化后将输出当成第二层的输入,然后重复优化步骤。这样证明了前面的观点“随着网络的加深,对网络参数的小改动会放大。”

我们将深度网络训练过程中内部节点分布的变化称为内部协变量偏移。消除内部协变量偏移有望加快训练速度。我们提出了一种新的机制,称为批量归一化(Batch Normalization),它在减少内部协变量偏移方面迈出了重要一步,从而显著加速了深度神经网络的训练。它通过一个归一化步骤来实现,该步骤固定了层输入的均值和方差。批量归一化还有助于改善网络中的梯度流动,通过减少梯度对参数规模或初始值的依赖。这使得我们可以使用更高的学习率而不必担心发散。此外,批量归一化起到了正则化模型的作用,减少了对 Dropout(Srivastava et al., 2014)的需求。最后,批量归一化通过防止网络陷入饱和模式,使得使用饱和非线性激活函数成为可能。

在第 4.2 节中,我们将批量归一化应用于性能最佳的 ImageNet 分类网络,并展示了我们只需要 7% 的训练步骤就能达到其性能,并且可以进一步显著提高其准确率。使用批量归一化训练的这类网络的集成,我们实现了比 ImageNet 分类上已知最佳结果更低的 top-5 错误率。


2)研究方法

Batch Normalization的核心思想是在模型架构中加入归一化步骤,并对每个训练小批量数据执行归一化。具体来说,对于每个小批量数据,计算每个激活函数的均值和方差,然后对每个激活函数进行归一化,使其均值为0,方差为1。此外,引入了一对可学习参数γ和β,用于对归一化后的值进行缩放和偏移,以恢复网络的表示能力

方法里有很多公式推导,比较复杂,这里只看比较使用的伪代码—如何将批量归一化应用于一个神经网络,并进行训练和推理?
在这里插入图片描述
输入:一个具有可训练参数theta的神经网络N,一组激活函数,共有K个激活函数
输出:用于推理的批量归一化网络
1、将原始网络复制到一个新网络N_bn中,这个网络用于训练
2、对于每个激活函数:在新网络N_bn中添加一个批量归一化层BN,将x转换为y;然后将所有原本的输入x变成y作为输入
3、训练网络N_bn,优化参数tehta和批量归一化参数
4、将训练好的网络N_bn用于推理,此时所有参数都被冻结
归一化步骤:
1、对于每个小批量数据,计算小批量数据的均值和方差
2、然后按照以下式子,计算得到归一化后的参数。其中x是初始输入,
在这里插入图片描述
β 是一个可学习的参数,它与另一个可学习的参数 γ 一起,用于对归一化后的数据进行缩放和偏移。具体来说,β 的作用是为归一化后的数据添加一个偏移量,从而恢复网络的表示能力。


3)结论

文章提出的Batch Normalization方法为深度神经网络的训练提供了一种有效的加速机制,并且通过实验验证了其在减少内部协变量偏移、加速训练和提高模型性能方面的有效性。Batch Normalization的引入不仅简化了训练过程,还使得深度网络能够使用饱和非线性激活函数,并且对训练率的增加更加容忍。此外,Batch Normalization在大规模图像分类任务中的应用效果显著,为深度学习领域提供了一种新的、有效的训练策略。


4)代码

import torch
import torch.nn as nn
import torch.nn.functional as Fclass SimpleCNN(nn.Module):def __init__(self):super(SimpleCNN, self).__init__()# 第一层:卷积层 + BN层self.conv1 = nn.Conv2d(1, 32, kernel_size=3, padding=1)self.bn1 = nn.BatchNorm2d(32)  # BN层self.conv2 = nn.Conv2d(32, 64, kernel_size=3, padding=1)self.bn2 = nn.BatchNorm2d(64)  # BN层self.fc1 = nn.Linear(64 * 7 * 7, 128)self.bn3 = nn.BatchNorm1d(128)  # BN层self.fc2 = nn.Linear(128, 10)def forward(self, x):x = self.conv1(x)x = self.bn1(x)  # 应用BN层x = F.relu(x)x = self.conv2(x)x = self.bn2(x)  # 应用BN层x = F.relu(x)x = x.view(-1, 64 * 7 * 7)  # 展平x = self.fc1(x)x = self.bn3(x)  # 应用BN层x = F.relu(x)x = self.fc2(x)return F.log_softmax(x, dim=1)# 创建模型
model = SimpleCNN()
print(model)

层归一化

  • 参考论文:Layer Normalization

训练最先进的深度神经网络在计算上成本很高。一种减少训练时间的方法是对神经元的活动进行归一化。最近引入的一种称为批量归一化(Batch Normalization)的技术,利用一个训练小批次(mini-batch)中神经元的输入总和的分布来计算均值和方差,然后使用这些均值和方差对每个训练样本中该神经元的输入总和进行归一化。BN层显著减少了前馈神经网络的训练时间。然而,批量归一化的效果依赖于小批次的大小,并且如何将其应用于循环神经网络(Recurrent Neural Networks, RNNs)并不明显。

在本文中,我们将批量归一化转化为层归一化(Layer Normalization),通过计算单个训练样本中一层内所有神经元的输入总和来计算用于归一化的均值和方差。与批量归一化一样,我们还为每个神经元提供了一个自适应的偏置和增益,这些偏置和增益在归一化后但非线性激活之前应用。与批量归一化不同的是,层归一化在训练和测试时执行完全相同的计算。此外,它也可以轻松应用于循环神经网络,只需在每个时间步分别计算归一化统计量即可。层归一化在稳定循环网络中的隐藏状态动态方面非常有效。从实证结果来看,与之前发表的技术相比,层归一化可以显著减少训练时间。

1)背景知识

深度神经网络的训练成本高昂,尤其是当网络非常深时。为了减少训练时间,研究者们提出了多种方法,其中一种是通过归一化神经元的活动来加速训练。批量归一化(Batch Normalization)是一种有效的方法,它通过计算每个小批量数据的均值和方差来归一化神经元的输入,从而显著减少了训练时间。然而,批量归一化的效果依赖于小批量的大小,并且在循环神经网络(RNN)中的应用并不直观,因为RNN的输入长度是可变的。

  • BN的缺点
    然而,循环神经网络(Recurrent Neural Network, RNN)中递归神经元的输入总和通常会随着序列长度的变化而变化,因此将批量归一化应用于RNN似乎需要为不同的时间步提供不同的统计量。此外,批量归一化不能应用于在线学习任务,也不能应用于极其庞大的分布式模型——在这些模型中,小批次(minibatch)的大小必须很小。

  • LN的优点
    层归一化(Layer Normalization)与批量归一化不同,该方法直接从隐藏层内神经元的输入总和中估计归一化统计量,因此归一化不会引入训练样本之间的任何新依赖关系。我们证明,层归一化在RNN中表现良好,并且可以改善几种现有RNN模型的训练时间和泛化性能。

2)研究方法

  • 批量归一化的公式

前馈神经网络是从输入模式 x 到输出向量 y 的非线性映射。考虑深度前馈神经网络中的第 l 层隐藏层,设 al是该层中神经元的输入总和的向量表示。输入总和通过权重矩阵 Wl的线性投影和自下而上的输入 hl,计算得出,如下所示:
在这里插入图片描述
其中 f(⋅) 是一个逐元素的非线性函数,wli是第 i 个隐藏单元的输入权重,bli是标量偏置参数。神经网络中的参数使用基于梯度的优化算法进行学习,梯度通过反向传播计算得出。

深度学习的一个挑战是,一层中权重的梯度高度依赖于前一层中神经元的输出,特别是如果这些输出以高度相关的方式变化。批量归一化 [Ioffe and Szegedy, 2015] 被提出以减少这种不希望的“协变量偏移”。该方法对每个隐藏单元的输入总和进行归一化,具体来说,对于第 l 层中的第 i 个输入总和,批量归一化方法根据数据分布下的方差重新缩放输入总和:
在这里插入图片描述
其中
ail是第 l 层中第 i 个隐藏单元的归一化输入总和,gil是在非线性激活函数前缩放归一化激活的增益参数。注意,期望是基于整个训练数据分布的。通常,精确计算方程(2)中的期望是不切实际的,因为它需要使用当前权重集对整个训练数据集进行前向传递。相反,μ 和 σ 使用当前小批次的实证样本进行估计。这限制了小批次的大小,并且很难应用于循环神经网络。

  • 层归一化的公式

我们现在考虑层归一化(Layer Normalization)方法,该方法旨在克服批量归一化(Batch Normalization)的缺点。请注意,一层的输出变化往往会引起下一层输入总和的高度相关变化,特别是使用ReLU单元时,其输出可能会发生很大变化。这表明,通过固定每一层内输入总和的均值和方差,可以减少“协变量偏移”问题。因此,我们按照如下方式计算层归一化的统计量,这些统计量是针对同一层中所有隐藏单元计算的:
在这里插入图片描述

其中 H 表示一层中的隐藏单元数量。公式(2)和公式(3)之间的区别在于,在层归一化中,一层中的所有隐藏单元共享相同的归一化项 μ 和 σ,但不同的训练样本具有不同的归一化项。与批量归一化不同,层归一化不对小批次的大小施加任何限制,并且可以在纯在线模式下使用,小批次大小为1。

  • 层归一化的循环神经网络

最近的序列到序列模型 [Sutskever et al., 2014] 使用紧凑的循环神经网络(RNN)来解决自然语言处理中的序列预测问题。在自然语言处理任务中,不同训练样本的句子长度通常不同。在RNN中处理这种情况很容易,因为每个时间步都使用相同的权重。但是,当我们以显而易见的方式将批量归一化应用于RNN时,我们需要为序列中的每个时间步分别计算和存储统计量。如果测试序列比任何训练序列都要长,这就会成为一个问题。层归一化不存在这样的问题,因为其归一化项仅依赖于当前时间步上一层的输入总和。它还只有一组增益和偏置参数,这些参数在所有时间步上共享。

在标准的RNN中,递归层的输入总和是通过当前输入 xt和前一个隐藏状态向量 ht−1,计算得出的,计算公式为:
在这里插入图片描述
层归一化的递归层使用额外的归一化项重新调整其激活值,类似于公式(3):
在这里插入图片描述

其中 W hh是递归隐藏到隐藏的权重,Wxh是自下而上的输入到隐藏的权重。⊙ 表示两个向量之间的逐元素乘法。b 和 g 定义为与 h
t维度相同的偏置和增益参数。

在标准的RNN中,递归单元的输入总和的平均幅度倾向于在每个时间步增长或缩小,从而导致梯度爆炸或消失。在层归一化的RNN中,归一化项使得对一层的所有输入总和进行重新缩放变得不变,从而导致更稳定的隐藏到隐藏的动态。

3)实验

我们在6个任务上进行了层归一化(Layer Normalization)的实验,重点关注循环神经网络(Recurrent Neural Networks, RNNs):图像-句子排名、问答、上下文语言建模、生成建模、手写序列生成和MNIST分类。除非另有说明,实验中层归一化的默认初始化是将自适应增益设置为1,偏置设置为0。

  • 图像和语言的序嵌入
    在这里插入图片描述

  • 教会机器阅读和理解
    在这里插入图片描述

  • 跳越思想向量

  • 使用DRAW对二值化MNIST进行建模
    在这里插入图片描述

4)总结

论文《Layer Normalization》提出了一种新的归一化方法——层归一化,它通过归一化每一层中的所有神经元的输入来减少内部协变量偏移,从而加速了深度神经网络的训练。实验结果表明,层归一化在多种任务上都取得了显著的效果,尤其是在处理长序列和小批量数据时。这种方法为深度学习领域提供了一种新的、有效的训练策略。

实例归一化

  • 参考文献:Instance Normalization: The Missing Ingredient for Fast Stylization
    这个作者的写作方式让我有点读不懂,感觉是他想到哪写到哪

1)背景知识

Gatys等人(2016)的近期工作提出了一种将一张图像的风格转移到另一张图像上的方法,如图1所示。风格化的图像同时匹配了风格图像和内容图像所选定的统计特征。风格和内容的统计特征均来自一个预训练用于图像分类的深度卷积网络。风格统计特征从较浅的网络层中提取,并在空间位置上进行平均;而内容统计特征则从更深的网络层中提取,并保留空间信息。通过这种方式,风格统计特征捕捉了风格图像的“纹理”,而内容统计特征捕捉了内容图像的“结构”。
在这里插入图片描述

尽管Gatys等人的方法取得了令人惊叹的良好效果,但其计算效率低下。实际上,风格化的图像是通过迭代优化得到的,直到它匹配所需的统计特征为止。在实践中,对一幅512×512大小的图像进行风格化需要花费数分钟的时间。Ulyanov等人(2016)和Johnson等人(2016)的两项近期工作试图通过学习等效的前馈生成器网络来解决这一问题,这些网络可以在单次传递中生成风格化的图像。这两种方法主要在生成器架构的细节上有所不同,生成的结果质量相当;然而,它们都没有达到Gatys等人较慢的基于优化的方法那样好的效果。

在本文中,我们重新审视了Ulyanov等人(2016)的前馈风格化方法,并展示了对生成器架构的一个小改动可以带来显著改善的结果。实际上,这些结果的质量与Gatys等人的慢速优化方法相当,但可以在标准GPU硬件上实时获得。关键思想(第2节)是用实例归一化层替换生成器架构中的批量归一化层,并在测试时保留它们(而不是像批量归一化那样冻结并简化它们)。从直观上讲,归一化过程允许从内容图像中去除特定实例的对比度信息,从而简化了生成过程。在实践中,这导致了大幅改善的图像效果(第3节)。

2)研究方法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
核心主旨总结如下:

  • 现在方法的局限性
    • Gatys等人的方法通过迭代优化实现风格化,但计算效率低,对512×512的图像需要数分钟
    • lyanov等人的方法通过学习前馈生成器网络来快速生成风格化图像,但存在以下问题:
      • 使用过多的训练样本会导致生成结果质量下降
      • 图像边界处会出现伪影,这是由于卷积操作前的零填充引起的。
      • 生成器网络的架构对于学习目标来说可能过于复杂。
  • 核心改进:与批量归一化不同,实例归一化对单个图像进行归一化,而不是对整个批次的图像进行归一化。通过归一化操作去除内容图像中的对比度信息,简化生成过程。
    • 在生成器网络中,用实例归一化层替换批量归一化层,并在测试时保持这些层不变。

组归一化

  • 参考文献:Group Normalization

批量归一化(Batch Normalization,BN)是深度学习发展中的一个里程碑式的技术,使得各种网络能够进行训练。然而,沿着批量维度进行归一化引入了一些问题——当批量大小变小时,BN的误差会迅速增加,这是由于批量统计估计不准确所导致的。这限制了BN在训练更大模型以及将特征迁移到计算机视觉任务(包括检测、分割和视频处理等)中的使用,因为这些任务由于内存限制需要使用较小的批量

在本文中,我们提出了组归一化(Group Normalization,GN)作为BN的一个简单替代方案。GN将通道分成若干组,并在每个组内计算均值和方差以进行归一化。GN的计算与批量大小无关,并且其精度在广泛的批量大小范围内保持稳定在使用批量大小为2的情况下,GN在ImageNet上训练的ResNet-50模型的误差比其BN对应模型低10.6%;当使用典型的批量大小时,GN与BN相当,并且优于其他归一化变体。此外,GN可以自然地从预训练转移到微调。在COCO目标检测和分割任务中,以及在Kinetics视频分类任务中,GN的表现优于基于BN的对应模型,表明GN可以在多种任务中有效地替代强大的BN。GN可以很容易地通过现代库中的几行代码实现。

1)背景知识

批量归一化(Batch Normalization,简称BN) [26] 已经被确立为深度学习中一个非常有效的组件,极大地推动了计算机视觉 [59, 20] 以及其他领域 [54] 的前沿发展。BN通过在(小)批量内计算得到的均值和方差来归一化特征,这一方法已被许多实践证明可以简化优化过程,并使得非常深的网络能够收敛。批量统计的随机不确定性也起到了正则化的作用,有助于提高模型的泛化能力。BN已经成为许多最先进的计算机视觉算法的基础。
在这里插入图片描述
尽管取得了巨大成功,BN也表现出一些由其沿批量维度归一化的独特行为所导致的缺点。特别是,BN需要足够大的批量大小(例如,每个工作进程32个样本 [26, 59, 20])才能正常工作。小批量会导致批量统计估计不准确,而减少BN的批量大小会显著增加模型误差(见图1)。因此,许多最近的模型 [59, 20, 57, 24, 63] 都使用了非平凡的批量大小进行训练,这些大小非常耗费内存。对BN效果的重度依赖反过来又阻止了人们探索更高容量的模型,因为这些模型会受到内存的限制。

在计算机视觉任务中,包括目标检测 [12, 47, 18]、图像分割 [38, 18]、视频识别 [60, 6] 以及其他基于它们的高级系统,对批量大小的限制更加严格。例如,Fast/er R-CNN和Mask R-CNN框架 [12, 47, 18] 因为分辨率较高,使用了1或2张图像的小批量大小,其中BN通过转换为线性层被“冻结” [20];在使用3D卷积的视频分类 [60, 6] 中,时空特征的存在导致了时间长度和批量大小之间的权衡。BN的使用常常迫使这些系统在模型设计和批量大小之间做出妥协
在这里插入图片描述
本文提出了组归一化(Group Normalization,简称GN)作为BN的一个简单替代方案。我们注意到,许多经典特征(如SIFT [39] 和HOG [9])是分组特征,并涉及分组归一化。例如,HOG向量是几个空间单元的结果,每个单元由一个归一化的方向直方图表示。类似地,我们提出GN作为一个将通道分成组并在每个组内归一化特征的层(见图2)。GN不利用批量维度,其计算与批量大小无关。

GN在广泛的批量大小范围内表现非常稳定(见图1)。在使用2个样本的小批量时,GN在ImageNet [50] 上的ResNet-50 [20] 的误差比其BN对应模型低10.6%。使用常规批量大小时,GN与BN相当(差距约为0.5%),并且优于其他归一化变体 [3, 61, 51]。此外,尽管批量大小可能会改变,但GN可以自然地从预训练转移到微调。GN在COCO目标检测和分割 [37] 的Mask R-CNN以及Kinetics视频分类 [30] 的3D卷积网络上显示出比其BN对应模型更好的结果。GN在ImageNet、COCO和Kinetics中的有效性表明,GN是BN的一个有竞争力的替代方案,而BN在这些任务中一直占据主导地位。

已经存在一些方法,如层归一化(Layer Normalization,简称LN) [3] 和实例归一化(Instance Normalization,简称IN) [61](见图2),它们也避免了沿批量维度进行归一化。这些方法在训练序列模型(如RNN/LSTM [49, 22])或生成模型(如GANs [15, 27])方面是有效的。但正如我们将通过实验展示的那样,LN和IN在视觉识别方面的成功有限,而GN则呈现出更好的结果。相反,GN可以替代LN和IN,因此也适用于序列或生成模型。这超出了本文的重点,但它为未来的研究提供了启示。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词