Facebook AI在On Network Design Spaces for Visual Recognition提出的概念是这项工作的延续,这篇论文进一步提出要对网络设计空间进行设计,在通过统计学方法进行设计优化后得到了RegNet模型。这两项工作为模型设计带来了一个全新的视角:通过统计学方法来进行模型评估和优化,这里将分别介绍这两项工作。
在早期的工作中,评估图像分类模型性能往往采用点估计(point estimates):一个模型在benchmark数据集误差最小就是最好的,这里往往不考虑模型复杂度,如VGG优于AlexNet。最近的工作往往会比较不同复杂度(eg. flops)下模型性能,如ResNet50,ResNet101等,这种评估可以称为曲线估计(curve estimates),一个模型如果在曲线上的每个点都比较更好那就是更优的。On Network Design Spaces for Visual Recognition这篇论文提出了分布估计(distribution estimates):从网络设计空间中随机sample一定错误率的分布,并通过统计学方法来分析,从而实现对网络设计空间的评估。
为了理解网络设计空间,这里先明确一个概念:模型族(model family)。一个模型族是指具有相关网络结构的模型集合,这个集合一般无限大,一个模型族的模型或者共享一些高级结构,或者遵循相同的设计原则。比如ResNets就是一个模型族,它包含的模型均含有残差连接,而ResNet50只是其中一个具体的模型结构。模型族只是笼统的定义,并没有具体化,而网络设计空间是可以从模型族实例化的一套具体的网络结构集合。一个网络设计空间要包含两个组件:一是一套模型超参数,一旦这些超参数确定就能实例化某个具体的网络;二是一套各个模型超参数的可允许值。设计空间可以看成是限定了的模型族,比如ResNets模型族的一个设计空间需要包含一个网络深度(depth)的超参数以及它的限定范围。论文选择了4个模型设计空间如下所示,模型包括stem,3个stages和head,对于ResNet,block包含2个3x3卷积和残差连接,而Vanilla不带残差连接,这里的ResNetXt的block采用分组的bottleneck结构,A和B只是超参数不同。
虽然一个网络设计空间可能包含指数级候选模型,但是我们可以从中随机抽样固定量的模型来评估以得到近似的分布,并采用经典统计学工具来进行分析。论文里采用经验分布函数(empirical distribution functions, EDFs)来比较分布,给定n个抽样的模型,模型的分类误差记为{e_i},那么误差EDF就可以计算出来:F(e)=\frac{1}{n}\sum_{i=1}^{n}\mathbf{1}[e_ie]这里的F(e)就是误差小于e的模型占比。对于EDF曲线,很明显曲线下的面积越大,说明误差小的模型占比越多,这样可以简单看出分布的好坏。所以EDF就可以作为网络设计空间的分布估计。论文实验采用CIFAR-10数据集,为了得到比较可靠的估计,共从每个设计空间随机采样25k个模型,总共就是100k个模型,这里限定抽样的模型的flops或者参数量小于ResNet-56。
当开发新模型,大家往往都是从一个设计空间中人工或者自动化(如NAS)找出一个误差最小的模型,这其实就是点估计。但是用点估计来评估设计空间可能是不当的,这里论文通过一个简单的实验来证明:从相同的设计空间里抽样不同量的模型。具体的,模型集B是从ResNet设计空间随机抽样100个模型,而模型集M是抽样1000个模型。对于点估计就是用模型集的误差最小模型来比较,下图展示了重复实验5000次的模型集B和M误差最小的差值,可以看到90%的情况下,M都比B小。这也不难理解,毕竟M包含更多的模型,更容易找到更优的模型。这只是说明如果进行了算力不一致的点估计会对设计空间产生误导(当用了更多的算力去证明某个模型设计更优在论文中非常常见,但是这看来并不可靠)。
但是如果采用EDF去分析,我们会发现B和M的分布基本一致,这说明分布评估对模型量不敏感,用来对网络设计空间评估更可靠。
但是在做分布评估时要注意控制一些与模型性能相关的因素,如模型复杂度。对于ResNetXt-A和ResNetXt-B两者只是模型超参数不同,但是它们的EDF却有不小的差异,如果只看EDF的话,那么ResNetXt-B要优于ResNetXt-A。这说明来自同一个模型族的不同设计空间会存在差异。但是这里的分析忽略了一个重要因素对模型性能的影响,那就是模型复杂度,很显然,模型越大性能往往越优。ResNetXt-A和ResNetXt-B的超参数设置的差异可能会带来模型复杂度的影响。从ResNetXt-A和ResNetXt-B的复杂度分布来看,ResNetXt-A比ResNetXt-B包含更多复杂度大的模型,这说明两者的EDF差异肯定有复杂度差异带来的影响。论文里做的一个方案是做一个归一化的操作来消除复杂度分布不同带来的影响,具体的是假定模型复杂度分布是均匀的,根据这样的假设来确定每个模型的权重系数。下图也展示了对params和flops进行归一化的EDF分布,可以看到ResNetXt-A和ResNetXt-B两者的差异就非常小了,但依然能看到ResNetXt-B稍微优于ResNetXt-B,这可能是模型结构设置上的一些不同造成的,比如ResNetXt-B包含分组数更多的更宽模型。
分布评估设计空间相比点估计可以观察到更多的东西,比如分布的形状,如图所示,从ResNet的EDF我们可以看到超过80%的模型误差小于8%,而 Vanilla这一比例只有15%,这说明带有残差连接的结构的绝对性优势。另外前面说过曲线下面积也可以作为一个评价指标。此外,我们也可以比较随机搜索的效率,即找到一个好模型的容易度,从下图可以看到相同的实验量,ResNet比Vanilla找的模型更优。
最后一个重要的问题,为了得到可靠的分布估计,所需要的最小抽样量是多少。论文也通过实验证明,100样本就能得到比较合理的分布,而1000个样本和10000个样本得到的分布几乎没有差异了。这说明100~1000个样本是一个比较合理的抽样范围。不过,这个参数应该在不同场景下(数据集,设计空间等)会有差异。
此外,论文也对NAS的设计空间做了分析,采用EDF可以对不同的NAS空间做一个更可靠的评估。
上面我们介绍了网络设计空间的概念以及如何用统计学方法来评估网络设计空间,那么有没有可能对网络设计空间进行优化呢,这就是Designing Network Design Spaces这篇论文所做的工作:设计网络设计空间。如图所示,所谓设计网络设计空间就是不断地对设计空间优化,每一次迭代后设计空间变得更简单和更好,这里的设计空间质量评估就是采用前面说过的分布估计:从设计空间随机抽样一定量模型,然后得到EDF。可以看到从A到B再C,设计空间容量逐渐缩小(更简单),而EDF也得到提升(更好)。对于网络设计,早期的人工设计已经逐步被自动化的NAS来替代,NAS是从一个设定的搜索空间中自动找到一个好的模型,这个搜索往往会限定条件比如复杂度。NAS存在的问题是搜索的模型比较难理解背后的设计原则,而且如果是限定条件的设计也比较难泛化到其它设定下(比如不同的flops,解决方案是先用NAS搜索一个base网络,然后采用缩放策略得到不同flops的网络,如EfficientNet)。与NAS不同,设计网络空间最后的目标是得到一个更好的网络设计空间,而不是一个具体的网络,这里的设计会注重发现通用的设计原则,因为泛化性更好。设计网络空间也是采用半自动化流程,但与人工设计网络有点类似,每一个迭代是通过分布估计来发现能产生好网络的设计空间。
这里做的第2个简化是所有的stage采用相同的group width,简化的设计空间称为AnyNetX****C,从分布估计来看,AnyNetX****C和AnyNetX****B两个设计空间EDF曲线也基本一致,这里也发现g1是最好的。相比AnyNetX****A,AnyNetX****C少了6个自由度,设计空间变得更简单了,但是质量却没有下降。
进一步,对AnyNetX****C中的典型的好模型和差模型结构进行分析,如上图所示,可以发现好的模型其width随着stage是增加的,而差模型会违反这个规律,所以这里进一步限定w_{i+1}\geq w_i,即后面的stage的width要不小于前面的stage,加上这种限制的设计空间称为AnyNetX****D中,从EDF也可以看出AnyNetX****D的mean error要小于AnyNetX****C,而相反的设置会恶化性能:
进一步,论文分析了AnyNetX****E抽样中的最好的20个模型,发现它们的各个block下的width可以近似拟合成一个线性关系(下图左上图黑色实线,这里width是log坐标,所以显示为曲线)。这个线性函数近似揭示了网络的width随深度的变化规律。
线性拟合意味着不同的block的width不同,但是设计空间限制每个stage的所有block采用相同的width,即一种量化的widths(分段常量函数)。所以需要一种方法将一个直线量化为一个分段常量函数,这里将介绍这种量化方法。首先,对block widths进行线性参数化:
d(depth),初始widthw_0以及直线斜率w_a。这样每个block的width是不同的,为了量化u_j,首先通过下述约束来计算s_j:u_j=w_0·w_m^{s_j},这里w_m是一个另外的参数。然后对s_j四舍五入取整,记为\lfloor s_j \rceil,然后重新计算width:u_j=w_0·w_m^{\lfloor s_j \rceil},这里将具有相同的width的block放在同一个stage,这样对于第i个stage,其width就是w_i=w_0·w_m^i(对于第一个stage,其width为w_0),其block的数量d_i=\sum_{j}\mathbf{1}[\lfloor s_j \rceil=i],即统计具有相同width的block数量。这样就实现了width的量化,对于一个给定的网络,可以根据网络的深度d通过网格搜索来确定w_0,w_a,w_m这三个参数以使得预测的各个stage的width与实际值的误差最小。比如对于AnyNetX****E抽样中的两个最好模型,如上图所示,其拟合得到的量化结果(虚线)与实际值(实线)很贴近。论文中进一步对从AnyNetX****C,AnyNetX****D和AnyNetX****E三个设计空间的网络进行这种拟合,如上图所示,可以发现好的模型往往拟合误差较小,这说明设计的量化线性拟合能够很好地契合好模型的设计原则。 那么,将这种限制施加在AnyNetX****E上,就能得到一种更好的设计空间,这个设计空间称为RegNet(也称RegNetX),共有6个超参数:除了bottleneck ratiob和 group widthg,还有d,w_0,w_a,w_m,有了这4个参数就可以通过前面说的量化方法来确定各个stage的width以及block数量。torchvision里RegNet实现给出了这部分的具体实现代码:
RegNet设计空间,这里也限制了另外4个超参数的取值范围:d 64, w_0, w_a 256, 1.5 ≤ w_m ≤ 3。下图为RegNetX和AnyNetX的EDF对比,可以看到RegNetX更好,可以取得更小的mean error。中间的图给的是对RegNetX施加两个不同的限制后(w_m=2和w_0=w_a)其EDF与原始RegNetX的对比,虽然从EDF上有稍微提升,但是为了不降低设计空间的网络多样性,并没有采用这两种限制。下表也给出了RegNetX和AnyNetX各个设计空间的网络容量对比,相比最初的AnyNetX,RegNetX空间大小已经减少到~10^8。
RegNet设计空间的泛化性做了实验,毕竟RegNet设计时只考虑了单一的block类型,而且网络的flops也限制在400MF附近,训练epoch设定为10。当分别改变这些设置后,依然可以发现RegNet设计效果更好,这说明它具有很好的泛化性。
RegNet设计空间的模型进行了更加详细的分析,这里选择100个网络但是训练epoch增加至25以得到更加细粒度的分析,这些分析的结论有些是与之前的实践是相反的。首先是参数的趋势分析,对于最好的模型,主要有几点重要结论:
相比flops,activations与网络的推理速度更密切相关,这里的activations定义为所有卷积层的输出tensor的大小。从下图可以明显看出,activations与网络的推理速度的线性关系更明显。下图也给出了activations,参数量,推理速度这三者与flops的关系图,这里也拟合了最好的模型的变化曲线。
b = 1, d ≤ 40, w_m ≥ 2,然后也对参数量和activations做了限制(根据拟合曲线,限定两者与flops的关连)。从EDF对比可以看出,进一步限制后,设计空间更好了: