谷歌云提出渐进式神经架构搜索:高效搜索高质量CNN结构

李飞飞最近宣布谷歌在中国正式设立了人工智能研究中心,参阅《刚刚,李飞飞在谷歌开发者大会宣布谷歌 AI 中国中心正式成立》;同时她自己参与的人工智能研究也仍在继续出炉发布。在本月初发布在 arXiv 上的一项研究中,来自谷歌多个部门的研究者提出了一种渐进式神经架构搜索方法,可用于高效地搜索 CNN 结构。该论文的第一作者为来自约翰·霍普金斯大学的谷歌实习生 Chenxi Liu,另外还有李佳、李飞飞以及《Machine Learning: A Probabilistic Perspective》作者 Kevin Murphy 等人。

论文:渐进式神经架构搜索(Progressive Neural Architecture Search)

论文地址:https://arxiv.org/abs/1712.00559

摘要

我们提出了一种比之前的方法更高效的用于学习 CNN 结构的方法:我们没有使用强化学习(RL)或遗传算法(GA),而是使用了基于序列模型的优化(SMBO)策略,我们在其中按复杂度逐渐增大的顺序搜索架构,同时学习一个用于引导该搜索的代理函数(surrogate function),类似于 A* 搜索。我们的方法在 CIFAR-10 数据集上找到了一个与 Zoph et al. (2017) 的强化学习方法有同等分类准确度(3.41% 错误率)的 CNN 结构,但速度却快 2 倍(在所评估的模型的数量方面)。我们的方法的表现也优于 Liu et al. (2017) 的遗传算法方法,它得到的模型的表现更差(3.63% 错误率),而且耗时还长 5 倍。最后我们还表明我们在 CIFAR 上学习到的模型也能在 ImageNet 分类任务上取得良好的效果。尤其是我们得到的表现足以与当前最佳水平媲美:top-1 准确度达 82.9%,top-5 准确度达 96.1%。

1 引言

在这篇论文中,我们描述了一种可以学习 CNN 的方法,而且这种方法足以媲美之前的最佳结果并且在架构搜索过程中仅需要大约一半的模型样本。我们的起点是 Zoph et al. (2017) 所提出的结构化搜索空间,其中搜索算法的任务是搜索优良的卷积「单元」,而不是搜索完整的 CNN。一个单元包含 B 个「模块」,其中一个模块是一个应用于两个输入(张量)的组合算子(比如加法),这两个输入在被组合之前都可以进行变换(比如使用卷积)。然后将这种单元结构堆叠一定的次数,具体数量取决于训练集的大小以及我们想要的最终模型的运行时间。尽管结构化空间能显著简化搜索过程,但可能的单元结构的数量仍然非常巨大。因此,在更高效地搜索这一空间的研究上还存在很多机会。

我们的方法类似于 A* 算法(也被称为分支限界法),其中我们从简单到复杂搜索模型空间,并在前进过程中剪枝处理掉没有前途的模型。这些模型(单元)按照它们所包含的模块的数量进行排序。我们从考量带有一个模块的单元开始。我们评估这些单元(通过训练它们并在一个验证集上计算它们的损失),然后使用观察得到的奖励来训练一个基于 RNN 的启发式函数(也被称为代理函数),其可以预测任何模型的奖励。我们可以使用这个学习到的启发式函数来决定应该评估哪些带有 2 个模块的单元。在对它们进行了评估之后,我们再对这个启发式函数进行更新。重复这一过程,直到我们找到带有所想要的模块数量的优良单元。

我们的渐进式(从简单到复杂)方法有一些优点。首先,简单模型的训练速度更快,所以我们可以快速得到一些用于训练该代理函数的初始结果。第二,我们仅要求该代理函数预测模型的质量,而这些模型与它之前已经见过的模型仅有少许不同(参考信赖域方法(trust-region method))。第三,我们将搜索空间分解成了更小的搜索空间的积。

总结来说,我们提出了一种用于 CNN 结构学习的方法,该方法的效率是之前最好方法的大约 2 倍,同时也实现了同等质量的结果。我们相信我们的方法能让我们将架构搜索扩展到更复杂的搜索空间和更大的数据集。

图 1:来自 Zoph et al. (2017) 的用于 CIFAR-10 和 ImageNet 的网络架构。注意我们学习的是单一一种单元类型,而没有区分 Normal 单元和 Reduction 单元。

4 方法

4.1 渐进式神经架构搜索(PNAS)

伪代码见算法 1,解释见图 2。

