论文认为Batch Normalization并不是网络的必要结构,反而会带来不少问题,于是开始钻研Normalizer-Free网络,心愿既有相当的性能也能反对大规模训练。论文提出ACG梯度裁剪办法来辅助训练,能无效避免梯度爆炸,另外还基于NF-ResNet的思维将SE-ResNet革新成NFNet系列,能够应用4096的超大batch size进行训练,性能超过了Efficient系列
起源:晓飞的算法工程笔记 公众号
论文: High-Performance Large-Scale Image Recognition Without Normalization
- 论文地址:https://arxiv.org/abs/2102.06171
- 论文代码:https://github.com/deepmind/deepmind-research/tree/master/nfnets
Introduction
目前,计算机视觉的大部分模型都得益于深度残差网络和batch normalization,这两大翻新可能帮忙训练更深的网络,在训练集和测试集上达到很高的准确率。特地是batch normalization,不仅可能平滑损失曲线,应用更大的学习率和batch size进行训练,还有正则化的作用。然而,batch normalization并不是完满,batch normalization在实践中有三个毛病:
- 计算耗费大,内存耗费多。
- 在训练和推理上的用法不统一,并且带来额定的超参数。
- 突破了训练集的minibatch的独立性。
其中,第三个问题最为重大,这会引发一系列的负面问题。首先,batch normalization使得模型难以在不同的设施上复现精度,而且分布式训练常常出问题。其次,batch normalization不能用于要求每轮训练样本独立的工作中,如GAN和NLP工作。最初,batch normalization对batch size非常敏感,在batch size较低时体现较差,限度了无限设施上的模型大小。
因而,只管batch normalization有很弱小的作用,局部研究者仍在寻找一种简略的代替计划,不仅须要精度相当,还要能用在宽泛的工作中。目前,大多数的代替计划都着力于克制残差分支的权值大小,比方在残差分支的开端引入一个初始为零的可学习的标量。但这些办法不是精度不够,就是无奈用于大规模训练,精度始终不如EfficientNets。
至此,论文次要基于之前代替batch normalization的工作,尝试解决其中的外围问题,论文的次要奉献如下:
- 提出Adaptive Gradient Clipping(AGC),以维度为单位,基于权值范数和梯度范数的比例进行梯度裁剪。将AGC用于训练Normalizer-Free网络,应用更大batch size和更强数据加强进行训练。
- 设计Normalizer-Free ResNets系列,命名为NFNets,在ImageNet上达到SOTA,其中NFNet-F1与EfficientNet-B7精度相当,训练速度快8.7倍,最大的NFNet可达到86.5%top-1准确率。
- 试验证实,在3亿标签的公有数据集上预训练后,再在ImageNet上进行finetune,准确率能比batch normalization网络要高,最好的模型达到89.2%top-1准确率。
Understanding Batch Normalization
论文探讨了batch normalization的几个长处,这里简略说一下:
- downscale the residual branch:batch normalization限度了残差分支的权值大小,使得信号偏差skip path间接传输,有助于训练超深的网络。
- eliminate mean-shift:激活函数是非对称且均值非零的,使得训练初期激活后的特征值会变大且均为负数,batch normalization恰好能够打消这一问题。
- regularizing effect:因为batch normalization训练时用的是minibatch统计信息,相当于为以后batch引入了噪声,起到正则化的作用,能够避免过拟合,进步准确率。
- allows efficient large-batch training:batch normalization可能平滑loss曲线,能够应用更大的学习率和bach size进行训练。
Towards Removing Batch Normalization
这篇论文的钻研基于作者之前的Normalizer-Free ResNets(NF-ResNets)进行拓展,NF-ResNets在去掉normalization层后仍然能够有相当不错的训练和测试准确率。NF-ResNets的外围是采纳$h_{i+1}=h_i+\alpha f_i(h_i/\beta_i)$模式的residual block,$h_i$为第$i$个残差块的输出,$f_i$为第$i$个residual block的残差分支。$f_i$要进行非凡初始化,使其有放弃方差不变的性能,即$Var(f_i(z))=Var(z)$。$\alpha=0.2$用于管制方差变动幅度,$\beta_i=\sqrt{Var(h_i)}$为$h_i$的标准差。通过NF-ResNet的residual block解决后,输入的方差变为$Var(h_{i+1})=Var(h_i)+\alpha^2$。
此外,NF-ResNet的另一个外围是Scaled Weight Standardization,用于解决激活层带来的mean-shift景象,对卷积层进行如下权值从新初始化:
其中,$\mu_i=(1/B)\sum_jW_{ij}$和$\sigma^2_i=(1/N)\sum_j(W_{ij}-\mu_i)^2$为对应卷积核的某行(fan-in)的均值和方差。另外,非线性激活函数的输入须要乘以一个特定的标量$\gamma$,两者配合确保方差不变。
之前公布的文章也有NF-ResNet的具体解读,有趣味的能够去看看。
Adaptive Gradient Clipping for Efficient Large-Batch Training
梯度裁剪可能帮忙训练应用更大的学习率,还可能减速收敛,特地是在损失曲线不现实或应用大batch size训练的场景下。因而,论文认为梯度裁剪能帮忙NF-ResNet适应大batch size训练场景。对于梯度向量$G=\partial L/\partial\theta$,规范的梯度裁剪为:
裁剪阈值$\lambda$是须要调试的超参数。依据教训,尽管梯度裁剪能够帮忙训练应用更大的batch size,但模型的成果对阈值$\lambda$的设定非常敏感,须要依据不同的模型深度、batch size和学习率进行粗疏的调试。于是,论文提出了更不便的Adaptive Gradient Clipping(AGC)。
定义$W^l\in\mathbb{R}^{N\times M}$和$G^l\in\mathbb{R}^{N\times M}$为$l$层的权值矩阵和梯度矩阵,$\|\cdot\|_F$为F-范数,ACG算法通过梯度范数与权值范数之间比值$\frac{\|G^l\|_F}{\|W^l\|_F}$来进行动静的梯度裁剪。在实际时,论文发现按卷积核逐行(unit-wise)进行梯度裁剪的成果比整个卷积核进行梯度裁剪要好,最终ACG算法为:
裁剪阈值$\lambda$为超参数,设定$\|W_i\|^{*}_F=max(\|W_i\|_F, \epsilon=10^{-3})$,防止零初始化时,参数总是将梯度裁为零。借助AGC算法,NF-ResNets能够应用更大的batch size(4096)进行训练,也能够应用更简单的数据加强。最优的$\lambda$需思考优化器、学习率和batch size,通过实际发现,越大的batch size应该应用越小的$\lambda$,比方batch size=4096应用$\lambda=0.01$。
ACG算法跟优化器归一化有点相似,比方LARS。LARS将权值更新值的范数固定为权值范数的比值$\Delta w=\gamma * \eta * \frac{\|w^l\|}{\|\nabla L(w^l)\|} * \nabla L(w^l_t)$,从而疏忽梯度的量级,只保留梯度方向,可能缓解梯度爆炸和梯度隐没的景象。ACG算法能够认为是优化器归一化的松弛版本,基于权值范数束缚最大梯度,但不会束缚梯度的上限或疏忽梯度量级。论文也尝试了ACG和LARS一起应用,发现性能反而降落了。
Normalizer-Free Architectures with Improved Accuracy and Training Speed
论文以带GELU激活的SE-ResNeXt-D模型作为Normalizer-Free网络的根底,除训练退出ACG外,次要进行了以下改良:
- 将$3\times 3$卷积变为分组卷积,每组的维度固定为128,组数由卷积的输出维度决定。更小的分组维度能够升高实践的计算量,但计算密度的升高导致不能很好地利用设备浓密计算的劣势,理论不会带来更多减速。
- ResNet的深度扩大(从resnNet50扩大至ResNet200)次要集中在stage2和stage3,而stage1和stage4放弃3个block的模式。这样的做法不是最优的,因为不论低层特色或高层特色,都须要足够的空间去学习。因而,论文先制订最小的F0网络的各stage的block数为$[1,2,6,3]$,后续更大网络都在此基础上以倍数扩大。
- ResNet的各stage维度为$[256,512,1024,2048]$,通过测试之后,改为$[256,512,1536,1536]$,stage3采纳更大的容量,因为其足够深,须要更大的容量去收集特色,而stage4不减少深度次要是为了放弃训练速度。
- 将NF-ResNet的bottleneck residual block利用到SE-ResNeXt中并进行批改,在原有的根底上增加了一个$3\times 3$卷积,在计算量上仅有大量的减少。
- 构建一个缩放策略来生产不同计算资源的模型,论文发现宽度扩大对网络增益不大,于是仅思考深度和输出分辨率的缩放。按后面说的,以倍数模式对根底网络进行深度扩大,同时缩放分辨率,使其训练和测试速度能达到上一个量级的一半。
- 当网络体积增大时,增强正则化强度。通过试验发现,调整weight decay和stochastic depth rate(训练过程随机使某些block的残差分支生效)都没有很大的收益,于是通过加大dropout的drop rate来达到正则化的目标。因为网络短少BN的显示正则化,所以这一步是非常重要的,避免过拟合的呈现。
根据上述的批改,得出的NFNet系列的各参数如表1所示。这里网络的最初有全局池化层,所以训练和测试的分辨率能够不一样。
Experiment
比照AGC在不同batch size下的成果,以及$\lambda$与batch size的关系。
在ImageNet比照不同大小的网络的性能。
基于ImageNet的10 epoch预训练权重,进行NF-ResNet革新并Fine-tuning,性能如表4所示。
Conclusion
论文认为Batch Normalization并不是网络的必要结构,反而会带来不少问题,于是开始钻研Normalizer-Free网络,心愿既有相当的性能也能反对大规模训练。论文提出ACG梯度裁剪办法来辅助训练,能无效避免梯度爆炸,另外还基于NF-ResNet的思维将SE-ResNet革新成NFNet系列,能够应用4096的超大batch size进行训练,性能超过了Efficient系列。
如果本文对你有帮忙,麻烦点个赞或在看呗~
更多内容请关注 微信公众号【晓飞的算法工程笔记】