新闻中心

每一个新动态都是我们向前迈进的新脚步

返回研究动态

【商汤泰坦公开课】AutoML知多少

2020-05-07 10:52

导读

AutoML(自动机器学习)以及NAS(神经架构搜索)是深度学习领域目前最具潜力和影响力的方向之一,其目的是更加自动化地实现神经网络的结构设计以及超参优化等方面。

2020年5月7日,商汤泰坦公开课第010期、CVPR2020论文解读第二期的线上课程,由商汤四位研究员分享了团队在AutoML方面最新的研究工作,小助手已为大家做了图文整理,快来一睹为快吧~

Part 1  AutoML领域综述

Part 2  商汤AutoML团队相关研究进展

            2.1 Augmentation

            2.2 NAS

            2.3 LossFunction

Part 3  Q&A问答

Part 4  答疑交流

课程PPT及视频回放获取方式见文末提示~

 

Part 1 AutoML综述

深度学习是一个在2013年被引爆的概念,自从AlexNet推出以来,在很多CV任务的benchmark上会看到深度学习为核心的算法的身影,如今可以称作是“深度学习的时代”,因为一些传统的算法已经淡出了视野,常说的“深度学习三巨头”在2018年凭借在深度学习方向上的贡献获得了图灵奖,足以见得深度学习是目前非常火热的方向。

深度学习是一个在2013年被引爆的概念,并在整个机器学习领域占据了主导地位。深度学习和非深度学习的主要区别在于用于做物体识别的feature是手工设计还是自动设计,深度学习提供了一个从data中获取feature的方式,对于深度学习来说,下一步的走向会是哪里?

目前认为深度学习的下一步是自动化的深度学习。深度学习解决了一个从data中挖掘合适的feature的问题,研究人员在整个训练过程中会遇到很多问题:是否要使用数据增强?要使用什么数据增强?是否用了合适的loss function?有没有办法寻找更好的loss function?深度学习的架构要用多少层?层与层的拓扑关系要如何确定?如何分配计算量?

在深度学习框架下这些问题仍然需要手调,我们希望从数据中获取答案,那么AutoML就是其中一种技术路线。目前它遇到的主要问题是计算量需求非常大,从一些工作可以看出,在NASNet中提到其需要的GPU Days是1800天,虽然可以获得不错的结果,但开销对于一些小公司来讲是无法接受的。其后续工作AmoebaNet利用了Evolution的方式做网络结构搜索,其GPU Days甚至比1800还要高。如何解决computational budget是大家在做AutoML时非常关心的问题。

目前认为AutoML完整的流程,主要分为data、model和optimization三个部分,其关系如下图所示:

从Data set到最终的模型会经历很长的过程,首先要对data进行清洗,然后确定模型结构,最后是对模型进行optimization。目前团队不仅在NAS方面有较丰富的成果,同时也在Augmentation和Loss Function方面有一定尝试,并取得不错的进展。

下面将根据以上介绍的AutoML的三方面,分别介绍商汤研究团队近期取得的成果。

Part 2 论文解读

1 Augmentation

这篇的工作由google首次实现,pipeline会和他们的NAS方法非常接近,首先有一个RNN Controller generated strategy,其中包括了做Augmentation的概率和幅度,在得到了Augmentation policy后会训练一个网络,从初始化训练到收敛,收敛后会在validation set上获得reward。通过reward来监督RNN Controller,使得RNN Controller采样reward更高的strategy。这个流程中的第一个问题就是evaluation很慢,过程非常耗时,其次如果Reinforce Learning搭配RNN Controller进行参数的训练,迭代次数非常多,综合起来会让时间开销非常大。为了解决耗时的问题,他们采样了数据集,对CIFAR-10仅采样8%,对IMAGENET仅采样0.5%。并且,只能对单一结构进行搜索,期待搜索结果在别的网络上获得好的效果。这些都是以上工作的一些弊端。我们采用了不同的视角,把augmentation policy search看作一个超参优化。传统超参优化的问题也出现在迭代上,我们提出了Online Hyper-parameter Learning的方法来解决此问题。OHL与传统方式的区别是,只进行单个模型的训练,single run是我们主要的特点,且并不需要模型做retrain,当搜索完成后可获得最终想要的模型。将单个模型的训练过程切成碎片,运行多个模型,每个GPU在跑一个小trunk时的初始参数是相同的,采样不同的augmentation policy,运用在不同的模型上,获得不同的reward,监督P0走向好的augmentation policy分布。

