作者:yanwan
链接:https://zhuanlan.zhihu.com/p/145560220
本文转载自知乎,作者已授权,未经许可请勿二次转载
深度学习解决了特征工程和权重优化的问题,
而神经网络架构搜索解决另一个问题——网络架构自动化。
NAS在优化的过程中,考量的因素有: mAP,memory,size,flops,lantency,带宽,平台等等。
例如,在一些移动端的硬件设备上面不支持对 depthwise conv的优化,比如说Edge TPU,高通 DSPs,那么实际跑出来的速度会比普通的 conv 要慢。因此需要考虑到了不同的平台(CPU, EdgeTPU, DSP,IPU)的影响。
NAS主要有进化算法、强化学习和微分三种主要的搜索方法。
虽然强化学习、进化算法搜索一个好的网络架构,但会耗费大量的计算资源,不经济也不环保。
而可微分的NAS方法能够以更少的成本达到SOTA,因此,获得了很多的关注。
DARTS:Differentiable Architecture Search
Arxiv:https://arxiv.org/pdf/1806.09055.pdf
DNAS经典的算法就是大名鼎鼎的DARTS。基本思路是:将网络架构的搜索从选择离散候选操作转化为优化连续混合操作的概率。
DARTS采用cell-based search space,每个cell被认为一个DAG(directed acyclic graph)。每个单元有两个输入节点和一个输出节点。对于卷积cell,输入节点是前两个单元格的输出。cell的输出是中间节点。
每个中间节点x(j)在单元中是一个潜在的特征表示,并与之前的每个中间节点x(i)通过有向边o(i,j)行动相关联。
DARTS通过放宽对候选者的选择到所有可能操作的softmax,
因此,对网络体系结构的搜索已演变为一组连续变量的优化过程。搜索结束时,在有向边上最有可能的操作o(i,j)将被选择,其他操作将是丢弃。
通过一个“双层”优化的问题,联合优化 mixed operations 的概率和网络权重w参数。
其中,α是架构的参数,w 是 α 对应的模型权重。a利用 validation data 来进行更新,w利用 training data 来进行更新。
DARTS 算法有一个严重的问题,就是当搜索轮数过大时,搜索出的架构中会包含很多的 skip-connect,从而性能会变得很差。我们把这个现象叫做 Collapse of DARTS。
DARTS 发生 Collapse 背后的原因是在两层优化中,a和 w 的更新过程存在先合作(cooperation)后竞争(competition)的问题。
在刚开始更新的时候,alpha 和 w 是一起被优化,从而 alpha 和 w 都是越变越好。
渐渐地,两者开始变成竞争关系,由于 w 在竞争中比 alpha 更有优势(比如,w 的参数量大于 alpha 的参数量),alpha 开始被抑制,因此网络架构出现了先变好后变差的结果。
因此,DARTS+ 提出了early stop的策略:
早停准则1:当一个 normal cell 中出现两个及两个以上的 skip-connect 的时候,停止搜索。
早停准则2:当各个可学习算子的架构排序足够稳定(比如 10 个 epoch 保持不变)的时候,停止搜索过。
#ICCV 2019# P-DARTS:Progressive Differentiable Architecture Search:Bridging the Depth Gap between Search and Evaluation
Arxiv:https://arxiv.org/abs/1904.12760
Code: https://github.com/chenxin061/pdartsp
Novelty
DARTS算法是先在proxy dataset(如CIFAR10)上搜索cell结构,之后通过重复堆叠找到的这个cell得到最终的网络结构。这一过程有一个很明显的缺点就是DARTS在proxy dataset上搜到的结构可能在target dataset上不是最好的,甚至表现较差。
作者认为在该种情况下搜索的网络和评估时的网络存在Depth GAP。
改进方案即渐进式可微分的网络架构搜索,但如果搜索情形下的网络深度尽可能地接近评估时的网络深度。那么,由于网络深度的加深造成了搜索计算量的增加和搜索稳定性的下降。
Method
针对这两个问题,本文提出了搜索空间估计(search space approximation)和正则化 (regularization)机制来解决。
【搜索空间估计】
P-DARTS 以渐进的方式 5 cells, 11 cells, 17 cells 分别 25 epochs 来进行,这样更能接近evaluate时的情况,故性能也更好,如图所示。
【正则化】
作者分析网络架构搜索的稳定性变差了,主要是作者观察到在搜索的过程中,网络倾向采用skip-connect连接的方式,原因可能是由于跳跃连接可使得梯度快速下降。
因此,本文提出搜索空间正则化来解决这个问题,主要包含两个部分:
(1)Operation-level Dropout:设置该Dropout rate逐渐减小,从而使得在搜索早期阻止网络选择跳跃连接,在后期其它操作的参数训练好后网络的搜索变得平等。
(2)Architecture Refinement:即人为设定最终搜索出来cell中所包含跳跃连接的数量M=2。
好吧,这个有点玄。
#CVPR2020# FBNetV2:Differentiable Neural Architecture Search for Spatial and Channel Dimensions
Arxiv: https://arxiv.org/abs/2004.05565
Code: https://github.com/facebookresearch/mobile-vision
在几乎不引入显存和计算量代价的情况下,FBNetV2的搜索空间相比于 FBNet 提升了将近10e14 倍,搜到了一个和 EfficientNet B0 精度接近,但是 FLOPs 小了 20% 的网络结构。
本文指出DNAS的方法有两个缺点:
(1)搜索空间比 RL,EAs方法的搜索空间要小。由于DNAS的 super graph 以及 featuremap 存在 GPU 上,显存的限制就使得 DNAS系列方法的搜索空间要小;
(2)搜索代价会随着选择增加而线性增长。增加 super graph一个新的搜索维度,搜索代价都会大幅增长,制约了搜索空间容量。
改进方向就是:使用 Channel Masking 和 Resolution Subsampling 提升搜索空间。
Channel Masking
之前的 DNAS 系列方法就是把不同的选项融进 supergraph,而作者为了减少搜索 channel 时候的计算量,构造了 channel masking的机制,把不同 channel 的最终输出,表征为和一个 mask 相乘的形式。
如上图所示,右边那个灰色的长方体表示一个 shape 为 (c, h, w) 的 tensor,和左边的 mask 向量 M 相乘的结果,M是和对应的 Gumbel Softmax 的系数的乘积和。通过调节左边的 m,就能得到等价的不同 channel 的结果。掩码乘法使用权重共享近似,可加快channel搜索速度。
Resolution Subsampling
X是网络的中间输出特征映射。使用最近邻从X进行子采样,再将A列中蓝色像素处的值组合为特征映射B。接下来运行F操作。最后,C中的每个值都放回D中的一个更大的特征映射。
通过上述的Channel masking 和 Resolution subsampling 机制,FBNet V2的搜索空间就可以在 channel 和 spatial 维度搜索了。最后的实验结果如下
#CVPR2020# MiLeNAS: Efficient Neural Architecture Search via Mixed-Level Reformulation
Arxiv: https://arxiv.org/abs/2003.12238
Code: https://github.com/chaoyanghe/MiLeNAS
针对神经结构方法搜索的双层优化,未能收敛到最优解这一问题,本文提出了一个混合级别的有效的优化方法MiLeNAS。结果表明,即使在Mixed-Level Reformulation上使用简单的一阶方法,MiLeNAS也可以为NAS问题实现更低的验证错误。
此外,MiLeNAS提出了一个框架超过了DARTS,它通过基于模型大小的搜索和early stop策略仅需5h完成网络的搜索。
Mixed level Reformulation
单层优化,可能导致对a的过度拟合。因为α完全取决于训练数据,而训练集合测试集之间是存在差异的。
因此在综合了单层和双层优化后,选取一个折中方案,最终mixed-level优化变公式:
Beyond the DARTS Framework
Gradient-based Search Spaces
MiLeNAS分别对mixed-operation search space和sampling search space进行了评估,证明了MiLeNAS的适应性。
Model Size-based Searching
在一次运行中搜索不同模型大小的最优结构。具体地说,在搜索过程中,每一个epoch,我们跟踪模型大小和它的最佳验证精度,然后评估每一个epoch中最优架构的模型。
其优点是只需一个运行就可以得到多个不同参数大小的体系结构。
实验结果如下,可见精度和速度都有提升。
☆ END ☆
如果看到这里,说明你喜欢这篇文章,请转发、点赞。微信搜索「uncle_pn」,欢迎添加小编微信「 mthler」,每日朋友圈更新一篇高质量博文(无广告)。
↓扫描二维码添加小编↓