← 返回 PaperDaily 视觉与图像

何恺明参与!Group Norm让小批量训练不再翻车

Batch Norm 一遇到小批量就容易“犯怵”,这篇论文直接给出替代方案:把通道切成组,在组内做归一化,既稳又好迁移。对检测、分割、视频这类显存紧张任务尤其友好。

何恺明参与!Group Norm让小批量训练不再翻车
🐉 龙哥读论文知识星球来了!
公众号每日8篇拆解不够看?星球无上限更AI领域论文、资讯、招聘、招博、开源代码,一站式干货,每日2分钟刷完即赚!
👇扫码加入「龙哥读论文」知识星球,前沿干货、实用资源一站式拿捏~ xingqiu_header

龙哥导读:
Batch Norm 一遇到小批量就容易“犯怵”,这篇论文直接给出替代方案:把通道切成组,在组内做归一化,既稳又好迁移。对检测、分割、视频这类显存紧张任务尤其友好。


原论文信息如下:
论文标题:
Group Normalization
发表日期:
2018年03月
发表单位:
Facebook AI Research (FAIR)
原文链接:
https://arxiv.org/pdf/1803.08494
项目链接:
https://github.com/facebookresearch/Detectron/blob/master/projects/GN

打破Batch Norm的小批量魔咒?Group Normalization来了

深度学习里有个老毛病:Batch Normalization,简称 BN一旦遇到小批量,脾气就开始不稳定。图像分类还能勉强撑住,到了检测、分割、视频这些显存吃紧的任务,BN 常常像被迫穿小鞋,走两步就别扭。
这篇来自 Facebook AI Research 的论文没有搞花里胡哨的新骨干,而是直接对着“归一化”下手:既然 BN 依赖 batch 统计,那就干脆别碰 batch,改成按通道分组,在组内做归一化。这就是 Group Normalization,简称 GN
Group Normalization 示例输出图
图:使用 Group Normalization 训练的 Mask R-CNN 示例输出效果。GN 不只是“训练时看着顺眼”,它还真的能把检测和分割任务一起照顾到。
龙哥先剧透一句:这篇论文最狠的地方,不是“又发明了一个归一化”,而是它把很多任务里 BN 的老问题,几乎一刀切掉了。

归一化方式大比拼:BN、LN、IN与GN的区别

先把基础概念捋清楚。所谓归一化,本质上就是让某一层的特征别“忽高忽低”,免得训练像坐过山车。做法通常是先减去均值,再除以标准差,最后再乘一个可学习的缩放参数、加一个可学习的平移参数。这样既能稳住数值分布,又不会把模型表达能力直接掐死。
图2:BN、LN、IN 与 GN 的归一化方式对比
图2:归一化方式对比。蓝色部分表示被同一组均值和方差一起处理的元素。BN 按 batch 维度算,LN 按整层通道算,IN 按单样本单通道算,GN 则是在“单样本 + 通道分组”这个折中位置上动脑筋。
BN 的英文全称是 Batch Normalization,中文是批归一化。它在每个通道上,把同一个 batch 里的样本和空间位置一起统计。好处是训练快、效果常常好;坏处是 batch 一小,统计就容易抽风。
LN 是 Layer Normalization,中文可理解为层归一化。它不看 batch,而是对单个样本的所有通道一起算统计量,所以 batch 再小也不怕。但在卷积网络里,所有通道被“一锅炖”,有时会把本来有差异的特征硬拧成一团,表达力会受影响。
IN 是 Instance Normalization,中文是实例归一化。它更“抠门”,对每个样本、每个通道单独在空间维度上算统计量。它在风格迁移、生成模型里很常见,但在视觉识别任务里,过于独立也会让通道之间的协作被削弱。
GN 则是 Group Normalization,中文是组归一化。它不再把通道看成一整坨,也不把每个通道拆得太碎,而是先把通道切成若干组,再在组内计算均值和方差。说白了就是:别一锅炖,也别一粒一粒炒,分小锅炒最稳。

GN的原理很简单:通道分组,独立归一化

