论文:https://arxiv.org/pdf/2003.13678.pdf
官方github:https://github.com/facebookresearch/pycls

感觉这篇论文的出发点确实非常新颖,看了以后有点打开了新世纪大门的感觉。这篇论文的思想有点像常用于围棋博弈AI的蒙特卡洛搜索,在不同的模型空间上随机采样N多次,然后选择表现好的那个模型空间。

网络构建空间

NAS成为了一种非常受欢迎的方法,它能够帮助我们在给定搜索空间(Search Space)中利用强化学习、遗传算法等方法中搜索到一个较优的网络结构。NAS的应用详见NAS网络搜索
NASNet的搜索空间为Block内部的结构,空间大小为构建网络的构造空间 - 图16
MnasNet的搜索空间为每个Block(类似于Stage)内堆叠的Layer结构与数量,空间大小为构建网络的构造空间 - 图17
EfficientNet的搜索空间为缩放因子α、β、γ,空间大小非常小。
NAS-FPN的搜索空间为neck网络的连接方式,空间大小为构建网络的构造空间 - 图18
SpineNet的搜索空间为backbone的Block顺序与连接方式,空间大小为构建网络的构造空间 - 图19

本文提出的网络构建空间(Design Space)与上面说到的搜索空间(Search Space)其实是一回事,都是构成网络的若干选项构成的空间,但是本文却没有直接在整个空间中用NAS搜索,而是利用了一定的人工干预与经验,利用统计学方法,尽可能缩小构建空间,并使得缩小后的构建空间能够提供更加优秀的模型。

验证一个人工假设构建网络的构造空间 - 图20(譬如每次下采样后通道数应当变宽)的步骤:

  1. 在原有构建空间构建网络的构造空间 - 图21的基础上,人工地提出一个限制条件构建网络的构造空间 - 图22,得到构建空间构建网络的构造空间 - 图23的一个子集构建网络的构造空间 - 图24
  2. 构建网络的构造空间 - 图25构建网络的构造空间 - 图26中分别随机采样构建网络的构造空间 - 图27个模型,进行训练并记录模型性能的概率分布构建网络的构造空间 - 图28
  3. 构建网络的构造空间 - 图29明显优于构建网络的构造空间 - 图30则能够证明构建网络的构造空间 - 图31是一个合理、正确的选项,否则驳回构建网络的构造空间 - 图32

探索一个超参构建网络的构造空间 - 图33(譬如网络深度对性能的影响)的步骤:

  1. 在构建空间构建网络的构造空间 - 图34上,采样构建网络的构造空间 - 图35个模型,进行训练并记录超参值与模型性能的键值对构建网络的构造空间 - 图36
  2. 从N个键值中随机采样25%的键值对,记录子集中损失构建网络的构造空间 - 图37最低的键值对对应的超参值构建网络的构造空间 - 图38
  3. 重复第2步10000次,得到10000个在25%样本上表现最佳的构建网络的构造空间 - 图39
  4. 构建使得构建网络的构造空间 - 图40最小化的构建网络的构造空间 - 图41的95%置信区间,取置信区间的中间值作为推测的最佳构建网络的构造空间 - 图42

为了更快的实验速度,模型训练只在ImageNet上进行10epoch。

AnyNet的进化过程

X Block

AnyNet采用的基础Block结构非常类似于ResNet Bottleneck,但是有一定的不同,如下图所示。其中构建网络的构造空间 - 图43为ResNet Bottleneck中的expansion(通道收缩因子);3x3卷积为分组卷积,每组宽度为构建网络的构造空间 - 图44,当构建网络的构造空间 - 图45时就是DW卷积。
image.png

初始构造空间

输入分辨率恒定构建网络的构造空间 - 图47
总共4个stage,每个stage都有:
堆叠Block数构建网络的构造空间 - 图48
Block的输入/输出宽度构建网络的构造空间 - 图49
Bottleneck的通道收缩比例构建网络的构造空间 - 图50
3x3卷积采用分组卷积,每组的卷积宽度构建网络的构造空间 - 图51

若碰到构建网络的构造空间 - 图52的Block,则将当前Block的构建网络的构造空间 - 图53设为构建网络的构造空间 - 图54
###若碰到构建网络的构造空间 - 图55构建网络的构造空间 - 图56无法被构建网络的构造空间 - 图57整除,则将构建网络的构造空间 - 图58设为距离最近的,能被构建网络的构造空间 - 图59整除的值。

