CVPR 2020|华为发布基于连续进化的CARS算法,0.4GPU天输出帕累托前沿

CVPR 2020|华为发布基于连续进化的CARS算法,0.4GPU天输出帕累托前沿

本文转载自诺亚实验室。

      北大华为等研究机构联合提出了一种基于连续进化的高效网络架构搜索算法CARS。该算法结合了进化算法和可微算法的双重优势。在结构搜索的过程中,位于帕累托前沿的网络所对应的权重将会被持续地更新。仅用0.4 GPU天,该算法能够准确地输出帕累托解集中的结构,便于不同环境的模型部署

CVPR 2020|华为发布基于连续进化的CARS算法,0.4GPU天输出帕累托前沿

正文

卷积神经网络在很多视觉任务(如分类、检测和分割等)中有广泛的应用,传统的神经网络结构设计极大依赖专家经验知识。近年来,神经网络结构搜索(NAS)聚焦于自动搜索最优的网络结构,在很多任务上超越了手工设计的网络,成为了研究和工业应用热点。

在不同的应用场景中,计算资源约束条件有所不同,因此对于搜索的结果自然的有着差异化的结果需求。此外,尽管基于进化算法的NAS方法取得了不错的性能,但是每代样本需要重头训练来进行评估,极大影响了搜索效率。本文考虑了现有方法的不足,提出一种基于连续进化的多目标高效神经网络结构搜索方法(CARS)。

CARS维护一个最优模型解集,并用解集中的模型来更新超网络中的参数。在每次进化算法产生下一代种群的过程中,网络的参数可以直接从超网络中继承,有效提高了进化效率。CARS一次搜索即可获得一系列不同大小和精度的模型,供用户根据实际应用中的资源约束来挑选相应的模型。

方法

CARS在搜索过程中维护一个超网络(SuperNet)和种群中网络结构的连接方式。记超网络为CVPR 2020|华为发布基于连续进化的CARS算法,0.4GPU天输出帕累托前沿,其参数为CVPR 2020|华为发布基于连续进化的CARS算法,0.4GPU天输出帕累托前沿,以及一组二值化的结构表达CVPR 2020|华为发布基于连续进化的CARS算法,0.4GPU天输出帕累托前沿为二值参数,P为种群大小。P个子网络集合CVPR 2020|华为发布基于连续进化的CARS算法,0.4GPU天输出帕累托前沿,子网络可以从超网络中采样得到:

CVPR 2020|华为发布基于连续进化的CARS算法,0.4GPU天输出帕累托前沿   (1)

其中CVPR 2020|华为发布基于连续进化的CARS算法,0.4GPU天输出帕累托前沿为子网络的参数,CVPR 2020|华为发布基于连续进化的CARS算法,0.4GPU天输出帕累托前沿来表示超网络中相应的连接是否被保留。

参数被所有子网络共享,如果子网络结构确定,那么最优参数可以通过反向传播算法来优化P个结构的准确率。于此同时,进化算法可以用来优化子网络的结构。因此CARS算法主要由超网络参数更新和子网络结构更新两个步骤交替进行优化。

超网络参数更新:超网络的参数W通过使用梯度下降算法优化如下公式来使种群中的结构都具有较高的准确率,         

                  

CVPR 2020|华为发布基于连续进化的CARS算法,0.4GPU天输出帕累托前沿  (2)

但由于在每次运算中计算P个结构的输出需要较大的计算代价,受到批量梯度下降算法的启发,在每次参数更新中,作者采样CVPR 2020|华为发布基于连续进化的CARS算法,0.4GPU天输出帕累托前沿个子结构用来更新参数,经实验表明,在CVPR 2020|华为发布基于连续进化的CARS算法,0.4GPU天输出帕累托前沿的条件下依然能够较好的维护模型的精度,因此作者使用此设置对于超网络的参数进行高效的更新。

种群结构更新:对于常用的神经网络模型,如果考虑多个目标,包括精度、运算量、模型大小等,通常这些参数都会有冲突,如较大的模型精度较高,较小的模型表达能力较差因此精度较低。因此很难找到一个模型,兼具所有优点。考虑M个不同的优化目标,模型的优劣可以通过支配排序进行定义,

CVPR 2020|华为发布基于连续进化的CARS算法,0.4GPU天输出帕累托前沿  (3)

