您好,欢迎来到12图资源库!分享精神,快乐你我!我们只是素材的搬运工!!
  • 首 页
  • 当前位置:首页 > 开发 > WEB开发 >
    从800个GPU训练几十天到单个GPU几小时,看神经架构搜索如何退化
    时间:2020-05-08 21:15 来源:网络整理 作者:网络 浏览:收藏 挑错 推荐 打印

    行将开播:5月14日,Jenkins在K8S下的三种部署流程和实战演示

    神经架构搜索(NAS)取代了人类「第二阶」的调参任务,使我们能以两层黑箱的方式寻觅最优神经网络。这一形式假设能物美价廉地运用,自然是很诱人,要知道「800 个 GPU 训练 28 天」基本不是团体接受得起的。在本文中,作者为我们引见了 NAS 的退化史,即如何应用多种改良手腕,将训练成本紧缩到「伟人皆可介入」的水平。

    从800个GPU训练几十天到单个GPU几小时,看神经架构搜索如何退化

    神经架构搜索 (NAS) 改动了构建新神经网络架构的进程。这种技术可以自动地为特定成绩找到最优的神经网络架构。「最优」的定义可以看成是对多个特征之间的权衡进程停止建模,例如网络的大小和准确率 [1]。更令人印象深入的是,如今 NAS 在单个 GPU 上仅需执行 4 个小时,过去在 800 个 GPU 上需求执行 28 天。而完成这一飞跃只花了两年时间,如今我们不需求成为 Google 员工就可以运用 NAS。

    但是,研讨人员如何完成这一功用飞跃呢?本文将引见 NAS 的开展之路。

    催化剂

    NAS 的历史可以追溯到 1988 年的自组织网络思想 [2],但直到 2017 年 NAS 才取得了首个严重打破。事先训练循环神经网络 (RNN) 来生成神经网络架构的想法出现了。

    图 1:训练 NAS 控制器的迭代进程图示:训练控制器(RNN),以概率 p 采样架构 A,训练架构 A 的子网络失掉准确率 R,计算 p 的梯度并且乘以 R 用于更新控制器。

    复杂地说,这个进程相似于人类手工寻觅最佳架构的进程。基于最优操作和超参数的预定义搜索空间,控制器将测试不同的神经网络配置。在这种状况下,测试配置意味着组装、训练和评价神经网络,以察看其功用。

    经过屡次迭代后,控制器将了解哪些配置可以构成搜索空间内的最佳神经网络。不幸的是,在搜索空间中找出最优架构所需的迭代次数十分大,因此该进程十分缓慢。

    其部分缘由是搜索空间遭受了组合爆炸的影响,即搜索空间中能够的网络数量随着添加到搜索空间的组件数量而大大添加。但是,这种办法确实可以找到以后最佳 (SOTA) 网络,该网络如今被称为 NASnet [3],但它需求在 800 个 GPU 上训练 28 天。如此高的计算成本使得搜索算法对大少数人来说都是不实在践的。

    那么,如何改良这一想法使其更容易运用呢?在 NAS 训练进程中,大部分耗时来自于训练和评价控制器建议的网络。运用多个 GPU 可以并行训练模型,但它们的独自训练进程所耗时间依然相当长。增加训练和评价神经网络的计算成本将对 NAS 的总搜索时间产生很大的影响。

    这就引出了一个成绩:如何在不对 NAS 算法产生负面影响的状况下,降低训练和评价神经网络的计算成本?

    降低保真度估量

    众所周知,较小的神经网络比较大的神经网络训练速度更快。缘由很复杂,较小网络的计算成本较低。但是,就准确率而言,较小的神经网络通常比较大的神经网络功用更差。NAS 的目的是找到 SOTA 网络架构,那么能否有办法可以在不牺牲最终功用的状况下,在搜索算法中运用较小的模型呢?

    图 2:ResNet 架构示例,其中残差块表示为「ResNet Block」。

    答案可以在最著名的计算机视觉架构 ResNet [4] 中找到。在 ResNet 架构中,我们可以察看到同一组操作被一遍又一遍地重复。这些操作构成残差块,是 ResNet 的构建块。这种设计形式使得研讨者可以经过改动堆叠残差块的数量,来创立同一模型的更深或更浅的变体。

    此架构设计中隐含的假定是,可以经过迭代地堆叠结构良好的构建块,来创立高功用的更大型网络,这种做法完全适宜 NAS。在 NAS 的语境下,这意味着先训练和评价小模型,然后扩展该神经网络。例如,先在 ResNet18 上执行 NAS,然后经过重复失掉的构建块来构建 ResNet50。

    用搜索构建块替代搜索整个架构,以及训练和评价较小的模型,可以极大地提高速度,研讨者完成了在 450 块 GPU 上仅消耗 3-4 天的搜索时间 [5]。此外,即使只搜索构建块,该技术也可以找到 SOTA 架构。

    但是,虽然这是一项庞大改良,但整个进程依然相当缓慢,并且要想投入实践运用,训练所需的 GPU 数量必须增加。无论模型大小如何,从零末尾训练神经网络一直是一个耗时的进程。有没有一种办法可以重用以前训练好的网络中的权重呢?

    权重承袭

    如何避免从头末尾训练神经网络?答案是运用权重承袭,即从另一个曾经训练过的网络中借用权重。在 NAS 中,搜索是在特定的目的数据集上停止的,并且有多个架构同时训练。为什么不重用权重,只更改架构呢?毕竟,搜索进程的目的是寻觅架构而不是权重。为了完成重用权重,我们需求用更严厉的结构定义来限制搜索空间。

    图 3:NAS 单元被建模为有向无环图(Directed Acyclic Graph),其中边表示操作,节点表示计算单元,计算单元转换并组合先前节点来创立新的隐藏形状。

    经过定义允许在搜索构建块中存在的隐藏形状的数量,搜索空间变得十分有限。换句话说,构建块内操作的能够组合数量较大,但并非有限。假设将隐藏形状排序,并将它们的拓扑预定义为有向无环图 (DAG),则搜索空间如图 3 所示。

    运用这个搜索空间,我们可以把控制器建议的架构看作是来自更大网络的子网络,其中较大的网络和子网络共享相反的隐藏形状(节点)。

    当控制器建议运用某个网络架构时,这意味着选择一组衔接(边)的子集,并为隐藏形状(节点)分配新的操作。这种方式意味着很容易以编码方式保存节点上操作的权重,从而完成权重承袭。在 NAS 设置中,这意味着以前架构的权重可以用作下一个采样网络的初始化 [6]。众所周知,初始化可以很好地独立于义务或操作 [7] 运转,且由于没有从头末尾训练模型,因此可以停止更快的训练。

    (责任编辑:admin)