归一化
目的
不同规模的输入导致不同的权重更新和优化器的步骤向最小值的方向不均衡,这也使损失函数的形状不成比例。在这种情况下,就需要使用较低的学习速率来避免过冲,这就意味着较慢的学习过程。
解决办法是归一化。归一化处理后所有的值具有 0 均值和单位方差,这样可以提供更快的收敛和更稳定的训练。
对象
输入层和神经网络的中间层输出。
如果只是对输入数据做归一化,这样只能保证数据在输入层是一致的,并不能保证每层网络的输入数据分布是一致的,所以在神经网络模型的中间层也需要加入归一化处理。
Batchnormalization
将每个batch之间一一对应的每个channel相加,求均值和方差之后,做归一化处理,最后再加入缩放y和平移变量b。其中缩放y和平移变量b是可训练参数。在推理的时候,均值和方差是基于所有批次的期望计算所得。
归一化维度为[N, H, W],每个通道需要学习缩放y和平移变量b。
优点:
- BN后数据有固定的分布,所以可以提高学习率并加快收敛速度。
- 经过BN的归一化再输入激活函数,得到的值大部分会落入非线性函数的线性区,导数远离导数饱和区,避免了梯度消失,这样来加速训练收敛过程。
- 除了计算提升之外,BN 还可以作为一种正则化技术。 数据集统计数据的近似产生的噪声消除了对 Dropout 的需要。
缺点:
- 对于批处理的依赖。这种估计仅适用于较大的批次。 当批次数量较少时,性能会急剧下降。
- BN不适合RNN、transformer等序列网络,不适合文本长度不定和batchsize较小的情况,适合于CV中的CNN等网络
LayerNormalization
在一个样本里面,对所有channel求均值和方差。
归一化维度为[C, H, W],缩放和平移变量的参数数目视网络类型而定。
优点:
- 与 BN 一样,它可以加速和稳定训练,并且不受批次的限制。 此方法可用于批量为 1 的在线学习任务。
- LN适合用于NLP中的RNN、transformer等网络,因为sequence的长度可能是不一致的。
InstanceNormalization
Instance Normalization是针对于图像像素做归一化,最初用于图像的风格迁移任务中。在图像风格化中,生成结果主要依赖于某个图像实例,所以对整个batch归一化不适合。
归一化维度为[H, W],每个通道需要学习缩放y和平移变量b。
优点:
- 可以加速模型收敛,并且保持每个图像实例之间的独立。
GroupNormalization
GN介于LN和IN之间,把channel分成多组,对每一组做归一化。
归一化维度为[C/G, H, W]
优点:
- 可以解决BN对较小的mini-batch size效果差的问题。GN适用于占用显存比较大的任务,例如图像分割。对这类任务,可能 batch size 只能是个位数,再大显存就不够用了。而当 batch size比较小的时候,BN 的表现很差,因为没办法通过几个样本的数据量,来近似总体的均值和标准差。
参考链接:
https://blog.csdn.net/wuchaohuo724/article/details/126607216