BN、LN、IN、GN的区别

一、Batch Normalization

       卷积神经网络的出现,网络参数量大大减低,使得几十层的深层网络成为可能。然而,在残差网络出现之前,网络的加深使得网络训练变得非常不稳定,甚至出现网络长时间不更新甚至不收敛的现象,同时网络对超参数比较敏感,超参数的微量扰动也会导致网络的训练轨迹完全改变。
       2015年,Google研究人员SergeyIoffe等提出了一种参数标准化(Normalize)的手段,并基于参数标准化设计了BatchNomalization(简写为BatchNorm,或BN)层。BN层的提出,使得网络的超参数的设定更加自由,比如更大的学习率、更随意的网络初始化等,同时网络的收敛速度更快,性能也更好。BN层提出后便广泛地应用在各种深度网络模型上,卷积层、BN层、ReLU层、池化层一度成为网络模型的标配单元块,通过堆叠ConvBN-ReLU-Pooling方式往往可以获得不错的模型性能。
       首先我们来探索,为什么需要对网络中的数据进行标准化操作?这个问题很难从理论层面解释透彻,即使是BN层的作者给出的解释也未必让所有人信服。与其纠结其缘由,不如通过具体问题来感受数据标准化后的好处。
       考虑Sigmoid激活函数和它的梯度分布,如下图10.39所示,Sigmoid函数在x∈[−2, 2] 区间的导数值在[0.1, 0.25] 区间分布;当x > 2或 x < −2 时,Sigmoid函数的导数变得很小,逼近于0,从而容易出现梯度弥散现象。为了避免因为输入较大或者较小而导致Sigmoid函数出现梯度弥散现象,将函数输入 x 标准化映射到 0 附近的一段较小区间将变得非常重要,可以从图10.39看到,通过标准化重映射后,值被映射在0附近,此处的导数值不至于过小,从而不容易出现梯度弥散现象。这是使用标准化手段受益的一个例子。
在这里插入图片描述
       我们再看另一个例子。考虑 2 个输入节点的线性模型,如图 10.40(a)所示:
                                           L L L = a = x 1 w 1 + x 2 w 2 + b x_1w1 + x_2w2 + b x1w1+x2w2+b
讨论如下 2 种输入分布下的优化问题:

i ) i) i) 输入 x 1 ∈ [ 1 , 10 ] x_1\in[1, 10] x1[1,10] x 2 ∈ [ 1 , 10 ] x_2\in[1, 10] x2[1,10]
i i ) ii) ii) 输入 x 1 ∈ [ 1 , 10 ] x_1\in[1, 10] x1[1,10] x 2 ∈ [ 100 , 1000 ] x_2\in[100, 1000] x2[100,1000]

由于模型相对简单,可以绘制出2种 x 1 x_1 x1, x 2 x_2 x2 下,函数的损失等高线图,图10.40(b)是 x 1 ∈ [ 1 , 10 ] x_1\in[1, 10] x1[1,10] x 2 ∈ [ 100 , 1000 ] x_2\in[100, 1000] x2[100,1000] 时的某条优化轨迹线示意图,图10.40©是 x 1 ∈ [ 1 , 10 ] x_1\in[1, 10] x1[1,10] x 2 ∈ [ 1 , 10 ] x_2\in[1, 10] x2[1,10]时的某条优化轨迹线示意图,图中的圆环中心即为全局极值点。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、BN、LN、IN、GN的区别

在这里插入图片描述
一、我们将输入的feature map shape 记为[N, C, H, W], N 表示batch size, C 表示通道数, H 和 W 分别表示高度和宽度, 区别:
i ) i) i) BN 是在 Batch 上,对N、H、W做归一化, BN对较小的batch size 效果不好,BN适用于固定深度的前向神经网络,如CNN,不适用与RNN。
i i ) ii) ii) LN 是在 通道方向上,对 C、H 、W做归一化, 统计每个样本的所有特征的均值和方差 ,主要对RNN效果明显。
i i i ) iii) iii) IN 是在图像像素上, 对H、W做归一化, 统计每个样本的每个通道上特征的均值和方差,用在风格化迁移。
i i i i ) iiii) iiii) GN 先将 C 通道分为若干组, 统计每个样本的通道组内的特征均值和方差

