概述
深度学习模型增长的计算量需求使其比较难部署到资源受限的移动或者嵌入式系统上。因此文章提出一种综合考虑精度和时延的模型架构搜索方法,在考虑实际设备时延的情况下,得到速度比 MobileNet V2 更快、精度比 MobileNet V2 更高的 MnasNet 系列模型。
方法
方法流程
方法的框架流程图如下所示。相比一些之前的搜索方法,这里的模型搜索方法主要有两个改进:
- 一是设计了包含精度和时延两个指标的优化器,而且这个时延是在实际设备上的时延,不是单纯的 FLOPs 的统计。因为同样的 FLOPs 的模型在实际推理时可能也会有不一样的时延值;
- 二是设计了新的搜索空间,搜索空间更大了。之前的一些方法只是对 cell 结构进行搜索,然后对这些 cell 进行堆叠。这样减小了搜索空间,但是也可能会影响到模型性能。而这里也允许不同 block 内部具有不一样的结构,更有可能得到好的模型。
问题定义
给定一个模型 m,使用 ACC(m) 代表精度,LAT(m) 代表时延,T 代表设定的时延值。一种简单的方法,就是把 T 作为一个硬约束,在此基础上最大化 ACC(m),也就是:

然而这样做仅仅对一个指标进行了最大化优化。而要获得一个帕累托优化的模型,要满足其中一个条件:
- 在不增加计算量的条件下已经精度最优了;
- 或者在不降低精度的情况下时延已经最低了。
为此对时延 T 采取一种设置软阈值的方式,也就是:

其中设置 α=β=-0.07。下图所示,采用软阈值 T 的方式,将获得一个综合考虑时延和精度平衡的模型。

搜索空间
如下图所示,搜索算法将 CNN 模型分成一个预定义的 block 序列,逐渐降低分辨率并且增加通道大小。在每个 block 中,可以搜索的空间包括:
- 卷积操作类型:正常卷积、深度分离卷积、 inverted bottleneck conv;
- 卷积核大小:3 × 3、5 × 5;
- SE ratio:0、0.25;
- Skip 操作:池化、残差、没有跳连;
- 输出通道大小: Fi;
- block 中层数:Ni。
如果将网络分为 B 个 block,每个 block 的搜索空间大小是 S,那么总的搜索空间将是 SB×N。一组经典值是 S=432,B=5,那么总的搜索空间大小大约是 1013。

搜索算法
算法目标就是最大化一个期望 reward:

其中 m 是采样出来的模型,R(m) 是 2 式中定义的目标。
而在每轮搜索中,搜索流程都遵循图 1 中的采样——评估——更新的循环。在每一步,controller 首先基于当前参数 θ 采样得到候选模型 token;然后对于每个候选模型都进行训练得到 ACC 指标值,并且在实际设备上运行得到时延 LAT,基于此利用公式二计算 reward ;最后通过公式 5 最大化 reward 值,更新 controller 的参数 θ。停止的条件是达到最大步数或者参数 θ 收敛。
实验设置
候选模型直接在 ImageNet 上进行训练(只训练 5 个 epoch),在不是在 cifar10 上进行训练。最终只有 15 个模型进行了全量训练。并随机抽取 50K 张图像作为验证集。
结果及指标
搜索出来的 MnasNet-A1 结构如下图所示。在 TensorFlow 官方页面上,还可以找到不同参数规模的 MnasNet 模型。例如 MnasNet-small 小模型。

同时在 ImageNet 上,相比 MobileNet V2 和之前的 NAS 模型有更低的时延和更高的分类精度:
