目录
一、Batch Normal
二、Layer Normal
三、Instance Normal
四、Group Normal
五、参考
参考了这两三篇博客,终于理解了这几个概念。
一、Batch Normal
Batch Normal,举例来说:输入一个batch size,这个batch size中有2个元素(feature size),每个元素的channel为3,每个channel的宽高为2*2,那么Batch Normal是怎么计算的呢?
网上说:“batch方向做归一化,算NHW的均值,对小batchsize效果不好;BN主要缺点是对batchsize的大小比较敏感,由于每次计算均值和方差是在一个batch上,所以如果batchsize太小,则计算的均值、方差不足以代表整个数据分布” 刚开始不理解什么在batch方向做,原来是一次计算是batch个大小,其实也很好理解,因为是相同channel进行计算,那一个batch有两个特征,那相同特征计算就会有两个channel进行计算,所以这就是batch方向。
二、Layer Normal
layer normal是每个特征自己进行normal,比如有十句话,每句话长短不一,那这里batch是10,每句话是一个特征,一句话的长度是dimension,那进行layer normal是分别对每句话进行的,即一个特征对自己所有维度进行normal,与别的特征没有任何关系,如下:
图片来源:【深度学习】batch normalization和layer normalization区别_layer normalization和batch normalization_山顶夕景的博客-CSDN博客
三、Instance Normal
这个从batch normal的角度来理解,batch normal是每个特征相同的channel进行一起进行计算均值,方差。但是Instance Normal是每个特征的每个channel进行独自计算,即:比如有一个bacth,里面2个特征,每个特征有3个dimension,那Instance normal是特征一的channel1进行计算自己的均值和方差,channel2进行计算自己的均值方差,channel3进行计算自己的channel。特征2也是这样。
四、Group Normal
主要是针对Batch Normalization对小batchsize效果差,GN将channel方向分group,然后每个group内做归一化,算(C//G)*H*W的均值,这样与batchsize无关,不受其约束。
这个从Instance Normal的角度来理解,比如一个batch,里面有2个特征,每个特征有6个channel,那我把这6个特征分为三组,(channel1、channel2)为组一,(channel3、channel4)为组二,、(channel5、channel6)为组三。即特征1有三组,特征2也有三组,那计算均值方差,是特征1和特征2的组一一起进行计算,特征1和特征2的组二一起计算,特征1和特征2的组三一起计算,那最终得到均值和方差也都是向量,均值向量里面有三个值,分别是组一、组二、组三的均值,方差向量里面也是三个值,也分别是组一、组二、组三的方差。
图
五、参考
1.Batch Normalization详解以及pytorch实验_太阳花的小绿豆的博客-CSDN博客
2.Layer Normalization解析_runtimeerror: given normalized_shape=[256], expect_太阳花的小绿豆的博客-CSDN博客
3.【深度学习】batch normalization和layer normalization区别_layer normalization和batch normalization_山顶夕景的博客-CSDN博客
4.PyTorch学习之归一化层(BatchNorm、LayerNorm、InstanceNorm、GroupNorm)_mingo_敏的博客-CSDN博客