Group Normalization

论文:https://arxiv.org/abs/1803.08494
代码:https://github.com/facebookresearch/Detectron/blob/master/projects/GN

0 摘要

Batch Normalization(BN)是深度学习发展过程中的一个里程碑式的技术,被应用到了各种各样的网络的训练过程中。但是,BN是沿着batch维度进行归一化,如果batch的值比较小时,BN的误差会快速增大。在计算机视觉类模型的训练过程中,如分类、检测和分割任务,用到的网络往往比较大,由于机器显存的限制,就需要设置比较小的batch值。本文作者提出了BN的替代版本 — GN。GN是沿着channel维度计算均值和方差。GN的计算和batch size的大小无关。batch size大小为2时,在ImageNet数据集上训练的GN版本的模型比BN版本的模型的错误率低10.6%。当batch size值较大时,GN和BN的一样好。GN在目标检测、分割和视频分类任务上都超过了BN,显示了其强大的普适性。

1 简介

BN是计算一个mini-batch的均值和方差。实验结果表明,BN有助于减小优化难度,加速深度网络的收敛过程。不同batch之间的随机不确定性还起到了一定程度的正则化效果。但是,BN的缺点是需要较大的batch(例如,每个GPU的batch size需要达到32)才能取得好的效果。batch较小时对batch的统计特性的估计准确度会下降,如图1所示,减小batch的值会增大模型的误差。由于显存的限制,BN的这一缺点阻止了人们去训练更大的模型。在batch size值较小时,BN层退化成了近似于线性层,就起不到归一化的效果了
在这里插入图片描述在这里插入图片描述GN的示意如图2所示,是按照channel的方向进行分组,然后对各组内的数据进行归一化处理,因此GN与batch的大小无关(如图1所示)。batch size较小的时候,GN优于BN,batch size较大时,GN和BN几乎一样好。在RNN/LSTM和GAN网络训练过程中会用到LN和IN(图2所示),但把它们用到视觉任务时往往效果不理想。但是GN可以在视觉任务中取得较好的效果,同时也可以用于RNN/LSTM和GAN的训练中取得较好的效果。

3 GN

各通道的视觉特征并非完全意义上相互独立。传统的手工设计特征,如SIFT、HOG和GIST,是手工设计的各通道相互独立的特征,这些特征往往按通道进行归一化处理。高层特征,如VLAD和FV也是按通道区分的特征,一组特征可以认为是一组子向量的集合。

不能把深度网络学习到的特征认为是非结构化的特征。例如,CNN中第一个卷积层的特征,conv1,对输入图像使用一个卷积核及其水平翻转后的卷积核,大概率是可以得到类似分布的输出特征。这些具有一定关联关系的通道是可以归一化到一起的。

3.1 公式

BN、LN、IN和GN,都是进行了类似的计算:
x ^ i = 1 σ i ( x i − u i ) (1) \hat x_i = \frac{1}{\sigma_i}(x_i - u_i) \tag{1} x^i=σi1(xiui)(1)
x x x表示某层输出的特征, i i i表示位置索引。输入是2D图像时, i = ( i N , i C , i H , i W ) i = (i_N,i_C,i_H,i_W) i=(iN,iC,iH,iW)是以(N,C,H,W)顺序表示的四维索引。

u i = 1 m ∑ k ∈ S i x k , σ i = 1 m ∑ k ∈ S i ( x k − u i ) 2 + ϵ (2) u_i = \frac{1}{m}\sum_{k \in S_i}x_k,\sigma_i = \sqrt{\frac{1}{m}\sum_{k \in S_i}(x_k - u_i)^2 + \epsilon} \tag{2} ui=m1kSixk,σi=m1kSi(xkui)2+ϵ (2)

S i S_i Si表示要进行归一化处理的像素集合。不同的归一化算法的区别也就是 S i S_i Si的不同。

BN
S i = { k ∣ k C = i C } (3) S_i = \{k | k_C = i_C\} \tag{3} Si={kkC=iC}(3)
即,对同一个通道的像素进行归一化处理。

LN
S i = { k ∣ k N = i N } (4) S_i = \{k|k_N=i_N\} \tag{4} Si={kkN=iN}(4)
即,对用一个样本的像素进行归一化处理,和batch size的大小无关。

