Auto-DeepLab 阅读笔记:NAS 搜索空间的本质反思

Auto-DeepLab 概述

Auto-DeepLab 是我读到的第一篇把 NAS 从分类任务迁移到语义分割任务的论文。它在搜索空间上做了比较有意思的创新——不仅像 DARTS 那样搜索 cell 内部的结构,还同时搜索了 cell 之外的宏观网络拓扑。这个宏观搜索空间涵盖了 DeepLabv3、Conv-Deconv 和 Stacked Hourglass 等多种经典分割架构的连接方式。

搜索效率也不算差,在 P100 上只花了 3 天,这得益于同样采用了基于梯度的搜索方式。

搜索机制

cell 级别的更新和 DARTS 基本一致。宏观路径上的更新则不同:每一步会考虑所有可能的下一跳路径,对这些路径建立一个分布,相当于在路径层级上做了松弛。

具体来说,参数分两组:alpha 负责控制 cell 内部结构,beta 负责控制整个宏观拓扑结构。每个 beta 参数对应着一整组 alpha,因此 beta 在层级上高于 alpha。训练时 alpha 和 beta 同步更新。

对 NAS 搜索空间本质的一点思考

读完这篇论文,我在想一个更根本的问题:现在的 NAS 方法之所以能搜出精度越来越高的网络,真的是因为搜索算法本身更好了吗?

我倾向于认为,很大程度上是搜索空间的设计在起作用。以 DARTS 为例,在搜索空间里随机采样出来的网络在 CIFAR 上精度就已经相当高了——这背后是大量人工先验的堆砌:cell 的数量和连接方式、cell 内部 node 的连接方式和数量等等。看上去搜索空间很大,但实际上网络结构的变化幅度并不大。此外,最终报告出来的高精度,相当一部分也来自于训练时叠加的各种 trick,而不完全是网络结构设计得好。

一个更直接的对照实验是:在同样的时间预算内,随机在搜索空间里采样,直接取参数量和 FLOPs 最大的结构,然后在完全相同的 trick 下训练和 fine-tune,结果未必会更差。

这背后的原因在于搜索空间的密集性。搜索空间看上去很大,但网络之间的”距离”其实很小,整个空间非常密集。比如 3×3 卷积和 5×5 卷积,选哪个对最终精度的影响其实不大,但在搜索空间的定义上它们属于两种截然不同的结构。在这种密集空间里,只需要极少的引导就能找到一个不错的结构——无论是强化学习里的 reward 信号、DARTS 里的梯度,还是和侠武师兄合作论文里对应操作的概率,本质上都是在一个本就拥挤的空间里指个大致方向而已。

一个潜在的研究方向

由此想到一个可以做的工作:对搜索空间本身进行评估。两个包含相同数量网络的搜索空间,网络之间的间距可以差异很大——一个空间密集,另一个稀疏,稀疏的空间覆盖范围自然更广。

一种更合理的搜索策略可能是:先在稀疏空间中找到一个相对好的大致区域(也就是用搜索的方式找到足够好的先验,而不是完全靠人工手动设定),再在这个区域附近的密集空间里精细搜索。这样既能减少对人工先验的依赖,也能更有效地利用搜索资源。