1 引言

NFNet是目前CNN-backbone中精度最高的模型;

2 主要贡献

NFNet的主要创新点如下所示:

  • NFNet
  • AGC

3 论文译读

论文链接:High-Performance Large-Scale Image Recognition Without Normalization

摘要

   一般来说,Batch Normalization (BN) 在图像分类的模型中是一个十分重要的组件,但是同时也有着一些不理想的特性,这些特性是来源于对batch-size的依赖和样本间的相互作用。尽管近期的研究成果在未使用归一化层的基础上也能成功地训练ResNet模型,但是这些模型在测试集上的精度还是不如最好的batch-normalized网络,并且在使用较大学习率和较强数据增广时会不太稳定。在本文中,作者使用了一种自适应梯度裁剪的技巧来克服上述的不稳定因素,从而设计出一种提升很大的无归一化ResNet的改进版本。NFNet的轻量级模型在ImageNet上的精度与EfficientNet-B7模型相当,不过训练速度却是EfficientNet-B7模型8.7倍左右,最大的模型获得了86.5%的精度。除此之外,在3亿带标签数据的数据集上进行大规模预训练并在ImageNet上微调后,Normalizer-Free的方法比同等的batch-normalized方法效果更好,最好的NFNet模型取得了89.2%的精度。

3.1 引言

  在计算机视觉领域,近期大多数的模型都是深度残差网络的变体,并且在训练时都会用到批归一化。这两种架构创新的结合使得研究人员在训练更深的神经网络时在训练集和测试集上都能取得更高的精度。批归一化不仅可以平滑损失曲面——使在大学习率和大批次大小的情况下进行稳定的训练,而且它还有着正则化(在这里指“先验约束”的意思)的效果。
  不过,在实现上,BN有三个明显的缺点。首先,批归一化是一个计算代价昂贵的算子,容易导致内存溢出,并且在某些网络中会增加用来评估梯度的时间消耗。其次,批归一化会引入模型在训练和测试时行为的不一致【Summers & Dinneen, 2019】,带来需要进行微调的隐藏超参数。第三,最为关键的是,批归一化会打破minibatch中训练样本间的独立性。
  第三个特性会带来一系列负面结果。举例来说,研究人员发现,批归一化的神经网络在不同的硬件上通常很难复现,并且批归一化往往就是这种微小的实现错误的原因,这一点在分布式训练时表现的尤为明显。除此之外,批归一化在某些任务(例如:后面提到的对比学习算法)上也无法使用,这是由于一个批次中的训练样本间的相互作用会使网络对某些损失函数造成“欺骗”。举例来说,批归一化在某些对比学习的算法中需要特别注意防止信息泄露}。这种重大的问题在序列建模的任务中同样存在,使促使语言模型转向使用其它替代的归一化方法(例如LN)。批归一化的神经网络的性能在训练时,如果批次数据的统计量如果有较大的方差,也会出现性能的下降【Shen et al., 2020】。最后一点是,批归一化的性能对于批次大小的设置也较为敏感,当批次大小很小时,批归一化的神经网络的表现也会差强人意【Hoffer et al., 2017; Ioffe, 2017; Wu & He, 2018】,这一点限制了在有限硬件上进行训练的模型大小。在章节3.B中介绍了BN面临的一些挑战。
  因此,尽管批归一化使得深度学习的社区在近些年获得了实质性的增益,但同时从长远来看它也有可能会阻碍进展。作者认为深度学习社区会寻求一种测试精度高且可以用于一系列通用任务上简单的替代方案。尽管研究者们提出了许多替代的归一化方法【Ba et al., 2016; Wu & He, 2018; Huang et al., 2020),】,这些替代方案往往表现出差强人意的测试精度并且会带来它们自身的一些局限性,例如在推理时额外的计算代价。幸运的是,近些年来出现了两项具有发展前景的研究课题。第一项研究了批归一化在训练阶段增益的原因【Balduzzi et al., 2017; Santurkar et al., 2018; Bjorck et al., 2018; Luo et al., 2018; Yang et al., 2019; Jacot et al., 2019; De & Smith, 2020】,而第二项研究期望能在不使用归一化层的情况下来训练深度ResNet网络模型【Hanin & Rolnick, 2018; Zhang et al., 2019a; De & Smith, 2020; Shao et al., 2020; Brock et al., 2021】。
  这些工作中展现出的一个关键主题,就是通过抑制残差分支上隐藏激活值的范围,可以在无归一化的情况下训练很深的ResNet模型。最简单的实现此目标的方法就是在每个残差分支的末端引入一个可学习的标量参数,并且初始化为0【Goyal et al., 2017; Zhang et al., 2019a; De & Smith, 2020; Bachlechner et al., 2020).】。然而,这一技巧本身不足以在挑战性的基准上获得具备竞争力的测试准确性。在一项最近的工作中,Brock等人提出了“Normalizer-Free”的ResNet模型\cite{brock_2021},该模型在初始化阶段对残差分支进行抑制并且使用Scaled Weight Standardization来去除均值漂移。通过额外的正则化,这些无归一化网络与归一化网络在ImageNet上的性能相当,但是在较大批次大小时仍然不稳定并且与当今先进的EfficientNet系列模型仍然存在一定差距。NFNet期望解决这些核心局限性。其主要贡献如下:

  • 提出 Adaptive Gradient Clipping (AGC)方法,此梯度裁剪的方法是基于梯度范数与参数范数的逐单元比值,并且AGC方法还可以在较大批次大小和较强数据增广下对 Normalizer-Free Network进行训练。
  • 设计了 Normalizer-Free Network的家族模型,称为NFNets,此类模型在一系列训练延迟下取得了ImageNet数据集上领先的验证准确性(见图1)。其中NFNet-F1模型实现了与EfficientNet-B7模型相当的准确率,不过NFNet-F1模型的训练速度是EfficientNet-B7模型的8.7倍,并且其中最大的模型在未使用额外数据的情况下获得了领先的86.5%的top-1准确率。
  • 文章表明在对包含3亿张标记图像的大型私有数据集进行预训练后,在 ImageNet上进行微调时,,NFNets模型实现了比批归一化模型更高的验证集精度。其中最好的模型在经过微调后获得了89.2%的top-1分数。

