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


选自Medium
作者:Erik Lybecker
机器之心编译
参与:NeuR
神经架构搜索(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) 来生成神经网络架构的想法出现了 。

机器之心从800个GPU训练几十天到单个GPU几小时,看神经架构搜索如何进化
本文插图
图 1:训练 NAS 控制器的迭代过程图示:训练控制器(RNN) , 以概率 p 采样架构 A , 训练架构 A 的子网络得到准确率 R , 计算 p 的梯度并且乘以 R 用于更新控制器 。
简单地说 , 这个过程类似于人类手工寻找最佳架构的过程 。 基于最优操作和超参数的预定义搜索空间 , 控制器将测试不同的神经网络配置 。 在这种情况下 , 测试配置意味着组装、训练和评估神经网络 , 以观察其性能 。
经过多次迭代后 , 控制器将了解哪些配置能够构成搜索空间内的最佳神经网络 。 不幸的是 , 在搜索空间中找出最优架构所需的迭代次数非常大 , 因此该过程十分缓慢 。
其部分原因是搜索空间遭受了组合爆炸的影响 , 即搜索空间中可能的网络数量随着添加到搜索空间的组件数量而大大增加 。 然而 , 这种方法确实能够找到当前最佳 (SOTA) 网络 , 该网络现在被称为 NASnet [3] , 但它需要在 800 个 GPU 上训练 28 天 。 如此高的计算成本使得搜索算法对大多数人来说都是不切实际的 。
那么 , 如何改进这一想法使其更容易使用呢?在 NAS 训练过程中 , 大部分耗时来自于训练和评估控制器建议的网络 。 使用多个 GPU 可以并行训练模型 , 但它们的单独训练过程所耗时间仍然相当长 。 减少训练和评估神经网络的计算成本将对 NAS 的总搜索时间产生很大的影响 。
这就引出了一个问题:如何在不对 NAS 算法产生负面影响的情况下 , 降低训练和评估神经网络的计算成本?
降低保真度估计
众所周知 , 较小的神经网络比较大的神经网络训练速度更快 。 原因很简单 , 较小网络的计算成本较低 。 然而 , 就准确率而言 , 较小的神经网络通常比较大的神经网络性能更差 。 NAS 的目标是找到 SOTA 网络架构 , 那么是否有方法可以在不牺牲最终性能的情况下 , 在搜索算法中使用较小的模型呢?
机器之心从800个GPU训练几十天到单个GPU几小时,看神经架构搜索如何进化
本文插图
图 2:ResNet 架构示例 , 其中残差块表示为「ResNet Block」 。
答案可以在最著名的计算机视觉架构 ResNet [4] 中找到 。 在 ResNet 架构中 , 我们可以观察到同一组操作被一遍又一遍地重复 。 这些操作构成残差块 , 是 ResNet 的构建块 。 这种设计模式使得研究者可以通过改变堆叠残差块的数量 , 来创建同一模型的更深或更浅的变体 。