Press "Enter" to skip to content

经典论文系列 | Group Normalization & BN的缺陷

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

前言:

 

本文是何凯明在18年发表的论文,论文提出了BN中存在的问题,即模型性能受到Batch Size的影响,当batch size比较小时,模型性能退化严重,且BN的存在使得在受到内存限制的应用很难使用预训练。

 

本文基于这些问题提出了Group Normalization,GN很好地避免了这些问题,模型性能不会受到BatchSize的影响。

 

此外,在论文中作者将两者与其它一些归一化方法(如Layer Normalization、Instance Normalization)进行了介绍与实验对比。

 

论文:Group Normalization

 

主要思想

 

Batch Normalization(BN)是深度学习发展中的一个里程碑式技术,它使各种网络都可以进行训练。然而,沿batch维度进行归一化会带来问题:由于批次统计信息估算不准确,当batch size变小时,BN的误差会迅速增加。这限制了BN用于训练更大的模型以及将特征转移到计算机视觉任务(包括检测,分割和视频)的应用,这些任务需要小批量,并且受内存消耗的限制。

 

在本文中,我们提出了Group Normalization(GN)作为BN的一种简单替代方案。

 

GN将通道分为几组,并在每组内计算均值和方差以进行归一化。GN的计算不受批次大小的影响,并且其精度在各种批次大小中都是稳定的。在使用ImageNet训练的ResNet-50上,当使用2的批次大小时,GN的错误比其BN低10.6%;

 

当使用常用的batch size时,GN与BN性能接近,并且胜过其他归一化方法。 而且,GN可以自然地从预训练过渡到fine-tuning。 GN在COCO中的目标检测和分割以及Kinetics中的视频分类方面,可以胜过其基于BN的同类模型,这表明GN可以在各种任务中有效替代功能强大的BN。

 

只需几行代码即可轻松实现GN。

 

一些细节

 

为方便基础薄弱的读者理解,先简单回顾一下Batch Normalization。

 

在公众号模型解读系列里《 Inception系列之Inception_v2 》(点击进入)中有对Batch Normalization进行完整解读。

 

 

BN算法如上图所示,BN算法计算同一个batch中数据的均值和方差,再进行归一化,最后进行尺度缩放和偏移。注:BN只计算一个batch中同一个通道上的数据,每个通道都会计算一次的均值和方差,这也就是为什幺代码中(如nn.BatchNorm2d)中需要输入通道数。

 

可以看到上面这个算法是依赖于m(也就是batchsize)的,且ɣ和β都是在训练中学习的参数,这两个因素也是导致BN存在问题的关键所在。

 

回到本文,如下图所示,当batch size变小时,ImageNet 分类错误率急剧增加。这是因为小batch size下均值和方差代表的样本数量少,相比于大batch,随机性更大。尺度缩放和偏移的估计也没那幺准确。在一些需要大分辨率的计算机视觉任务上(如目标检测,语义分割)由于内存限制而只能使用小batchsize,这也导致了预训练模型在ImageNet这种小分辨率图像上的预训练后得出的尺度缩放系数和偏移系数不够准确。

 

 

作者将几种归一化方法用如下示意图进行了对比,这个图很好地体现了这几种方法的区别。这里为了表示方便,把HxW reshape成了H*W。

 

 

可以看到,Batch Norm是将一个batch下同一通道下进行归一化;Layer Norm是在同一个样本下所有通道进行归一化;Instance Norm是每个样本的每个通道进行归一化;Group Norm是将一个样本下的通道分成G组,对每组进行归一化。

 

Layer Norm和Instance Norm可以当成是Group Norm的两种特殊情况,即G取C通道大小时,Group Norm就变成了Instance Norm,G取1时,就变成了Layer Norm。

 

从图中可以看出,除了Batch Norm,后面三个都与Batch Size无关,因此这三种归一化都不会受到Batch Size的影响。

 

结合前面对Batch Norm算法的简要回顾,介绍到这里,Group Norm其实就已经很清楚了,因为它使用的归一化公式也是Batch Norm的公式,只是在计算均值和方差所用到的数据的范围不一样。其实这三种方法的区别也都是这个。

 

实现代码

 

如下所示是GroupNorm用tensorflow实现的代码:

 

 

实验结论

 

 

如上图所示,在训练阶段,GN的错误率略低于BN,而在验证阶段,BN的错误率略低于GN,但都明显优于LN和IN。

 

 

如上图和下表所示,当使用不同的batch Size,BN的性能明显退化,而GN的模型始终都一致。

 

 

对所有归一化方法做了一个技术总结,放在CV技术总结系列,关注公众号可看待该总结。

 

Be First to Comment

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注