GN 的核心公式并不吓人,甚至可以说“朴素得有点过分”。先看标准化这一步:
GN标准化公式
图:标准化公式。这里的 xi 是某个位置的特征值,μi 是对应分组的均值,σi 是标准差。先减均值、再除标准差,属于归一化界的老规矩。
均值和方差怎么来?论文给出的是:
均值和方差计算公式
图:均值与标准差的计算方式。Si 表示“跟当前位置 i 共享同一统计范围”的元素集合,m 是集合大小,ε 是防止除零的小常数。GN 的关键,不是公式变复杂了,而是 Si 的定义变聪明了。
BN、LN、IN 的区别,本质上就是“统计谁”。BN 统计同通道的 batch + 空间;LN 统计单样本的所有通道 + 空间;IN 统计单样本单通道的空间;GN 则统计单样本里某一组通道的空间。GN 的集合定义写成数学语言是:
GN的分组定义公式
图:GN 的分组定义。这里 G 是组数,默认通常设为 32。直白点说,通道数如果是 128,就可以分成 32 组,每组 4 个通道;如果通道数不一样,组大小也会跟着调整。
最后别忘了,GN 也保留了可学习的缩放和平移:
可学习缩放和平移公式
图:归一化后再做仿射变换。γ 负责缩放,β 负责平移。归一化不是把特征“洗白”,而是把它们整理得更好学。
插图
GN 还有一个很讨喜的地方:实现极其简单。论文甚至给了 TensorFlow 代码示意,意思就是——别把它想成什么玄学新层,很多框架里改几行统计维度就能用起来。
图3:GN 的 TensorFlow 代码示意
图3:GN 的 TensorFlow 实现示意。代码层面真不复杂,核心就是把均值和方差的统计轴换掉。对工程同学来说,这种方法最大的魅力就是:改动小,收益大

效果惊人:小批量下性能稳如狗,大批量也不差

论文最关键的不是“GN 看起来合理”,而是它真的在实验里站住了。先看 ImageNet 上常规 batch size=32 的情况,这属于 BN 的舒适区,也是最能检验 GN 是否“只是小批量特化”的地方。
图4:ResNet-50 在 ImageNet 上的训练和验证误差曲线
图4:batch size=32 时,ResNet-50 的训练误差和验证误差曲线。BN 依然很强,GN 也没有掉链子,最终验证误差只比 BN 高约 0.5 个百分点。这说明 GN 并不是“只会在小批量时捡漏”,它在正常设置下也能打。
更有意思的是,GN 的训练误差甚至低于 BN,说明它在优化上并不吃亏。BN 的一点点验证优势,很可能来自 batch 统计带来的随机性正则化;GN 没有这种噪声,所以泛化上略逊一筹,但差距很小,完全不是“一个天上一个地下”。
表1:ImageNet 验证集上的误差率对比
表1:ResNet-50 在 ImageNet 验证集上的误差率。BN 为 23.6%,LN 为 25.3%,IN 为 28.4%,GN 为 24.1%。这张表很关键,因为它说明 GN 在 BN 最擅长的场景里也能保持接近表现,并且明显优于 LN 和 IN。
真正让 BN 破防的是小批量。论文把每个 GPU 的 batch size 从 32 一路降到 2,结果 BN 的误差像坐滑梯一样往上冲,而 GN 基本稳得一批。
图5:不同 batch size 下 BN 与 GN 的敏感性对比
图5:不同 batch size 下 BN 与 GN 的验证误差对比。BN 的曲线随着 batch 变小明显恶化,而 GN 的曲线几乎横着走,稳定性非常夸张。
表2:不同 batch size 下的敏感性对比
表2:batch size 从 32 降到 2 时,BN 的误差从 23.6% 飙到 34.7%,GN 则基本维持在 24% 左右。最夸张的是 batch size=2 时,GN 比 BN 低了 10.6 个百分点。这个差距不是“略胜一筹”,而是“直接把对方按在地上摩擦”——当然,学术表达里还是得克制一点。
为什么会这样?因为 BN 的统计量来自 batch,batch 越小,均值方差估计越不准,噪声越大。GN 不依赖 batch,所以天然绕开了这个坑。对显存紧张的任务来说,这意味着可以不必为了“喂饱 BN”而被迫牺牲输入分辨率、模型容量或者时间长度。
论文还比较了 Batch Renorm。它是给 BN 打补丁的思路,但本质上还是围着 batch 转。结果在 batch size=4 时,Batch Renorm 的误差是 26.3%,仍然明显不如 GN 的 24.2%。这说明 GN 不是“修修补补过日子”,而是换了条更稳的路。
表3:不同分组方式对 GN 结果的影响
表3:分组方式对结果的影响。组数太少会接近 LN,组数太多又会接近 IN。实验表明,中间地带更合适,说明“适度分组”确实能兼顾表达力和稳定性。
论文还用 VGG-16 看了特征分布演化。没有归一化时,特征分布会乱飘;加了 BN 或 GN 后,分布明显更稳定。这个现象说明,归一化的作用不是“锦上添花”,而是实打实地帮网络把中间特征管住,不然训练过程就容易像没拧紧的水龙头,哗哗往外跑。
图6:VGG-16 特征分布演化与验证误差
图6:VGG-16 最后卷积层输出分布的演化情况。GN 和 BN 都能把特征分布控制住,而且 GN 在这个设置下还略优于 BN。说明 GN 并不是“只在残差网络里灵”,它在别的卷积网络上也能工作。

