【深度学习】归一化总结

深度学习之归一化

  • 1.BatchNorm
  • 2.GroupNorm
  • 3.InstanceNorm
  • 4.LayerNorm
  • 5.SwitchableNorm

)
【深度学习】归一化总结_第1张图片

1.BatchNorm

BN在batch的维度上norm,归一化维度为[N,H,W],对batch中对应的channel归一化:即是将同一个batch中的所有样本的同一层特征图抽出来一起求mean和variance。一般来说每GPU上batch设为32最合适;
优点 :防止梯度消失,加快模型收敛(导数最大区),允许网络使用更高的学习率。可作为一个正则化器,减少对dropout的需求。
缺点:
(1)对batchsize的大小比较敏感,由于每次计算均值和方差是在一个batch上,所以如果batchsize太小(16),则计算的均值、方差不足以代表整个数据分布(梯度更新方向不确定)
(2)训练和测试时一般batchsize不一样,一般都是训练的时候在训练集上通过滑动平均预先计算好平均-mean,和方差-variance参数。在测试的时候,不再计算这些值,而是直接调用这些预计算好的来用,但是,当训练数据和测试数据分布有差别是时,训练机上预计算好的数据并不能代表测试数据,这就导致在训练,验证,测试这三个阶段存在inconsistency。
(3)RNN等动态网络(输入序列不定长)使用BN层效果不佳。
【深度学习】归一化总结_第2张图片
Pytorch使用:
【深度学习】归一化总结_第3张图片
相关论文:Single Image Reflection Removal Exploiting Misaligned Training Data and Network Enhancements【2018ECCV去反射】
如果批量大小变得太小,预测误差会急剧增加并且可能出现稳定性问题。此外,对于诸如SIRR的密集预测任务,大的批量大小在存储器要求方面可能变得非常昂贵。在我们的案例中,我们发现在可用于反射消除的可用批量大小中,BN导致相当差的性能,包括有时在图像到图像转换任务中观察到的颜色衰减/移位问题。

2.GroupNorm

输入通道被分成num_groups组,每个组包含num_channels / num_groups个通道。然后每个group内做归一化,算(C//G)HW的均值:即是将batch中的单个样本的G层特征图抽出来一起求mean和variance,与batch size无关
【深度学习】归一化总结_第4张图片
Pytorch使用
【深度学习】归一化总结_第5张图片
**解析:**从深度学习上来讲,完全可以认为卷积提取的特征是一种非结构化的特征或者向量,拿网络的第一层卷积为例,卷积层中的的卷积核filter1和此卷积核的其他经过transform过的版本filter2(transform可以是horizontal flipping等),在同一张图像上学习到的特征应该是具有相同的分布,那么,具有相同的特征可以被分到同一个group中,按照个人理解,每一层有很多的卷积核,这些核学习到的特征并不完全是独立的,某些特征具有相同的分布,因此可以被group。

3.InstanceNorm

一个channel内做归一化,算H*W的均值,用在风格化迁移;因为在图像风格化中,生成结果主要依赖于某个图像实例,所以对整个batch归一化不适合图像风格化中,因而对HW做归一化。可以加速模型收敛,并且保持每个图像实例之间的独立。
区别:BN注重对每个batch进行归一化,保证数据分布一致,因为判别模型中结果取决于数据整体分布。
Pytorch使用:
【深度学习】归一化总结_第6张图片

4.LayerNorm

channel方向做归一化,算CHW的均值,主要对RNN作用明显;
LN中同层神经元输入拥有相同的均值和方差,不同的输入样本有不同的均值和方差;
BN中则针对不同神经元输入计算均值和方差,同一个batch中的输入拥有相同的均值和方差。
所以,LN不依赖于batch的大小和输入sequence的深度,因此可以用于batchsize为1和RNN中对边长的输入sequence的normalize操作。
Pytorch使用:
【深度学习】归一化总结_第7张图片

5.SwitchableNorm

是将BN、LN、IN结合,赋予权重,让网络自己去学习归一化层应该使用什么方法。

你可能感兴趣的:(深度学习)