CVPR 2019 神经网络架构搜索进展综述

2019-07-30 15:08:22 浏览数 (1)

本文将介绍今年于美国长滩举办的CVPR2019会议上展示的神经网络架构搜索(NAS)领域的研究成果。原标题:Neural Architecture Search at CVPR 2019

作者 | Vladimir Nekrasov

编译 | 林肯二百一十三(西安交通大学)

我相信,每个深度学习研究者和从业者都多多少少地考虑过在他们处理的具体问题上应该使用什么样的神经网络架构。很多人都殚精竭虑地尝试提出像AlexNet、VGG以及ResNet那样的有效架构。因此,“博士生下降”也成了一个红极一时的梗。(注:“博士生下降”英文为Grad Student Descent,简单而言就是“找一个博士生,让他不断调参,直到算法工作”。这种说法歪曲自深度学习的Gradient Descent算法,仅作调侃)

现在呢,我很想骄傲地宣布——“天天调参的鬼日子结束了!”——但是还为时过早。手动调参寻找神经网络架构依然是个有趣的工作,尤其是对于那些带了很多学生的导师而言(开玩笑啦~)。

神经网络架构搜索(NAS)——前言

那么问题来了,神经网络架构搜索(NAS)究竟是什么?为什么我们要了解NAS呢?(这一部分是为了去年完全没有跟进领域内进展的人准备的)

NAS的核心思想是使用搜索算法来发现用于解决我们的问题所需要的神经网络结构。回到“博士生下降”的话题:假设你是个希望解决问题A的导师,你会让你的学生来想一种该问题的最优架构——那么,你的学生就是你的搜索算法(听起来似乎更像奴隶?)。

如果你并不是那种泯灭人性的导师(当然也可能你就是那个学生),你可能会首先定义一种搜索空间,这种搜索空间包含定义神经网络架构的基本构建模块(block)。通常地,每一种配置字符串(configuration string)描述一种架构——比如说,给定三个层(分别用0、1、2表示)和两种block(分别为A:1x1卷积和B:3x3卷积),那么字符串“0A1A2B”表示“x->1x1卷积->1x1卷积->3x3卷积”的网络结构。你可以天马行空地凭想象定义这个搜索空间,但别忘了,搜索空间越大,你的搜索算法需要运行的迭代次数就越多,用到的GPU算力也就越多。

搜索算法有哪些可供我们选择呢?早期的一种算法是进化搜索——网络架构的种群(population,比如可以是随机初始化的一些架构)基于适应度(或“收益”,通常即给定架构在特定问题上的验证指标)不断地被训练和突变(mutate,比如对架构的某些部分进行混合)以达到好的验证指标。另一种方案是基于强化学习,让智能体(有时候称作“控制器”)去发现网络架构的最优配置。这种智能体通常是用循环神经网络实现的,它的目标是寻找能够获得更高收益的神经架构。其他的搜索算法还包括基于梯度的优化(所有可能的架构组成一个巨大的图,每条边有一个可学习的实值,代表每个block被使用的概率)、贝叶斯优化(搜索空间由某种启发函数贯穿,这种启发函数可以是用于预测采样模型准度的代理损失函数)等等。

图注:NAS的高层表示。图片来源:Elsken et. al

如果你对上述算法感兴趣,我推荐阅读Elsken等人的这篇综述。他们还建立维护了一个网站,你可以在这里找到最近的相关文章。

CVPR 2019上的NAS

下面本文将目光转向在CVPR 2019会议上登场的NAS相关工作。如果你只想看大体的总结,下表包含了这些工作的论文和代码地址(前提是它开源)、它们使用的搜索算法、领域和需要的资源。如果这里没有涉及您的文章,可能是我的疏忽导致它被忽略了——请您及时指正。CVPR 2019的所有论文都可以在这里找到。

宏观总结

Auto-DeepLab:语义分割的分层神经架构搜索

熟悉语义分割领域的研究者应该对DeepLab团队都不陌生吧?他们不断提出新的思路、新的模型,不断推进语义分割模型的性能提升。这次,作者使用NAS来寻找语义分割问题的最佳模型。Auto-DeepLab:语义分割的分层神经架构搜索

本质上讲,这篇工作是对DARTS的一种适应性改进。如果你不了解DARTS,下面是对它的一点简单说明:DARTS(可微架构搜索,Differentiable Architecture Search)是一种基于梯度的随机优化方法,它将所有可能的架构一次性初始化,并且在优化网络权重参数的同时还优化混合概率(即模型选择每一条边的概率)。Auto-DeepLab的作者则更进一步:为了搜索适合语义分割的模型,作者还让NAS算法去优化stride运算——也就是在网络架构图中的各处是要下采样特征图,或是保持尺度不变,还是进行上采样。使用一块P100 GPU,作者运行神经架构搜索3天后得到了与DeepLab-v3 性能大致相当的网络结构。

