1. 经典的NAS方法
使用RNN作为控制器(controller)产生子网络,再对子网络进行训练和评估,得到其网络性能(如准确率),最后更新控制器的参数。然而子网络的性能是不可导的,无法直接对控制器进行优化,从而使用强化学习,策略梯度方法直接更新控制器参数。
但这类方法有一个致命缺点,太耗费计算资源。在NAS中,为了充分挖掘每个子网络的“潜力”,控制器每次采样一个子网络,都要初始化其网络权重从头训练。那么,如果每次采样之后不重新初始化是不是就大大减少训练时间了,为此后面有人提出了ENAS,其目的就是提高NAS的搜索效率。ENAS将搜索空间表示为一个有向无环图(DAG),其中的任一子图都代表了一个网络结构,每个节点代表了局部的计算,如矩阵乘法,而节点间的有向连接代表了信息的流动。所谓的权重共享,也就是不同的网络结构共享整个有向无环图上的参数。
2. NAS的发展现状
(1) 定义搜索空间
搜索空间,即待搜索网络结构的候选集合。搜索空间大致分为全局搜索空间和基于细胞的搜索空间,前者代表搜索整个网络结构,后者只搜索一些小的结构,通过堆叠、拼接的方法组合成完整的大网络。
(2) 执行搜索策略采样网络
即如何在搜索空间中进行选择,根据方法的不同,大致分为三种:
- 基于强化学习的方法
- 基于进化算法的方法
- 基于梯度的方法
(3) 对采样的网络进行性能评估
即在目标数据集上评估网络结构的性能好坏。为了引导执行搜索策略,这些策略需要考虑如何评判给定架构的性能高低。
基于One-Shot的结构搜索是目前的主流方法,该方法将搜索空间定义为超级网络,全部网络结构都被包含其中。这个方法最显著的特征就是在一个过参数化的大网络中进行搜索,交替地训练网络权重和模型权重,最终只保留其中一个子结构,上面提到的DARTS和ENAS就是这一类方法的代表。该类方法的本质其实是对网络结构进行排序,然而不同的网络共享同一权重这一做法虽然大大提高搜索效率,却也带来了严重的偏置。显然,不同的神经网络不可能拥有相同的网络参数,在共享权重时,网络输出必定受到特定的激活函数和连接支配。ENAS和DARTS的搜索结果也反应这一事实。ENAS搜索出来的激活函数全是Relu
最近的一些工作着眼于解决共享权重带来的偏置问题和超级图的高显存占用问题,并将新的搜索目标如网络延时、结构稀疏性引入NAS中。商汤提出的随机神经网络结构搜索(SNAS)通过对NAS进行重新建模,从理论上绕过了基于强化学习的方法在完全延迟奖励中收敛速度慢的问题,直接通过梯度优化NAS的目标函数,保证了结果网络参数可以直接使用。基于One-shot的方法,与DARTS相比,它们每次只探索一条或者两条网络路径,大大减少了显存消耗,从而可以搜索更大的网络。其中,SNAS将结构权重表示为一个连续且可分解的分布。NAS正朝着多任务、多目标方向前进。
- 网络设计自动化
真正做到把数据丢给机器,直接获得最优的模型,而不是依赖众多超参。AutoML的云服务产品,实现了随机搜索、进化算法和网格搜索等方法,在一定程度上达到了超参数选择的自动化。 - 多目标搜索
- 大规模搜索
- 拓展应用领域
NAS的基本思路是给定一个称为搜索空间的候选神经网络结构集合,用某种策略从中搜索出最优网络结构。
3. MnasNet
3-1 思路:
同时考虑三个维度:参数少、速度快和精度高。目前 Mobile V1&V2,shuffle Net V1 等 CNN 模型在移动端取得一定进展,但是使用间接评价标准,如 FLOPS 等,手工设计模型卷积架构难以在三个维度取得平衡。
3-2 结构
搜索算法:一种用于设计移动CNN模型的自动神经网络搜索方法。多目标奖励和新的搜索空间。
**帕雷特最优:**是经济学的一个概念,是指资源分配的一种理想状态。给定固有的一群人和可分配的资源,如果从一种分配状态到另一种状态的变化中,在没有使任何人情况变坏的前提下,使得至少一个人变得更好,这就是帕累托改善。帕累托最优的状态就是不可能再有更多的帕累托改善的状态。
模型分为三个部分:基于RNN的控制器,用于实现模型准确率的训练器,基于推断引擎测量耗时。论文采用评估-更新循环训练控制器,直到模型收敛。
论文使用层级搜索空间,即划分 CNN layers 成多个 groups,对每个 group 搜索卷积和连接,相比其他算法只搜索几个复杂的单元,然后重复叠加相同的单元,论文简化了每个单元格的搜索空间,但允许各个单元不同。
如图 3 所示,论文划分 CNN 模型为一系列预定义的 Block 序列,逐渐降低输入分辨率和增加滤波器尺寸。每一个 Block 内含有一系列 identical layers,其卷积操作和连接由每一个 Block 搜索空间确定。对第 i 个 Block,由以下参数决定:
卷积类型(Convolutional ops ConvOp): regular conv (conv), depthwise conv (dconv), and mobile inverted bottleneck conv with various expansion ratios
卷积内核 Convolutional kernel size KernelSize: 3x3, 5x5.
跳跃层连接方式 Skip operations SkipOp: max or average pooling, identity residual skip, or no skip path.
输出滤波器尺寸 Output filter size Fi
每个 block 卷积层个数 Number of layers per block Ni.
ConvOp, KernelSize, SkipOp, Fi 决定每一卷积层架构,而 Ni 决定每一个 block 重复卷积层的次数。
https://zhuanlan.zhihu.com/p/42474017
4. AutoML
AutoML跟神经网络结构搜索(NAS)不一样。AUTOML是指机器学习自动化,
整个数据分析的流程分为:数据收集——>数据清洗——>特征与模型选择——>结果预测
AutoML让数据分析人员可以只关注头(数据收集)和尾(结果预测),中间繁琐的过程都可以自动自动化完成(数据清洗、特征工程、模型选择等)。
目前AutoML主要分为三类:
- 自动参数调整(相对基本的类型)
- 非深度学习的自动机器学习(AutoSKlearn)。此类主要应用于数据预处理,自动特征分析,自动特征检测,自动特征选择和自动模型选择等。
- 深度学习的自动机器学习。
https://zhuanlan.zhihu.com/p/113433660
5. NAS具体论文学习
- NAS
使用强化学习 - NasNet
使用PPO训练RNN控制器 - Progressive NAS
缩小了搜索空间 - MnasNet
针对硬件搜索网络结构,直接在硬件平台上测量latency - DARTS(gradient descent)Differentiable Architecture Search
https://zhuanlan.zhihu.com/p/81126873
6. 拓展
6-1 知识蒸馏
在2015年,Hinton首次提出神经网络中的知识蒸馏。第一,Hinton等人的工作利用的是教师网络或集成网络的输出logits,第二,Hinton使用不同的temperature,充分利用了教师网络输出的小logits。我们通常将这种分类任务中,低概率类别与高概率类别的关系,称之为暗知识。
知识蒸馏的原理:第一,利用大规模数据训练一个教师网络;第二,利用大规模数据训练一个学生网络,这时候的损失函数由两部分组成:一部分是拿教师和学生网络的输出logits计算蒸馏损失、KL散度,一部分是拿学生网络的输出和数据标签计算交叉熵损失。
nips 2017检测模型蒸馏:Learning Efficient Object Detection Models with Knowledge Distillation
使用KD和hint learning两种方法,将教师Faster RCNN的知识迁移到学生Faster RCNN上。针对物体检测(RPN),作者将原始KD的交叉熵损失改为类别加权交叉熵损失解决分类中的不平衡问题;针对检测框回归,作者使用hint learning做特征适应。
为了了解hint learning是什么,还需要回到2015 ICLR的FitNets网络。它不仅利用教师网络的最后输出logits,还利用它的中间隐层参数值,训练学生网络,获得又深又细的FitNets。因为教师网络和学生网络的输出特征图大小不一样,通常是提供hint的特征图较大((b)绿色框的输出),而被guided的特征图((b)红色框的输出)较小,作者引入基于卷积的回归器使得特征图大小一致,因为输入是一样的,要求输出尽可能相似,那么中间隐层参数值会尽可能相似。
此外,还有人基于此思想,对SSD也做了蒸馏
https://zhuanlan.zhihu.com/p/151850160