IN
S i = { k ∣ k N = i N , k C = i C } (5) S_i = \{k|k_N=i_N,k_C = i_C\} \tag{5} Si={kkN=iN,kC=iC}(5)
即,对同一样本的同一通道的像素进行归一化处理,和batch size的大小无关。

BN,LN和IN都学习了一组参数 ( γ , β ) (\gamma,\beta) (γ,β)来补偿归一化造成的表示能力的减弱。
y i = γ x i ^ + β (6) y_i = \gamma \hat{x_i} + \beta \tag{6} yi=γxi^+β(6)

Group Normalization:
GN用于计算均值和方差的像素集合 S i S_i Si为:
在这里插入图片描述
G表示组数,是预先定义的超参数。GN的含义就是对同一个样本的各通道进行分组 ,然后对各组的像素进行归一化处理。GN也是对各个通道学习一组 γ \gamma γ β \beta β

GN和LN、IN的关系

如果设置G=1,那么GN就变成了LN。LN认为某层中的各通道具有相似的分布,对于卷积层来说,这个假设不是特别成立。GN的限制比LN要弱,只是认为一组通道具有相似的分布,不同组之间依然可以去学习不同的分布。如图4所示,GN比LN有更强的泛化能力。

如果设置G=C,则GN变为IN。IN只考虑了空间信息去计算均值和方差,并没有考虑通道之间的依赖关系。

tf实现Group Norm:
在这里插入图片描述pytorch实现了group norm函数,为torch.nn.GroupNorm2d();更多信息可以参考:https://blog.csdn.net/shanglianlm/article/details/85075706

4 实验

4.1 ImageNet分类实验

batch size较大时
在这里插入图片描述在这里插入图片描述
batch size比较大时,BN效果较好。但在训练集上GN优于BN,表明GN比BN更易于优化,GN在验证集上的效果略差于BN,表明GN的泛化能力略差于BN。这是因为BN中的随机组批操作引入了一定的不确定性,增强了泛化能力,而LN、IN和GN都没有这样的操作,因此也损失了一定的泛化能力。

batch size较小时:
在这里插入图片描述在这里插入图片描述对于BN来说,当batch size减小时,学习率也跟随调整。batch size为32时,学习率为0.1,如果batch size为N,则学习率调整为0.1N/32.

实验结果表明,随着batch size的减小,BN的分类误差在增加,而GN的误差则很稳定。这表明随着batch的减小,batch的均值和方差的不确定性在增加。GN在batch size减小的时候依然可以取得良好的效果,这样就可以在内存/显存受限的情况下去尝试更大的模型。

对比batch renorm
batch renorm是对BN计算的均值和方差进行限制,上限值设置为 γ m a x \gamma_{max} γmax d m a x d_{max} dmax。对ResNet-50,设置 γ m a x = 1.5 \gamma_{max} = 1.5 γmax=1.5 d m a x = 0.5 d_{max} = 0.5 dmax=0.5。当batch size为4时,使用ResNet50模型,BN的错误率为27.3%,BR的错误率为26.3%,GN的错误率为24.2%。

不同分组方式
按照固定的组数分组:组数大于1时的分类效果比组数等于1(LN)的时候更好。
按照固定的channel数分组:按照固定的channel数分组时,效果也比各通道一个组(IN)更好。
在这里插入图片描述

4.2 COCO的目标检测和分割

在这里插入图片描述
表4的第一行和第二行对比,使用Mask R-CNN时,可以发现GN比BN的效果更好。

对于FPN,使用GN替换BN,也可以取得更好的检测和分割效果。这里作者使用了4conv1fc替换2个全连接头,可以取得更好的效果。

5 总结

作者提出了GN,一种新的按照通道分组归一化的方法。该方法和batch size的大小无关。在不同类型的应用场景下,都显示了GN的有效性。然而,作者发现,由于前期BN的广泛应用,目前广泛应用的很多网络的超参数都是针对BN进行设计的,但是这些超参数并不适用于GN。重新设计新的网络结构或者使用新的超参数可能会取得更好的效果。

作者还建议可以在RNN/LSTM、GAN及增强学习中尝试使用GN。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值