多任务验证:分类、检测、视频,GN全都能打

如果 GN 只是在 ImageNet 上好看,那还不够。论文接着把它扔到更现实的任务里:目标检测、实例分割、视频分类。因为这些任务往往更吃显存,batch 更小,也更容易暴露 BN 的软肋。
在 COCO 上做 Mask R-CNN 时,BN 通常会被“冻结”成一个线性层,这个做法论文里记作 BN*。这里的星号不是高贵加成,而是提醒你:它已经不是正常训练时的 BN 了,而是把训练时学到的均值方差固定下来,避免小 batch 继续把它搞崩。
表4:COCO 上 C4 骨干的检测与分割结果
表4:在 COCO 的 Mask R-CNN C4 骨干上,GN 相比 BN* 提升了 1.1 个框 AP 和 0.8 个掩码 AP。这里最值得注意的是:即使 GN 在 ImageNet 上只比 BN 略低一点,迁移到检测和分割后依然能反超,说明它的“跨任务迁移友好”不是嘴上说说。
论文进一步在 FPN 骨干上测试。这里 GN 不仅能放进 backbone,还能放进 box head、mask head。结果显示,只给 head 上 GN 就已经有提升;把 backbone 也换成 GN 后,效果还能继续涨。换句话说,GN 的优势不是只在“预训练阶段”发光,而是在“微调阶段”也能继续发热。
表5:COCO 上 FPN 骨干与 4conv1fc 头部的结果
表5:FPN 设置下,GN 在 box head 和 backbone 上都能带来收益。尤其值得一提的是,BN* 在 head 上并不占便宜,因为 RoI 采样本身就不是严格独立同分布,小 batch 再叠加非独立样本,BN 的统计更容易失真。GN 不看 batch,反而省心。
更狠的是“从零训练”场景。很多检测系统默认依赖 ImageNet 预训练,但 GN 让 Mask R-CNN 在 COCO 上从头训练也能跑出很强的结果。这个点非常实用,因为现实工程里并不是每次都能优雅地先训个大分类模型再迁移。
表6:COCO 上 Mask R-CNN + FPN 的检测与分割结果
表6:COCO 检测与分割结果汇总。可以看到 GN 在 ResNet-50、ResNet-101 上都能稳定提升,并且训练更久后还能继续往上走。对于实际项目来说,这种“训练更自由”的方法比单纯刷一个分类指标更有价值。
视频分类也没逃过 GN 的覆盖范围。Kinetics 上的 3D 卷积网络同样面临 batch 小、时间维度长的问题,BN 很容易被卡住。GN 在这里依然保持了更稳的验证曲线,说明它并不是只对二维图像友好,而是对“卷积特征 + 小批量”这类结构性问题更普适。
图7:Kinetics 上 BN 与 GN 的误差曲线
图7:Kinetics 上 ResNet-50 I3D 的误差曲线。batch size 较小时,GN 明显比 BN 稳。这个结果很有说服力,因为视频任务对显存更敏感,GN 的价值也就更容易被放大。
表8:Kinetics 上的视频分类结果
表8:Kinetics 上的最终分类结果显示,GN 同样能在视频分类任务里站稳脚跟。也就是说,它不是只在某一个数据集上“碰巧灵”,而是在多种视觉任务中都能稳定发挥。
插图

总结与展望:GN会是下一个归一化霸主吗?

GN 的贡献,归根结底是把一个很现实的问题讲透了:当 batch 变小,BN 的估计会变得不可靠。而视觉任务里,小 batch 并不是“偶尔出现的边角料”,而是高分辨率输入、检测、分割、视频里几乎躲不开的常态。
GN 的聪明之处在于,它没有试图把 BN 的问题硬修补到完美,而是直接绕开 batch 统计。这样做的代价是少了一点 BN 的随机正则化,但换来的是稳定、可迁移、对硬件更友好的训练方式。对于工程实践来说,这种选择非常务实。
不过 GN 也不是万能药。它的分组数需要设定,虽然默认 32 组通常挺稳,但不同网络、不同任务未必永远最优;另外,GN 失去了 BN 那种来自 batch 统计的额外噪声,某些任务上泛化未必天然占优。换句话说,GN 是一个更稳的默认选项,但不是“闭眼乱用也必胜”的神丹妙药。
从后来的发展看,GN 的思路也很有启发:当一个训练技巧被硬件、batch size 或任务结构卡住时,最优雅的办法往往不是继续加补丁,而是重新定义“应该统计什么”。这个思路后来在很多归一化和特征建模方法里都能看到影子。