图注:AutoDeepLab发现的一种架构。图片来源:Liu et. al 有意思的是,作者并没有将搜索到的网络在ImageNet上进行预训练,而是直接从零开始在CityScapes和ADE20K数据集上进行训练的,只有对PASCAL VOC数据集使用了MS COCO进行训练。作者在原文中提到:“我们认为PASCAL VOC 2012数据集太小了,用来从零开始训练模型实在不够。这种情况下,还是用ImageNet进行预训练会更有效”。说实在的,要是能看到ImageNet预训练对作者用的所有数据集上的效果就好了,比如说进行预训练会不会让模型在CityScapes数据集上也获得更好的效果呢?

用单GPU四小时搜索出健壮的神经网络架构

这篇论文中,作者结合了ENAS和DARTS二者的最佳实践,从而提出了GDAS(Gradient-based search using Differentiable Architecture Sampler)方法。DARTS的定义上文已经提到;ENAS是Pham et. al提出的一种基于强化学习的神经架构搜索方法,它在一开始同样初始化了一个巨大的图——但与DARTS在每个边上添加权重的方式不同,ENAS使用基于强化学习的控制器来决定选择哪一条路径。

这里,作者显式地采取了一些路径并进行优化。因为这个采样是离散的,作者借助了Gunbel采样技巧来实现反向传播。作者原文写道:“我们在前向传播时使用argmax函数……而在反向传播时使用了softmax函数……”。总体上,该方法在用于图像分类的CIFAR-10数据集和上用于语言建模的Penn Tree Bank (PTB)数据集上实现了快速搜索。

图注:GDAS发现的网络单元。图片来源:Dong and Yang

GDAS的另一个加速训练、节省内存的技巧是在前向传播中直接使用argmax函数——使用了in-place后,只有被argmax选择的一个索引处生成的梯度需要回传。作者声称,使用batch训练的其它层还是会得到梯度,因为每个batch中的样本经过的路径是不同的。

MnasNet:平台感知的移动端神经网络架构搜索

这篇论文中,作者考虑的是NAS的一种重要应用——搜索适合移动设备快速推断场景的网络架构。为此,作者提出一种多目标的优化方法——基于强化学习的控制器被训练搜索一种不仅能得到高分、而且能够在Google Pixel 1的CPU上短时间内响应的模型架构。作者遵循帕累托优化准则,即“如果模型能在不花费额外时间的条件下达到高准确率,或者在不降低准确率的条件下花费更少的时间,则该模型是帕累托最优的”。

图注:MnasNet神经架构搜索方法概观。图片来源:Tan et. al

另外,为了保证模型在搜索空间中高效且可用,作者定义了一种多个层的“block”。每个“block”中,同一个层被重复N次——层的类型和重复次数是由强化学习控制器预测的。总体而言,MnasNet架构设计是受MobileNet-v2启发的,因此也可以认为:MnasNet是使用强化学习对MobileNet-v2的微调。(不过这个“微调”有点太耗费计算资源啦!MnasNet花费了整整6912个"TPU×小时"!)

RENAS:强化进化神经网络架构搜索

RENAS的主要思路在于:使用可微的强化学习控制器来增强锦标赛选择法的变异机制。 锦标赛选择法首先会初始化一个由神经架构(即进化算法中的个体,individual)组成的种群(population)。每个神经架构个体被训练之后,通过在验证集上进行评估来确定它们的适应度(fitness)。之后,种群中适应度最强的个体被变异(mutate)——比如改变它的一些层或者运算——从而产生子代(child)。在RENAS论文中,作者添加的强化学习控制器定义了给定网络如何进行变异。为了加速训练过程,子代模型直接继承了父代的模型参数。

图注:使用强化学习变异的进化算法搜索。图片来源:Chen et. al

NAS-FPN:搜索用于目标检测的特征金字塔架构

这一篇论文则关注了NAS的另一种应用——自动化地改进目标检测网络。在过去的几年里,特征金字塔网络(FPN)几乎成了所有高性能目标检测网络的标配。本质上讲,FPN起到了对网络主干(编码器)提取的特征的逐步解码的作用。NAS-FPN这篇论文的动机就是寻找一些方法来从原始的网络主干结构的各层上更好地结合多种尺度的信息。 为此,作者定义了”合并单元“(merging cell)的搜索空间——以多种尺度的特征作为输入,将这些特征进行精化后作为输出。在合并单元中,基于强化学习的控制器对两个输入层(可能尺度并不相同)、输出尺度和融合方式(可以是求和,或是基于注意力的全局池化等)进行选择。合并单元的输出被添加到下采样的池化层中,作为下一步选择的选项之一。

