NFNet的学习笔记


前言

NFNets(Normalizer-Free ResNets)是DeepMind提出的一种不需要Batch Normalization 的基于Resnet的网络,其核心是AGC(adaptive gradient clipping technique,自适应梯度裁剪)技术。如下图所示,NFNet的最低版本都能够达到EfficientNet-B7的准确率,同时训练速度能够提高了8.7倍,最大版本的模型则达到了当时SOTA效果。


摘要

大多数图像分类模型都会使用BN作为模型的一部分,但由于依赖于批量大小和示例之间的交互,它具有许多不良特性。最近一些工作在没有归一化层的情况下成功地训练了深度 ResNet,但这些模型与最佳批量归一化网络的测试精度不匹配,并且对于大学习率或强数据增强通常不稳定。在这项工作中,作者开发了一种自适应梯度裁剪技术来克服这些不稳定性,并设计了一种显着改进的 Normalizer-Free ResNets。较小的模型在 ImageNet 上与 EfficientNet-B7 的测试准确度相匹配,同时训练速度提高了 8.7 倍,最大的模型达到了 86.5% 的新的最先进的 top-1 准确度。此外,在对包含 3 亿张标记图像的数据集进行大规模预训练后,在 ImageNet 上进行微调时,Normalizer-Free 模型的性能明显优于其批量归一化模型,最佳模型获得了 89.2% 的准确度。

1、引言

目前计算机视觉中的绝大多数最新模型都是深度残差网络的变体,经过批量归一化训练,这两种架构创新的结合能够帮助训练更深层次的网络,从而在训练集和测试集上都获得更高的准确度。批量归一化还可以平滑损失情况,这使得具有更大学习率和更大批量大小的稳定训练成为可能,并且它可以具有正则化效应。

然而,BN在实际使用中有三个缺点:

  • 首先,计算成本大,内存消耗大。
  • 其次,模型在训练期间和推理时之间使用方法存在差异,引入了额外的隐藏超参数。
  • 第三,打破了小批量训练样本之间的独立性。

其中,第三个问题最为严重,会引发一系列的负面影响。批量归一化是在分布式训练期间容易导致细微错误的原因。此外,批处理标准化不能用于某些任务,因为批处理中训练示例之间的交互会影响损失函数的变化。如果批量统计数据在训练期间有很大差异,批量归一化网络的性能也会降低。

batch normalization 的性能对batch size 很敏感,batch normalized 网络在batch size 太小时表现不佳,这限制了 在有限硬件上训练的模型大小。因此,尽管近年来批量标准化使深度学习社区取得了实质性进展,但还是有研究者在寻求一种简单的替代方案,它可以实现具有竞争力的测试精度,并且可以用于广泛的任务。

尽管已经提出了许多替代方案,但这些替代品通常会实现较差的测试精度并引入其自身的缺点,例如额外的计算成本推理。这些替代方案的关键主题是,通过抑制残差分支上隐藏激活的规模来训练非常深的 ResNets 而无需归一化。

比如在每个残差分支的末尾引入一个可学习的标量,初始化为零。然而,仅此技巧不足以在具有挑战性的基准测试中获得具有竞争力的测试精度。另一项工作表明,ReLU 激活引入了“均值偏移”,这导致不同训练示例的隐藏激活层随着网络深度的增加而变得越来越相关。这些非归一化网络与 ImageNet 上的批量归一化 ResNet 的性能相匹配,但它们在大批量大小时不稳定并且与当前最先进的EfficientNets性能不匹配。

本文建立在前任替代BN的基础上,并试图解决这些核心限制。论文主要贡献如下:

  • 提出了自适应梯度裁剪 (AGC),它基于梯度范数与参数范数的单位比来裁剪梯度,并且证明 AGC 允许训练具有更大批量和更强数据增强的无归一化器网络。

    • 设计了NormalizerFree的ResNets,称为NFNets,它在ImageNet上达到了新的SOTA,其中NFNet-F1 模型达到了与 EfficientNet-B7 相似的准确度,同时训练速度提高了 8.7 倍,最大的模型可以达到top-1 准确率为86.5%。

    • 实验表明,在对包含 3 亿张标记图像的大型私有数据集进行预训练后,在 ImageNet 上进行微调时,NFNets 的验证准确度明显高于批量归一化网络,最好的模型在微调后达到了 89.2% 的 top-1。

2、Understanding Batch Normalization(了解BN)

