关于几个normalization个人理解

比较经典的几个normalization:
盗图:
在这里插入图片描述
1、BN 对 (H×W×N) 进行归一化
实现原理很简单,就是对一个minibatch 计算一下均值和标准差,然后进行一个标准化操作,最后通过添加两个(可学习)scale和shift参数来防止其太过于线性而降低网络的表达能力。
网上都在说BN将输入强行拉回到正态分布看得我一脸懵,我觉得应该强调的是这个normalize使整个minibatch回到了激活函数的有效区间而不应该强调正态。实际操作中如果不加干预可能很多变量在激活时已经处于激活函数接近于极值的区间。就会导致即使几个输入之间相差甚大,但激活后输出几乎相同,自然就不能通过梯度表示两者之间的差异。通过BN操作后,可以有效将不同输入之间的差异映射到激活函数作用后的输出上,自然梯度便更明显一些。batch越大,BN作用后不同输入产生的梯度大小便越能代表真实情况下的差异。
2、LN 对(H×W×C)进行归一化
常用与RNN网络,我应该用不到。
3、IN 对(H×W)进行归一化
据说这一项常用于图像风格化,平时也不大了解。IN和LN都是针对BN,为了避免batchsize太小
4、GN 对(G×H×W)进行归一化
GN是大神何恺明的又一成果,实验表明结果要优于前三种算法。在channels通道划分成32部分,每部分分别normalization,不再受batch的制约。但是不同channel的特征有同有异,不太理解为什么将他们分成32部分norm会有比较好的效果。

猜你喜欢

转载自blog.csdn.net/qq_41872271/article/details/105416354