《Designing Network Design Spaces》的整体解读(一篇更比六篇强)

《Designing Network Design Spaces》的整体解读(一篇更比六篇强)

statistics 大法好,DL不是statistics,因为DL不如statistics。基本全文从统计学的角度解释了怎么设计网络搜索空间好,哪些要素是有用的,其s全面以及宽度广度都令人瞠目结舌,绝对的2020年巅峰大作!首先放结论,下面每个结论随便都能发一篇论文。

1.实验中发现的几个关于性能的打脸结论:

  • 无论模型多大,20个block的深度是最合适的。大网络越深越好是不对的。
  • bottleneck ratio设置成1是最好的。
  • width multiplier设置成2.5是最优质的。
  • 剩下的初始网络宽度,group数量,宽度的增长斜率,这些随着模型增大而增加会是最佳选择。(大碗宽面2.0,你看我这面,就这么长,但是那么那么那么宽。)

2.然后是几个关于复杂度(速度)的打脸结论,首先这里定义了一个所有卷积层输出tensor的大小叫做activations(这玩意你不管用啥卷积,出来tensor一样大这个值就不变):

  • flpos跟速度之间的关系明显没activations好,啪啪啪。具体见图:
  • 以后不要只用flops建模速度了,这玩意最好用根号flops以及线性的activations一起来建模。

3.再是几个关于非常常见的一些设计比如inverted bottleneck以及depthwise conv的结论。首先前者稍微降低了点EDF(评价指标),后者就还不如group conv。但是scaling the input image resolution是依然有用的。再说SE module,这玩意也有用.

引言部分:

一句话概括就是,传统NAS方法这种基于个体估计(individual network instance)的方式(每次评估的时候采样一个网络)存在以下缺陷:1). 非常不灵活。(各种调参大法) 2).泛化能力差。3).可解释性差。(搜出来的效果虽好,但是很多都是大力出奇迹,运气成分+1)。 因此,作者顺理成章地提出了对网络设计空间进行整体估计(population estimation,意思就是所有的深度宽度之类的最佳设计空间关系给它估计出来)。非常直观地,如果我们能得到深度(depth),宽度(width)等等一系列网络设计要素关于网络设计目标的函数关系,那么我们就很轻松地知道大概多深的网络,多宽的网络是最佳选择。 这句话也直接解决了1),2),3)三个问题,并且这个方式实际上能反应出更优质的网络设计准则,从而达到Designing Network Design Spaces的目的。 读到这里,牛逼就完事了!

第一部分:Tools for Design Space Design

首先咋估计总体呢,其实非常简单,采样,疯狂采样。具体而言就是从任意的搜索空间采样一堆模型。为了方便快捷,这些模型都是小模型并且只训了10个epoch,这样一来代价也不至于很大。完事了以后得有个评价标准来评价模型的好坏,其实也比较简单:

图1. The error empirical distribution function.

这样一来就有500多个模型,并且有了评价标准。那么网络深度或者宽度等等信息与评价标准之间的关系就可以画出来了,这样的采样结果可以用来估计总体。这就是Tools,充满了data science和statistics的味道。接着,有了这个工具怎么进行统计学分析呢,首先得有个采样的空间是把,它叫AnyNet Design Space。

第二部分: AnyNet Design Space

AnyNet的设计空间几乎包含了所有网络设计要素,比如depth,width,group之类的。一般来说,正常的神经网络都只包含4个stage,对于anynet中的4个stage的网络设计要素的选择几乎是任意的,因此叫AnyNet。并且由于network stem和head在网络设计中不太重要,AnyNet主要面向network body的设计。即便是如此,搜索空间仍高达10的18次,这么大的搜索空间现有NAS方法都要吃灰了。因此更进一步地,加了一些控制变量,比如说每个stage共享某个参数之类的,于是提出了A,B,C,D,E五种不同的设计空间。这五个设计空间充满了控制变量法的statistics,A:就是任意的空间,B:在A的观察基础上固定每个stage的bottleneck ratio,C:在B的观察基础上固定每个stage的group数量,D:在C的观察基础上逐stage增宽网络(width),E:在D的观察基础上逐stage加深网络(depth)。这边Po了N个Fig说明了在控制变量下的statistics,由此观察一波,可以得出这个变量之间暗藏玄机,根据这些观察,来进一步建模统计意义下的最佳搜索空间,它叫RegNet Design Space。

第三部分:The RegNet Design Space

这边有个小插曲,从AnyNet的Fig可以看出,每个individual models结果的偏差很大,再次降维打击NAS。但是,整体来说,还是能发现一些关系和规律的,通过获得的几个变量和每个block的index之间,可以拟合出函数关系,就此建模好了大概每层的block多宽多深之类的关系,建模方法叫做quantized linear parameterization。(实际上就是函数拟合,一朝回到解放前.)首先,每个block 第j个stage的宽度 u_j 用线性关系建模:

w_0 表示初始化的宽度, w_a 是斜率,d表示深度,反正就是很简单的线性关系了。

为了量化 u_j (简单地说就是算出来的宽度可能是126.123之类的奇葩数字,得给它四舍五入到128这种科学的数字,同时每个stage i有很多层,得把宽度统一到某个数字),这里再引入了两组公式和新的超参 w_m 用于计算量化因子 s_j

完事之后,就可以计算出每个stage的宽度是: w_i=w_0 \cdot w_m^i ,其中:

对于一共有四个stage的网络,三个超参 w_0, w_a,w_m grid search最小化对数EDF就完事了(反正就是回归嘛。。)。

到这里位置,search space就被这组包含三个超参的公式表达出来了,有理有据,收下我的膝盖。接下去就为了说明这个search space强无敌做了坚如磐石的实验比较,最后搜出了吊炸天的网络,这里不再赘述。

  • 主要介绍一下实验中发现的几个关于性能的打脸结论:
  1. 无论模型多大,20个block的深度是最合适的。大网络越深越好是不对的。
  2. bottleneck ratio设置成1是最好的。
  3. width multiplier设置成2.5是最优质的。
  4. 剩下的初始网络宽度,group数量,宽度的增长斜率,这些随着模型增大而增加会是最佳选择。(大碗宽面2.0,你看我这面,就这么长,但是那么那么那么宽。)
  • 然后是几个关于复杂度(速度)的打脸结论,首先这里定义了一个所有卷积层输出tensor的大小叫做activations(这玩意你不管用啥卷积,出来tensor一样大这个值就不变):
  1. flpos跟速度之间的关系明显没activations好,啪啪啪。具体见图:

2. 以后不要只用flops建模速度了,这玩意最好用根号flops以及线性的activations一起来建模。

  • 再是几个关于非常常见的一些设计比如inverted bottleneck以及depthwise conv的结论。首先前者稍微降低了点EDF(评价指标),后者就还不如group conv。但是scaling the input image resolution是依然有用的。再说SE module,这玩意也有用。
编辑于 2020-04-02