batch norm, layer norm, instance norm, group norm

一、Batch Norm

假设我们的输入是一个shape为(N,C,H,W)的向量,其中N表示Batch size的大小,C表示channel数量,H为height,W为width。那么Batch Norm就会在整个batch的每个channel上计算一次均值和方差,并对每个channel进行归一化。计算过程为:

 要再次强调的是,上面的计算都是在每个channel上进行的,有几个channel就会算出几个均值和方差。另外值得一提的是,这里有一个γ和β,他们是模型可以学习的参数。并不是模型的每一层都需要进行归一化,当γ = \sqrt{\sigma^2 + \epsilon},且 β = μ 时,就还原成了没有归一化的数据。ϵ是为了预防分母为0而加的一个很小的数。

一般都是训练的时候在训练集上通过滑动平均预先计算好平均-mean,和方差-variance参数,在测试的时候,不在计算这些值,而是直接调用这些预计算好的来用,但是,当训练数据和测试数据分布有差别是时,训练集上预计算好的数据并不能代表测试数据,这就导致在训练,验证,测试这三个阶段存在inconsistency。

batch size如何设置:科研调参:batch_size怎么设置?_无枒的博客-CSDN博客_batchsize设为1

 二、Layer Norm

在一个数据的所有channel上计算均值和方差 

三、Instance Norm

用一条数据一个channel上的数据进行归一化

四、Group Norm

取一部分的channels作为一个group进行归一化

当GN中的#G=1是,GN就成了Layer Norm
当GN中的#G=C(通道数)时,GN就成了Instance Norm

五、对比

相同batch size(32)时,BN,GN效果较好

 不同batch size时,BN和GN对比。GN受batch size影响较小

 不同group size时,GN的表现。#G为32时较好

Group Norm虽然解决了单卡batch size小时模型表现部好的问题,但是也带来了一个需要调节的超参数group size。这也意味着要做更多的实验。

参考:

batch-size较小时还能用batch normalization吗?_折磨王的博客-CSDN博客_batchsize为1时还要用batchnorm吗

论文阅读 - Group Normalization_zjuPeco的博客-CSDN博客 

猜你喜欢

转载自blog.csdn.net/qq_41021141/article/details/126057078