龙迷三问

下面是龙哥对于大家可能的一些问题的解答:

这篇论文到底解决了什么问题?它解决的是 BN 对小批量过于敏感的问题。GN 不依赖 batch 统计,因此在检测、分割、视频这类 batch 很小的任务里更稳定。

BN* 是什么意思?BN* 指的是把 BN 冻结后再用于微调。也就是训练时不再重新计算 batch 统计,而是用预训练阶段的均值和方差固定住它,避免小 batch 把它继续搞乱。

GN 为什么常设 32 组?因为它在论文的实验里表现很稳,属于一个比较通用的折中点。组太少会像 LN,组太多会像 IN,中间这个范围通常更平衡。

如果你还有哪些想要了解的,欢迎在评论区留言或者讨论~

龙哥点评

论文创新性分数:★★★★☆ GN 的想法不算炫技,但切中了 BN 的结构性痛点,属于“简单但很对”的创新。

它没有发明复杂模块,而是重新定义归一化的统计范围,这种思路很干净。

实验合理度:★★★★★ 从 ImageNet 到 COCO 再到 Kinetics,覆盖了分类、检测、分割、视频,且对比了 BN、LN、IN、Batch Renorm,实验链条完整。

尤其是小 batch 的设置非常有说服力,正好命中 GN 的主战场。

学术研究价值:★★★★★ 它把“归一化不一定非要依赖 batch”这件事做成了可复用的方法,对后续视觉模型和小批量训练都有启发。

研究价值很扎实,不靠玄学,靠的是方法论上的重新取舍。

稳定性:★★★★☆ 在小 batch 任务里明显更稳,但分组数仍需设定,不同结构下还要做一点调参。

总体已经很适合实战,只是还谈不上“无脑通吃”。

适应性以及泛化能力:★★★★★ 分类、检测、分割、视频都能用,跨任务表现很强。

这类方法最难得的就是不挑场景,GN 在这点上很争气。

硬件需求及成本:★★★★☆ 训练和推理本身并不重,甚至能缓解小 batch 带来的硬件压力。

真正的优势是让显存更紧张的任务不必为了 BN 妥协。

复现难度:★★★★★ 公式和实现都很直接,论文也给了清晰的实验设置,代码思路容易落地。

对工程团队来说,这是很友好的那种研究。

产品化成熟度:★★★★☆ 在小 batch、检测、分割、视频等场景已经很成熟,适合作为默认归一化候选。

但在超大 batch 或特定正则化依赖很强的场景,仍需结合任务再做选择。

可能的问题:GN 很稳,但不是自动最优;分组数需要选,且少了 BN 的随机正则化,某些任务上泛化未必总是最强。

它更像一个可靠的工程底座,而不是一招通杀的神兵。

主要参考文献

Yuxin Wu, Kaiming He. Group Normalization. arXiv:1803.08494, 2018.
Facebook AI Research. Detectron 项目代码:https://github.com/facebookresearch/Detectron/blob/master/projects/GN
项目演示图:https://github.com/facebookresearch/Detectron/raw/main/projects/GN/gn.jpg

归一化这事,BN 不是唯一答案。想看更多“能落地、能复现、能少踩坑”的 AI 论文拆解,欢迎加入龙哥读论文星球~

end
欢迎加入龙哥读论文粉丝群,扫描下方二维码或者添加龙哥助手微信号加群:kangjinlonghelper。一定要备注:研究方向+地点+学校/公司+昵称(如 图像处理+上海+清华+龙哥),根据格式备注,可更快被通过且邀请进群。
『龙哥读论文』微信群目前包含:图像处理、大模型及智能体、自动驾驶及机器人、AI医疗及AI金融5个群
wechat_helperdianzan
转发文章 微博 X LinkedIn Facebook
龙哥读论文 · PaperDaily

本文基于龙哥读论文 PaperDaily 数据库整理,结合论文原文与工程视角进行解读。