BatchNorm的一些问题,读Rethinking “Batch“ in BatchNorm笔记,结合自己之前做person re-id的研究经历,深表认同

Facebook 21年的一篇论文:
https://arxiv.org/abs/2105.07576
也参看了 这位同学的笔记:https://zhuanlan.zhihu.com/p/380620373
反思了batch所能带来的问题,论文共讨论了BatchNorm的四个方面:

1、Population Statistics:EMA是否能够准确估计全局统计量以及PreciseBN;
2、Batch in Training and Testing:训练采用mini-batch统计量,而测试采用全局统计量,由此带来的不一致问题;
3、Batch from Different Domains:BatchNorm在multiple domains中遇到的问题;
4、Information Leakage within a Batch:BatchNorm所导致的信息泄露问题;

训练初期EMA算出来的均值、方差和实际客观的全局均值、方差有偏差,一个准确的全局统计量应该是:使用整个训练集作为一个batch计算特征的均值和方差,但是这个计算成本太高了,论文中提出采用一种近似方法来计算:首先采用固定模型(训练好的)计算很多mini-batch;然后聚合每个mini-batch的统计量来得到全局统计量。公式表示:每个batch的均值、方差为在这里插入图片描述
那么全局统计量可以近似这样计算:
在这里插入图片描述
这种BatchNorm称为PreciseBN

两个概念:(1)normalization batch size(NBS):实际计算统计量的mini-batch的size;(2)total batch size或者SGD batch size:每个iteration中mini-batch的size,或者说每执行一次SGD算法的batch size;两者在多卡训练过程是不等同的(此时NBS是per-GPU batch size,而SyncBN可以实现两者一致)

避免训练和测试的inconsistency可选方案是训练也采用全局统计量,常用的方案是Frozen BatchNorm (FrozenBN)(训练中直接采用EMA统计量模型无法训练),FrozenBN指的是采用一个提前算好的固定全局统计量,此时BatchNorm的训练优化就只有一个linear transform了。FrozenBN采用的情景是将一个已经训练好的模型迁移到其它任务,如在ImageNet训练的ResNet模型在迁移到下游检测任务时一般采用FrozenBN。

包含BatchNorm的模型训练过程包含两个学习过程:一是模型主体参数是通过SGD学习得到的(SGD training),二是全局统计量是通过EMA或者PreciseBN从训练数据中学习得到(population statistics training)。当训练数据和测试数据分布不同时,我们称之为domain shift,这个时候学习得到的全局统计量就可能会在测试时失效,这个问题已经有论文提出要采用Adaptive BatchNorm来解决,即在测试数据上重新计算全局统计量。如果不存在明显的domain shift,原始处理方式是最好的

Information Leakage within a Batch
BatchNorm面临的另外一个挑战,就是可能出现信息泄露,这里所说的信息泄露指的是模型学习到了利用mini-batch的信息来做预测,而这些其实并不是我们要学习的,因为这样模型可能难以对mini-batch里的每个sample单独做预测。比如BatchNorm的作者曾做过这样一个实验,在ResNet50的训练过程中,NBS=32,但是保证里面包含16个类别,每个类别有2个图像,这样一种特殊的设计要模型在训练过程中强制记忆了这种模式(可能是每个mini-batch中必须有同类别存在),那么在测试时如果输入不是这种设计,效果就会变差。

SyncBN在数据并行分布式训练时,将各显卡上分配的数据汇总到一起进行规范化处理,也就是计算所有数据全局的均值和方差。

此外还有 shuffle BN、global BN等.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值