图注:合并单元的结构。图片来源:Ghiasi et. al 作者表示,合并单元的设计使得“anytime detection”成为可能,因为多个模块化的单元可以被堆叠在一起,前向传播可能在其中任何一个之后停止。这样,即便我们提前结束前向传播(early exit)并用此时网络的输出层进行目标边框回归,该特征图依然能足够使边框回归能够有效地检测出物体边框。为了加速网络搜索,作者使用了输入尺度为512x512的、较轻量级的ResNet-10作为网络主干。

IRLAS:基于反向强化学习的神经架构搜索

IRLAS的作者观察发现:人们自行设计的网络拓扑结构往往比自动化生成的那些结构更优雅,而这些结构同时定义着网络的响应时间和内存消耗。因此,作者没有显式地设定资源消耗的约束,而是试图促使生成的网络拓扑尽可能地模仿某种经典网络模型(如ResNet)。“模仿”这一部分是通过一个奖励函数中的一个附加项来实现的。

图注:IRLAS概观。图片来源:Guo et. al

我本人非常喜欢这种“提取已有网络架构设计的精华从而更好地训练NAS模型”的思想。如果作者能进一步得出一种方案使得NAS模型能够借鉴多种经典模型(而不止一个),或许会更有意思呢。

使用辅助单元快速搜索小型语义分割模型

王婆警告:我(原博文作者)也是这篇论文的合著作者之一,所以以下观点可能有所偏颇哦~

传统上,基于强化学习的NAS算法需要大量的运算(通常以“GPUx小时”计,或者“TPU-小时”)。尽管这些NAS算法在分类任务上对较小的“代理”数据集(比如CIFAR-10)还是有不错的性能,但是在输出较为“密集”的任务(如语义分割)上,暂时还没有这种“代理”数据集可用。况且,训练一个分割模型可比训练分类模型耗费的时间和资源多多了。

正因如此,我们这篇文章专注于加速基于强化学习的语义分割神经架构搜索的内层循环——也就是对于采样的网络结构的训练与评估。我们以一个预训练的图像分类器为基础(这里使用的是MobileNet-v2),只对它的解码器部分进行搜索。为此,我们设计了一些加速收敛的技巧:1)两阶段训练与早停(early stopping)。第一阶段中,我们提前计算出编码器的输出,并只训练解码器。如果这一阶段后的奖励值比平均的奖励低的话,就干脆终止这次训练;否则进入第二阶段,以端到端的方式训练整个网络。2)我们借助知识蒸馏和Polyak权重平均来加速解码器部分的收敛。3)另外,我们还运用中继监督优化——但不是简单地使用单个网络层来进行分割,而是使用强化学习控制器产生的模型结构对中继分割器进行过参数化。我们推测,这种过参数化对于小型语义分割模型有以下帮助:a)它可以使网络主干的梯度更平滑,b)它使得对较浅的中间层的任务要求不那么严苛。

图注:作者发现的一种用于语义分割的模型。图片来源:Nekrasov et. al

FBNet:使用可微NAS的高效硬件感知卷积网络设计

像上边提到的一些工作一样,FBNet的作者也是把搜索空间初始化为一个由不同的层组成的巨大的图,并采用可微的随机优化方法,辅以Gumbel采样技巧进行搜索。除此之外,作者用了一个查询表来估计生成的网络通路上每一个块运算花费的时间。与那些只搜索一两种块(单元)的NAS文章不同,作者在这里定义了整个网络的宏观架构(宏观结构空间)和每一层的候选块(微观结构空间),并对它们分别进行搜索。

图注:FBNet搜索到的一些网络架构。K代表卷积核大小,E代表放大倍率,G代表卷积分组的参数。图片来源:Wu et. al

FBNet的作者以Samsung Galaxy S8为目标设备,使用int8数据类型进行推断。作者认为,以多种不同的设备为目标是不现实的,毕竟我们要搜索的是更好的针对特定设备的网络(上文提到的查询表也是针对特定设备的)。

可自定义的语义分割网络架构搜索

这篇文章的作者将DARTS面向语义分割进行了适应,并将搜索空间设计为三种单元——图片分类里常见的普通单元、缩小单元,以及受ASPP启发而设计的多尺度单元。除了特定任务的损失函数外,算法的优化目标还加入了一个新的目标函数——“选择特定操作的代价”。为了定义给定操作的这个“代价”值,作者提出了对“仅使用给定操作建立的单元”和“仅使用单一操作建立的单元”之间响应时间、参数数量或FLOP数的差距进行比较、衡量的方法。