作者基于该初始构造空间构建了构建网络的构造空间 - 图60,它没有任何约束,只需要从初始构建空间中随机采样就行。作者在每次做验证时,都从构造空间中随机采样构建网络的构造空间 - 图61个小计算量构建网络的构造空间 - 图62的模型进行统计。注意这里的随机采样是以对数均匀分布(log-uniform)采样的构建网络的构造空间 - 图63的概率密度是构建网络的构造空间 - 图64的两倍)!
初始构造空间的空间大小高达构建网络的构造空间 - 图65,与第一章里提到的利用NAS搜索的网络结构的搜索空间差不多大,但作者没有在这个搜索空间下进行NAS搜索,而是希望能利用人工干预与统计学方法,尽可能浓缩这个构造空间,并提高构造空间中模型的质量。
为了加速,构建网络的构造空间 - 图66样本只训10epoch,SGD(momentum=0.9),bs=128,lr=0.05余弦衰减,wd=5e-5。

AnyNet


AnyNetX**A
任何从初始构造空间中采样的网络,其性能概率分布如下图(左)所示。
另外作者还简单研究了网络的整体Block数构建网络的构造空间 - 图67(注意不是层数)、第4个stage的Block的输入/输出宽度构建网络的构造空间 - 图68对模型性能的影响,并用浅蓝色框标注了95%置信区间,如下图(中,右)所示。
QQ截图20200910144826.png

AnyNetX**B~C
约束条件:所有的4个stage共享构建网络的构造空间 - 图70
为了减小搜索空间,作者尝试了让所有的4个stage共享通道收缩率构建网络的构造空间 - 图71,并以此缩小了初始构造空间得到了构建网络的构造空间 - 图72。作者做出了两个构造空间中模型的性能概率分布,可以看出两者几乎无差别。

约束条件:所有的4个stage共享构建网络的构造空间 - 图73
为了减小搜索空间,作者尝试了让所有的4个stage共享分组卷积宽度构建网络的构造空间 - 图74,并以此缩小了初始构造空间得到了构建网络的构造空间 - 图75。作者做出了两个构造空间中模型的性能概率分布,可以看出两者几乎无差别。
QQ截图20200910144826.png
这么一来,作者就无损地缩小了原始构造空间构建网络的构造空间 - 图77为了构建网络的构造空间 - 图78,为后续研究提供了一定地便利,并且验证了经典地手工设计网络中让所有stage共享通道收缩率、分组卷积宽度的有效性。
作者还基于构建网络的构造空间 - 图79研究了收缩率构建网络的构造空间 - 图80对模型性能的影响,并用浅蓝色框标注了95%置信区间,如上图(右)所示,可以看出最佳的应有构建网络的构造空间 - 图81,为此作者反驳了ResNet Bottleneck采用的构建网络的构造空间 - 图82。(后面作者还追加实验表示MobileNet v2采用的Inverted Bottleneck的构建网络的构造空间 - 图83也非好的选择)

AnyNetX**D~E
作者观察了构建网络的构造空间 - 图84中几个典型的性能较好的模型(下图上半部分)和性能较差(下图下半部分)的模型结构:
QQ截图20200910144826.png
据此,作者提出了以下约束条件:
约束条件:**构建网络的构造空间 - 图86
这是一个非常经典的条件,约束每次下采样后网络宽度不能变小,从而得到了构建网络的构造空间 - 图87。可以看出这个约束条件极大地改善了模型性能。
通常的,为了使得不同stage的每一层计算量都近乎相等,我们都趋向于在每次下采样后将通道数扩为2倍,但这并不一定是最佳选择。

相对的,作者也研究了每个stage深度的递进关系:
约束条件:构建网络的构造空间 - 图88
这是一个非常扯淡的条件,但是在计算量较小构建网络的构造空间 - 图89时确实是一个有利的选项,尽快下采样以节省计算资源,作者倒是竟然在此后的所有实验都采用了这个约束条件。从结果来看,由此经构建网络的构造空间 - 图90得到的构建网络的构造空间 - 图91确实优于构建网络的构造空间 - 图92,但是后文中作者也实验得出当计算资源较为充足时,这一条件就不再是一个正确的选项了。
QQ截图20200910144826.png

RegNet

Block宽度的拟合

