【论文】FBNet: Hardware-Aware Efficient ConvNet Design
via Differentiable Neural Architecture Search
【地址】https://arxiv.org/pdf/1812.03443
将Loss函数设计为这种形式:
然后证明交叉熵项和延时项对于网络基本结构的选择是可微分的,然后通过梯度下降方法选择最优结构。
给移动设备设计又准又快的卷积网络是非常具有挑战的,因为设计空间太大了。因此,之前的神经网络架构搜索(NAS)方法计算量太大。卷积架构优化依赖的因素有分辨率和目标设备等。然而,用现有的方法一个一个去重新设计代价太高。并且,之前的方法主要集中在减少FLOPs,但是FLOP计数并不总是能反映实际延时。基于这些情况,我们提出了一种可微神经架构搜索(DNAS)框架,使用基于梯度的方法去优化卷积网络结构,避免像之前的方法那样去穷举和单独训练结构。FBNets,是DNAS搜索框架生成的网络结构家族,超越了人工设计的和自动生成的start-of-the-art模型。FBNet-B,在ImageNet数据集上达到了74.1%的top-1准群率,295M的FLOPs,和23.1ms的延时,运行设备是三星S8手机。比MobileNetV2-1.3小2.4倍,快1.5被,准确率相近。比MNasNet生成的模型准确率更高,延时更低,搜索代价小420倍,是需要216个GPU时。搜索不同分辨率和通道大小,FBNets比MobileNetV2的准确率高了1.5%至6.4%。最小的FBNet网络达到了50.2%的准确率和2.9ms的延时。比为三星优化过的FBNet更强,为iphone-X优化的模型快了1.4倍。
【概括】
之前的架构搜索方法有两个缺点:1、一个一个分离训练模型;2、FLOPs指标不够可靠。 新方法DNAS:基于梯度优化网络结构,不会去穷举网络结构和单独训练。
图2
1、引论
卷积网络是计算机视觉标配的方法。在许多计算机视觉任务中,好的卷积网络设计通常能带来显著的准确率提升。在之前的工作中,准确率的提升是以更高的计算复杂度为代价,这给在计算能力受限的移动设备上部署卷积网络带来了更多挑战。相比只关注准确率,最近的工作也会去优化效率,尤其是延时。然而,设计又快又准的卷积网络是一个难题。挑战主要来自下面几个方面。
无解的设计空间(Intractable design space):卷积网络的设计空间是组合的。以VGG16为例:VGG16有16层。假设每一层,我们可以从{1,3,5}中选择一个卷积核尺寸,从{32, 64, 128, 256, 512}选择一个卷积核数量。即使是如此简单的设计选项和浅层网络,这个设计空间仍包含个可能的结构。同时,训练卷积网络是非常耗时的,甚至要花几天或者几周的时间。因此,之前的卷积网络设计很少去搜索整个空间。人工设计卷积网络的一个典型流程如图2(a)。设计者先设计出初始结构然后在目标数据集上训练。然后根据性能逐步修改结构。受训练代价限制,设计过程中只能负担得起很少次实验,这对于充分地搜索设计空间来说远远不够。
从[28][B. Zoph and Q. V. Le. Neural architecture search with reinforcement learning. arXiv preprint arXiv:1611.01578, 2016.]开始,近来的工作使用神经架构搜索(NAS)去自动搜索设计空间。前面有许多工作[28,29,19]使用强化学习去指导搜索,典型流程如图2(b)所示。一个控制器从搜索空间中选择要被训练的结构。为了减少训练代价,被选中的网络在一个小的数据集比如CIFAR-10训练,或者在ImageNet上面训练很少的epochs。被训练的网络的性能然后会被用于训练和改善控制器。之前的工作[28,29,19]已经证实了这些方法在寻找准确高效的卷积网络的效果。然而,训练每个结构仍然很耗时,并且通常有上千种结构去训练控制器。因此,这些方法的计算代价是相当的高,成为了卷积网络设计的新挑战。
不通用的最优解(Nontransferable optimality):最优的卷积结构受很多因素限制,比如输入分辨率和目标设备。一旦这些因素改变,最有解的结构就会变化。一个通常的减少网络FLOPs的方式是去减小输入分辨率。小的输入分辨率可能需要小的感受阈,因此需要更少的层数。在不同的设备上,同样的操作有不同的延时,所以我们需要调整网络结构去达到最好的准确率-效率平衡。理想情况下,我们应该为针对不同的情况一个一个设计网络结构。然而实际上,不论是人工还是自动化方法,受计算代价限制,我们只能设计一个网络去用于所有的情况。
不一致的效率度量(Inconsistent efficiency metrics):大多数效率度量不仅依赖于网络结构也依赖目标设备的硬件和软件配置。一些度量包括延时、功耗,本篇我们主要考虑延时。为了简化问题,之前的许多工作都用了硬件透明(hardware-agnostic)的度量比如FLOPs(更严格地说是乘加操作的次数)去评估效率。然而,FLOP计数低的网络不一定快。比如,NasNet-A[29]有和MobileNetV1[5]相近的FLOP计数,但是它复杂和碎片化的基本结构(cell-level structure)并不是硬件友好的,所以实际上更慢[16]。硬件透明度量和实际的效率之间的不一致性使卷积网络的设计更加困难。
图1
【画重点】
为了解决上述问题,我们提出了使用可微神经架构搜索(DNAS)去发现硬件可见(hardware-aware)的高效卷积网络。我们算法的流程如图1所示。DNAS支持去搜索层级搜索空间(layer-wise search space ),我们可以给网络的每一层选择一个不提供的块。如同[20],DNAS通过一个super net表达搜索空间,super net的运算符是随机执行的(Following [20], DNAS represents the search space by a super net whose operators execute stochastically.)。我们放宽寻找最优结构的问题,而去寻找产生最优结构的分布。使用Gumbel Softmax技术[8],我们可以使用基于梯度的优化方法比如SGD直接训练结构分布。搜索过程与之前的基于强化学习的方法相比是非常快的。用来训练stochastic super net的loss由改善准确率的交叉熵loss和减少目标设备延时的延时loss组成。为了估量一个网络结构的延时,我们会计算搜索空间每个操作的延时并且使用速查表模型去计算所有操作的延时(每个操作的时间加起来)。使用这个模型我们可以快速的估量庞大的搜索空间中网络结构的延时。更重要的是,它使得延时关于层结构选择是可微的。
【概括】
1、DNAS使用基于梯度的方法,不同于之前NAS流派的基于RL的方法。
2、DNAS优化的是结构分布,不同于之前是直接寻找的结构。
3、DNAS的loss由交叉熵和延时两部分组成。
4、使用速查表去计算延时。延时是硬件相关的。之前用FLOPs度量速度。
5、延时关于层结构是可微的。
我们把DNAS发现的结构叫做FBNets。FBNets的效率超越了人工和自动设计出来的stat-of-the-art的卷积网络。FBNet-B以295M的FLOPS和23.1ms的延时在三星S8手机上达到了74.1%的top-1准确率。比同样准确率的MobielNetV2-1.3小2.4倍快1.5倍。比MNasNet更好,FBNet-B的搜索代价是216GPU时,比MNasNet基于[19]的评估低421倍。如此低的搜索空间使我们能够一个一个的重新设计。对于不同的分辨率和通道缩放,FBNets的top-1准确率比MObileNetV2高1.5%至6.4%。最小的FBNet网络在三星S8上达到了50.2%的准确率和2.9ms的延时(每秒345帧),batch size 为1。使用DNAS搜索指定设备上的卷积网络,一个为iPhone-x优化的模型比为三星优化的模型快了1.4倍。
2、相关工作
高效的卷积模型(Efficient ConvNet models):近年来设计高效的卷积网络吸引了许多研究者。SqueezeNet[7]是早期致力于研究减少卷积模型参数量的早期工作之一。它原来被用于分类,后来被扩展到检测[21]和LiDAR点云分割[23,24]。继SqueezeNet之后,SqueezeNext[2]和ShiftNet[22]实现了更多的参数削减。近来的研究从参数量转移到了FLOPs。MobileNetV1和MobileNetV2[5,16]使用depthwise卷积去替换更加昂贵的空间卷积。ShuffleNet[27]使用组卷积和shuffle操作去进一步减少FLOP次数。之后的研究发现FLOP计数并不总能反应真实的硬件效率。为了改善实际延时,ShuffleNetV2[12]提出了一些列高效网络设计的实践指南。Synetgy[26]结合ShuffleNetV2和ShiftNet的思想去协同设计硬件友好的卷积网络和FPGA加速器。
神经网路架构搜索(Neural Architecture Search): [28,29]首先提出了使用强化学习去搜索神经网络架构以实现用较小的FLOPs达到可比较的准确率。早期的NAS方法计算量是很大的。进来的研究试图通过权重共享[16]或者基于梯度的方法[12]减小计算代价。[25,1]进一步发展了可微神经架构搜索和Gumbel Softmax [9]结合的思想。早期关于NAS的研究 [31, 16, 12]着重于cell 级的架构搜索。并且同样的cell结构在网络的所有层重复。然而,如此破碎和复杂的cell级结构是硬件不友好的,并且实际效率也很低。最近,[20]研究了一个stage级的分层搜索空间,允许不同的block用于网络的不同stage,不过同一个stage中的block仍然是相同的。不同于关注FLOPs,[20]目的在于优化目标设备的延时。不仅仅是搜索新的架构,[27,5]的研究还集中于提高现有模型的效率。
3、方法
在本论文中,我们使用可微神经架构搜索(DNAS)去解决卷积网络的设计问题。我们把神经架构搜索问题用公式表示为:
image.png
给定架构空间A,我们去寻找一个最优架构
,使得训练完成后它的权重
可以达到最小loss
。在我们的研究中, 我们着重于这个问题的三个因素:a)搜索空间A。b)考虑真实延时的损失函数
。c)搞笑的搜索算法。
表1
3.1、搜索空间
之前的工作 [30, 31, 16, 11, 12] 着重于cell级的架构搜索。一旦搜索到一个cell结构,它就会被用于网络的每一层。然而, 搜索到的血多cell结构都非常复杂、破碎,因此在部署到手机CPU[17,13]上后会慢。同时,在不同的层,同样的cell结构对整个网络能的精度和延时有不同的影响。就像[20]种展示的和我们的实验那样,允许不同层选择不同的block能带来更好的精度和效率。
在本次研究种,我们使用一个固定的宏观架构构造了一个layer-wise搜索空间,并且每层都可以选择不同的block。这个宏观架构在表1种表述。这个宏观架构定义了层数和每层的输入输出维度。网络的第一层和最后三层的操作是固定的。剩下的层的block类型是需要被搜索出来的。每层的卷积数量是靠经验选出来的。在前几层我们使用相对小的channel size,因为前几层的输入分辨率较大,并且计算代价(FLOP计数)是输入尺寸的二次方。
图3
网络中每个可搜索的层都可以从layer-wise搜索空间选择一个不同的block。block结构是受MobileNetV2[17]和ShiftNet[23]启发,在图3说明。它包含一个point-wise(1x1)卷积,一个K乘K的depthwise 卷积,K指卷积核大小,再加一个1x1卷积。第一个1x1卷积和depthwise卷积有“ReLU”激活函数,但是后一个的1x1卷积没有激活函数。如果输出维度和输入维度相等,我们用一个跳跃连接(快捷连接)把输入加到输出上面。根据[17,23],我们使用一个超参数,扩张比率e,去控制block。它决定我们把第一个1x1卷积输出通道的size相比输入扩大多少。根据[20],我们为depthwise卷积选择一个size为3或者5的卷积核。另外,我们可以选择给第一层和最后一层1x1卷积使用组卷积以减小计算复杂度。使用组卷积时,我们根据[29]增加一个channel shuffle操作去整合通道组之间的信息。
表2
在我们的实验中,我们的layer-wise搜索空间包含有个候选block,它们的配置罗列在表2中。注意我们还有一个叫做“skip”的block,它没有实际的计算直接把输入特征图传到输出。这个候选block本质上允许我们减少网络的深度。
概括地说, 我们的整个搜索空间包含22层并且每层都从表2中的9个候选block中选择,所以它包含个可能的结构。从如此巨大的搜索空间找到最优的layer-wise结构是个不简单的任务。
3.2、延迟感知损失函数
在(1)中使用的损失函数需要不仅能反映给定结构的精确度,还要能反映在目标硬件上的延时。为了达到这个目的,我们定义以下损失函数:
第一项
表示结构a参数为
时的交叉熵损失。第二项
表示这个结构在目标硬件上的延时,单位为毫秒。系数
控制损失函数的数量级。指数稀疏
调节延时项的数量级。
交叉熵项很容易计算。不过, 延时项会比较困难,因为我们需要去测量网络结构在目标设备上的实际运行时间。为了覆盖整个搜索空间,我们需要去测量大约
个结构,这几乎是不可能的。
为了解决这个问题,我们使用了一个延时速查表模型去估计一个网络的整体延时,这个速查表基于每个操作的运行时间。更正式地,我们假设
image.png
这里
表示结构
的第
层的block。这假设在目标处理器上,每个操作的运行时间独立于其他操作。这个假设对于许多操作顺序执行的手机CPU和DSP都是有效的。用这种方法,通过记录几百个在搜索空间中用到的操作的延时,我们能够简单地估算出整个搜索空间中全部
个结构的运行时间。更重要的是,就像将要在3.3中解释的那样,使用速查表是的损失函数(2)中的延时项对于layer-wise block的选择可微,并且这允许我们使用基于梯度的优化方法去解决问题(1)。
3.3、搜索算法
通过暴力搜索去解决问题(1)的代价是相当高的。优化问题的本质涉及到神经网络的训练。对于ImageNet分类,训练一个卷积网络通常需要几天甚至几周。优化问题的组合搜索空间很大。
大多数的关于NAS的早期研究[30,31,20]都是上面的范式。为了减少计算代价,原来的问题被替换为在更简单的代理数据集上训练候选结构。比如,[30,31]在CIFAR10数据集上面训练结构,[20]只在ImageNet上面训练5个epoch。然后再把学习到的结构应用到目标数据集上。为了避免迭代整个搜索空间,[30,31,20]使用强化学习引导搜索。尽管有了这些改善,解决问题 (1) 的代价仍然很高——在代理数据集上训练一个结构仍然非常耗时,并且在找到最优解前需要训练上千个结构。
我们使用不同的方式去解决问题(1)。我们首先使用一个随机的super net 表示搜索空间。整个super net 的宏观结构和表1中的相同,并且每层包含9个像表2中描述的平行block。在super net执行推理的时候,以如下的抽样概率只选择一个候选block执行
image.png
包含的参数决定第
层每个block的抽样概率。等价地,第
层的输出可以表示为
image.png
其中
是{0,1}之间的随机变量,如果block
被选中,
就等于1。抽样概率由方程(4)决定。
表示 在给定输入特征图
的条件下,第
层 block-i 的输出。我们让每层独立抽样,因此,一个结构
的抽样概率可以描述为
其中
表示一个由第
层的 block-i 的所有
组成的向量。
表示在被选中的结构
中,block-i 在 layer-l 中被选中。
我们没有直接去解决具有离散搜索空间的最优结构
问题,而是把这个问题放宽为优化随机super net的概率
以达到最小的期望损失。正式地,我们重写这个离散优化问题(1)为
(7)中的损失函数对于结构权重
明显是可微的,因此可以使用随机梯度下降(SGD)优化。然而,这个损失函数对于抽样参数
并不是直接可微的,因为我们不能通过离散随机变量
把梯度传递给
。为了避开这个问题,我们扩展离散随机变量
为由 Gumbel Softmax function [9, 14]计算的来的连续随机变量
其中,
是一个服从Gumbel分布的随机噪音。Gumbel Softmax函数由温度参数
控制。当
接近0时,它近似于服从分布(6)的离散类别抽样。当
变大时,
变成一个连续随机变量。无论
是什么值,
对
都是直接可微的。将Gumbel Softmax用于神经架构搜索的技术同样在[25,1]中被提出。
因此,很明显(2)中的交叉熵项对
是可微的,于是对
也是可微的。对于延时项,因为我们使用了速查表进行效率估计,方程(3)可以被写作
每一个操作符的延时
是一个常数,因此结构a的整体延时对
和
是可微的。
因此,损失函数(2)对于权重
和结构分布参数
是完全可微的。这使得我们可以用SGD高效的解决问题(1)。
现在我们的搜索过程等价于去训练随机super net。训练过程中我们计算
去训练super net中每个操作符的权重。这和训练传统的卷积网络没有区别。操作符训练完成后,不同的操作符对整个网络的精度和效率有不同的分布。因此,我们计算
去更新每个操作符的抽样概率
。这一步会选择有更高精度和效率的操作符,同时抑制低精度和低效的选择。super net训练完成后,我们可以通过从结构分布
中抽样来获得最优的结构。
如将在实验部分中所示,所提出的DNAS算法比先前基于RL的NAS快几个数量级,同时产生更好的结构。
转自:https://www.jianshu.com/p/4bda40969453