假设数据形状是NCHW(以cv图片为准,语音或时序数据则将HW记为H‘)。
归一化的原因:
深度神经网络难训练一个重要的原因就是深度神经网络涉及很多层的叠加,每一层的参数变化都会导致下一层输入数据分布的变化,随着层数的增加,高层输入数据分布变化会非常剧烈,这就使得高层需要不断适应低层的参数更新。因此,一个直接的想法是固定fix神经元的加权输入分布,将该分布的均值和方差框定在某一个范围中。
基本操作 | 优点 | 缺点 | |
---|---|---|---|
BatchNorm | batch方向做归一化,算NHW的均值 | 适用于CNN | 对较小的batch size效果不好,不适用于RNN |
LayerNorm | channel方向做归一化,算CHW的均值 | 适用序列模型,如:RNN | 不适应输入变化很大的数据,大Batch较差 |
InstanceNorm | 一个channel内做归一化,算H*W的均值 | 适用图像风格迁移 | 不适应通道之间的相关性较强数据 |
GroupNorm | 将channel方向分group,然后每个group内做归一化,算(C//G)HW的均值 | 不同Batch Size下具有较大的稳定性 | 在大Batch 下性能略差于BN |
Switchable Normalization | 将BN、LN、IN结合,赋予权重,让网络自己去学习归一化层应该使用什么方法 | 集BN、IN、LN优点于一身 | 训练复杂 |
Positional Normalization | 位置归一化算法来计算生成网络沿信道维数的统计量 | 在生成网络中表现较好 | 不适应视觉任务 |
Batch Group Normalization | 解决Batch Size退化和饱和的问题 |
norm结果可视化:
立方体shape为(N, H, W, C)的像素点,N为batch size轴,C为通道轴。蓝色的像素群表示 使用这些像素值来计算平均值和方差进行归一化
BatchNorm
提出原因:
-
在训练神经网络过程中,通常输入batch个数据进行训练,这样每个batch具有不同的分布,使模型训练起来相对困难。
-
Internal Covariate Shift (ICS) 问题:在训练深层网络时,激活函数会改变各层数据的分布以及量级,随着网络的加深,这种改变会越来越大,模型不稳定不容易收敛,甚至可能出现梯度消失的问题。
基本操作:
batch方向做归一化,算NHW的均值
优点:
- BN使得网络中每层输入数据的分布相对稳定,不仅极大提升了训练速度