作者观察了性能最好的20个在构建网络的构造空间 - 图94计算量约束下的构建网络的构造空间 - 图95模型,提出了一种猜测:对于第构建网络的构造空间 - 图96个Block,其宽度有构建网络的构造空间 - 图97,如下图黑线所示。
QQ截图20200910144826.png
约束条件:不同Block的宽度是线性递增的
但是这种约束会使得同一stage中每个Block的宽度不同,对此作者引入了一系列中间变量和超参用于量化。引入超参构建网络的构造空间 - 图99,记第一个Block的宽度为构建网络的构造空间 - 图100,宽度的增长率为构建网络的构造空间 - 图101,我们可以得出:
构建网络的构造空间 - 图102
引入另一超参构建网络的构造空间 - 图103。我们计算每一层的宽度时,首先通过上式得出构建网络的构造空间 - 图104,再通过下式得出构建网络的构造空间 - 图105,对构建网络的构造空间 - 图106取整后得出量化后的,每个stage中所有Block宽度都相等的宽度构建网络的构造空间 - 图107
构建网络的构造空间 - 图108
构建网络的构造空间 - 图109
得出第构建网络的构造空间 - 图110个Block的宽度构建网络的构造空间 - 图111,而第构建网络的构造空间 - 图112个stage的Block数即为构建网络的构造空间 - 图113,通过取整后的构建网络的构造空间 - 图114来控制stage。此时约束条件可以变为:在超参构建网络的构造空间 - 图115的指导下,根据以上规则构建出的网络,并以此构建了构建网络的构造空间 - 图116构造空间。
作者展示了构建网络的构造空间 - 图117中性能最好的两个模型,并将它们与该约束条件建立的宽度拟合进行了对比,两者基本吻合。
QQ截图20200910144826.png
对于每一个随机采样得到的模型,我们都可以通过给定的构建网络的构造空间 - 图119,栅格搜索得到构建网络的构造空间 - 图120,并记录:
构建网络的构造空间 - 图121

构建网络的构造空间 - 图122是一个衡量模型与该约束条件相符的程度,构建网络的构造空间 - 图123越小代表模型的结构越符合该约束。作者还作出了构建网络的构造空间 - 图124构建网络的构造空间 - 图125散点图,可以发现随着构建网络的构造空间 - 图126构建网络的构造空间 - 图127更新到构建网络的构造空间 - 图128的过程中构建网络的构造空间 - 图129逐渐变小。因此作者有理由猜测构建网络的构造空间 - 图130是影响模型性能的一个指标。
QQ截图20200910144826.png

RegNet构造空间

在上述的Block宽度拟合(文中称为quantized linear)的制约下,我们构建了一个新的构建空间。由于每个stage的Block数现由构建网络的构造空间 - 图132控制,我们只需要控制网络的总深度构建网络的构造空间 - 图133即可;另外构建网络的构造空间 - 图134代表网络的初始宽度,构建网络的构造空间 - 图135代表虚拟的,网络中每个Block的宽度递增率,构建网络的构造空间 - 图136控制了每次下采样时宽度翻为多少倍。此时的构建空间为:构建网络的构造空间 - 图137构建网络的构造空间 - 图138构建网络的构造空间 - 图139以及缩放因子和分组卷积宽度构建网络的构造空间 - 图140。由于作者后来发现较优的构建网络的构造空间 - 图141往往随模型规模增大而变大,因此后续在不同计算量限制下搜索时,构建网络的构造空间 - 图142的构造空间随计算量限制有所调整。
有一个论文中没有提到的需要注意的是,网络深度的取值构建网络的构造空间 - 图143构建网络的构造空间 - 图144是相关的,由于每个stage的Block数受构建网络的构造空间 - 图145控制,为保证网络不会在stage3结束以及不会进入stage5,有:
构建网络的构造空间 - 图146
经过这么一系列构造空间浓缩,我们成功将空间大小从构建网络的构造空间 - 图147降到了构建网络的构造空间 - 图148(虽然这个644是怎么
来的令人迷惑):
QQ截图20200910144826.png

探究RegNet构造空间

由于RegNet提供的模型大多是质量较高的,因此作者在RegNet上采样时只采样较少的模型数构建网络的构造空间 - 图150,但是每个模型都训25epoch,SGD(momentum=0.9),bs=128,lr=0.1余弦衰减,wd=5e-5。

超参的影响

