Group Normalization
背景
Group Normalization 是有吴育昕和何恺明联合提出。
参考文献:
[1] Wu, K. He, Group normalization, in: Proceedings of the European Conferenceon Computer Vision (ECCV), 2018, pp. 3–19
What’s wrong with BN ?
Batch Normalization 是以batch 的纬度做归一化。过小的batch-size会导致训练效果变差,一般来说,每个GPU上的batch设为32 比较合适。
但是针对一些特定的任务,例如目标检测、图像分割、视频分类的任务,器输入图像的尺寸较大,也就是待处理数据较大,所以针对此类任务batch-size一般设为1或者2。
当batch-size越小的时候,该batch数据的代表性较差,会导致错误率提升。BN会受到batchsize大小的影响。如果batchsize太小,算出的均值和方差就会不准确,如果太大,显存又可能不够用。
另外,Batch Normalization是在batch这个维度上Normalization,但是这个维度并不是固定不变的,比如训练和测试时一般不一样,一般都是训练的时候在训练集上通过滑动平均预先计算好平均-mean,和方差-variance参数。
在测试的时候,不再计算这些值,而是直接调用这些预计算好的来用,但是,当训练数据和测试数据分布有差别是时,训练机上预计算好的数据并不能代表测试数据,这就导致在训练,验证,测试这三个阶段存在inconsistency。
所以我们改进的思路就是使归一化操作的计算不依赖batch-size的大小。
How GN work ?
上图形象的表示了四种norm的工作方式:
- BN在batch的维度上norm,归一化维度为[N,H,W],对batch中对应的channel归一化
- LN避开了batch维度,归一化的维度为[C,H,W]
- IN 归一化的维度为[H,W]
- GN介于LN和IN之间,其首先将channel分为许多组(group),对每一组做归一化,及先将feature的维度由[N, C, H, W]reshape为[N, G,C//G , H, W],归一化的维度为[C//G , H, W]
⚠️LN和IN其实就是GN的特例,LN就是当G为C的时候,IN就是当G为1时候。论文中作者给出G设为32 比较好。
Why GN work ?
传统角度来讲,在深度学习没有火起来之前,提取特征通常是使用SIFT,HOG和GIST特征,这些特征有一个共性,都具有按group表示的特性,每一个group由相同种类直方图的构建而成,这些特征通常是对在每个直方图(histogram)或每个方向(orientation)上进行组归一化(group-wise norm)而得到。
而更高维的特征比如VLAD和Fisher Vectors(FV)也可以看作是group-wise feature,此处的group可以被认为是每个聚类(cluster)下的子向量sub-vector。
从深度学习上来讲,完全可以认为卷积提取的特征是一种非结构化的特征或者向量,拿网络的第一层卷积为例,卷积层中的的卷积核filter1和此卷积核的其他经过transform过的版本filter2(transform可以是horizontal flipping等),在同一张图像上学习到的特征应该是具有相同的分布,那么,具有相同的特征可以被分到同一个group中,按照个人理解,每一层有很多的卷积核,这些核学习到的特征并不完全是独立的,某些特征具有相同的分布,因此可以被group。
导致分组(group)的因素有很多,比如频率、形状、亮度和纹理等,HOG特征根据orientation分组,而对神经网络来讲,其提取特征的机制更加复杂,也更加难以描述,变得不那么直观。
个人理解就是根据 之前传统的特征的提取方式,来对进一步推论得到组归一化的有效性。对于为什么GN会有效果,没有理解。
总体上来说,GN对于batch-size具有更强的鲁棒性。