【arxiv2021】High-Performance Large-Scale Image Recognition Without Normalization -----deepmind
原文链接
这是NFnet的下半部论文,上半部论文请参考Normalizer-Free ResNets(上)论文笔记
contribution
- 采用AGC解决上一个关于normalizer-free工作的batchsize大就崩溃的问题
- 整体性能上调过了efficientnet系列
intro
resnet+BN 的架构可以保证训练更深网络,更稳定,regularizing
BN实际上为了抑制relu激活函数的偏移,避免随着训练深度提取positive part 时不再center的问题
- transformation-> center and rescale,追求一个well-behaved的数据集
但是有三个缺点:
-
额外的memory 和computation,增加计算梯度时的buffer负担和时间
-
discrepancy 在training 和 inference ,训练的时候需要计算mean shift 和 scaling,推理时不再需要batch dependence
-
BN 打破了了minibatch中的sample之间的independence
- batch越大,mean越近似真实均值,越不可能是噪声,batchsize 变得matter了
- distributed training时,多个分块到BN 需要统一计算,否则偏差会大。
- 部署时效果变差
- 用BN 对于某些损失函数来说会是一种cheat,如序列化预测,后一段话的内容实际是这次的label,information leakadge ,和contrastive learning中可能会出现batch内信息泄露问题
- 数据表现不好时更加对于batch size敏感,越大越好
BN好在哪,怎么替代
优点:
- BN downscale the residual branch 使训练更stable,在训练初期well-behaved gradients
- eliminate mean-shift 避免积累误差导致初始化后训练的网络对于所有样本同一个label
- regularizing effect
- smooth the loss landscape,允许large-batch的训练
优点:
回顾了之前的工作,并指出1.没超过effnet,这不完美,2.batch大了会奔溃,这不art.
Adaptive Gradient Clipping (AGC)
标准的gradient clipping:
AGC:
从公式上看把问题转化为对超参
λ
\lambda
λ的调参(把一个调参转化为另一个调参),取决于优化器,batchsize,学习率,模的比值。并且这个认为权重变化与权重整体比值过大不可取,所以设计了这个F范数比值,相当于给了一定知识。但最终还是要调
λ
\lambda
λ.顺提提了LARS忽略了gradient magnitude,AGC是松弛了的normalized optimizers。有用过LARS能稳定但是performance不好。作者采用的unit-wise norm说经验上比layer-wise norm ratios好。
从图上看,AGC好像只是解决了batchsize大了训练崩塌的问题,并没有带来accuracy的提高,右图也就说明了bs大了
λ
\lambda
λ不能开太大。
做了不同层去掉AGC的消融实验得到两结论:1.最好不要在最后的线性层clip,2 学习率大,bs大的时候,稳定训练必须需要AGC。
NF+AGC
首先背刺efficientnet,虽然理论上计算复杂度低,但是在现实部署并没有转化为切实的速度提高,Effnet-B0与ResNet-50在gpu和tpu有着近似的训练时间和表现性能。(这一段表达好好学学,自己是manual模型,在这种大环境下如何说NAS短又不至于使得业内太过反感)
baseline:SE-ResNeXt-D model+ GELU activations
- group width(the number of channels each output unit is connected to)in 3*3 conv 设为128,理论上小width会减少计算density但不一定意味着在现实gpu上速度的提升,举例TPUv3上group width为8与128速度一样。
- resnet scale增加的时候(50->101->200),第二,三stages非均匀增加层数,一,四stages保持3 blocks,早期层高分辨率,高内存高计算,倾向计算localized泛化的特征,后期层低分辨,大量参数,计算任务导向的特征。这样次优。早期过多下采样可能会hurt提取local feature的performance F0的deep pattern[1,2,6,3 ]
- width pattern:实验得到只有一个高于原resnet->[256,512,1536,1536],stage 3是最适合增加capacity的位置
- bottleneck residual block:最好的提升来自在第一个后加一个额外的3*3 grouped conv。
- 尽管efficientnet联合scale了model的width,depth和输入resolution。但这种更适合直通slim的mobilenet.对于restnet来说,width scaling是无效的。所以固定width,只scale depth和input resolution。另外eval的时候输入图像比train的时候resolution大一些,平均约33%。
- 模型capacity增加的时候更应注意regularization,但无法通过BN来显式正则,修改权重衰减和stochastic depth rate无效,所以用回dropout,调参scale drop rate来regularization,再次调参。
summary总结trainning recipe,看了summary也许就不用看上面每步的解释和理由了?
Experiments
翻来覆去写着两字“有钱”,3亿图像预训练,充足显卡资源,有兴趣能复现还是自己原文和附录细看吧。
说完模型sota后肯定还是要说回no BN 带来的benefit,下图显示在迁移学习3亿图像预训练模型时,NF比BN 好。解释是NF没有像BN这样隐式的regularization,而BN 倾向于在较大的数据集上过拟合,用迁移学习的实验说明,NF相比BN适合预训练后finetune的任务
强调top1精确度89.2%是现有用额外数据方法第二(第一是semi-supervised learning baseline,也就是用了Meta pseudo
labels的effnet),但是是用迁移学习的第一。
最后强调了自己的贡献点:
- 是第一个在大型数据集用没有BN层网络在分类精度上不仅比得上而且超过有BN的SOTA网络,而且训练还比他快
- 引入了AGC,使得可以用strong data augmentation和大batchsize
- 提出NFnet系列,在imagenet达到现有不用额外数据的SOTA
- 发现NFnet相比其有BN的版本更适合在预训练后finetune
appendix
介绍了模型细节以及训练细节,并且列举出现在的BN实现库的一些bug和之前实验的negative的results的例子,很有意思,如果人人献出一点爱,大家都能少走弯路。