关于算法:NFNetNFResNet的延伸不用BN的4096超大batch-size训练-21年论文

35次阅读

共计 4920 个字符,预计需要花费 13 分钟才能阅读完成。

论文认为 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 系列。



如果本文对你有帮忙,麻烦点个赞或在看呗~
更多内容请关注 微信公众号【晓飞的算法工程笔记】

正文完
 0