QQ截图20200910144826.png
从图中可以发现,不论计算资源限制为多少,最佳的深度始终为构建网络的构造空间 - 图152左右(~60卷积层),这与ResNet通过加深网络以获得性能提升、EfficientNet的多尺度缩放有所不符。
不论计算资源限制为多少,表现好的网络总是偏向于选择构建网络的构造空间 - 图153,即不做通道缩放,这与ResNet Bottleneck、MobileNet v2 Inverted Bottleneck有所不符。(后续作者发现用普通卷积替代分组卷积时,构建网络的构造空间 - 图154确实更好)
最佳的下采样通道扩增倍率为构建网络的构造空间 - 图155左右,这与我们平时经常采用的构建网络的构造空间 - 图156也有所不同,毕竟平时我们只是希望各个Block计算量相等而没考虑效率最优化。
构建网络的构造空间 - 图157随着网络规模增大而逐渐变大。

开销分析

平时我们衡量网络开销的时候常用的指标为参数量、FLOPS等,作者提出了应该考虑激活值的数量(就是Tensor的总大小),显存访问的开销并不小于计算开销。
QQ截图20200910144826.png
从上图可见,FLOPS与GPU推理延迟的相关系数为0.643,而激活数与GPU推理延迟的相关系数高达0.897。作者分析了构建网络的构造空间 - 图159空间中的sample,发现性能较好的模型大致均符合下述关系:
构建网络的构造空间 - 图160
构建网络的构造空间 - 图161
构建网络的构造空间 - 图162

更多约束条件

构建网络的构造空间 - 图163缩紧为了构建网络的构造空间 - 图164,并将构建网络的构造空间 - 图165缩紧为了构建网络的构造空间 - 图166,同时引入了上一节“开销分析”中的结果,在限制FLOPS的同时追加限制参数量、激活值。
由于:
构建网络的构造空间 - 图167
构建网络的构造空间 - 图168
构建网络的构造空间 - 图169
则有:
构建网络的构造空间 - 图170
激活值相对FLOPS不能过多过少,要求我们保持好构建网络的构造空间 - 图171的关系;而参数量不能过大(图中所示不好的模型基
本是参数量过大而非过小)单纯要求我们不要分配太多深层stage的Block,因为构建网络的构造空间 - 图172只与特征图分辨率有关。
QQ截图20200910144826.png
U代表的是原始构造空间,C代表的是加了上述额外约束的构造空间。可以看到不论在概率分布、最佳准确度、参数量方面,C空间均优于U空间。

鞭尸MobileNet v2和EfficientNet以及SE有效

作者尝试了MobileNet v2 Inverted Bottleneck采用的构建网络的构造空间 - 图174、DW卷积采用的构建网络的构造空间 - 图175、EfficientNet提出的输入分辨率也应一起scale-up,并对它们进行了鞭尸。
QQ截图20200910144826.png
对于构建网络的构造空间 - 图177带来的副作用确实值得思考,但感觉也需要仔细分析一下是否增减约束会带来不同的结果。作者也尝试了在大计算量下构建网络的构造空间 - 图178构建网络的构造空间 - 图179对性能的影响,也只会带来劣化。
但是改分辨率会劣化这个我还是存疑的,就算作者在400MF、800MF两个计算量下做了实验,但这两个计算量依然算非常小了,毕竟使用380作为输入分辨率的EfficientNet-B4都已经由4.2BF了。另外测的到底是构建网络的构造空间 - 图180还是构建网络的构造空间 - 图181作者也没有说清,如果是前者的话会劣化当然有可能了。
另外作者还验证了SE的有效性,将RegNetX Block中的3x3卷积后添加SE模块(r=0.25)得到RegNetY Block。
不过这也给了我一种启发,以前我一直对于“开销相等时,大网络中MobileNet的DW卷积是否会优于传统卷积”存疑,也可以用这篇论文的方法进行论证(就是有点费卡)。

搜出来的网络Family

QQ截图20200910144826.png
作者从中发现了:

  1. 小模型stage4的Block多,大模型stage3的Block多。(这点之后在遗留问题的第5点里我提出了质疑)
  2. 分组卷积宽度构建网络的构造空间 - 图183随着模型规模增大而逐渐变大。
  3. 模型深度构建网络的构造空间 - 图184随着模型规模增大没有明显的变化。

实验结果