结果:可以看到除了AMOEBANET-B对比Google会稍逊一筹外,其他的几个模型都可以稳定超过google的结果。

在ImageNet上的测试结果:

论文地址:https://arxiv.org/abs/1905.07373

2 Network Architecture

1)EcoNAS: 为传统网络搜索方法寻找最佳的代理

在网络搜索中非常重要的部分就是评估候选子结构的优劣。我们通常要使用代理,如何评估代理的好坏呢?我们常用的方法是去衡量代理条件下得到模型的精度和模型真实的精度排序的一致性。我们的实验采样了50个网络,把他们训练到完全收敛,用得到的最终精度的排序和在代理环境下排序的斯皮尔曼排序相关系数(Spearman ranking coeffficient)来评估他们之间的关联性,相关系数越高则代理环境保持网络排序的能力(也称保序性)越高,对于NAS算法越有利。可以给出下图,横轴是代理的加速比例:

对上图的实验结果进行分析后得知,更长的训练迭代和使用全部数据进行训练对保序是有利的,降低分辨率对保序的影响并不规律,可以适当降低分辨率,同时通道降低对保序有利。基于我们上述的观察,我们使用了使得训练快速但相关系数大的设置,并设计了EcoNAS。EcoNAS采用了搜索得到的高效设置,在这个设定下,单模型训练20 epoch只需要单卡数分钟。对于训练迭代,我们设计了一套分层算法,对早期表现不好的备选网络进行早停,从而进一步减少计算资源:

这三个集合随着搜索的进行大小由此降低,也就是说只有很少的模型会被训练到3N次迭代,这是基于我们之前发现的epoch越多,对模型的评估越好的观察设计的算法。

在8 GPU Days内EcoNAS即可搜索,我们搜索到的参数在将AMOEBANET加速近260倍的同时对性能也有一定提升,加入层次化代理后还会带来两倍的速度提升和更高的性能,我们的研究表明了代理保序性对NAS算法的重要性。

论文地址:https://arxiv.org/abs/2001.01233

2)PC-NAS: 基于参数后验分布特性提高网络结构搜索中代理的有效性

当前网络结构搜索算法大量的计算量需求成为了其应用中最大的问题。然而解决计算量问题的方法目前还不完美,使用共享参数的超网做代理成为了目前比较普遍的选择。但这类方法受限于代理和真实情况的偏差。通过分析随机梯度优化求解的参数后验分布的KL散度,我们得出了减少搜索空间内网络结构数量可以提高one-shot相关性的结论。

为了在训练权重共享的同时,减小权重共享的网络结构数量,我们提出一种训练时的空间修剪方法。假设我们目前有一个如上图所示的超网,每一层拥有一个mixop(mixop是n个候选op的合称)于是该超网中总共包含n^层数个不同的结构。为了进行搜索空间的修剪,我们提出了部分结构池的概念(partial model pool)。假设网络结构有L层,部分结构池在整个搜索过程中将会有L个状态(Stage)。每从L-1状态到L状态,部分结构池中的子结构的层数将增长1。

改进后的proxy和原来的one-shot proxy的对比。PC-NAS最终的搜索空间很小,所以获得的最终精度非常接近单独训练时的排序。

论文地址:https://arxiv.org/abs/1910.02543

3)GreedyNAS: 基于贪⼼超⽹络的One-Shot NAS⽅法

我们提出一种贪心超网络来减轻supernet的评估压力,使得supernet更加贪心地注重于有潜力的好结构,提高搜索的精度。

先前的方法首先构造一个超网络,包含搜索空间里的所有OP和参数,同时在每一次超网络训练时sample出一个小的子网络进行训练。巨大的搜索空间带来的评估压力使supernet难以准确地区分结构的好坏,由于所有结构的权重都是在supernet中高度共享的,如果一个差的结构被训练到了,好的结构的权重也会受到干扰。这样的干扰会削弱好网络的最终评估精度,影响网络的搜索结果。同时,对差的结构进行训练相当于对权重进行了没有必要的更新,降低supernet的训练效率。