论文主要列出了Batch Normalization的四个优点,

  • Batch normalization downscales the residual branch:shortcut和BN的组合能够训练具有数千层的更深层次的网络。因为批量归一化放在残差分支上时,会限制初始化时残差分支上的权值大小。这会使信号偏向shortcut,从而确保网络在训练早期具有良好的梯度,从而实现高效优化。
  • Batch normalization eliminates mean-shift:非对称的激活函数都具有非零均值激活,导致激活的独立训练样本之间的内积通常很大且为正,即使输入特征之间的内积接近于零,批量归一化确保每个通道上的平均激活在当前批次中为零,从而消除了均值偏移 。
  • Batch normalization has a regularizing effect:BN还可以作为正则化器来提高测试集的准确性,因为批量统计数据中的噪声是在minibatch上计算的,可以通过调整batchsize或在分布式训练中使用幽灵批量归一化来提高网络的测试准确性。
  • Batch normalization allows efficient large-batch training:BN能够平滑损失曲线,使得可以使用更大的学习率以及batch size进行稳定训练。大批量训练可以在更少的参数更新中获得更高的测试准确度,并且在跨多个设备并行时提高训练速度。

3、Towards Removing Batch Normalization(消除批量归一化)

之前的大多数工作通过引入小常数或可学习标量来抑制初始化时resdiual block的规模。此外,通过额外的正则化来提高非规范化RESNet的性能。在这项论文中,作者基于之前的Normalizer-Free ResNets(NF-ResNets)进行拓展,NF-ResNets可以在没有normalization的情况下依旧达到很好的的训练和测试精度。NF-resnet采用 h i + 1 = h i + α f i ( h i / β i ) h_{i+1}=h_i + \alpha f_i(h_i/\beta_i) hi+1=hi+αfi(hi/βi)形式的residual block,其中 h i h_i hi表示第 i i i个残差块的输入, f i f_i fi表示由第i个残差分支计算的函数。函数 f i f_i fi被参数化为在初始化时保持方差不变,即对于所有 i i i V a r ( f i ( z ) ) = V a r ( z ) Var(f_i(z))=Var(z) Var(fi(z))=Var(z)。标量 α = 0.2 \alpha=0.2 α=0.2用来控制在每个剩余块(初始化时)之后激活方差增加的速率。标量 β i = V a r ( h i ) \beta_i=\sqrt{ Var(h_i)} βi=Var(hi) h i h_i hi的标准差,经过NF-ResNet的residual block后,方差输出为 V a r ( h i + 1 ) = V a r ( h i ) + α 2 Var(h_{i+1})=Var(h_i)+\alpha^2 Var(hi+1)=Var(hi)+α2

此外,NF-ResNets通过引入Scaled Weight Standardization(重量标准化的一个小修改)用来处理激活层中出现的均值偏移问题,该技术将卷积层权值初始化为:在这里插入图片描述
其中 µ i = ( 1 / B ) Σ j W i j , σ i 2 = ( 1 / N ) Σ j ( W i j − μ i ) 2 µ_i=(1/B)\Sigma_jW_{ij},σ_i^2=(1/N)\Sigma_j(W_{ij}- \mu_i)^2 µi=(1/B)ΣjWijσi2=(1/N)Σj(Wijμi)2分别表示卷积核某行(fan-in)的均值和方差。激活函数还通过非线性特定标量增益 γ \gamma γ进行缩放,二者组合确保了方差的不变。

在额外的正则化条件下,Normalizer-Free ResNet 与 ImageNet 上使用BN的 ResNet 在批量大小为 1024 时实现的测试精度相匹配。当batch size非常小时,它们的性能也显着优于同等使用BN的网络,但对于大批量(4096 或更高),它们的性能比使用BN的网络要差。

4、Adaptive Gradient Clipping for Efficient Large-Batch Training(用于高效大批量训练的自适应梯度裁剪)

作者探索了一系列梯度裁剪策略来帮助NF-ResNets 扩展到更大的batch size。
梯度裁剪通允许以更大的学习率进行训练,加速收敛。特别是对于条件不佳的损失情况或在大批量训练时尤其重要,因为在这些设置中,最佳学习率受到最大稳定学习率的限制。因此,作者认为设梯度裁剪有助于将 NF-ResNets 有效地扩展到大batch size。

