PyTorch学习之归一化层(BatchNorm、LayerNorm、InstanceNorm、GroupNorm)

博客原文链接为https://blog.youkuaiyun.com/shanglianlm/article/details/85075706 ,标签涉及normalization和pytorch,推测内容与这两项信息技术相关。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


BN,LN,IN,GN从学术化上解释差异:
BatchNorm:batch方向做归一化,算NHW的均值,对小batchsize效果不好;BN主要缺点是对batchsize的大小比较敏感,由于每次计算均值和方差是在一个batch上,所以如果batchsize太小,则计算的均值、方差不足以代表整个数据分布
LayerNorm:channel方向做归一化,算CHW的均值,主要对RNN作用明显;
InstanceNorm:一个channel内做归一化,算H*W的均值,用在风格化迁移;因为在图像风格化中,生成结果主要依赖于某个图像实例,所以对整个batch归一化不适合图像风格化中,因而对HW做归一化。可以加速模型收敛,并且保持每个图像实例之间的独立。
GroupNorm:将channel方向分group,然后每个group内做归一化,算(C//G)HW的均值;这样与batchsize无关,不受其约束。
SwitchableNorm是将BN、LN、IN结合,赋予权重,让网络自己去学习归一化层应该使用什么方法。


目录

1 BatchNorm

2 GroupNorm

3 InstanceNorm

4 LayerNorm

5 LocalResponseNorm


1 BatchNorm


 
  1. torch.nn.BatchNorm1d(num_features, eps= 1e-05, momentum= 0.1, affine= True, track_running_stats= True)
  2. torch.nn.BatchNorm2d(num_features, eps= 1e-05, momentum= 0.1, affine= True, track_running_stats= True)
  3. torch.nn.BatchNorm3d(num_features, eps= 1e-05, momentum= 0.1, affine= True, track_running_stats= True)

参数:

  • num_features: 来自期望输入的特征数,该期望输入的大小为’batch_size x num_features [x width]’
  • eps: 为保证数值稳定性(分母不能趋近或取0),给分母加上的值。默认为1e-5。
  • momentum: 动态均值和动态方差所使用的动量。默认为0.1。
  • affine: 布尔值,当设为true,给该层添加可学习的仿射变换参数。
  • track_running_stats:布尔值,当设为true,记录训练过程中的均值和方差;

实现公式:


2 GroupNorm

torch.nn.GroupNorm(num_groups, num_channels, eps=1e-05, affine=True)
 

参数:

  • num_groups:需要划分为的groups
  • num_features: 来自期望输入的特征数,该期望输入的大小为’batch_size x num_features [x width]’
  • eps: 为保证数值稳定性(分母不能趋近或取0),给分母加上的值。默认为1e-5。
  • momentum: 动态均值和动态方差所使用的动量。默认为0.1。
  • affine: 布尔值,当设为true,给该层添加可学习的仿射变换参数。

实现公式:


3 InstanceNorm


 
  1. torch.nn.InstanceNorm1d(num_features, eps= 1e-05, momentum= 0.1, affine= False, track_running_stats= False)
  2. torch.nn.InstanceNorm2d(num_features, eps= 1e-05, momentum= 0.1, affine= False, track_running_stats= False)
  3. torch.nn.InstanceNorm3d(num_features, eps= 1e-05, momentum= 0.1, affine= False, track_running_stats= False)

参数:

  • num_features: 来自期望输入的特征数,该期望输入的大小为’batch_size x num_features [x width]’
  • eps: 为保证数值稳定性(分母不能趋近或取0),给分母加上的值。默认为1e-5。
  • momentum: 动态均值和动态方差所使用的动量。默认为0.1。
  • affine: 布尔值,当设为true,给该层添加可学习的仿射变换参数。
  • track_running_stats:布尔值,当设为true,记录训练过程中的均值和方差;

实现公式:

4 LayerNorm

torch.nn.LayerNorm(normalized_shape, eps=1e-05, elementwise_affine=True)
 

参数:

  • normalized_shape: 输入尺寸

[∗×normalized_shape[0]×normalized_shape[1]×…×normalized_shape[−1]]

  • eps: 为保证数值稳定性(分母不能趋近或取0),给分母加上的值。默认为1e-5。
  • elementwise_affine: 布尔值,当设为true,给该层添加可学习的仿射变换参数。

实现公式:

5 LocalResponseNorm

torch.nn.LocalResponseNorm(size, alpha=0.0001, beta=0.75, k=1.0)
 

参数:

  • size:用于归一化的邻居通道数
  • alpha:乘积因子,Default: 0.0001
  • beta :指数,Default: 0.75
  • k:附加因子,Default: 1

实现公式:

### 不同归一化方法的核心区别 #### Batch Normalization (BatchNorm) Batch Normalization 是一种通过减少内部协变量偏移来加速深度网络训练的技术。它通过对每一批次的小批量数据计算均值和方差来进行归一化操作[^1]。具体来说,BatchNorm 对每一层的激活值进行标准化处理,使得其具有零均值和单位方差。为了保持模型表达能力不受影响,BatchNorm 还引入了可学习参数 γ 和 β 来执行 scale 和 shift 操作[^2]。 优点: - 减少梯度消失/爆炸问题。 - 加速收敛速度。 缺点: - 需要较大的 mini-batch 大小才能获得稳定的统计量。 - 推理阶段需要额外存储训练期间的全局均值和方差。 适用场景: - 主要用于卷积神经网络(CNNs),尤其是当 batch size 较大时效果最佳。 --- #### Layer Normalization (LayerNorm) Layer Normalization 的设计目标是在序列建模任务中克服 BatchNorm 的局限性。与 BatchNorm 不同的是,LayerNorm 计算同一样本内所有特征维度上的均值和标准差,并对其进行归一化[^4]。这意味着即使在一个批次只有一个样例的情况下也能正常工作。 优点: - 不依赖于 mini-batch 统计信息,在较小或单一实例上表现良好。 - 更适合 RNN/LSTM 等结构中的长期依赖关系捕捉。 缺点: - 可能会忽略跨样本之间的交互特性。 适用场景: - 自然语言处理领域内的 Transformer 架构通常采用 LayerNorm,特别是在长上下文中。 --- #### Instance Normalization (InstanceNorm) Instance Normalization 类似于 LayerNorm,但它针对图像风格迁移等领域进行了优化。InstanceNorm 将每个通道视为独立单元并分别对其应用归一化过程;即对于单张图片而言,它是逐像素地基于该位置处各颜色分量单独调整尺度因子[^3]。 优点: - 特别适用于生成对抗网络(GAN),有助于分离内容与样式特征。 - 能够更好地保留局部纹理细节。 缺点: - 如果输入包含过多噪声,则可能导致不稳定的结果。 适用场景: - 图像生成任务如 CycleGAN 或 Style Transfer 中广泛运用。 --- #### Group Normalization (GroupNorm) Group Normalization 提出了另一种折衷方案——将通道划分为若干组并对每组实施类似于 InstanceNorm 的方式完成规范化流程[^5]。这种方法既避免了对大批量的需求又兼顾到了多维空间的信息融合需求。 优点: - 在极端情况下(比如非常低分辨率或者高宽比失衡的数据集),仍然可以维持较好的性能. - 结合了其他三种技术的优点. 缺点: - 参数调节较为复杂,需手动设定合适的分组数目. 适用场景: - COCO 数据集中的人体姿态估计等视觉识别挑战赛项目里表现出色. ```python import torch.nn as nn # Example usage of different normalization layers in PyTorch batch_norm = nn.BatchNorm2d(num_features=64) # For CNN with large batches layer_norm = nn.LayerNorm(normalized_shape=(64)) # Suitable for NLP tasks like Transformers instance_norm = nn.InstanceNorm2d(num_features=64)# Ideal for GAN-based image generation models group_norm = nn.GroupNorm(num_groups=8, num_channels=64) # Balanced approach combining benefits across domains ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值