专栏首页机器之心超越EfficientNet,GPU上加速5倍,何恺明组CVPR 2020论文提出新型网络设计范式

超越EfficientNet,GPU上加速5倍,何恺明组CVPR 2020论文提出新型网络设计范式

选自arXiv

作者:Ilija Radosavovic等

机器之心编译

机器之心编辑部

近日,何恺明大神组又发了一篇新论文,提出了一种新的网络设计范式。与以往研究不同,他们没有专注于设计单个网络实例,而是设计出了参数化网络群的网络设计空间。这种新的网络设计范式综合了手工设计网络和神经架构搜索(NAS)的优点。在类似的条件下,他们设计出的网络超越了当前表现最佳的 EfficientNet 模型,在 GPU 上实现了 5 倍的加速。目前,该论文已被 CVPR 2020 接收。

论文链接:https://arxiv.org/pdf/2003.13678.pdf

引言

尽管神经架构搜索(Neural Architecture Search,NAS)的有效性已经得到了证明,但其范式依然存在限制。搜索结果往往是仅仅符合特定设置(如硬件平台)的单个网络实例。这在某些情况下足以但却不能帮助我们发掘出那些能够加深理解且泛化到新设置的网络设计准则。总之,我们需要创建一些易于理解、继承和泛化的简单模型。

在本文中,包括何恺明在内的几位 FAIR 研究者提出了一种新型网络设计范式,它能够充分结合手工设计和神经架构搜索的优势。他们不再将注意力放在单个网络实例的设计上,而是设计出了参数化网络群的设计空间。

既像手工设计一样,研究者追求可解释性,并且旨在发现通用设计准则以描述那些结构简单、运行良好且不同设置下均能适用的网络。又像神经架构搜索一样,研究者充分利用半自动化流程来帮助实现这些目标。

如下图 1 所示,研究者所采取的整体策略是渐进式地设计原始的、相对不受约束的简化版设计空间,同时保持或提升设计空间的质量。整体流程与手动设计类似,但提升到了数量级(population level),并且以网格设计空间的分布估计作为依据。

设计空间的设计示意图。

两个设计空间设计:AnyNet 和 RegNet

作为新型网络设计范式的实验平台,研究者的重点放在了探索网络结构(如宽度、深度、群组等)上,并假定标准模型包括 VGG、ResNet 和 ResNeXt。

具体而言,研究者首先创建了一个相对不受约束的设计空间,称之为 AnyNet。在这种设计空间中,宽度和深度可以实现跨阶段的自由改变。然后,他们通过人机回圈(human-in-the-loop)方法创建了一个由简单「规则」网络组成的低维设计空间,称之为 RegNet。RegNet 设计空间的核心原理很简单:各个阶段的宽度和深度由量化线性函数决定。与 AnyNet 相比,RegNet 设计空间的模型更简单、更容易解释以及更加浓缩的好模型。

通过在 ImageNet 数据集上使用单个网络块类型,研究者以一种低计算量、少迭代次数的方式设计了 RegNet 设计空间,然后验证了 RegNetS 设计空间可以泛化到更大的计算机制、调度长度(schedule length)和网络块类型。此外,设计空间设计的一大重要特性是它的解释性更强,并且可以使我们学到一些深刻见解。

通过分析,研究者得到一个有趣的发现,RegNet 设计空间不符合当前网络设计惯例。举例而言,他们发现,最佳模型的深度在不同的计算机制下依然保持稳定,并且没有用到瓶颈或反向瓶颈。

实验结果:较标准 ResNe(X)t 和 EfficientNet 均有显著提升

如下表 2 所示,研究者对 top RegNet 模型与现有网络在不同设置下的性能进行了对比。结果发现,RegNet 模型在移动机制下非常有效。他们希望这些简单的模型可以作为今后研究中的强大基线。

表 2:移动机制下 RegNet 模型与现有网络的性能对比。

如下表 3 所示,在所有度量指标上,RegNet 模型都较标准 ResNe(X)t 模型有了显著的性能提升。研究者特别强调了在固定激活函数上的性能提升,这是因为激活函数的数量能够对 GPU 等加速器上的运行时产生极大的影响。

表 3:RegNet 模型与标准 ResNe(X)t 模型的性能对比。

如下表 4 所示,研究者对不同计算机制下 RegNet 模型和 SOTA EfficientNet 模型进行了对比。结果显示,在类似训练设置和 flop 下,RegNet 模型优于 EfficientNet 模型,并且 GPU 上的速度提升 5 倍。此外,他们还测试了模型在 ImageNetV2 上的泛化能力。

表 4:在标准训练流程下,RegNet 模型与 SOTA EfficientNet 模型的对比。