对于模型CVPR 2020|华为发布基于连续进化的CARS算法,0.4GPU天输出帕累托前沿CVPR 2020|华为发布基于连续进化的CARS算法,0.4GPU天输出帕累托前沿而言,如果CVPR 2020|华为发布基于连续进化的CARS算法,0.4GPU天输出帕累托前沿在M个目标上的表现都不差于CVPR 2020|华为发布基于连续进化的CARS算法,0.4GPU天输出帕累托前沿,并且在至少一个目标上的表现好于CVPR 2020|华为发布基于连续进化的CARS算法,0.4GPU天输出帕累托前沿,则我们称CVPR 2020|华为发布基于连续进化的CARS算法,0.4GPU天输出帕累托前沿支配CVPR 2020|华为发布基于连续进化的CARS算法,0.4GPU天输出帕累托前沿,因为此时模型CVPR 2020|华为发布基于连续进化的CARS算法,0.4GPU天输出帕累托前沿完全可以被CVPR 2020|华为发布基于连续进化的CARS算法,0.4GPU天输出帕累托前沿所替换。

帕累托最优集合是在考虑多目标情况下的一个模型结构的集合,这个集合中的任意两个模型都不存在支配关系。一个常用的非支配排序算法是NSGA-III,但是直接在CARS的结构更新这一步骤中采用此算法对于模型的结构进行更新会遇到小模型陷阱问题,简单来说,就是在训练前期小模型的精度增长较快,导致其从精度、模型大小等方面支配大模型,更加细致的原因和分析在实验中进行讨论。

因此作者提出对于大模型进行保护(protect)的改进算法pNSGA-III。以模型大小和准确率为例,pNSGA-III运算两次,第一次运算考虑模型的大小和模型的精度,第二次运算考虑模型的大小和模型精度的增长速度。后者则是考虑到大模型前期精度较低而对其进行的保护机制。

两次非支配排序的运算会产生两组帕累托前沿,运算过程中分别从第一个前沿进行个体的融合,直到选择了足够的个体作为下一代的种群。

      作者所提出的CARS算法流程可归纳为如下的流程:

CVPR 2020|华为发布基于连续进化的CARS算法,0.4GPU天输出帕累托前沿

算法 1  CARS连续进化网络结构搜索算法

实验

小模型陷阱:在实验部分,我们首先针对于小模型陷阱的现象进行分析和解释。如下图所示,三个大小不同的模型分别进行训练,其最终的训练精度和模型大小正相关,其中Model A, B, C的精度为96.87%, 97.17%和97.20%。

但是在训练过程中,大模型的准确率相比于小模型增长较慢 (Model C),如果使用NSGA-III算法进行排序,那么大模型由于其不仅参数数目多,而且前期精度较低会被逐渐淘汰。不同的小模型准确率曲线波动较大 (Model A, B)。

如果在训练初期使用NSGA-III算法选择一系列帕累托最优模型,那么所由于波动的原因,如果存在一次更新的时候小模型Model A比稍大的Model B精度高,则模型B会被淘汰掉。

因此,相对较大的模型在训练过程中由于其参数数量过多,优化更慢,以及精度波动这两个原因会导致仅仅使用NSGA-III算法的过程中逐渐淘汰掉大模型,从而仅仅剩下一下较小的模型。这些小模型因为其自身表达能力有限的原因,导致训练完成后很难取得比较高的精度,这个现象我们称之为小模型陷阱。

CVPR 2020|华为发布基于连续进化的CARS算法,0.4GPU天输出帕累托前沿

图 1 如图所示为三个模型Model A-C在CIFAR-10数据集的准确率增长曲线,尽管Model C在训练结束后取得了最高的精度,但是在前50个epoch普遍低于Model A和Model B. 观察Model A和ModelB前50个epoch的准确率曲线,其平滑后的曲线大致相同,但是平滑前波动较大。

pNSGA-III排序算法:为了解决小模型陷阱问题,我们对于所提出的pNSGA-III和NSGA-III算法进行对比,如图所示,使用NSGA-III算法生成新的种群将会遇到小模型陷阱,进化的代数越多,模型的平均大小越小。使用所提出的pNSGA-III算法能够对大模型提供保护,从而避免大模型前期因为精度较低而被淘汰,种群中的模型能够覆盖很大范围的模型大小。