因此我们希望降低搜索空间的大小,提升它的评估性能。

假设搜索空间可以如上划分为好的空间与差的空间,且好空间中每一个结构的ACC均大于差空间,然而确定所有结构中哪些是来自好空间需要遍历整个搜索空间,计算开销是无法接受的。

为了解决这一问题,我们提出了一种multi-path sampling with rejection的多分支过滤采样方法。在介绍这个方法前,我们首先对目前的均匀采样方法进行分析。

因为分支的采样是均匀且独立的,那么每个path来自好空间的概率为:

为了得到需要的来自于好空间的结构,我们进一步考虑一个多维的Bernoulli实验,那么有如下的结论:

我们取m = 10和m = 20,对定理1的概率进行绘制,如Figure 2所示,可见这种采样下得到来自好空间中的path的概率是很高的。

于是,我们可以对采样到的多个结构进行评估筛选的方法提升采样到“好”结构的概率,即每次采样m个结构,从中选取评估指标最高的k个结构进行训练。为了减少评估网络的消耗,我们从验证集中随机选取了一小部分(如1000张图)组成小验证集,并使用在小验证集上的loss作为结构的排序指标。使用小验证集进行评估,在保证评估准确性的前提下,相较uniform sampling方法只增加了很少的计算代价。

在前面提到的路径滤波中,我们通过评估可以区分出较好的结构,为了进一步提升训练效率,我们提出使用一个路径候选池用于存放训练过程中评估过的“好”结构,并进行重复利用。具体而言,候选池可以看作是一个固定大小的有序队列,其只会存储所有评估过结构中得分前n(候选池大小) 的结构。

在网络刚开始训练时评估过的结构较少,候选池中存储的结构是好结构的可信度不高,因此从候选池中采样的概率 ϵ 在开始时设为0,并线性增加至一个较高的值,若候选池中的结构都来自好空间,通过使用候选池,采样10个结构,至少有5个好结构的概率由88.38%提升至99.36% 。

候选池主要有以下优点:

● 提升训练效率

● 提升采样精度

● 可以通过候选池更新频率判断supernet是否具备足够的评估性能,因而可以用作停止训练的参考

● 使进化算法有更好的初始,提高搜索到结构的整体精度

论文地址:https://arxiv.org/abs/2003.11236

4)CRNAS: 检测中的算力重分配

我们换了一个研究的视角,从检测这个问题本身去考虑NAS。之前在NAS上做检测的文章更多的是直接把分类的经验拿到检测上做搜索,我们的工作是基于检测的任务去做NAS,而不是将NAS直接应用到检测的任务上来。

对Res50分类而言,ImageNet输入大小是224*224,但是对于检测而言,拿COCO为例,输入可能到800*1333,而且还需要去handle各个尺度的物体。

这个时候,我们将网络的有效感受野ERF与网络算力分配模式联系了起来。在Faster RCNN + FPN这一经典baseline中,我们希望FPN的各层有合适能力去检测对应大小的物体(Anchor Size)。当我们画出R50-FPN的各层的ERF时,发现对于P3而言(小物体),ERF挺大有冗余,但对于P5而言(大物体),ERF又不够有点稀疏,见下图Figure 1右上角。这也就是直接应用Res50作为backbone的问题。

经过我们的stage的重分配之后,可以明显看到各层FPN有更加平衡的ERF,保证了最后的性能。

为了进行算力重分配,我们构建了一个两级搜索来配合这个庞大的搜索空间。我们先进行stage的搜索,然后进行spatial的搜索。简单来说,先搜索各个stage的block number,再搜索各个位置的dilated conv的rate,因为dilated conv通过改变采样点的稀疏程度,可以改变网络的感受野。

我们利用One-shot NAS的方式构建超图,当超图训练完成后,我们去测试各种组合的性能,从其中挑选中最好的组合。

我们也设计了可以重复利用的超图,也就是你训练了一个超图之后,我们可以从中挑选出这个系列中任何计算量下最好的模型,如Res18到Res101。