最后,研究者注意到,网络结构是人们可以想到的形式最简单的设计空间设计。将注意力放在设计更丰富的设计空间上(如包含运运算符),则可能创建出更好的网络。但需记住一点,网络结构或许依然是此类设计空间的核心组件。

设计空间设计

AnyNet 设计空间

AnyNet 设计空间的基本基本网络设计非常简单。给定一个输入图像,一个包含简单主干的网络,然后是执行大部分计算的网络主体,最后是预测输出类别的网络头(见下图 3a)。研究者保持主干和头固定并尽可能简单。他们关注网络主体的结构,这是决定网络计算量和准确度的核心。

图 3:本文设计空间中模型的一般网络结构。

网络主体由 4 个阶段(stage)组成,运行时分辨率逐渐降低(见图 3b)。每个阶段由一系列相同的块组成(见图 3c)。

总的来说,对于每个阶段 i,自由度包括块的数量 d_i、块的宽度 w_i 和其他块参数。虽然总体结构很简单,但 AnyNet 设计空间中可能存在的网络总数是巨大的。

此项研究中的实验大多使用包含分组卷积的标准残差 bottleneck 块,如下图 4 所示。研究者将其称之为 X block,构建在其上的 AnyNet 设计空间就被称为 AnyNetX。虽然 X block 非常简单,但结果显示,它在网络结构得到优化时非常有效。

图 4:X block 基于标准残差 bottleneck 块。

在 AnyNetX 上,研究者的目的是:1)简化设计空间的结构;2)提高设计空间的可解释性;3)提高或保持设计空间质量;4)保持设计空间中的模型多样性。

现在将上述方法应用到 AnyNetX 设计空间中。

研究者将起初不受约束的 AnyNetX 设计空间命名为 AnyNetXA。

首先,他们测试了 AnyNetXA 设计空间的所有阶段 i 的共享 bottleneck 比例 b_i = b,并将得到的设计空间称为 AnyNetXB。

与之前一样,他们在相同的设置下从 AnyNetXB 采样并训练了 500 个模型。如图 5(左)所示,AnyNetXA 和 AnyNetXB 的 EDF 在平均情况和最佳情况下实际上是相同的。这表示在耦合 b_i 时没有准确度损失。除了更简单之外,AnyNetXB 更易于分析,参见图 5(右侧)。

第二个改进步骤紧挨着第一个。从 AnyNetXB 开始,研究者为所有阶段使用共享的组宽度 g_i = g 来获得 AnyNetXC。

与前面一样,EDF 几乎没有变化,请参见图 5(中)。总的来说,AnyNetXC 比 AnyNetXA 少了 6 个自由度,设计空间大小减少了近 4 个数量级。有趣的是,他们发现 g > 1 是最好的。

接下来,他们研究了 AnyNetXC 中良好和不好的网络的典型网络结构。一种模式出现了:良好的网络具有不断增长的宽度。研究者测试了 w_i+1≥w_i 的设计原则,并将此约束下的设计空间称为 AnyNetXD。在图 7(左)中可以看到这极大地改进了 EDF。

在进一步检验多个模型后,研究者观察到另一个有趣的趋势。除了阶段宽度 w_i 随 i 增加外,对于最佳模型,阶段深度 d_i 也同样趋向于增加,尽管不一定是在最后阶段。

在图 7(右)中,研究者测试了一个设计空间变体 AnyNetXE,其中 d_i+1≥d_i,并看到它的结果也得到了改善。最后,他们注意到对于 w_i 和 d_i 的约束使设计空间减少了 4!,与 AnyNetXA 相比累计减少了 O(10^7)。

RegNet 设计空间

经过一系列的设计步骤,研究者得到了一个简化的设计空间,它只包含名为 RegNet 的常规网络结构。

RegNetX 的误差 EDF 见图 9(左)。在维护最佳模型的同时,RegNetX 中的模型在平均误差方面要优于 AnyNetX。如图 9(中)所示,研究者测试了两个进一步的简化。首先,使用 w_m = 2(两个阶段之间增加一倍的宽度)可以稍微改进 EDF,但是研究者注意到使用 w_m≥2 的性能更好。其次,他们进一步测试设置 w_0 = w_a,将线性参数化简化为 u_j = w_a·(j + 1)。有趣的是,这样做的效果更好。然而,为了保持模型的多样性,研究者没有施加任何限制。最后,如图 9(右)所示,研究者展示了 RegNetX 的随机搜索效率要高得多,只搜索 32 个随机模型就可能得到好的模型。

下表 1 显示了设计空间大小的大致情况(对于 RegNet,研究者通过量化其连续参数来估计大小)。在设计 RegNetX 时,他们将原始 AnyNetX 设计空间从 16 个维度缩减为 6 个维度,大小缩减接近 10 个数量级。但是,研究者注意到,RegNet 仍然包含各种各样的模型,可以针对各种设置进行调优。