3.2 理解批归一化

  为了在不使用归一化训练网络的情况下获得同等的精度,需要理解批归一化在训练阶段带来的益处,并找出替代策略来获得同等收益。这里列举了四种由之前的工作确认的主要益处。

结论

文章展示了,图像识别模型在不使用归一化层下的训练结果可以与SOTA归一化模型的结果相当,甚至超越已有的归一化模型,同时NFNet还具备更快的训练速度。为了实现快速训练,本文提出了AGC算法,一种简单梯度裁剪算法,此算法可以实现大batch下的稳定训练,并且可以在强数据增略下对无归一化网络进行优化。通过使用AGC方法和简单的设计原则(即前文的模型范式),本文提出了一系列ImageNet上的SOTA模型,并且没有使用额外数据(without extra data),同时NFNet比对比方法要快很多。实验也显示Normalizer-Free模型比对应归一化模型更适合大规模数据集上的“预训练+微调”。

3.B BN的不足

BN带来了许多益处,正如在章节3.2中描述的一样,但是它也有一些缺点,本文在章节3.1中对这些缺点进行了讨论。除此之外,这里列举了一些在流行框架和文献中BN实现的问题。其中一些错误是由【Pham et al. (2019)】确定的,这篇文章使用自动化测试的方法在Keras中找出两个这样的错误,在CNTK工具集中找出一个这样的错误。

3 模型设计

3.1 Novel Design

Dropout层——“随机丢弃”

