Paper Reading - NAS系列 - Everything you need to know about NAS - 综述 - 知乎
开了新坑,Nas与AutoML系列,本文作为综述,主要阐述了作为深度学习领域的新秀的AutoML 和 NAS的发展现状以及未来预期
原文
enas代码
AutoML 和 NAS不需要过多的工作量,他们可以使用最暴力的方式让你的机器学习任务达到非常高的准确率。既简单又有效率。那么 AutoML 和 NAS 是如何起作用的呢
神经网络架构搜索,简称 NAS。开发一个神经网络模型往往需要大量的工程架构方面的设计。有时候可以通过迁移学习完成一个任务,但是如果想要有更好的性能,最好针对特定的任务场景以及数据集设计自己的网络结构。
但是设计网络架构需要非常专业的技能,为了解决这个问题,NAS 被提出来了,这是一种可以搜索最好的神经网络结构的算法。并且需要解决以下问题:search space 如何定义搜索空间、search strategy 搜索的策略、evaluation strategy 评估的策略
大致的算法流程如下:
在 NAS 算法中,控制器 RNN 会从这些 Building Blocks 中采样,将他们拼接起来构建一个端到端的网络架构。这种结构通常与 SOTA 网络的架构相同,如 ResNet、DenseNet,但是使用的模块组合和配置有较大的区别。
2. 对新产生的网络架构进行训练,使其收敛,并在验证集上进行测试得到准确率。产生的准确率可以用于更新控制器,以便于控制器能够生成更好的网络结构。控制器的权重使用的是策略梯度进行更新的。整个端到端的设置如下图所示:
简单来说,让算法从不同的 block 之中采样,然后将这些模块组合起来构建新的网络。然后训练并测试该网络,根据获得的结果,调整使用的 block 模块以及各个 block 之间的连接方式。
对于以上结构一些经典的NAS算法如下
NAS-RL: 将神经网络的结构用一个变长字符串来描述,这样的话就可以使用RNN来作为一个控制器生成一个这样的字符串,然后使用RL来优化控制器
MetaQNN: 将NAS过程看作马尔可夫决策过程,用Q-learning来记录得到的奖励
GeNet、Large-scale Evolution: 通过随机初始化一组个体,使用预选定义好的基因操作(也就是搜索空间中的操作)来修改二进制串进而产生新的个体
这些算法最大的不足就是烧卡耗财:
NASNet 论文打开了深度学习研究的新方向。不幸的是,除了财大气粗的Google之外大家都很难实现。Google使用了 450 个 GPU,花费了 3 天多时间的才找到一个优秀的网络架构。因此,NAS 方面很多的研究都集中于如何提高搜索效率上。
Learning Transferable Architecturesfor Scalable Image Recognition(NASNet)
NASNet 提出模块化搜索用来构建与 SOTA 相似的网络架构,只需要搜索单元,然后通过重复堆叠单元来构成最终的网络架构。基于单元的模块搜索方法的扩展性要强于全局搜索。主要的两个模块如下
Normal Cell 与Conv类似主要用于提取特征,不改变特征图的空间分辨率
Reduction Cell 与pooling类似,可以减少特征图的空间分辨率。
对于图像分类任务来说,网络构建需要重复的模块,然后逐步进行下采样,NAS 搜出的网络主要优点就是是这些块的连接方式。下图是在 ImageNet 中搜索得到的最好的 block 结构。可以发现这几个都包含了很多随机的混合操作,包括可分离卷积。
在这方面的后续的改进,比如直接用单元操作(池化、3*3,步长为2的卷积)来取代模块搜索reduction cell因为reduction cell往往比较简单。但是该方法由于网络都不是很深,容易收敛,泛化能力很差
另一个从搜索空间优化的方法,Progressive Neural Architecture Search(PNAS) 提出使用一种基于顺序模型的优化策略 (SMBO: Sequiential Model-Based Optimisation)。与 NASNet 使用的RL方法不同,SMBO 不是随机的从 Block 集合中抓取和尝试,而是对 block 进行测试,并按照复杂性增加的顺序搜索网络架构。这种方法虽然不会缩小搜索空间,但是可以early stop。SMBO 简单来说是:从复杂度降低的方案开始,而不是立即尝试所有可能。PNAS 这种方法的效率是 NAS 的 8 倍。
Early Stop 值得一提的是为了分析当前模型的有效性,人们可以根据loss曲线来判断当前模型是否有继续训练下去的价值。如果认为没有继续训练的价值,就应该及早终止,尽可能节约计算资源和减少训练时间。因此PNAS还提出了early stop的性能预测,使用预测器来评估所有的候选模型,选择topk个模型。到达一定训练阶段时,预测器可以预测网络随后的状态,得到预测的学习曲线,如果不符合要求则立即停止。
DARTS: Differentiable Architecture Search横空出世,将离散的网络架构空间变为连续可微分的搜索空间,通过梯度下降来搜索网络架构。主要集中于搜索卷积层的超参数如:核大小,channels。
DARTS中,通过一个softmax来relax所有可能的操作,这样就将离散搜索空间转化为连续的搜索空间问题。代表的是所有的候选操作;代表的是有向边上的操作的参数
通过以上转换可以将问题转化为一个对连续变量进行优化的过程。搜索完成之后,选择在边上最优的操作操作,而其他操作将会被丢弃
最终的loss设计:其中是二次变量,是一次变量,通过同时二次优化网络,将会获得最优的, 也就是最终结构的所有操作。
如图可以看到DARTS的恐怖提升了
Efficient Nerual Architecture Search(ENAS) 的提出大大减少了nas过程的计算量。作者假设 NAS 的计算瓶颈在于当前NAS方法需要对每个模型进行收敛的训练,测试其准确率,然后就丢掉该模型训练过的权重以及所有信息。
但是在研究和实践中已经反复证明,接受过类似训练任务的网络具有相似的权重,迁移学习有助于在短时间内实现更高的精度。ENAS 算法强制让所有模型共享权重,而不是去从头训练从头收敛。 因此,每次训练新的模型的时候,实际上都进行了迁移学习,这样收敛速度会非常快。
ENAS任务NAS中的候选网络可以被认为是一个从超网络结构中抽取得到的有向无环子图,超网保证节点直接都进行连接,从超网中采样就能得到的一个单向无环图,这样ENAS就可以让所有子网络都共享相同的参数。然后ENAS使用LSTM作为控制器在超网络结构中找到最优子网络结构。因此可以避免让每个子网络从头开始训练,可以更好地提高网络的搜索效率。
下表显示了使用单个 1080Ti 进行训练,使用 ENAS 的效率要高得多。
AutoML 作为深度学习的新方法,无需设计复杂的深度网络,只需运行内置的 NAS 算法。例如Google Cloud AutoML 只需上传数据,Google 的 NAS 算法即可为你提供快速简便的网络架构。AutoML 做法是简单地抽象出深度学习的所有复杂部分。用户只需要提供数据。剩下的让 AutoML 来处理。这样一来,深度学习就会像其他工具一样,成为插件工具。
使用 ENAS 经过一天的训练就可以得到相当不错的结果。但是我们的搜索空间仍然非常有限,目前的 NAS 算法仍然使用手工设计的结构和构建块,只是将它们以不同的方式组合在一起而已。并且相对于普通训练,NAS算法在训练以及推理部分所需要的资源以及复杂度还是远远不足以支持落地。后续也会持续关注NAS领域发展
相关文章
Once-for-All: Train One Network and Specialize it for Efficient Deployment
DARTS: Differentiable Architecture Search
EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks
BigNAS: Scaling Up Neural Architecture Search with Big Single-Stage Models