设计空间泛化

开发团队仅在 single block 的类型中以低计算量,low-epoch 的训练环境中设计 RegNet 设计空间。但是,其本质并不是仅仅为单一环境去设计 RegNet,目的是探索可以覆盖至新型网络设计的一般原理。

如下图,在更高的 flops、epochs、5-stage 网络以及各类 block types 下,将 RegNetX 的设计空间与 AnyNetXA 和 AnyNetXE 进行了对比。

在所有情况下,设计空间的对比顺序都较为一致,RegNetX > AnyNetXE > AnyNetXA。换句话说,就目前为止看不到任何过拟合的迹象,也因此证明了 RegNet 是可以泛化至各类新设置中去。同时,5-stage 的结果表明,RegNet 的常规结构可以泛化至更多的 Stages 中,而其中的 AnyNetXA 也会具有更多的自由度。

作者信息

这篇论文的作者共有 5 位,均来自 Facebook AI Research(FAIR)。

其中,论文一作 Ilija Radosavovic 现于伦敦帝国理工学院任本科助教,同时本人也是帝国理工 CS 专业研究生毕业,此前在 Facebook 实习。

Raj Prateek Kosaraju:双硕士学位,毕业于佐治亚理工及斯坦福,现担任 FAIR 研究工程师。

Ross Girshick:UC Berkeley 博士后,现也就职于 FAIR,主要研究视觉感知以及视觉推理方向。

Kaiming He:何恺明大神在此就不赘述了,第一篇论文「Single ImageHaze Removalusing Dark Channel Prior」就被 CVPR 选为年度最佳论文。此外,机器之心也有过大神相关的报道解读,不熟悉的朋友可以翻看历史记录自行复习。

Piotr Dollar:加州大学圣迭戈校博士,FAIR 的 Research Manager,此前在微软也是从事相关方向的研究。

本文为机器之心编译,转载请联系本公众号获得授权。

本文分享自微信公众号 - 机器之心(almosthuman2014)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-04-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 用AI设计微波集成电路,清华大学等提出深度强化学习方法RINN

    微波集成电路(MWIC)是人类智慧、经验和直觉碰撞的产物。工程师使用计算机辅助设计工具来分析和解决 MWIC 问题,然后试图寻找最佳解决方案。这一过程非常枯燥、...

    机器之心
  • KDD 2019 | 自动探索特征组合,第四范式提出新方法AutoCross

    论文:AutoCross: Automatic Feature Crossing for Tabular Data in Real-World Applicat...

    机器之心
  • 绝佳的ASR学习方案:这是一套开源的中文语音识别系统

    ASRT 是一套基于深度学习实现的语音识别系统,全称为 Auto Speech Recognition Tool,由 AI 柠檬博主开发并在 GitHub 上开...

    机器之心
  • Redis缓存技术的应用?-北京锐智互动

    Redis是一款免费开源的遵守BSD协议,是高性能的NOsql 缓存 Key-value数据库。Redis支持数据持久化,可以在将内存中的数据保持在词牌当中,重...

    北京锐智互动
  • 【漏洞预警】Redis主从同步代码执行漏洞预警通告

    Redis是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

    绿盟科技安全情报
  • ISUX走进纽约与台北高校

    今年4月,腾讯ISUX两位资深设计师,分别前往纽约和台北,进行暑期实习生招聘宣讲。让我们看看他们都有哪些见闻和感受吧。

    腾讯ISUX
  • Git示例教程 - 同步本地分支的添加删除状态到远程(或反之)

    为了方便测试,我们先在GitHub上创建一个名为git-test-repo的仓库,然后将其克隆到本地,之后,我们再用相应的命令创建一个测试分支,并将其同步到远端...

    wangyuntao
  • 【C/C++】10分钟教你用C++写一个贪吃蛇附带AI功能(附源代码详解和下载)

    刚学完C++。一时兴起,就花几天时间手动做了个贪吃蛇,后来觉得不过瘾,于是又加入了AI功能。希望大家Enjoy It.

    短短的路走走停停
  • Flyweight享元模式(结构型模式)

    虽然OOP能很好的解决系统抽象的问题,并且在大多数的情况下,也不会损失系统的性能。但是在某些特殊的业务下,由于对象的数量太多,采用面向对象会给系统带来难以承受的...

    郑小超.
  • 10分钟教你用C++写一个贪吃蛇附带AI功能(附源代码详解和下载)

    刚学完C++。一时兴起,就花几天时间手动做了个贪吃蛇,后来觉得不过瘾,于是又加入了AI功能。希望大家Enjoy It.

    用户1621951

扫码关注云+社区

领取腾讯云代金券