CVPR 2020|华为发布基于连续进化的CARS算法,0.4GPU天输出帕累托前沿

图 2使用NSGA-III算法计算帕累托最优并作为下一代种群。

CVPR 2020|华为发布基于连续进化的CARS算法,0.4GPU天输出帕累托前沿

图 3使用NSGA-III算法计算帕累托最优并作为下一代种群。

考虑参数量的多目标搜索:为了研究CARS的搜索能力,作者首先使用模型大小和准确率作为两个目标,并搜索帕累托最优解集。种群大小为128,总共搜索500个epoch,对于网络参数预热50个epoch,结构更新的频率为每更新10次网络参数后更新使用遗传算法更新一次结构,总共进行46次网络结构更新。每次更新时,我们随机生成128个子代,这128个子代和种群中的128个个体混合进行pNSGA-III运算,并挑选出下一代种群。

算法执行完毕后,为了和其他方法进行对比,我们选择CARS A-I,这些模型和对比方法有相同的模型大小,以便进行对比。CARS A-I的模型大小逐渐递增,错误率逐渐降低。相比于其他对比算法,其搜索更加高效,而且一次搜索可以产生一个帕累托解集的模型,方便部署,表明其强大的搜索能力。

CARS A-I在ImageNet数据集上进行训练,其模型大小为3.7M-5.1M,并取得了从72.8-75.2不同水平的准确率。CARS搜索所得的结构能够覆盖大面积的搜索空间,并取得较好的效果。例如,CARS-G和DARTS有相同的4.7M模型大小,其精度超越DARTS 0.9% Top-1.

CVPR 2020|华为发布基于连续进化的CARS算法,0.4GPU天输出帕累托前沿

表格 1搜索结果在ImageNet集合的准确率。

考虑移动端实测推理速度的多目标搜索:为了进一步研究CARS的搜索能力,作者使用准确率和在Huawei P30 Pro的实际推理速度两个指标进行帕累托最优的模型搜索。

作者同样使用DARTS作为搜索空间,并在搜索中对于每个适用遗传算法产生的模型进行硬件速度实测。如下如所示,横轴为实测latency,纵轴为在ImageNet数据集上的Top-1精度。我们所搜索的CARS-Lat-A-F是一系列在帕累托最优上的模型,并超过了一系列baseline模型。

CVPR 2020|华为发布基于连续进化的CARS算法,0.4GPU天输出帕累托前沿

图 4 CARS-Lat为CARS算法在考虑准确率和实测latency两个指标下的搜索结果。其实测速度为Huawei P30 Pro. 算法同样在CIFAR-10上进行搜索,图中所示精度为搜索后的结构在ImageNet数据集的训练精度。

 

总结

为了提升基于遗传算法的网络结构搜索方法的搜索效率,本文提出了名为CARS的连续进化方法。在进化过程中,每一代的种群都充分利用上一代的种群所学到的结构和参数。

作者采用SuperNet共享种群中所有个体和不同代之间个体的参数。参数的优化和结构的更新迭代进行。与此同时,作者提出pNSGA-III算法以解决训练过程中出现的小模型陷阱问题。

在标准数据集上的结果证明CARS能够高效的进行多目标的网络结构搜索,并搜索到位于帕累托最优的一系列模型。

论文链接:

https://arxiv.org/abs/1909.04977

在我爱计算机视觉公众号后台回复“CARS”,即可收到论文下载。

开源地址:

https://github.com/huawei-noah/CARS

END

CVPR 2020|华为发布基于连续进化的CARS算法,0.4GPU天输出帕累托前沿

备注:NAS

CVPR 2020|华为发布基于连续进化的CARS算法,0.4GPU天输出帕累托前沿

AutoML&NAS交流群

自动机器学习、神经架构搜索等技术,

若已为CV君其他账号好友请直接私信。

我爱计算机视觉

微信号:aicvml

QQ群:805388940

微博知乎:@我爱计算机视觉

投稿:[email protected]

网站:www.52cv.net

CVPR 2020|华为发布基于连续进化的CARS算法,0.4GPU天输出帕累托前沿

在看,让更多人看到  CVPR 2020|华为发布基于连续进化的CARS算法,0.4GPU天输出帕累托前沿