NFNet模型在训练时使用了Dropout层,这是令我十分惊讶的;
Note:在训练时Dropout不会生效,
(参考于/benjs/nfnets_pytorch/blob/master/nfnets/model.py)

4 Loss函数—— categorical softmax cross-entropyloss

NFNet使用交叉熵损失;

NFNet的学习笔记相关推荐

  1. PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call

    您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...

  2. 容器云原生DevOps学习笔记——第三期:从零搭建CI/CD系统标准化交付流程

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  3. 容器云原生DevOps学习笔记——第二期:如何快速高质量的应用容器化迁移

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  4. 2020年Yann Lecun深度学习笔记(下)

    2020年Yann Lecun深度学习笔记(下)

  5. 2020年Yann Lecun深度学习笔记(上)

    2020年Yann Lecun深度学习笔记(上)

  6. 知识图谱学习笔记(1)

    知识图谱学习笔记第一部分,包含RDF介绍,以及Jena RDF API使用 知识图谱的基石:RDF RDF(Resource Description Framework),即资源描述框架,其本质是一个 ...

  7. 计算机基础知识第十讲,计算机文化基础(第十讲)学习笔记

    计算机文化基础(第十讲)学习笔记 采样和量化PictureElement Pixel(像素)(链接: 采样的实质就是要用多少点(这个点我们叫像素)来描述一张图像,比如,一幅420x570的图像,就表示 ...

  8. Go 学习推荐 —(Go by example 中文版、Go 构建 Web 应用、Go 学习笔记、Golang常见错误、Go 语言四十二章经、Go 语言高级编程)

    Go by example 中文版 Go 构建 Web 应用 Go 学习笔记:无痕 Go 标准库中文文档 Golang开发新手常犯的50个错误 50 Shades of Go: Traps, Gotc ...

  9. MongoDB学习笔记(入门)

    MongoDB学习笔记(入门) 一.文档的注意事项: 1.  键值对是有序的,如:{ "name" : "stephen", "genda" ...

最新文章

  1. 感受 lambda 之美!
  2. db2 CLP中如何换行啊
  3. 好程序员三期Android高端班开班典礼-乱世看我称雄
  4. wp8.1 Study7: ListView 和GridView应用
  5. KMP Trie 例题讲解
  6. HTML——meta标签
  7. mysql open table_MySQL open table
  8. 【ES9(2018)】String 扩展 标签模板里字符串转义
  9. gettimeofday函数使用《代码》
  10. 解决 mac ssh空闲 连接断开问题
  11. psd文件用什么打开?如何修改psd文件?psd样式怎么修改文字?
  12. es统计有多少个分组_ElasticSearch 分组查询的几个例子
  13. 动态网页抓取——学习笔记
  14. 163vip邮箱登陆入口,怎么登录163邮箱?
  15. python实现12306抢票,春节不用担心买不到票回家了
  16. OBCE首位认证 实力与颜值并存 | 90后技术宅郑皓嘉的通关之路
  17. 2018年AI和ML(NLP、计算机视觉、强化学习)技术总结和2019年趋势(上)...
  18. Web 应用防火墙如何添加域名
  19. 【论文阅读】SABRE: Protecting Bitcoin against Routing Attacks
  20. 软件企业需要每年年审吗?

热门文章

  1. DataTable 中各种计算(笔记)
  2. HTMLCSS 第二天 笔记
  3. ComboBox信息读取
  4. git更新pull报错Pulling 1 repository Remote does not have refs/heads/rel5.1 available for fetch
  5. Lua-泛型for循环 pairs和ipairs的区别
  6. [转]Spring中的ContextLoaderListener使用
  7. JFreeChart画折线图
  8. 分享基于silverlight的一个大文件上传控件
  9. 小姐姐给我讲,一听就懂的财务报表
  10. RedHat停止维护CentOS!CentOS 创建者发起新项目,刚上线空白项目Star数已破两千