图 2:当最大模块数量 B=3 时的 PNAS 搜索过程图示。其中 Q_b 表示有 b 个模块的候选单元的集合。我们从所有单元有 1 个模块开始,即 Q_1=B_1;我们训练和评估了所有这些单元,并更新了该预测器。在第 2 轮迭代时,我们扩展 Q_1 中的每个单元使所有单元都有 2 个模块,即 M_2=B_(1:2);我们预测它们的分数,选择其中最好的 K 个得到 Q_2,然后训练和评估它们并更新预测器。在第 3 轮迭代中,我们扩展 Q2 中的每个单元,得到带有 3 个模块的单元的一个子集,即 M_3⊆ B_(1:3);我们预测它们的分数,选择其中最好的 K 个得到 Q_3,然后训练和评估它们并返回优胜者。蓝色横线表示每个集合的大小,其中 B_b = |B_b|,是在层级 b 处可能模块的数量,K 是束的大小。

4.2 使用编码器 RNN 进行准确度预测

我们选择使用一个循环神经网络(RNN)作为我们的预测器,因为众所周知 RNN 很准确而且可以轻松应对大小会改变的输入;此外,我们的监督式学习方法比强化学习方法要远远更具样本效率。

5 实验和结果

5.2 PNAS 的效率


图 3:NAS 和 PNAS 算法的相对效率比较。蓝色是 PNAS 访问的前 1280 个模型在 CIFAR-10 验证集上的验证准确度,红色是 NAS-RL 访问的前 3000 个模型在 CIFAR-10 验证集上的验证准确度。下图是上图的局部放大。PNAS 的结果呈现出 B=5 个集群,反映了该算法的 B 个阶段。PNAS 经过 1280 个模型之后得到了 0.917 的 top-1 准确度、0.915 的平均 top-5 准确度和 0.912 的平均 top-25 准确度。NAS-RL 在经过 2280 个模型之后得到了 0.917 的 top-1 准确度、0.915 的平均 top-5 准确度和 0.913 的平均 top-25 准确度。注意这些架构搜索算法的平均 top 准确度是平滑变化的(有一些随机波动)。

5.3 在 CIFAR-10 图像分类任务上的结果


表 1:一些最近的结构学习方法在 CIFAR-10 上的结果;最下面的方法来自本论文。Algo 一列是这些方法所用的对应搜索算法的类型(RL=强化学习,EA=进化算法。SMBO=基于序列模型的优化)。Error 一列是对应最佳模型的 top-1 分类错误率。Params 一列是对应的参数数量。Models 一列是为了寻找最佳模型而训练和评估的模型的数量。我们的错误率以 µ±σ 的形式给出,其中 µ 是在 15 次拟合和评估每个模型的随机试验上的平均验证表现,σ 是标准差。

5.4 更小模型的表现

图 4:在 b∈{1, 2, 3, 4, 5} 时,PNAS 找到的在 CIFAR-10 上的最佳模型的测试表现的箱线图。我们训练和测试了每个模型 15 次,每次 600 epoch;所以质量的范围(纵轴)是由参数初始化中的随机性、SGD 优化过程等造成的。其中的横线是 NAS-RL 单元方法所找到的最佳模型的表现,这种方法的一个单元也是 5 个模块。

图 5:PNASNet-{1, 2, 3, 4} 中所用的单元的结构

图 6:PNASNet-5 中所用的单元的结构

5.5 剪枝过程的有效性


图 7:测量剪枝过程的有效性。我们描绘了三个指标:(a)最高准确度、(b)平均准确度(带有误差范围)、(c)在每个层级 b 的 K=256 个模型内准确度大于 0.9 的模型的数量。PNAS 是我们的算法。Rand 是从 B_(1:b) 中随机选择的 K 个模型。

5.6 在 ImageNet 图像分类上的结果

表 2:在 Mobile 设置下的 ImageNet 分类结果

表 3:在 Large 设置下的 ImageNet 分类结果

6 讨论和未来研究

这项工作的主要贡献是表明我们可以通过使用渐进式搜索越来越复杂的图(graph)空间来加速搜寻优良的 CNN 结构,这种方法结合了一个学习到的预测函数来高效地识别最有希望的模型并在此基础上进行探索。结果得到的架构实现了与之前的工作同等的表现,但计算成本仅相当于之前方法的一小部分。我们希望未来能进一步提升这种搜索的效率(比如使用基于模型的早停)并扩展这种技术从而可将其用于更加复杂的图结构,比如那些用于执行目标检测的图结构。

理论理论论文架构搜索谷歌云李飞飞
1