作者表示他没有使用任何其它乱七八糟的优化方法,譬如Cutout、DropPath、AutoAugment等等,也没有使用除了weight decay外的任何正则化手段,在只训练100epoch时就能实现非常好的结果,而MobileNet v2与EfficientNet等网络需要250epoch。但作者全程只比了大家都只训100epoch的结果,没给出RegNet训250epoch并加上优化方法的结果,就有点迷幻。
QQ截图20200910144826.png
QQ截图20200910144826.png
与EfficientNet的对比(两者都只训100epoch去除优化方法,EfficientNet原论文的结果在最右侧给出):
QQ截图20200910144826.png
作者表示,由于EfficientNet全部用了DW卷积,其激活数(整个网络的Tensor大小只和)远大于RegNet,这
使得在GPU推理时RegNet远快于EfficientNet。这也就是开篇提到的,RegNet在同样性能下GPU推理速度比EfficientNet快了5倍的由来。

其它对比实验

  1. 作者比较了构建网络的构造空间 - 图188与固定构建网络的构造空间 - 图189的对比,发现两者在各个计算量限制下竟然均无明显差别
  2. 由于大模型第4个stage的Block相当少,作者尝试了构建网络的构造空间 - 图190的大模型只有3个stage,结果炸了

QQ截图20200910144826.png

  1. 作者尝试对比了SwishReLU,发现在小模型中Swish比ReLU更好,但大模型里ReLU更好。但如果限制构建网络的构造空间 - 图192采用DW卷积,那Swish会明显比ReLU好,这也正是为什么MobileNet v3采用了Swish但我改用Swish一点用都没。

QQ截图20200910144826.png

  1. 作者研究了初始学习率构建网络的构造空间 - 图194、L2正则化系数构建网络的构造空间 - 图195的影响,实验中采用的是构建网络的构造空间 - 图196

QQ截图20200910144826.png

空间浓缩过程的总结

  1. 所有stage共享通道收缩率构建网络的构造空间 - 图198与分组卷积宽度构建网络的构造空间 - 图199
  2. 更深的stage,其宽度与Block数都应大于更浅的stage,即构建网络的构造空间 - 图200
  3. 假设Block的宽度呈等差递增,不同stage的宽度呈等比递增,用构建网络的构造空间 - 图201模拟Block的stage数以控制stage。隐式地限制了stage1~3的Block数近似呈等比递增
  4. 约束构建网络的构造空间 - 图202构建网络的构造空间 - 图203,模型参数与激活值大致符合构建网络的构造空间 - 图204构建网络的构造空间 - 图205隐式地约束了低FLOPS模型stage4的Block数偏多,高FLOPS模型stage4的Block数偏少(详见遗留问题5)。

遗留问题

  1. Block宽度拟合过程中提出每个Block宽度呈等差递增,这个假设的约束是否太大了?
  2. 通过构建网络的构造空间 - 图206控制stage带来了另一个隐式约束,就是stage1~3的Block数近似呈等比递增(因为构建网络的构造空间 - 图207是等差数列的对数),是否不合理?

提议:要让每个stage的宽度相等,直接指定构建网络的构造空间 - 图208中Block的宽度为构建网络的构造空间 - 图209构建网络的构造空间 - 图210倍它不香么,模型多样性还更好。此时模型的构建空间超参包含构建网络的构造空间 - 图211

  1. 在RegNet构造空间上重新检测所有stage共用构建网络的构造空间 - 图212是否影响模型质量?
  2. 作者说构建网络的构造空间 - 图213更好,在ResNeXt的基础上微调分支数、Block宽度就可以简单验证一下?
  3. 作者发现大计算量模型更偏向于stage3的Block比较多,小计算量模型更偏向于在stage4的Block比较多。可是这不是废话么,在更多约束信息一节中作者已经限制了参数量与FLPOS的关系,并且又在Block宽度的拟合一节中限制每个stage的Block数基本呈等比递增,当然会这样了啊!在构建网络的构造空间 - 图214限制下,低FLPOS模型受到的制约较少因为有常数构建网络的构造空间 - 图215在,而高FLOPS模型受到了制约就大了,由于构建网络的构造空间 - 图216,只能通过减少stage4的Block数来满足作者提出的两个约束。因此不是只有best模型会这样,只要在这个约束下所有模型都会这样!
  4. 利用决策树、蒙特卡洛搜索树,提供无监督或弱监督的空间浓缩方法。