1. 背景引入
超参数的自动搜索优化(Hyperparameter optimization,HO):
- 随机搜索(Random search)
- 网格搜索(Grid search)
- 贝叶斯优化(Bayesian optimization)
- 强化学习(Reinforcement learning)
- 进化算法(Evolutionary Algorithm)
对于深度学习,超参数分为两类:
- 训练参数(learning rate,batch size,weight decay等)
- 定义网络结构的参数(基层、算子、卷积大小),维度高,离散,相互依赖。
1的自动调优仍是HO范畴。
2的自动调优一般称为网络架构搜索(Neural Architecture Search, NAS)
2. 网络架构搜索(NAS)
本质上来讲,其与围棋类似,是高维空间的最优参数搜索问题。
缺点:消耗计算资源巨大,不是一般人玩得起的。
NAS套路:
- 先定义搜索空间
链式结构—>多叉结构(组合自由度)—>cell/block
- 通过搜索策略找出候选网络结构,进行评估,根据反馈进行下一轮搜索。
2.1 NAS 搜索策略
随机搜索简单但相对低效,通常用作baseline。其中基于强化学习和进化算法的本质:离散空间中搜索,将目标函数看做黑盒。
2.1.1 基于强化学习
开创性工作:
- MIT2016,MetaQNN,将网络架构搜索建模成马尔科夫决策过程:Designing Neural Network Architectures using Reinforcement Learning
- 2016Google,RNN网络作为控制器采样生成描述网络结构的字符串:Neural Architecture Search with Reinforcement Learning
2.1.2 基于进化算法
- Google:Large-Scale Evolution of Image Classifiers
- 后续论文:Regularized Evolution for Image Classifier Architecture Search,code:源码,提出tournament selection的变体aging evolution,即进化过程中选择较为年轻的模型,帮助更好地探索,搜索出最优的为AmoebaNet
PS:进化算法搜索较强化学习更快,尤其是早期,且能得到更小的模型。
2.1.3 基于梯度的方法
如果搜索空间连续,目标函数可微,那就梯度信息可更有效地搜索。
- CMU&Google提出DARTS方法:DARTS, Differentiable Architecture Search,一个要搜索最优结构的cell可看做是包含N个有序节点的有向无环图。DARTS方法中最关键的trick是将候选操作使用softmax函数进行混合。这样就将搜索空间变成了连续空间,目标函数成为了可微函数。这样就可以用基于梯度的优化方法找寻最优结构了。搜索结束后,这些混合的操作会被权重最大的操作替代,形成最终的结果网络。
- 中科大&微软:Neural Architecture Optimization,将网络结构嵌入到一个连续空间,该空间每个点对应一个网络结构。在这个空间上可以定义准确率的预测函数。以它为目标函数进行基于梯度的优化,找到更优网络结构的嵌入表征。优化完成后,再将这个嵌入表征映射回网络结构。这类方法的优点之一就是搜索效率高。
- 其他:
-Adaptive structural learning of artificial neural networks,
-Deeparchitect: Automatically designing and training deep architectures,
-Neural architecture search with bayesian optimisation and optimal transport,
-Simple And Efficient Architecture Search for Convolutional Neural Networks。
2.2 NAS 加速
由于NAS涉及搜索空间巨大,其性能评估往往涉及模型的训练,导致消耗的资源很大。因此相应加速方法也应运而生:
2.2.1 层次化表示
- Google,NASNet:Learning Transferable Architectures for Scalable Image Recognition,code:源码,假设整体网络由cell重复构建,那搜索空间就缩小对两类cell (normal cell 和reduction cell)结构的搜索上,从而大大减小搜索空间,且有助于知识的迁移。注意:虽然cell结构可学习得到,但如何重复和组合这些cell的元网络结构是预定义的。
- CMU&Google:Hierarchical Representations for Efficient Architecture Search,定义了一种层次化的网络结构:最底层:像卷积和池化等基本组件;中间层:这些组件所构成的图;最高层:有这些图层叠而成的整体网络。
2.2.2 权值共享
有没有办法让训练好的网络尽可能重用,消除对于候选模型耗时训练。
- 上海交大&伦敦大学:Reinforcement Learning for Architecture Search by Network Transformation,将Network morphisms(网络态射)与神经网络搜索结合。所谓网络态射就是将网络进行变形同时保持其功能不变。这样带来的好处是变形后可以重用之前训练好的权值,而不是重头开始训练。
-
Simple And Efficient Architecture Search for Convolutional Neural Networks,也是用网络态射达到贡献权重的目的,但用了爬山算法作为搜索策略。
- 如One-Shot Architecture Search方法,就是在一个大而全的网络上做减法。例如:Understanding and simplifying one-shot architecture search,Fairnas: Rethinking evaluation fairness of weight sharing neural architecture search,Single path one-shot neural architecture search with uniform sampling
- Google:Efficient Neural Architecture Search via Parameter Sharing,ENAS,核心就是让搜索中所有的子模型重用权值,将NAS过程看作是一张大图中找子图。基本方法类似:Neural Architecture Search with Reinforcement Learning。
-
SMASH: One-Shot Model Architecture Search through HyperNetworks,一个特别思路,使用HyperNet来给出其权重,避免重头训练。
- 中科院:You Only Search Once: Single Shot Neural Architecture Search via Direct Sparse Optimization,提出DSONAS方法,只搜一次。开始于一个完全连接的块,然后在操作间引入缩放因子,同时添加稀疏正则化来去除无用连接即去除不重要操作,得到最优结构。可在一个优化问题中同时学习网络结构和参数。
PS:经典的网络态射一般从小网络开始,然后做[加法]。
2.2.3 表现预测
训练的目的是为了评估该结构的精度。为了得到某个网络模型精度又不花费太久时间,需要代理测度作为估计量。不是绝对精度估计,而是不同网络间的相对值,能够体现不同网络间的优劣关系。那么,有没有可能基于模型结构直接预测准确率呢?
-
Progressive Neural Architecture Search,使用一个代理模型来指导网络结构的搜索。代理是LSTM模型,输入为网络结构的变长字符串描述,输出预测验证精度。
-
Speeding up Automatic Hyperparameter Optimization of Deep Neural Networks by Extrapolation of Learning Curves,基于学习曲线来预测。
-
Learning Curve Prediction with Bayesian Neural Networks,结合网络结构信息超can和时序性的验证精度信息来进行预测。
2.3 NAS 变体及扩展
主要限于图像分类和自然语言处理,且大多只关注模型准确率。很自然的,如果将其用于其他任务应用,更多考虑因素将纳入其中。
2.3.1 语义分割
Google:Searching for Efficient Multi-Scale Architectures for Dense Image Prediction,code:源码,将NAS扩展到语义分割,主要着重两点:搜索空间的设计和代理任务的设计。
2.3.2 多目标
NAS也开始从只考虑精度的单目标演进到多目标,如同时考虑精度、计算量、功耗等。多任务优化问题的一个挑战是往往没法找到单一解让所有子目标同时最优,所以我们找的一般是帕累托最优解。
Google提出的MansNet,MnasNet: Platform-Aware Neural Architecture Search for Mobile,延续之前经典RNN控制其+强化学习方法,在一个层次化搜索空间中搜索。
其他:
- Resource-Efficient Neural Architect,
- PPP-Net: Platform-aware Progressive Search for Pareto-optimal Neural Architectures,
- Efficient Multi-objective Neural Architecture Search via Lamarckian Evolution,
- NSGA-NET: A Multi-Objective Genetic Algorithm for Neural Architecture Search
2.3.3 优化器
相对于网络结构来说,优化器的迭代可以说比较慢的,但又很引人关注。
Neural Optimizer Search with Reinforcement Learning,可输出更新公式,因此在不同模型和任务间具有很好的迁移能力。
2.3.4 模型压缩
模型压缩可谓是深度学习中最火热的分支,
西交大&Google:AMC: AutoML for Model Compression and Acceleration on Mobile Devices,做剪枝。
2.3.5 数据增强
AutoAugment: Learning Augmentation Policies from Data,首先定义搜索空间:一个数据增强策略包括五个子策略,每个子策略包括两个图像操作,每个图像操作包括两个超参数:一个是应用该操作的概念,另一个是操作相关应用程度。
参考:
https://blog.csdn.net/jinzhuojun/article/details/84698471
https://blog.csdn.net/qq_33254870/article/details/97945605
Neural Architecture Search: A survey