在得到stage的结果之后,我们利用dilated conv来完成不同位置稀疏的采样。与第1步一样,我们也是利用One-shot NAS的方式构建超图。

从结果上面来看,经过我们的CRNAS,所有的模型在COCO上均有1.5-1.9 mAP左右的提升,而且这些提升都没有带来任何的计算量增长。且模型有较好的迁移性能。

论文地址:https://arxiv.org/abs/1912.11234

3 Network Architecture

1)AM-LFS:AutoML for Loss Function Search

Loss function是在很多图像任务上比较重要的调参的对象,目前存在的Loss function有很多问题,适宜用AutoML解决,可以通过数据确定Loss function的形式。机器是否能学习Loss function?将过去的Loss function放在loss空间中,发现了一个统一的表达:

在选用不同的具体表达时,会应对原空间中不同的loss function。在有了这一表达后,对这一函数的搜索我们采取了简单的分段函数,在分段内部是简单的线段。

我们提出了将loss function search转化为另外两个函数的搜索,使用了前面提到的OHL framework,用不同的trunk更新两个函数的超参,使分段函数可以拟合上目标函数。最后在Cifar10上实验对比baseline在noisy ratio的情况下可以提升2各点左右,带有noise的情况下会提升更多。

论文地址:https://arxiv.org/abs/1905.07375

 

Part 3 Q&A

Q:通道数降低可以获得更好的性能评估,这一点对于不同的网络结构和loss function都适用吗?

A:这是一个比较反直觉的现象,遇到新的任务时可以往这个方向尝试,但未必会找到一个哪里都适用的规律。

Q:loss的搜索实质上是对确定好的几种loss进行系数的自动寻优吗?

A:不是的。我们参考了几组loss function的特征,抽象成了loss function的空间,由两个单独的函数确定最终的方式,我们把loss function search的函数转化到了前面提到的两个函数上,然后用分段线性函数的参数来搜索新的空间。

Q:Paper中提到,用1000张图片评价是不太少了?

A:在paper中,我们对各种大小的验证集与完整验证集的排序相关性做了详细的分析,选择1000张是因为图片数量到1000时排序相关性已经可以稳定到90%以上,再增加也不会有更大的提升,因此为了兼顾效率,我们选择了1000张图片。

Q:候选池中的结构有更大可能性被多次训练,这对one shot方法最终评估会有较大影响,怎么保证找到的结构不是因为偶然因素而被训练最多的结构?

A:如果从候选池中采样,可以提升效率,但也会丢失搜索结构的多样性,所以在实现中为了保证从大空间采样的多样性与池中搜索效率的平衡,我们一开始只会从完整的搜索空间进行sample,公平地采样所有结构,当训练轮数达到一定程度再引入候选池进行搜索,且从候选池中采样的概率会由0线性增加至0.8。这样从公平到贪心训练逐渐演变的过程,可以减少训练不均衡、结构不公平的情况,同时得到贪心带来的效率提升。

Q:NAS会不会在搜索的数据集上过拟合,导致在实际场景中表现没那么好?

A:绝大部分CV任务都基于ImageNET,如果NAS能在ImageNET基础上搜出一个好的模型,大概率可以迁移到其他实际任务上的。在一些Task specific research中,有可能针对不同的搜索时会拟合到你搜索的数据集。

 

「商汤泰坦公开课」公众号后台回复“010”,即可获取相应的课程资料哦!

 

相关阅读:

  1. CVPR 2020 | 商汤提出基于贪心超网络的One-Shot NAS方法:https://mp.weixin.qq.com/s/i9XmvN_QuDN6zhCh1Xa0aQ
  2. CVPR 2020 | 商汤提出基于空间修剪的PCNAS算法:https://mp.weixin.qq.com/s/ilH6w4V3kdy0G8pA4jVi2g
  3. CVPR 2020 | 加速400倍!商汤探索更好的网络评价方法EcoNas:https://mp.weixin.qq.com/s/N3trZlckI6jccTu8d_R1Yw 
  4. ICLR 2020|检测中的算力重分配 (CRNAS):https://mp.weixin.qq.com/s/Fjd6pGuJxCKcV8cPiLVw5g