图注:基于资源的语义分割神经架构搜索。图片来源:Zhang et. al

作者在搜索多尺度单元之前,首先搜索了包含普通单元和缩小单元的语义分割网络主干,再使用ImageNet对他们进行微调。意外的是,作者使用这样简单粗暴的估计方式依然能有效地找到小而准确的网络架构。

彩蛋

下边还有两篇文章,虽然这两篇并非与NAS紧密相关,但或许对某些人来讲还是有点意思的。

MFAS:多模态融合网络架构搜索

这篇文章的作者试图解决的是多模态融合问题——也就是说,给定多个固定模态的网络,去寻找连接他们的隐藏层的最佳方式,从而对于特定的任务达到最佳的性能。举例而言,一种常见的策略是晚融合(late-fusion)——只有每个网络最后一层的输出被融合在一起(比如求和,连接等等)。作者将多模态融合问题也定义为神经架构搜索,它不是从零开始对整个网络结构进行的搜索,而是仅仅寻找已经训练好的网络的连接方式。

为此,作者使用了基于序列模型的优化方法(SMBO)。在SMBO中,往往会用一个单独的、称作“surrogate”的函数来估计采样到的架构的准确率。不一样的是,搜索空间是从一个比较小的架构集合开始的,“surrogate”函数被预训练后,网络架构的尺寸才被逐渐变大。传统NAS框架中这种方法的一个经典案例是渐进式NAS。

通过上述方法,作者找到了一些在MM-IMDB数据集上用于预测电影流派和电影简介的多模态融合架构,以及在NTU RGB-D数据集上用于根据姿态和RGB信息进行行为识别的架构。

神经网络架构搜索的一种神经生物学评估指标

在神经生物学中有这样一种理论:对于相似的物体,人脑会产生相似的神经响应。基于这种理论,作者推测:具有与人脑相似的激活机制的神经网络,也应该有更强的泛化能力。因此,作者提出了一种“与人脑模型的相似度”(HMS)的评价指标,并用这种指标来对人体的功能性磁共振成像(fMRI)和神经网络的激活行为进行比对。在这里,作者考虑的网络称作PredNet,可用于非监督视频预测,即给定当前帧、预测之后可能发生的内容。

为了定义HMS,作者建立了一种“表示性不相似程度矩阵”(RDM,representational dissimilarity matrix)来量化两个系统(这里是网络与人脑)对一对刺激的响应。给定两个RDM,HMS被定义为二者的斯皮尔曼等级相关系数。

图注:HMS指标的计算流。图片来源:Blanchard et. al

值得关注的一点是,作者发现HMS与验证集精确度有很强的相关性——也就是说,HMS也许能够作为用于寻找具有较强泛化性能的网络并提早停止的指标。另外,要计算HMS,该方法只需要92次刺激。如果能看到这一研究方向能让生物学理论与人工神经网络碰撞产生怎样的火花,那就有意思啦!

该论文的实现代码已开源:

https://github.com/CVRL/human-model-similarity

结论

尽管说“CVPR 2019是NAS重大突破的一场盛会”有点言过其实,但能见识到这么多工作在克服了对大量GPU/TPU算力的依赖的同时又能达到与之相当的性能,实在是激(yi)动(ke)人(sai)心(ting)呀!我很期待看到NAS的研究将会取得怎样的进展,以及NAS的众多研究者能够想到怎样的技巧呢。

总结了这么多,我还想提及一点:从零开始搜索用于图像以外的分类任务的网络架构依然是个巨大的挑战。今年我们见识到了一些神经架构搜索方法有基于强化学习改进的(如NAS-FPN、FastDenseNAS)、基于可微优化改进的(如AutoDeepLab、CAS)和从一开始就预定义巨大的网络结构的(类似于DARTS的那些),而这些都或多或少地做出了一些让步——比如将搜索空间限定在有限数量的一些层(基于强化学习的那些),或在搜索开始时预定义巨大的结构(基于DARTS的)。我不禁想到了我们在2015年左右见到的语义分割的进展——那时候的那些工作,大多数都是基于图像分类器的改进的(见Long et. al的开创性工作——FCN)。而从那之后,针对各种具体任务的各种模型逐渐变得越来越成熟、多样化(如ASPP、PSP、RefineNet等等),进而推动了这个领域的蓬勃发展。我相信,不久之后,我们也会见识到更多为具体任务量身定做的NAS模型,而不只是图像分类和语言建模这些基本任务。

0 人点赞