关于归一化BN IN LN GN相关梳理

  原来写过BN(Batch-Normal)在全连接层当中的使用。在更多情况下,我们处理图像的特征图、特征层时也会用到归一化操作,其中就包括BN,也包括LN,IN以及它们的变式等。这篇来整理一下在卷积池化过程当中,对于特征图feature map的各类归一化方法

  关于BN的具体计算公式、优势和特点之类的还是参考上篇写过的(BN批量归一化操作_TranSad的博客-CSDN博客_bn批量归一化),这篇我还是侧重于整理不同归一化方法在特征图上的计算方式——也就是每个方法到底是归一化哪部分,归一化时特征图大小、通道数以及批次大小等变量到底是怎么参与计算的。

  我们一般把feature map的形状表示为N*C*H*W,其中N是Batch-Size的大小,即一个Batch有N个样本;C是通道数;H、W分别是特征图的高度和宽度。

  于是在理解各类归一化时,我们经常能看见下面这张图:

  我感觉这张图不是很友好。对每一种归一化,用一个三维的图形,就表示了4个变量。就算把归一化的侧重点标记得很明显,真的就方便理解了吗?看了半天我也不知道H和W到底在哪。

  先讲一下怎么理解上面这张图吧:图中的W其实默认为1了(如果一个格子长度是1)。假设图中C方向是左面,N方向是前面,那么整个立方体的最左边那一层就是一个样本;最右边的一整层就是最后一个样本,所以N代表了样本数。我们单独取出最左边的那一层样本来,如果从最前面看,这个样本就是竖着的一列,这列的高*宽就是H*1,它的通道数是C也就是它的厚度。

  接下来,还是用比较正常的图来解释各个对于特征图的归一化吧。

BN(Batch Normalization)

       其实只有BN,会考虑到Batch的个数N,后面的LN,IN等其实都和N没关系了。我们从图中可知:一个批次有N个样本,每个样本有C个通道,那么BN的做法就是:综合一个批次下的所有样本,计算每一个通道的均值和方差(然后做相应的归一化以及加入γ和β进行线性变换)。具体来说,我们有多少通道,就计算多少个均值和方差。

       下图是BN的示意图:

  图中画了一个batch,包含了N=3个样本,每个样本的通道数C=3,特征图高H,宽W。

  那么BN是如何计算的呢?比如对于上图一整个batch来说第一个通道(橙色)的均值就是:(样本1的第一个通道所有值+样本2的第一个通道所有值+………+样本N的第一个通道所有值)/(N*W*H) ;有了第一个通道的均值,第一个通道的方差也是类似。

              第二个通道(绿色)也是类似。……

BN公式对应如下:

  上面公式只是拿通道1举例子,其他通道也都要这样单独做计算。

     (  当我们计算得到均值和方差之后,特征图中的不同位置就按照它们参与计算得到的均值和方差做归一化即可,这点就不多说了,下面的LN,IN都是同理。)

 

  除了BN之外,接下来的几种归一化方法都和batch-size的大小N没有关系了,不管是是LN还是IN,都仅限于对单个样本进行归一化处理。

LN (Layer Normalization)

       LN的计算方式是对每个样本的C、H、W求均值和标准差。下图是LN的示意图:

  此时我们不再需要考虑Batch的大小N,而是直接让每个样本整体做均值和标准差的计算。计算公式对应如下:

       做完初步归一化后,最后再通过γ和β进行变换,省略。

IN (Instance Normalization)

       IN的计算方式就更简单了,对每一个样本的每一个通道的H、W求均值和标准差。IN在进行图像风格转换的时候用的比较多。IN示意图如下:

       公式:

          做完初步归一化后,最后再通过γ和β进行变换,省略。

GN (Group Normalization)

     GN是介于LN和IN之间的一种归一化方式。它对每一个样本的通道数进行分组,同一组的通道一同进行均值和标准差的计算。大概示意图如下:

     上图的意思就是假如一个样本有4个通道,我们每组2两个通道,可以分2组G1和G2,然后按组做归一化。当然,实际情况中特征图可能有几十上百个通道,也可以分成更多个组。

  做完初步归一化后,最后再通过γ和β进行变换,省略。

关于γ和β的补充

  不管是上面哪种归一化方式,通过均值和标准差进行归一化之后,都需要进行缩放变换,也就是乘以γ再加上β,即需要额外学习γ和β两个参数。其中对于BN,IN和GN,γ和β都是维度为通道数C的向量,相当于对初步归一化好的特征图进行每一个“像素点”下的C个通道统一变换;而对于LN,γ和β是特征图的矩阵大小,对初步归一化好的特征图的“每一片”进行变换。

  关于γ和β的补充只是暂定,我还看到一些其他的变换方式和说法,这里只是简单交代一下。

 小结:

  总之,这篇文章重点在于区别和梳理对于特征图的不同归一化方法所计算的区域和侧重点。以后需要其他相关的再做补充吧。

### 不同深度学习归一化方法的特点及对比 #### 批量归一化 (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) ```
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JunanP

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值