梯度裁剪通常是通过约束梯度的范数来执行的。具体来说,对于梯度向量 G = ∂ L / ∂ θ G = \partial L/\partial \theta G=L/θ,其中 L 表示损失, θ \theta θ表示具有所有模型参数的向量,标准裁剪算法在更新 θ \theta θ 之前将梯度裁剪为:在这里插入图片描述
裁剪阈值 λ \lambda λ 是一个调整的超参数。根据经验,虽然这种裁剪算法能够以比以前更高的批量大小进行训练,但训练稳定性对裁剪阈值的设置极为敏感,需要根据模型深度、批量大小或学习率的改变进行相应的更改。为了解决这个问题,作者提出了更方便的“Adaptive Gradient Clipping” (AGC)。

定义 W l ∈ R N × M W^l\in\mathbb {R^{N\times M}} WlRN×M G l ∈ R N × M G^l\in\mathbb {R^{N\times M}} GlRN×M l l l层的权值矩阵和梯度矩阵, ∥ ⋅ ∥ \lVert\cdot\rVert 为F-范数,ACG算法通过梯度范数和权值范数直接比值 ∥ G l ∥ F / ∥ W l ∥ F {\lVert G^l\rVert F}/{\lVert W^l\rVert F} GlF/WlF来进行动态的梯度裁剪。在实践中,作者发现根据梯度范数与参数范数的单位比来裁剪梯度,我们发现采用按卷积核逐行(unit-wis)进行梯度裁剪的效果比在在整个卷积核上进行梯度裁剪效果要好。
最终AGC算法为:
在这里插入图片描述
裁剪阈值 λ 是一个标量超参数,定义 ∥ W i ∥ F ∗ = m a x ( ∥ W i ∥ F , ϵ = 1 0 − 3 ) \lVert {W_i}\rVert ^*_F = max(\lVert {W_i}\rVert _F,\epsilon=10^{-3} ) WiF=max(∥WiF,ϵ=103),可以防止零初始化时,参数始终将其梯度剪裁为零。使用 AGC,我们可以用更大的批量(高达 4096)稳定地训练 NF-ResNet,以及更强大的数据增强。最佳裁剪参数 λ 取决于优化器、学习率和批量大小的选择。根据实验发现,对于较大的batch size,λ 应该更小。

AGC 与“归一化优化器”的工作相类似,它通过选择一个自适应学习率与梯度范数成反比。例如LARS,它将权值更新的范数设置为权值范数的固定比值 △ w = γ ∗ η ∗ ∥ w l ∥ / ∥ ∇ L ( w l ) ∥ ∗ ∇ L ( w t l ) \bigtriangleup w= \gamma*\eta*\lVert w^l\rVert/\lVert \nabla L(w^l)\rVert *\nabla L(w^l_t) w=γηwl/L(wl)∥L(wtl),完全忽略了梯度幅度。 AGC 可以解释为标准化优化器的松弛版本,它根据权值范数约束最大梯度,但不会约束梯度的下限或忽略梯度量级。论文也尝试了ACG和LARS一起使用,但是反而导致性能下降了。

AGC的消融实验

作者在 ImageNet 上对预激活的NF-ResNet-50 和 NF-ResNet-200 进行了实验,使用 SGD 和 Nesterov 动量在 256 < batch size < 4096 之间训练了 90 个 epoch。基础学习率为0.1对应batch seize=256,它与批量大小成线性比例。尝试了一系列 λ 值,分别为 [0.01, 0.02, 0.04, 0.08, 0.16]。
在这里插入图片描述

在图 2(a) 中,作者将具有BN的 ResNet 与有和没有 AGC 的 NF-ResNet 进行了比较,展示了每个batch size最佳裁剪阈值 λ 处的测试准确度。从中发现 AGC 有助于将 NF-ResNet 扩展到更大的batch size,同时在 ResNet50 和 ResNet200 上保持与携带BN时相当或更好的性能。当批量较小时,使用 AGC 的好处较小。在图 2(b) 中,展示了在 ResNet50 上不同批大小的不同裁剪阈值 λ 的性能,可以看到更小(更强)的裁剪阈值对于更高批量的稳定性是必要的。

作者还研究 AGC 是否对所有层都有益。设置batchsize = 4096 和裁剪阈值 λ = 0.01,从第一个卷积、最终线性层和任何给定stage中的不同block的不同组合中移除 AGC。例如,一项实验可能会去除线性层中的裁剪以及第二和第四阶段中的所有块。从中发现:

  • 首先,最好不要裁剪最终的线性层。
  • 其次,通常可以在不裁剪初始卷积的情况下进行稳定的训练,但是在默认学习率为1.6batchsize=4096 进行训练时,必须裁剪所有四个阶段的权重以达到稳定性。
  • 对于本文的其余实验, AGC应用于除最终线性层之外的每一层。

