目录
一、批量归一化 (BatchNorm)
二、层归一化(Layer Normalization)
三、Instance Normalization
四、Group Normalization
一般在神经网络中会用到数据的归一化,比如在卷积层后进行归一化然后再下采样然后再激活等。目前比较受欢迎的数据归一化层有:BN(Batch Normalization),LN(Layer Normalization),IN(Instance Normalization),GN(Group Normalization)这4种。本篇文章主要是对比一下它们各自是怎么计算的。
先看对数据的归一化是这么操作的。其实就是先计算均值和方差然后再标准化即可。具体的对一个标量数据,在给定的数据集中进行标准化是按如下进行计算的:
先计算给定数据集的均值和方差:
然后对这个数据集中的每个数进行标准化(归一化):
BN、LN、IN、GN这4种归一化方法的区别就是用于计算均值和方差的数据集不同。后面我以卷积层后跟归一化来举例,我叫需要进行标准化的值为一个像素点,那么数据集叫像素集。我们来看一下这4种方法它们计算均值和方差的像素集有什么区别。(蓝色区域即为该方法对应的计算一次均值和方差的像素集,当然最终是要将整个方块按区域划分分别进行一次归一化)。
假如现在图像先进行了卷积运算得到如上图所示的激活状态(N,C,H,W),其中N是样本数,C为通道数即特征图数。
论文针对训练过程中容易出现的分布跳动问题引起的问题,提出了归一化的思路,为简化计算过程和实现难度,提出了批量归一化的思路。论文的神来之笔是和参数,在一定程度上实现了维持原数据特征的能力。
归一化算法思路:
论文要点
BN的操作是,对同一批次的数据分布进行标准化,得出的均值方差,其可信度受batch size影响。很容易可以想到,如果我们对小batch size得出均值方差,那势必和总数据的均值方差有所偏差。这样就解释了BN的第一个缺点:BN特别依赖Batch Size。
BN在大batchsize的情况下效果好,缺点是:
李宏毅老师关于batch normalization的视频讲解:
李宏毅深度学习(2017)_哔哩哔哩_bilibili https://www.bilibili.com/video/av9770302?p=10
LN是Hinton及其学生提出来的,论文链接:https://arxiv.org/abs/1607.06450v1
LN取的是同一个样本的不同通道做归一化,逐个样本归一化。
LN的操作类似于将BN做了一个“转置”,对同一层网络的输出做一个标准化。注意,同一层的输出是单个图片的输出,比如对于一个batch为32的神经网络训练,会有32个均值和方差被得出,每个均值和方差都是由单个图片的所有channel之间做一个标准化。这么操作,就使得LN不受batch size的影响。同时,LN可以很好地用到序列型网络如RNN中。同时,LR在训练过程和inference过程都会有,这就是和BN很大的差别了。
对于IN,它的一个像素集为一个特征图像素点集合,那么对于输入需要进行N×C次的归一化。
IN适用于生成模型中,比如图片风格迁移。因为图片生成的结果主要依赖于某个图像实例,所以对整个Batch进行Normalization操作并不适合图像风格化的任务,在风格迁移中适用IN不仅可以加速模型收敛,并且可以保持每个图像实例之间的独立性。
下面是IN的公式:
其中t代表图片的index,i代表的是feature map的index。
Group Normalization(GN)是由2018年3月份何恺明团队提出,论文链接:https://arxiv.org/abs/1803.08494
Group Normalization(GN) 则是提出的一种 BN 的替代方法,GN优化了BN在比较小的mini-batch情况下表现不太好的劣势。其是首先将 Channels 划分为多个 groups,再计算每个 group 内的均值和方法,以进行归一化。对于GN,它的一个像素集为一个样本的一部分连续特征图的像素点集合。GB的计算与Batch Size无关,因此对于高精度图片小BatchSize的情况也是非常稳定的。
参考链接:
https://blog.csdn.net/buchidanhuang/article/details/99675646
https://blog.csdn.net/leviopku/article/details/83182194