一、Why Normalization
因为在深度神经网络中,数据在训练过程(前向传播)中会出出现数据尺度和分布的异常。当这些异常累积的一定程度时,就会导致训练困难。
二、 常见Normalization
1、种类
- Batch Normalization(BN)
- Layer Normalization(LN)
- Instance Normalization(IN)
- Group Normalization(GN)
2、对比
相同:
不同: 均值和方差求取方式
三、Batch Normalization
1、计算方式
2、模块
1)_BatchNorm
__init__(self, num_features,eps=1e-5,momentum=0.1,affine=True,track_running_stats=True)
• num_features:一个样本特征数量(最重要)
• e p s:分母修正项
• momentum:指数加权平均估计当前mean/var
• affine:是否需要affine transform
• track_running_stats:是训练状态,还是测试状态
2)nn.BatchNorm1d/2d/3d
- 训练:均值和方差采用指数加权平均计算
- 测试:当前统计值
- 输出:nn.BatchNorm1d input= B*特征数*1d特征/nn.BatchNorm2d input= B*特征数*2d特征/nn.BatchNorm3d input= B*特征数*3d特征
running_mean = (1 - momentum) * pre_running_mean + momentum * mean_t
running_var = (1 - momentum) * pre_running_var + momentum * var_t
- running_mean:均值
- running_var:方差
- weight:affine transform中的gamma
- bias: affine transform中的beta
四、 Layer Normalization,nn.LayerNorm
起因:BN不适用于变长的网络,如RNN
思路:逐层计算均值和方差
注意事项:
- 不再有running_mean和running_var
- gamma和beta为逐元素的
nn.LayerNorm(normalized_shape,eps=1e-05,elementwise_affine=True)
• normalized_shape:该层特征形状
• eps:分母修正项
• elementwise_affine:是否需要affine
transform
五、Instance Normalization,nn.InstanceNorm
起因:BN在图像生成(Image Generation)中不适用
思路:逐Instance(channel)计算均值和方差
nn.InstanceNorm2d(num_features,eps=1e-05,momentum=0.1,affine=False,track_running_stats=False)
主要参数:
• num_features:一个样本特征数量(最重要)
• eps:分母修正项
• momentum:指数加权平均估计当前mean/var
• affine:是否需要affine transform
• track_running_stats:是训练状态,还是测试状态
六、Group Normalization,nn.GroupNorm
起因:小batch样本中,BN估计的值不准
思路:数据不够,通道来凑
nn.GroupNorm(num_groups,num_channels,eps=1e-05,affine=True)
注意事项:
1. 不再有running_mean和running_var
2. gamma和beta为逐通道(channel)的
主要参数:
• num_groups:分组数
• num_channels:通道数(特征数)
• eps:分母修正项
• affine:是否需要affine transform