加载中...

归一化方法


常用归一化方法

1. BatchNorm

https://arxiv.org/abs/1502.03167

BatchNorm是一种归一化方法,用于对神经网络中的特征进行标准化处理。可以加速深层神经网络的训练,防止梯度消失和爆炸问题,并提高模型的泛化能力。

在深层神经网络中,由于各层之间的输出分布可能会变化,导致模型难以训练。而BatchNorm通过对每个batch的特征进行标准化处理,使得每个特征的均值接近0,方差接近1,从而使得各层之间的输出分布更加稳定,加速模型的训练。

BatchNorm的计算方式如下:

y=xmeanvar+epsgamma+betay = \frac{x - mean}{\sqrt{var + eps}} * gamma + beta

其中,x表示输入的特征,meanvar表示每个batch的特征的均值和方差,gammabeta是可学习的参数,eps是一个小的常数,用于防止分母为0。

优点:

  • 加速模型训练
  • 提高模型泛化能力
  • 不同样本之间不会相互影响

缺点:

  • 对batch size的依赖
  • 对网络架构的限制
  • 可能引入额外的计算

LazyBatchNorm是一种类似于BatchNorm的归一化方法,但是它可以在训练和推理时都使用相同的统计信息,从而加速模型的推理过程。与BatchNorm不同,LazyBatchNorm不会在每个batch中计算均值和方差,而是只在第一个batch中计算并存储下来,然后在后续的训练和推理中共享这些统计信息。这样可以避免在每个batch中计算均值和方差的开销,从而加速模型的推理过程。

nn.BatchNorm1d()
nn.BatchNorm2d()
nn.BatchNorm3d()

主要参数如下:

  • num_features:一个整数,表示输入张量的通道数。
  • eps:一个小的常数,用于防止分母为0,通常取10510^{-5}
  • momentum:用于计算滑动平均值的动量,默认为0.1。
  • affine:是否对归一化后的特征进行仿射变换,默认为True。如果设置为False,则不会学习gammabeta两个参数。
  • track_running_stats:是否跟踪输入张量的统计信息,默认为True。如果设置为False,则不会计算滑动平均值和方差,而是使用当前batch的均值和方差进行归一化处理。
  • lazy:是否使用LazyBatchNorm,默认为False。如果设置为True,则使用LazyBatchNorm进行归一化处理。

2. LayerNorm

https://arxiv.org/abs/1607.06450

LayerNorm,即Layer Normalization,是一种用于对神经网络中每一层的输出进行标准化处理的方法。与BatchNorm(批标准化)不同,LayerNorm是在每个样本上对每个特征进行标准化,而不是在每个批次上对每个特征进行标准化。

优点:

  • 适用范围广
  • 不受batch size影响
  • 不同样本之间不会相互影响

缺点:

  • 需要更多的计算
  • 可能引入过度平滑
nn.LayerNorm()

主要参数如下:

  • normalized_shape: 一个整数或一个元组,表示标准化处理时特征张量的shape,例如对于形状为(N,C,H,W)(N, C, H, W)的输入张量,可以将normalized_shape设置为(1, C, 1, 1)表示对第二个维度进行标准化处理。
  • eps: 一个小的常数,用于防止分母为0,通常取10510^{-5}
  • elementwise_affine: 一个布尔值,表示是否学习可学习的缩放因子和偏移量,如果为False,则不学习。

3. InstanceNorm

https://arxiv.org/abs/1607.08022

InstanceNorm,即Instance Normalization,是一种用于对神经网络中每个样本的每个通道进行标准化处理的方法。与BatchNorm(批标准化)不同,InstanceNorm是在每个样本上对每个通道进行标准化,而不是在每个批次上对每个通道进行标准化。

优点:

  • 不同样本之间不会相互影响
  • 对batch size的依赖性较小
  • 适用于图像风格转换等任务

缺点:

  • 对小批量数据的处理不稳定
  • 不适用于循环神经网络
  • 可能引入额外的计算
nn.InstanceNorm1d()
nn.InstanceNorm2d()
nn.InstanceNorm3d()

主要参数如下:

  • num_features: 一个整数,表示输入张量的通道数。
  • eps: 一个小的常数,用于防止分母为0,通常取10510^{-5}
  • momentum: 一个小的常数,用于计算均值和方差的滑动平均值,通常取0。当momentum不为0时,InstanceNorm可以看作是一种带有记忆能力的BatchNorm。

4. GroupNorm

https://arxiv.org/abs/1803.08494

GroupNorm是一种将特征图分成多个组,对每个组内的特征进行标准化的归一化方法。

优点:

  • 对小批量数据的处理稳定
  • 适用于小batch size
  • 对batch size的依赖性较小
  • 可以处理循环神经网络

缺点:

  • 计算量大
  • 不适用于图像风格转换等任务
  • 需要手动设置组数
nn.GroupNorm()

主要参数如下:

  • num_features: 一个整数,表示输入张量的通道数。
  • num_groups: 一个整数,表示将通道分成的组数。通常取值为32或64。
  • eps: 一个小的常数,用于防止分母为0,通常取10510^{-5}

5. 其他归一化方法

  • Weight Normalization

https://arxiv.org/abs/1602.07868

  • Spectrum Normalization

https://arxiv.org/abs/1705.10941


文章作者: JiJunhao
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 JiJunhao !