【学习笔记】Pytorch深度学习—Normalization_layers
- 一、为什么要进行Normalization?
- ***`Internal Covariate Shfit`***
- 二、常见的Normalization方法——BN、LN、IN、GN
- ***`1、适用变长网络的:Layer Normalization`***
- ***`2、适用样本风格不统一的:Instance Normalization`***
- ***`3、适用大模型、小 batch size的:Group Normalization`***
- 三、Normalization小结
本节课的内容主要是深度学习中常见的Normalization方法,分别是BN、LN、IN、GN;主要分为3部分内容:(1)为什么要进行Normalization?(2)常见的Normalization方法——BN、LN、IN、GN;(3)Normalization方法小结。
一、为什么要进行Normalization?
Internal Covariate Shfit
ICS可以理解为,在深度学习中出现数据尺度分布异常,导致训练困难的现象。
在全连接网络中,第一个网络层层中的神经元
,
,方差即网络层的数据尺度是连乘关系;如果尺度上稍有减小趋势,随着网络的加深,减小趋势会越来越明显,从而导致梯度消失;抑或是尺度上有增大趋势,随着网络的加深,从而导致梯度爆炸,造成模型难以训练。
而进行了Normalization后,可以控制、约束数据尺度、数据分布,有助于模型训练。
二、常见的Normalization方法——BN、LN、IN、GN
1、Batch Normalization——BN
2、Layer Normalization——LN
3、Instance Normalization——IN
4、Group Normalization——GN
四种方法的异同点:
1、适用变长网络的:Layer Normalization
分析:gamma、beta逐元素、逐特征的,第1个神经元有自己的gamma系数和beta,第2个神经元也有自己的gamma和beta。
使用方法
nn.LayerNorm(
normalized_shape,
eps=1e-05,
elementwise_affine=True)
主要参数
normalized_shape:该层特征形状,根据该形状求取均值和方差;
eps:分母修正项
elementwise_affine:是否需要affine transform
2、适用样本风格不统一的:Instance Normalization
分析:instance为实例,可以理解为图像
使用方法
nn.InstanceNorm2d(
num_features,
eps=1e-05,
momentum=0.1,
affine=False,
track_running_stats=False)
分析:InstanceNorm亦有1d、2d、3d,主要看特征是几维的。主要参数
num_features:一个样本特征数量(最重要)
eps:分母修正项
momentum:指数加权平均估计当前mean/var
affine:是否需要affine transform
track_running_stats:是训练状态还是测试状态
3、适用大模型、小 batch size的:Group Normalization
使用方法
nn.GroupNorm(
num_groups,
num_channels,
eps=1e-05
affine=False)
主要参数
num_groups:分组数(通常设置为2、4、8、16...根据特征图数量计算,
并且分组数设置的数值是必须能被整除的。比如1个样本的特征图为4,分组
若设置为3,4/3不能整除,则会报错。)
num_channels:通道数(特征数)假如有256个通道,想分为4组,每一组为
64个feature map,64个feature map一起估计均值和方差
momentum:指数加权平均估计当前mean/var
eps:分母修正项
affine:是否需要affine transform
三、Normalization小结