如果把特征图比喻成一摞书,这摞书总共有 N 本,每本有 C 页,每页有 H 行,每行 有W 个字符。

  1. BN 求均值时,相当于把这些书按页码一一对应地加起来(例如第1本书第36页,第2本书第36页…),再除以每个页码下的字符总数:N×H×W,因此可以把 BN 看成求“平均书”的操作(注意这个“平均书”每页只有一个字),求标准差时也是同理。
  2. LN 求均值时,相当于把每一本书的所有字加起来,再除以这本书的字符总数:C×H×W,即求整本书的“平均字”,求标准差时也是同理。
  3. IN 求均值时,相当于把一页书中所有字加起来,再除以该页的总字数:H×W,即求每页书的“平均字”,求标准差时也是同理。
  4. GN 相当于把一本 C 页的书平均分成 G 份,每份成为有 C/G 页的小册子,求每个小册子的“平均字”和字的“标准差”。
### 不同深度学习归一化方法的特点及对比 #### 批量归一化 (Batch Normalization, BN) 批量归一化是一种广泛应用于卷积神经网络的技术,它通过对每一批数据进行标准化来减少内部协变量偏移。这种方法在大、中批处理场景中表现出色,在多种视觉任务上具有良好的泛化能力[^1]。然而,当批次大小较小时,BN 的性能会显著下降,因为此时估计均值和方差的准确性较低。 #### 层归一化 (Layer Normalization, LN) 层归一化是对单一样本的所有特征维度计算均值和标准差来进行规范化的方法。相比 BNLN 对于小批量训练更加稳定,因为它不依赖于批次统计信息。这种特性使得 LN 成为序列建模任务(如自然语言处理)的理想选择[^2]。 #### 实例归一化 (Instance Normalization, IN) 实例归一化针对的是图像风格迁移领域的问题,其中每个样本被独立地按通道进行归一化操作而不考虑其他样本的影响。这有助于保留输入图片的空间结构并突出纹理细节。 #### 组归一化 (Group Normalization, GN) 组归一化将通道划分为若干组并对每一组单独执行归一化过程。这种方式既避免了 BN 中的小批量问题又保持了一定程度上的效率提升;因此适用于各种规模的数据集以及不同的硬件环境下的模型部署需求。 #### 谱归一化 (Spectral Normalization, SN) 谱归一化的目的是控制权重矩阵的最大奇异值以实现 Lipschitz 连续性的约束条件,主要用于生成对抗网络(GANs)的研究当中。通过限制判别器函数的变化范围可以有效缓解模式崩溃现象的发生概率。 #### 幂次归一化 (PowerNorm, PN) 幂次归一化引入了一个额外参数 k 来调整激活值分布形状从而达到更好的优化效果。相比于传统的 BN 或者 LN 方法来说,它可以更灵活地适应不同类型的任务要求。 #### 双重分组归一化 (Biased Group Normalization, BGN) 双重分组归一化扩展了普通的 GN 结构,允许在同一时间应用两个不同类型的归一化策略——即先做全局级别的再局部级别或者反过来顺序也可以互换。这样的设计能够进一步增强表达力同时维持数值稳定性。 #### 条件批量归一化 (Conditional Batch Normalization, CBN) 条件批量归一化允许外部信号(比如类别标签或其他上下文信息)动态调节归一化过程中使用的缩放和平移因子 gamma 和 beta 。这对于构建可解释性强且交互友好的 AI 应用程序非常有用。 #### 频率响应归一化 (Frequency Response Normalization, FRN) 频率响应归一化旨在解决传统归一化技术可能破坏原始信号频域特性的缺陷。具体而言,它是基于傅里叶变换后的幅度谱定义新的归一化准则,进而更好地保护高频成分免受不必要的抑制作用影响。 #### 自适应批量归一化 (Self-Attention Batch Normalization, SaBN) 自适应批量归一化结合注意力机制来自动生成适合当前 mini-batch 特征表示的最佳归一化方案。该方法不仅提高了收敛速度还增强了最终预测精度水平。 ```python import torch.nn as nn class CustomNormalization(nn.Module): def __init__(self, norm_type='bn'): super(CustomNormalization, self).__init__() if norm_type == 'bn': self.norm_layer = nn.BatchNorm2d(num_features=64) elif norm_type == 'ln': self.norm_layer = nn.LayerNorm(normalized_shape=[64]) # Add other normalization types here... def forward(self, x): return self.norm_layer(x) ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值