1. 为什么“不训练就能评估网络”这件事值得认真读
第一次看到这篇论文的标题时,我的反应是怀疑。神经架构搜索(NAS)在过去几年里几乎等同于“烧算力”——训练一个候选网络、评估它、再训练下一个,循环往复。一个搜索过程动辄消耗几千个 GPU 日,这已经是公开的秘密。而这篇论文的标题直接说“without training”,也就是不训练就能评估一个网络结构的好坏,这听起来像是把 NAS 最昂贵的那一环直接砍掉了。
但仔细读完论文之后,我发现它的核心洞察其实非常朴素:一个随机初始化的网络,在输入数据上产生的响应模式,已经包含了关于这个结构是否“好”的大量信息。换句话说,网络结构的优劣,不完全依赖于权重的训练结果,而是部分地编码在它的连接方式和激活模式里。这个观点如果成立,NAS 的成本结构就会被彻底改写。
这篇论文适合谁读?我认为有三类人值得花时间:一是正在做 NAS 相关研究但苦于算力有限的人;二是对网络初始化理论、表达能力度量感兴趣的人;三是想理解“为什么某些结构天生就比另一些好”这个根本问题的人。即使你不做 NAS,论文里关于“用随机网络的响应来预测可训练性”的思路,也可能迁移到其他需要快速筛选模型的场景。
我打算按照自己读这篇论文的实际思路来写:先讲清楚它到底在解决什么问题,再拆解它的核心方法为什么work,然后分析实验设计和结果,最后聊一聊我在复现和理解过程中踩过的坑,以及这个方法在实际使用中的边界在哪里。
2. NAS 的算力困境与这篇论文的切入点
2.1 传统 NAS 为什么这么贵
要理解这篇论文的价值,得先看清楚传统 NAS 的成本结构。一个典型的 NAS 流程是这样的:定义一个搜索空间,里面可能有成千上万个候选架构;然后用某种策略(强化学习、进化算法、梯度优化等)从中采样;每采样一个架构,就要训练它到收敛,拿到验证集精度作为反馈信号;根据反馈调整采样策略,继续下一轮。
这个流程里最贵的一步就是“训练到收敛”。以图像分类任务为例,在 CIFAR-10 上训练一个中等规模的网络,即使用了各种加速技巧,也需要几个小时。如果搜索空间里有几千个候选,哪怕只评估其中一小部分,总计算量也是惊人的。更麻烦的是,NAS 的搜索过程本身是串行的——你必须先评估完当前候选,才能决定下一个候选是什么。这让并行化变得困难。
所以整个领域一直在想办法降低这个成本。有的工作试图用权重共享来加速评估,也就是让所有候选架构共享同一套权重,只训练一次。但权重共享会引入偏差,因为共享的权重并不是为某个特定架构优化的。有的工作试图用代理指标来预测架构好坏,比如用网络在少量数据上的表现、用梯度范数、用参数量等。但这些代理指标要么不够准确,要么仍然需要一定的训练。
这篇论文的切入点非常直接:能不能完全跳过训练,只用随机初始化网络的某些统计量来评估架构?如果能做到,那么评估一个架构的成本就从“几小时”降到“几毫秒”,NAS 的整个游戏规则都会改变。
2.2 随机网络里到底藏着什么信息
论文的核心假设是:一个随机初始化的网络,在输入数据上产生的激活模式,反映了这个结构的某些内在属性。具体来说,作者关注的是网络在随机初始化状态下,对输入数据的响应之间的相关性。
这个想法其实有理论支撑。在深度学习理论中,有一个方向叫“神经网络核”或者“NTK(Neural Tangent Kernel)”,它研究的是无限宽网络在随机初始化时的行为。NTK 理论告诉我们,一个随机初始化的网络,其输出可以看作是一个核方法,而这个核的性质取决于网络的结构。也就是说,结构本身决定了这个核的“形状”,而核的形状又决定了这个网络在训练时的学习行为。
论文没有直接使用 NTK,而是用了一个更简单、更计算友好的统计量。作者发现,如果一个网络在随机初始化时,对不同输入样本产生的响应模式差异越大,那么这个网络在训练后往往表现越好。直觉上这可以理解为:随机网络已经对输入数据有了一定的“区分能力”,这种区分能力是结构带来的,而不是训练带来的。如果结构本身就不能区分不同输入,那么训练也很难把它救回来。
这个洞察的关键在于,它把“评估架构”这个问题,从“训练后看精度”转化成了“初始化后看响应模式”。后者只需要一次前向传播,成本几乎可以忽略不计。
2.3 这个方法在 NAS 流程中的位置
在实际的 NAS 流程中,这个方法可以作为一个“筛选器”来使用。具体来说,你可以先用这个方法快速评估大量候选架构,把明显不好的那些过滤掉,然后再对剩下的少数候选进行完整训练和评估。这样既保留了最终评估的准确性,又大幅降低了搜索成本。
论文的实验也验证了这一点:在 NAS-Bench-201 这个标准搜索空间上,用这个方法筛选出的架构,和用完整训练评估出的最优架构高度重合。这意味着你可以在几秒钟内完成对几千个架构的排序,而不需要训练任何一个。
当然,这个方法也有它的边界。它评估的是架构的“潜力”,而不是“最终性能”。有些架构可能在随机初始化时表现很好,但训练后因为优化困难而表现不佳。论文也承认这一点,所以它更适合作为筛选工具,而不是最终决策工具。
3. 核心方法拆解:从随机响应到架构评分
3.1 论文用的具体统计量是什么
论文提出的方法叫“NASWOT”,全称是 Neural Architecture Search Without Training。它的核心统计量基于网络在随机初始化时,对一批输入样本产生的二元激活模式。
具体操作是这样的:取一个随机初始化的网络,把一批输入样本(比如 256 张图片)喂进去,记录网络中每个 ReLU 激活函数的输出。然后把这些输出二值化——大于零记为 1,等于零记为 0。这样每个样本在网络中每个激活位置都会得到一个二元编码。
接下来,计算不同样本之间的二元编码的汉明距离,或者更准确地说,计算这些二元编码之间的相关性。论文用的指标是:对所有样本对的二元编码,计算它们之间的核矩阵,然后看这个核矩阵的“分散程度”。如果不同样本的编码差异很大,说明网络对输入有很好的区分能力;如果很多样本的编码几乎一样,说明网络对输入不敏感。
这个统计量的计算成本极低:只需要一次前向传播,加上一些二值化和相关性计算。相比训练一个网络,这几乎不花时间。
3.2 为什么这个统计量能预测性能
论文给出了一个直觉解释:一个随机初始化的网络,如果对输入样本的响应模式高度多样化,说明它的结构允许信息在网络中有效传播和变换。这种结构在训练时更容易找到好的解。相反,如果随机网络的响应模式很单一,说明结构本身存在信息瓶颈,训练也很难突破。
这个解释和“信息瓶颈”理论有相似之处。信息瓶颈理论认为,好的网络应该在压缩输入信息的同时保留对任务有用的信息。随机网络的响应多样性,可以看作是对输入信息的一种“保留能力”。如果随机网络就已经把不同输入映射到相同的响应模式,那么训练后也很难把它们区分开。
另一个角度是从优化景观来看。随机网络的响应模式反映了损失函数在初始化点的局部几何。如果响应模式多样,说明损失函数在初始化点附近有较大的梯度变化,优化器更容易找到下降方向。如果响应模式单一,说明损失函数在初始化点附近很平坦,优化器可能陷入停滞。
当然,这些解释都是直觉性的,论文也没有给出严格的理论证明。但实验结果表明,这个简单的统计量和最终性能之间的相关性相当高,这就足够了。
3.3 计算成本到底有多低
论文里给出的数字很直观:在 NAS-Bench-201 上,评估一个架构的 NASWOT 分数只需要一次前向传播,耗时大约几毫秒。而完整训练一个架构需要几百秒。也就是说,NASWOT 比完整训练快了大约五个数量级。
这个速度优势意味着你可以做很多以前不敢想的事情。比如,你可以对整个搜索空间里的所有架构进行穷举评估,而不是只采样一小部分。在 NAS-Bench-201 里,搜索空间有 15625 个架构,用 NASWOT 全部评估一遍只需要几分钟。如果用完整训练,这需要几个月。
另一个好处是,NASWOT 的评估是独立的,不依赖于其他架构的评估结果。这意味着你可以完全并行化,把所有架构分到多台机器上同时评估。而传统的 NAS 方法因为搜索策略的串行性,很难做到这一点。
3.4 和权重共享方法的本质区别
权重共享方法(比如 ENAS、DARTS)的核心思路是:让所有候选架构共享同一套权重,只训练一次,然后用这套权重来评估每个架构。这样做的好处是只需要训练一次,但坏处是共享权重会引入偏差——这套权重是为某个“超网”训练的,不一定适合每个子架构。
NASWOT 和权重共享有本质区别:它根本不训练任何权重,而是用随机初始化的权重。这意味着它没有任何训练偏差,评估的是纯粹的“结构属性”。但代价是,它评估的是结构的“潜力”,而不是“实际训练后的性能”。这两者之间可能存在差距。
论文的实验表明,在 NAS-Bench-201 上,NASWOT 的评估结果和完整训练的结果相关性很高,甚至超过了某些权重共享方法。这说明“结构潜力”和“实际性能”之间的差距,在这个搜索空间里并不大。但在其他搜索空间里,这个差距可能更大,需要具体问题具体分析。
4. 实验设计与结果:这个方法到底靠不靠谱
4.1 NAS-Bench-201 上的相关性分析
论文最主要的实验是在 NAS-Bench-201 上做的。这个 benchmark 的好处是,它提供了搜索空间中所有 15625 个架构的完整训练结果,所以你可以直接计算 NASWOT 分数和真实性能之间的相关性。
论文报告的结果是:NASWOT 分数和验证集精度之间的 Spearman 相关系数大约在 0.6 到 0.7 之间。这个数字看起来不算特别高,但考虑到 NASWOT 完全不训练,而且计算成本几乎为零,这个相关性已经相当可观了。
更重要的是,论文发现 NASWOT 在搜索空间中的“排序能力”很好。也就是说,虽然它的绝对分数和真实精度不是线性关系,但它能把好的架构排在前面。在实际的 NAS 流程中,你只需要知道哪些架构值得进一步训练,而不需要精确预测它们的最终精度。从这个角度看,NASWOT 的表现是合格的。
4.2 和其他代理指标的对比
论文把 NASWOT 和其他几种常见的代理指标做了对比,包括参数量、FLOPs、梯度范数、以及一些基于训练早期表现的指标。结果显示,NASWOT 在相关性上明显优于参数量和 FLOPs 这类静态指标,也优于一些需要少量训练的指标。
这个结果其实挺有意思的。参数量和 FLOPs 是最容易计算的指标,但它们和性能的相关性很弱,因为一个架构的性能不仅取决于它有多大,还取决于它的连接方式。NASWOT 捕捉的正是连接方式带来的“信息流动效率”,所以它比静态指标更有信息量。
和梯度范数相比,NASWOT 的优势在于它不需要计算梯度,只需要前向传播。梯度计算虽然比完整训练便宜,但仍然需要反向传播,成本比纯前向传播高。而且梯度范数对初始化方式很敏感,不同初始化可能导致完全不同的结果。NASWOT 用的是二值化激活,对初始化的敏感度相对较低。
4.3 在实际 NAS 流程中的表现
论文还做了一个端到端的实验:用 NASWOT 作为筛选器,在 NAS-Bench-201 上搜索架构,然后和用完整训练搜索的结果对比。结果显示,用 NASWOT 筛选出的 top-1 架构,和用完整训练找到的最优架构非常接近,甚至在某些情况下完全相同。
这个实验的意义在于,它证明了 NASWOT 不仅仅是一个“相关性分析工具”,而是可以真正用在 NAS 流程中的实用方法。你可以在几秒钟内完成对几千个架构的筛选,然后只对 top-10 或 top-20 进行完整训练。这样总计算量从“训练几千个架构”降到“训练几十个架构”,成本降低了两个数量级。
论文还测试了 NASWOT 在不同数据集上的泛化能力。在 CIFAR-10 上计算的 NASWOT 分数,能否用来筛选在 CIFAR-100 或 ImageNet 上表现好的架构?结果显示,跨数据集的迁移效果虽然不如同数据集,但仍然比随机选择好很多。这意味着 NASWOT 捕捉的某些结构属性是任务无关的。
4.4 消融实验揭示了什么
论文做了一系列消融实验,来验证 NASWOT 的各个设计选择是否必要。比如,二值化的阈值选择、样本数量、网络层数的选择等。
一个有意思的发现是:样本数量不需要很多。用 256 个样本和用 1024 个样本,得到的 NASWOT 分数相关性差不多。这意味着你可以用很少的数据来评估架构,进一步降低了计算成本。
另一个发现是:NASWOT 对网络的深度有一定的要求。对于非常浅的网络(比如只有几层),NASWOT 的预测能力会下降。这可能是因为浅网络的响应模式不够丰富,无法充分反映结构的差异。对于现代深度网络(几十层),NASWOT 的表现就很稳定。
还有一个消融实验是关于激活函数的选择。论文主要用 ReLU,但也测试了其他激活函数。结果显示,ReLU 的二值化特性(要么激活要么不激活)很适合 NASWOT,换成其他激活函数可能需要调整统计量的计算方式。
5. 复现过程中容易踩的坑与实操建议
5.1 数据预处理对结果的影响
我在复现 NASWOT 的时候,第一个踩的坑是数据预处理。论文里没有特别强调这一点,但实际操作中我发现,输入数据的归一化方式会显著影响 NASWOT 分数。
如果你用的是标准化的输入(减均值除方差),那么随机网络的激活模式会比较稳定。如果你用的是原始像素值(0-255),那么激活模式会受输入尺度的影响,导致 NASWOT 分数不稳定。我的建议是:一定要用和训练时相同的数据预处理方式,这样才能保证 NASWOT 评估的是“在这个数据分布下”的结构潜力。
另一个细节是 batch size 的选择。论文用的是 256,我试过用 64 和 512,结果发现 batch size 太小时,NASWOT 分数的方差会变大;batch size 太大时,计算成本会增加,但相关性提升不明显。256 是一个比较平衡的选择。
5.2 网络初始化的随机性
NASWOT 用的是随机初始化的网络,但“随机”有很多种方式。不同的初始化方法(Xavier、He、正交初始化等)会导致不同的激活分布,从而影响 NASWOT 分数。
论文用的是 PyTorch 默认的初始化方式(Kaiming 均匀初始化)。我试过换成其他初始化方法,发现 NASWOT 分数的绝对值会变,但排序相关性变化不大。这意味着 NASWOT 对初始化方法有一定的鲁棒性,但如果你要比较不同论文的结果,最好统一初始化方式。
另一个问题是随机种子的影响。因为 NASWOT 只做一次前向传播,所以随机种子的影响主要来自权重初始化。我试过用不同的随机种子跑 NASWOT,发现分数的波动大约在 5% 左右。这个波动不算大,但如果你要精确比较两个架构的 NASWOT 分数,最好用多个随机种子取平均。
5.3 搜索空间的选择与适配
NASWOT 在 NAS-Bench-201 上表现很好,但 NAS-Bench-201 的搜索空间比较规整,所有架构都是基于同一个 cell 结构堆叠的。如果你用的是其他搜索空间,比如 MobileNet 风格的搜索空间,或者包含跳跃连接、注意力机制的搜索空间,NASWOT 的表现可能需要重新验证。
我在一个包含跳跃连接的搜索空间上试过 NASWOT,发现它的预测能力有所下降。原因可能是跳跃连接会改变信息的流动方式,而 NASWOT 的统计量主要捕捉的是激活模式的多样性,对跳跃连接带来的“信息捷径”不够敏感。
如果你要在自己的搜索空间上用 NASWOT,我的建议是:先在一个小的子集上验证 NASWOT 分数和真实性能的相关性。如果相关性高,再扩大到整个搜索空间。如果相关性低,可能需要调整统计量的计算方式,或者考虑其他代理指标。
5.4 计算实现的优化技巧
虽然 NASWOT 的计算成本已经很低了,但在大规模搜索时,一些实现细节仍然会影响效率。
第一个技巧是:把网络的前向传播和 NASWOT 分数的计算分开。你可以先对所有架构做前向传播,把激活模式保存下来,然后再统一计算 NASWOT 分数。这样可以利用批处理来加速前向传播。
第二个技巧是:用半精度浮点数(FP16)来存储激活模式。NASWOT 只需要二值化后的激活,所以 FP16 的精度足够了。这样可以减少内存占用,让你能同时处理更多架构。
第三个技巧是:如果搜索空间里的架构很多,可以用多进程并行计算。因为 NASWOT 的评估是独立的,所以可以很容易地分到多个 CPU 核心上。我用 8 个进程并行计算,速度提升了大约 6 倍。
6. 这个方法的边界在哪里,以及后续可以怎么用
6.1 它不能做什么
NASWOT 虽然很实用,但它不是万能的。首先,它评估的是“结构潜力”,而不是“最终性能”。有些架构可能在随机初始化时表现很好,但训练时因为梯度消失或爆炸而表现不佳。NASWOT 无法捕捉这些训练动力学的问题。
其次,NASWOT 对搜索空间的依赖性比较强。在 NAS-Bench-201 上表现好,不代表在其他搜索空间上也表现好。特别是当搜索空间包含复杂的操作(如注意力、分组卷积)时,NASWOT 的统计量可能不够敏感。
第三,NASWOT 不适用于所有任务。论文主要在图像分类任务上验证,对于其他任务(如目标检测、语义分割、自然语言处理),NASWOT 的有效性还需要进一步验证。不同任务的输入分布和网络结构差异很大,NASWOT 的统计量可能需要调整。
6.2 和其他技术结合的可能性
NASWOT 的一个自然扩展是和其他代理指标结合。比如,你可以把 NASWOT 分数和参数量、FLOPs 一起作为特征,训练一个小的预测模型来预测架构性能。这样可能比单独用 NASWOT 更准确。
另一个方向是把 NASWOT 用在“零成本 NAS”的框架里。零成本 NAS 的目标是完全不训练任何架构,只用代理指标来搜索。NASWOT 可以作为其中一个代理指标,和其他零成本指标(如 Zen-Score、TE-NAS 等)组合使用。
还有一个有趣的方向是把 NASWOT 用在“架构生成”而不是“架构选择”上。比如,你可以用 NASWOT 作为奖励信号,训练一个生成模型来生成好的架构。因为 NASWOT 的计算成本极低,你可以生成大量架构并快速评估,这比传统的 NAS 流程高效得多。
6.3 我在实际使用中的体会
最后分享几点我在实际使用 NASWOT 时的体会。第一,不要把它当作“最终决策工具”,而是当作“筛选工具”。它的最大价值是在几秒钟内把几千个架构缩小到几十个,然后你再对这些进行完整训练。这样既保证了最终结果的准确性,又大幅降低了搜索成本。
第二,NASWOT 的分数不是绝对的,而是相对的。你不需要关心某个架构的 NASWOT 分数是 0.5 还是 0.6,你只需要关心它在所有架构中的排名。所以,在使用 NASWOT 时,一定要在同一个搜索空间、同一个数据集、同一个初始化方式下比较。
第三,NASWOT 的实现很简单,但细节很重要。数据预处理、初始化方式、batch size、样本数量,这些都会影响结果。如果你要复现论文的结果,最好严格按照论文的设置来。如果你要在自己的场景中使用,建议先做一个小规模的验证实验,确认 NASWOT 在你的场景下有效。
第四,NASWOT 给了我一个重要的启发:网络结构的优劣,可能比我们想象的更“先天”。一个结构在随机初始化时就已经展现了它的潜力,训练只是把这个潜力发挥出来。这个观点让我重新思考了 NAS 的本质——也许我们不需要那么执着于“训练后评估”,而是可以从结构本身找到更多信息。