文章目录
1. Why Normalization
因为在深度学习当中存在ICS(Internal Covariate shift)问题:数据尺度/分布异常,导致训练困难
从公式中可以看到,D(H1)是一个多参数连乘的结果,如果该值小于1,则随着网络层数的增加尺度会趋近于0,如果该值大于1,则后面网络层的尺度会越来越大,可能会引发梯度消失或梯度爆炸问题,Normalization能够约束数据尺度。
2. Batch Normalization
-
概念:批标准化
- 批:一批数据,通常为mini-batch
- 标准化:0均值,1方差
-
优点:
- 可以用更大的学习率,加速模型收敛
- 可以不用精心设计权值初始化
- 可以不用dropout或较小的dropout
- 可以不用L2或者较小的weight decay
- 可以不用LRN(local response normalization)
-
计算方式:
-
_BatchNorm
- nn.BatchNorm1d = B特征数1d特征
- nn.BatchNorm2d = B特征数2d特征
- nn.BatchNorm3d = B特征数3d特征
- 参数:
- num_features:一个样本特征数量(最重要)
- eps:分母修正项
- momentum:指数加权平均估计当前mean/var
- affine:是否需要affine transform
- track_running_stats:是训练状态,还是测试状态
- 主要属性:
- running_mean:均值
- running_var:方差
- weight:affine transform中的gamma
- bias:affine transform中的beta
在特征维度上减均值除以标准差乘以gamma加beta
3. Layer Normalization
- 起因:BN不适用于变长的网络,如RNN
- 思路:逐层计算均值和方差
- 注意事项:
- 不再有running_mean和running_var
- gamma和beta为逐元素的
- nn.LayerNorm
- 主要参数:
- normalized_shape:该层特征形状
- eps:分母修正项
- elementwise_affine:是否需要affine transform
- 主要参数:
4. Instance Normalization
- 起因:BN在图像生成中不适用
- 思路:逐Instance(channel)计算均值和方差
- nn.InstanceNorm
- 主要参数:
- num_features:一个样本特征数量
- eps:分母修正项
- momentum:指数加权平均估计当前mean/var
- affine:是否需要affine transform
- track_running_stats:是训练状态,还是测试状态
- 主要参数:
5. Group Normalization
-
起因:小batch样本中,BN估计的值不准
-
思路:数据不够,通道来凑
-
注意事项:
- 不再有running_mean和running_var
- gamma和beta为逐通道的
-
应用场景:大模型(小batch size)任务
-
nn.GroupNorm
- 主要参数:
- num_groups:分组数,通常会设置成2的n次方(例如2,4,8,16等)
- num_channels:通道数(特征数)
- eps:分母修正项
- affine:是否需要affine transform
- 主要参数: