研究背景
设计满足特定资源约束(如计算量、时延等)的高性能神经网络架构在实际人工智能应用中有着重要的意义,是数据获取、模型设计,训练部署这一闭环中重要的组成成分。然而手工设计网络架构是一个耗时耗力的过程,需要大量的试错实验,并且当更换硬件平台、更换资源约束条件时,又需要专家重新设计网络架构。
近年来兴起的自动网络架构搜索技术给高性能网络架构的设计带来了新颖而经济的解决思路。基于梯度更新的可微分网络架构搜索算法在显著降低搜索开销的情况下,能够从巨大的架构空间中搜索到有效的网络架构。然而,可微分网络架构搜索中超网络权重共享、单路径采样和宽度粗粒度离散性的搜索空间,使得搜索到的网络架构很难同时达到准确性和资源约束上的最优,可微分网络架构搜索仍有很多问题亟待解决。
方法简述
图1 三自由度网络架构搜索框架图
为了解决上述问题,该方法对当前主流的可微分网络架构搜索算法进行实验分析,从算子、深度和宽度三个维度出发,通过简单精妙的设计,分别提出了双路采样算法、汇点连接空间和弹性缩放策略,如图1所示。
对于算子层面的搜索,该方法实验发现现有的单路采样方法会导致算子崩溃现象发生,即在搜索过程的早期阶段算法就在某些搜索层中聚焦于某一个特定的算子,并在余下的搜索过程中陷入其中保持不变,这会导致搜索到非最优的网络架构。针对此问题,该方法设计了多种采样方式,通过实验发现加入随机路径采样的双路采样方法可以有效地缓解算子崩溃现象发生。
对于深度层面的搜索,现有算法通常直接将跨层(Skip)算子加入到待搜索候选算子集中。然而,由于跨层算子的非参数性以及与其他算子的互斥性,这种设计方式会导致网络深度的搜索不稳定,在整个搜索过程中有非常大的抖动,如图2(a)。此外,跨层算子的直接加入也会引起架构冗余现象发生,如图2(b)。为了解决这个问题,该方法设计了一个汇点连接搜索空间(图1(c)),将跨层算子的搜索剥离出来,增加深度搜索的稳定性,同时汇点连接的方式也巧妙地解决了架构冗余问题。
图2 (a)搜索过程中架构深度变化; (b)架构冗余
对于宽度层面的搜索,该方法发现由于宽度搜索空间粗粒度的离散性和无界的资源约束目标函数项,使得现有方法很难搜索到严格满足特定资源约束的网络架构(图4),并对资源约束目标函数项的超参数设置十分敏感。为了缓解这些问题,该方法提出了弹性缩放策略在搜索过程中动态自适应地调整超网络中每一搜索层中每一搜索算子的宽度,如图1(d)和图3。
图3 弹性缩放策略
图4 不同资源约束目标函数项下弹性缩放的有效性
应用验证
该方法的架构搜索和验证均在大尺度ImageNet-1K数据集上进行。在使用单张Titan RTX GPU的情况下,提出的方法在ImageNet-1K上仅用1.8天搜索到76.9% top-1准确性的网络架构,在准确性和推断时延上均超越Google的EfficientNet-B0。
表1 GPU和CPU上搜索架构结果,GPU时延测试批大小为32,CPU时延测试批大小为1
论文:
[1] Yibo Hu, Xiang Wu, Ran He*. TF-NAS: Rethinking Three Search Freedoms of Latency-Constrained Differentiable Neural Architecture Search. ECCV 2020.
[2] Zhihang Li, Teng Xi, Jiankang Deng, Gang zhang, Shengzhao Wen, Ran He*. GP-NAS: Gaussian Process based Neural Architecture Search. CVPR 2020.
代码: