读了一篇FAIR何凯明组刚发的论文《Designing Network Design Spaces》,作者全都来自于Facebook AI Research(FAIR),包括大名鼎鼎的Ross Girshick、Piotr Dollár和Kaiming He组合,一作是伯克利的Ph.D Ilija Radosavovic(可能是斯拉夫人名)。
这篇文章通过对网络设计空间中的模型进行分析,找到好模型的规律,手工缩小设计空间,再从缩小的设计空间中找到更小的设计空间,一步步对设计空间进行设计。最后发现了一个好模型的空间,这个空间里的模型可以由量化的线性函数确定每个block的widths和depths。
方法
初始设计空间
- AnyNet:类ResNet的Block,每个block有4个自由度(width w, numbers of blocks d, group size(中间层是group conv) g, bottleneck ratio r)
- 输入224x224,4个blocks,和ResNet一样的stride
- 自由度是power of 2,(空间大小2e18)
不使用NAS,使用grid search
- 每次从设计空间随机sample 500 models进行训练10epochs
- 画EDF(Error distribution function)图片(x轴是error,y轴是probability,类似于ROC曲线),可以直观地看到一个搜索空间的好坏,便于比较
- 另外一个参考指标是自由度-error 散点图,可以看到不同的自由度下面error的趋势
- 对于网络大小的参考指标是 flops-自由度,然后把good models的区域标志出来,然后画出均值曲线
- 好坏网络分别的 block_index-自由度 或者 自由度1-自由度2 曲线
人工优化搜索空间的目标
- 简化搜索空间的结构
- 提升或者保持空间的模型表现
- 保持model的diversity
- 可解释性
优化路径
- AnyNetXB: shared bottleneck ratio:不同blocks共享(EDF没变化,7e16)
- AnyNetXC: shared groups (EDF没变化 3e14)
- AnyNetXD: $w_{i+1}>=w_{i}$ (EDF变好 1e13)
- AnyNetXE: $d_{i+1}>=d_{i}$ 5e11
- RegNet: quantized linear$u_j=w_0+w_a\cdot j for 0<=j<=d$,然后用一个分段函数(因为一个stage w是一样的)去近似它,让拟合误差$e_fit$小 3e8
设计hint
- 最好网络的depth是稳定的,大概是20blocks(60 layers),不是说层数越高越好
- 最好的网络bottleneck 1.0最好(没有bottleneck)
- width multiplier $w_m$约2.5
- (g,w_a,w_0)随着计算复杂度增加增加
效果
- REGNETX-600MF top1error 25.9%
- REGNETY-600MF top1error 24.5%(加了SE)
评价
一开看这篇文章的时候,还不是非常理解为什么有这么好的NAS算法之后还要对设计空间进行设计,难道我们不就是想找一个最优的网络吗?直接NAS不就好了?看完论文才发现,可解释性是多么的重要,神经网络不是玄学,网络的设计也不是玄学,通过一步步的优化搜索空间,我们才能直观地了解到怎样设计网络才是好的,为未来的设计提供指导性的思想。神经网络的设计也是(EDF好的才算好的)。人工优化搜索空间的四个目标是另一个需要业界注意的问题。这篇文章最让我受益匪浅的是它的方法学,在多目标优化的情况下怎么分解成一个个的小问题。还是有一些毛病:RegNet的quantize方法不是很优美、后面解释alternate design choice的时候224x224放大之类的问题不是很solid。