[译改]BN/LN/IN/GN 详解

本文主体内容是由墙外翻译修改而来,对关键结论写下了自己的理解。

Batch normalization

Batch norm (Ioffe & Szegedy, 2015)是提出的用于训练深度神经网络的归一化的方法,在经验上是非常成功的。它还引入了“内部协变位移(internal covariate shift)”这一术语,定义为训练过程中网络参数的变化导致网络活动分布的变化。批处理范数的目标是通过使用小批处理的平均值和方差对每个小批处理的数据进行归一化,从而减少内部协变量的移位。讲白了,就是在每一个channel的维度(C=1),在样本N的这一批进行norm,此时,被norm的是 [N,H,W]这个数据块。比如有16个channel,那么就要norm 16个 [N,H,W]的数据块。

Layer normalization

Layer normalization(Ba,Kiros,&Hinton,2016)试图解决批处理规范的一些缺点:

  1. 尚不清楚如何在RNN中应用批处理规范
  2. 批处理规范需要大的batchsize才能准确估算统计信息

Layer normalization不是对整个batch的示例进行标准化,而是对每个示例中的要素进行标准化。讲白了就是N=1,在feature maps维度上的这一批进行norm,此时,被norm的是 [C,H,W]这个数据块。

Instance normalization

Instance normalization(Ulyanov,Vedaldi和Lempitsky,2016年)在Layer normalization之后仅六天就挂到了arXiv,这非常相似。理解了Layer normalization,就比较好理解 Instance normalization了。instance normalization就是对于一个[H,W] 的数据块都进行归一化。那么如果有16个channel,batchsize=16,就有256个数据块需要归一化。

Group normalization

理解了Instance normalization和Layer normalization,Group normalization就又很好理解了,哈哈哈。下面是Group normalization中的一副图,可以帮助大家理解。GN就是对于某几个(C//G,C是channel 总数,G是超参)channel的数据块[C//G,H,W]进行norm。比如16//5=3。那么GN的特殊情况就是Instance normalization和Layer normalization了~~

[译改]BN/LN/IN/GN 详解