其他
从整体流程上来看,NAS方法还可以分为一阶段和两阶段。两阶段是一般做法,第一个阶段就是搜索评估阶段,选出最好的架构,第二个阶段就是retrain这个最优架构,在验证集上评估。而一阶段就是只需要训练一次超网络,联合优化架构参数和模型权重,之后不需要再retrain了。比如比较有名的Once-for-all,采用了progressive shrinking算法来使得子网络之间的性能相互不受到影响。
NAS还可以分为one-shot和non-one-shot,one-shot意思就是搜索空间重合的,可以重复利用之前的参数,比如ENAS、网络态射、ProxylessNAS等都是的。
大多数NAS都只是把最终的效果当作目标,其实在移动端部署上还要考虑延时、模型大小、计算量等目标,一般都是解帕累托最优,比如MnasNet考虑到了延时。
开放性问题
搜索空间的灵活性
现在的搜索空间基本都还是人为定义的,参考了很多人类设计神经网络的经验,比如原子操作定义成conv、pooling之类的,结构上cell堆叠等等,但是真正的auto应该是模型自动设计网络架构和原子操作,比如AutoML-Zero就用最基本的原子操作(sin、cos、mean、std等)设计出了两层的神经网络。这一块应该是今后的一大方向,例如目前工作主要在CV上,而对于NLP的Transformer模型,搜索空间如何定义的很好?目前工作还寥寥无几,看了几篇也都是堆叠conv,分支结构之类的。
探索更多的领域
如上所说,目前大多数工作都是在CV上,搜的是conv结构,而像NLP、语音等领域探索甚少,像多目标领域也只有很少的工作(韩松老师组工作很多),即使是在CV,任务也大多数局限在CIFAR-10和ImageNet上。
可解释性
搜出来的网络为什么好?现在人类设计的网络大多数都能强行解释一下好处,即使它仍然是个黑盒。但是NAS搜出来的基本看不出设计的逻辑。
可复现
之前也说了,例如演化算法和强化学习这一类方法训练很不稳定,很难复现出结果。很多论文也都只是公开了最好的模型,都不放出源码的(当然我并没有质疑他们),超参数之类的也有些没有公布,这导致我们平民玩家没法复现,没法用啊。而且大家评测的环境都不相同,众说纷纭,没法公平比较,因此也有一些工作提出了NAS统一的数据集来评测。
鲁棒性
如果目标领域数据添加了噪声,可能会对搜出来的模型产生很大影响。所以如何搜出更加鲁棒、能适应不同领域或者有噪声数据的结构可能是未来的一个研究方向。
联合超参优化和架构优化
目前大多数NAS方法都是先搜出最优架构,再调整超参在目标领域上retrain,如何同时学好这两块也是一个方向。
完全的AutoML的pipeline
做到从数据收集开始一直到最后的模型生成训练全部流程化,不需要人为参与,那样才是真正的智能。目前的话有一些比较好的开源工具了,AutoKeras、NNI等等。
终身学习
当新的数据源源不断进来时,当只有少量有标签数据或者有大量无标签数据时,如何做NAS,有几个不错的工作,比如UnNAS是做无监督NAS的,MetaNAS是结合meta-learning的。
经典论文简析
(NAS)[ICLR 17] Neural Architecture Search with Reinforcement Learning
动机
用强化学习来采样网络,生成出最优网络结构,避免人工设计。
方法
用RNN来预测CNN或者RNN的结构,采样结构,下游任务效果作为强化学习得分,策略梯度更新参数。
CNN预定义好层数,LSTM每5层预测CNN一层的5个参数。
RNN预定义好cell的计算拓扑图,LSTM预测每个node的计算逻辑。
实验
接近人类设计网络的最好水平。速度超慢,800 K40,28天,只适用于小数据集例如CIFAR-10。
评价
强化学习应用到NAS的第一篇论文。
(NASNet)[CVPR 18] Learning Transferable Architectures for Scalable Image Recognition
动机
RL直接搜太慢了,只能用在小数据集,ImageNet之类的大数据集没法用。
方法
提出了NASNet,用堆叠相同cell的方式减小搜索空间。在CIFAR-10上面学习cell结构,通过增加堆叠层数的方式迁移到ImageNet上去。用PPO替代策略梯度。
选择之前的两个node,分别预测对应op,然后预测合并op。
实验
效果和参数量都好于前作,达到了SOTA水平。速度加快很多,500 P100,4天,相比于前作加速7倍。
评价
NASNet,通过cell堆叠加快了结构搜索的速度,同时效果达到了SOTA,并且容易迁移到其他任务上去。
(ENAS)[ICML 18] Efficient Neural Architecture Search via Parameter Sharing
动机
之前的方法采样出一个结构,在dev上得到acc,然后就会抛弃权重,重新采样训练,非常耗时。
方法
定义一个超图,每次搜出的子图共享权重。
对于RNN cell,LSTM的每两个step预测之前某个node作为输入,再预测op,最后出度0的node拼接作为输出。
对于CNN,一种策略是直接生成整个网络,每个node先预测之前哪些作为输入,然后预测op。
另一种策略和NASNet类似,堆叠cell,搜索空间缩小到一个cell。
实验
优于NAS和NASNet,1 1080Ti,16小时,相比NAS加速1000倍。
评价
训练速度很快,AutoKeras背后就采用了ENAS。
(DARTS)[ICLR 19] DARTS: Differentiable Architecture Search
动机
离散结构搜索太慢了,采样+验证+反馈的循环很耗时。
方法
连续域结构搜索代替离散域结构搜索,用微分来优化结构。
两套参数:模型参数(训练集优化)、结构参数(验证集优化)。
交替优化两套参数,softmax+relax学习最终结构。
实验
效果达到或接近了SOTA,速度上比ENAS慢,比其他的方法快。
评价
第一个用可微分方法做NAS的,第一个连续空间搜索代替离散空间搜索。
[ICLR 19] Rethinking the Value of Network Pruning
动机
现有的剪枝方法存在问题,很多操作不合理,没有必要。
方法
传统剪枝方法基于两个假设:
- 过参数化很重要,训练大模型再剪枝优于直接训练剪枝后的模型。
- 继承大模型参数,再finetune很重要,优于随机初始化剪枝后模型再重新训练。
本文认为都不一定对:
- 对于预定义好的模型,直接训练可以达到和训练-剪枝-finetune相同甚至更好的效果。
- 大模型剪枝后,随机初始化重新训练,效果和继承参数finetune差不多。
所以本文认为剪枝后的结构重要,而参数不是那么重要。
实验
一系列实验结果验证了猜想,此外本文还否定了彩票假设,认为剪枝后随机初始化即可,没必要和原始初始化相同。
评价
仍然有一些局限性,比如数据分布均衡、模型比较大,估计在其他设置下不一定work。而且不如finetune速度快。
参考链接
不错的综述或讨论
https://lilianweng.github.io/lil-log/2020/08/06/neural-architecture-search.html
https://jinzhuojun.blog.csdn.net/article/details/84698471
http://www.tensorinfinity.com/paper_136.html
https://zhuanlan.zhihu.com/p/73785074
https://www.zhihu.com/question/359162202
https://github.com/pzhren/Awesome-NAS
Neural Architecture Search: A Survey
A Comprehensive Survey of Neural Architecture Search: Challenges and Solutions
AutoML: A Survey of the State-of-the-Art
A Comprehensive Survey of Neural Architecture Search: Challenges and Solutions
一些经典论文
Neural Architecture Search with Reinforcement Learning
Designing Neural Network Architectures using Reinforcement Learning
Efficient Neural Architecture Search via Parameter Sharing
Learning Transferable Architectures for Scalable Image Recognition
DARTS: Differentiable Architecture Search
Neural Architecture Optimization
FP-NAS: Fast Probabilistic Neural Architecture Search
SNAS: Stochastic Neural Architecture Search
EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks
Once for All: Train One Network and Specialize it for Efficient Deployment
Rethinking the Value of Network Pruning
TextNAS: A Neural Architecture Search Space Tailored for Text Representation
The Evolved Transformer
HAT: Hardware-Aware Transformers for Efficient Natural Language Processing
Searching Better Architectures for Neural Machine Translation
一些经典源码或工具
https://github.com/quark0/darts
https://github.com/melodyguan/enas
https://github.com/mit-han-lab/once-for-all
https://github.com/mit-han-lab/hardware-aware-transformers
https://github.com/microsoft/nni
https://github.com/IntelLabs/distiller
参考资料
[1]
AutoML: A survey of the state-of-the-art: https://arxiv.org/abs/1908.00709
作者简介:godweiyang,知乎同名,华东师范大学计算机本硕,字节跳动算法工程师,研究方向句法分析、机器翻译、模型压缩。