Related work本文介绍针对一篇移动端自动设计网络的文章《MnasNet:Platform-Aware Neural Architecture Search for Mobile》,由Google提出,很多后续工作都是基于这个工作改进的,因此很有必要学习了解。
MnasNet的目的很简单就是设计出表现又好,效率又高的网络。在介绍之前简单回顾一下现有的一些提高网络效率的方法:
之前的NAS算法(如DARTS,ENAS)考虑更多的是模型最终结果是否是SOTA,MnasNet则是希望搜索出又小又有效的网络结构,因此将多个元素作为优化指标,包括准确率,在真实移动设备上的延迟等,最终定义的优化函数如下:
\[\begin{array}{l}{\quad \underset{m}{\operatorname{maximize}} \quad A C C(m) \times\left[\frac{L A T(m)}{T}\right]^{w}} \tag{1} \\ {\text { where } w \text { is the weight factor defined as: }} \\ {\qquad w=\left\{\begin{array}{ll}{\alpha,} & {\text { if } L A T(m) \leq T} \\ {\beta,} & {\text { otherwise }}\end{array}\right.} \end{array} \]上式中个符号含义如下:
上面式子其实表示为帕累托最优,因为一般而言延迟越长,代表模型越大,即参数越大,相应地模型结果也会越好;反之延迟越小,模型表现也会有略微下降。
文中提到latency单位提升会带来5%的acc提升。也就是说假如模型A最终延迟为t,准确率为a;模型B延迟为2t,那么它的准确率应该是a(1+5%)。但是这两个模型的reward应该是相等地,套用上面的公式有
\[Reward(A)=a\times(t/T)^\beta \\ Reward(B)=a(1+5\%)(2t/T)^\beta \]求解得到\(\alpha=\beta=-0.7\)
之前的NAS算法都是搜索出一个比较好的cell,然后重复堆叠若干个cell得到最终的网络,这种方式很明显限制了网络的多样性。MnasNet做了一些改进可以让每一层不一样,具体思路是将模型划分成若干个block,每个block可以由不同数量的layer组成,每个layer则由不同的operation来表示,
Net |__block |__layer |___operations
示意图如下:
可以看到搜索空间包含如下:
和ENAS一样使用的是强化学习进行搜索,这里不做细究(其实论文里也没怎么说)。
实验之前的算法都是先在CIFAR10上搜索得到网络后,再在ImageNet上训练一个更大的网络。MnasNet则是直接在ImageNet上搜网络,但是只是在训练集上搜了5个epoch。
ImageNet实验结果
下图中的结果和预期一样,延迟越高,结果会稍微好一些。
作者还对比了SE模块的效果,结果如下,可以看到效果还是不错的。
有的时候为了适应实际场景需要,我们会对模型的通道数量进行修改,例如都砍掉一半或者增加一倍等,这样就可以达到模型大小减小或增大的作用了,这个可以由depth multipilier
参数表示。但是有下面的结果可以看出和MobileNetV2相比,基于MnasNet找到的网络对于通道数量变化鲁棒性更强(左图),同样对于输入数据大小也更加具有鲁棒性(右图)。
前面介绍过用于控制延迟时间的因子 \(\alpha\)和\(\beta\),实验对比了两组参数设置:
设置的目标延迟时间为75ms,可以看到第二个参数配置能够覆盖更加广的模型结构
这一个实验探究的是本文提出的多目标优化和搜索空间的有效性,一共设置了三组实验,其中baseline是NASNet,实验结果如下:
可以看到多目标优化能够找到延迟更小的网络,而Mnas提出的搜索空间对模型表现也有一定提升。
下图给出了搜索得到的MnasNet的结构,可以看到每层结构都不太一样,不像之前的算法是简单地叠加而成。
最后作者还对比了使用单一操作组成的网络结果对比,实验结果如下,可以看到虽然只使用MBConv5(k5x5)最终accuracy最高,但是他的推理延迟也很高,所以综合来看还是MnasNet-A1表现最好。