5、Normalizer-Free Architectures with Improved Accuracy and Training Speed(具有更高准确性和训练速度的无归一化架构)

论文以带有 GELU 激活 的 SE-ResNeXt-D 模型 作为Normalizer-Free Networks 的基线。主要进行了以下更改。

  • 首先,将 3 × 3 convs 中的分组维度度(每个输出单元连接到的通道数)设置为 128,而不考虑块宽度。较小的分组维度会降低理论上的FLOPS,但计算密度的降低不能很好的利用现行设备的优势,实际不会带来更多的加速。
  • ResNets 的默认深度缩放模式是非均匀地增加第二和第三阶段的层数,同时在stage1和stage4同时保持 3 个block,其中“Stage”是指一系列resiual block ,这种策略是次优的。无论是早期的层还是后期的层,模型需要足够的容量来提取良好的局部特征。因此作者先为最小的模型变体 F0 确定了各stage的block数为 [1,2,6,3],后续的变体都是通过将每个阶段的深度乘以标量 N 来构造的。
  • ResNets 中的默认stage维度为 [256, 512, 1024, 2048]。在本文的具体实践中,使用stage维度为[256、512、1536、1536]的效果更好。增加stage3的容量,是由于该阶段足够深,可以拥有大的感受野并可以访问更深的特征层次结构的级别,同时具有比最终阶段略高的分辨率,同时略微降低第四阶段的容量,大致保持训练速度。
  • 将NF-ResNet的bottleneck residual block应用到SE-ResNeXt中并进行修改,在原有的基础上添加一个额外的 3×3 分组卷积。这种额外的卷积对 FLOPS 的影响最小,并且对训练时间几乎没有影响。
  • 建立了一种扩展策略用来在不同的计算预算下生成模型变体。 论文发现宽度缩放对 ResNet 主干网无效,于是采用缩放深度和训练分辨率,使得每个变体的训练速度大约是其前身的一半。以比我们训练时略高的分辨率评估推理图像,为每个变体选择比训练分辨率大约 33% 的分辨率。
  • 随着模型容量的增加,需要增加正则化强度。作者的实验发现修改权重衰减或随机深度率没有起到什么效果,调整Dropout 的下降率可以达到正则化的目的。这一步特别重要,因为模型没有显式正则化,往往会容易进入过拟合。

总结

首先,将Normalizer-Free 设置应用到 SE-ResNeXt-D,使用修改后宽度和深度方案,以及一个额外的卷积。其次,将 AGC 应用于除分类器层的线性权重之外的每个参数。对于 1024 到 4096 的批大小,设置 λ = 0.01,并利用强正则化和数据增强。
在这里插入图片描述
根据作者的修改,得到的NFNet系列的参数表如表1所示。
在这里插入图片描述

6、Experiments

在这里插入图片描述
表二中展现了逐步添加数据增强的效果,这些数据增强显着提高了性能。在最后一行,还展示了使用默认 ResNet 维度+数据增强的模型的性能,表明在第stage3和stage4进行修改的操作在直接比较下确实产生了改进。
在这里插入图片描述
表 3 中提供了六种模型变体(NFNet-F0 到 F5)的大小、训练延迟(在 TPUv3 和 V100 上使用张量核)和 ImageNet 验证准确度的详细信息,以及与具有类似训练延迟的其他模型的比较。 NFNet-F5 模型达到了 86.0% 的 top-1 验证准确率,比之前最先进的 EfficientNet-B8 和 MaxUp都略有提高,NFNet-F1 模型匹配具有 RA 的 EfficientNet-B7 的 84.7%,同时训练速度提高了 8.7 倍。
在这里插入图片描述
基于ImageNet进行10个epoch的预训练权重,进行ResNet改造并微调,结果如表4所示。结果表明在迁移学习机制中,去除BN可以直接有利于最终性能。
在这里插入图片描述
采用NFNets 作为backbone,使用 Mask-RCNN 和FPN训练模型在coco数据上的表现如表5所示。结果显示NFNet 无需任何修改即可成功替代下游任务,代替批量归一化的 ResNet 主干。

结论

论文首次展示了在没有归一化层的情况下训练的图像识别模型,不仅可以匹配大规模数据集上最佳批量归一化模型的分类精度,而且大大超过它们,同时仍然可以更快地训练。论文通过引入了AGC梯度剪裁方法来稳定大批量训练,并能够通过强大的数据增强来优化非归一化网络。利用这种技术和简单的架构设计原则,无需额外数据即可在 ImageNet 上获得最先进的性能,同时比竞争方法的训练速度要快得多。
.

学无止境。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值