你所须要知道的关于AutoML和NAS的知识点

【GiantPandaCV导读】本文是笔者第一次进行翻译国外博客,第一次尝试,因为水平的限制,可能有的地方翻译表达的不够准确,在翻译过程当中尽可能还原做者的意思,若是须要解释的部分会在括号中添加,若有问题欢迎指正。本文翻译的是《Everything you need to know about AutoML and Neural Architecture Search》得到了4.8k的高赞。git

做者:George Seifgithub

翻译:pprpweb

日期:2018/8/21算法

AutoML和NAS是深度学习领域的新秀。不须要过多的工做量,他们可使用最暴力的方式让你的机器学习任务达到很是高的准确率。既简单又有效率。微信

那么AutoML和NAS是如何起做用的呢?如何使用这种工具?网络

Neural Architecture Search

神经网络架构搜索,简称NAS。开发一个神经网络模型每每须要大量的工程架构方面的设计。有时候能够经过迁移学习完成一个任务,可是若是想要有更好的性能,最好设计本身的网络。架构

为本身的任务设计网络架构须要很是专业的技能,而且很是有挑战性。咱们极可能不知道当前最新技术的局限在哪里(SOTA技术的瓶颈咱们并不清楚),因此会进行不少试错,这样的话很是浪费时间和金钱。app

为了解决这个问题,NAS被提出来了,这是一种能够搜索最好的神经网络结构的算法。大多数算法都是按照如下方式进行的:机器学习

  1. 首先定义一个Building Blocks的集合,集合中元素表明的是可能用于神经网络搜索的基本单元。好比说NASNet中提出了如下Building Block。
Building Block

在NAS算法中,控制器RNN会从这些Building Blocks中采样,将他们拼接起来构建一个端到端的网络架构。这种结构一般与SOTA网络的架构相同,如ResNet、DenseNet,可是使用的模块组合和配置有较大的区别。编辑器

对新产生的网络架构进行训练,使其收敛,并在验证集上进行测试获得准确率。产生的准确率能够用于更新控制器,以便于控制器可以生成更好的网络结构。控制器的权重使用的是策略梯度进行更新的。整个端到端的设置以下图所示:

NAS端到端流程

整个过程很是符合直觉。简单来讲,让算法从不一样的block之中采样,而后将这些模块组合起来构建新的网络。而后训练并测试该网络,根据得到的结果,调整使用的block模块以及各个block之间的链接方式。

这篇文章(Learning Transferable Architectures for Scalable Image Recognition)展现了这种方法得到的出色的结果是由于他受到了限制和假设。NAS设计的网络通常都是在远远比真实世界数据集上训练和测试的。这是由于在相似ImageNet这样比较大型的数据集上训练花费时间代价过大。可是在深度学习时代中,在比较小,可是结构类似的数据集上表现较好的网络,在更大更复杂的数据集上也应该表现更好。

第二点就是搜索空间很是局限。NAS被设计用来构建与SOTA类似的网络架构。对于图像分类任务来讲,网络构建须要重复的模块,而后逐步进行下采样,如左图所示。NAS设计的网络的主要新颖部分是这些块的链接方式。

链接方式

下图是在ImageNet中搜索获得的最好的block结构。能够发现这几个都包含了至关随机的混合操做,包括许多可分离卷积。

ImageNet上搜索结果

架构搜索方面的进步

NASNet论文取得了惊人的进步,由于其提供了深度学习研究的新方向。不幸的是,他对于除Google之外的普通人来讲效率很低,很难实现。使用了450个GPU,并花费了3-4天时间的训练才找到一个出色的网络架构。所以,NAS方面不少的研究都集中于如何提升搜索过程的效率上。

Progressive Neural Architecture Search(PNAS)渐进式神经架构搜索提出使用一种叫作基于顺序模型的优化策略(SMBO: Sequiential Model-Based Optimisation)。与NASNet使用的强化学习方法不一样,SMBO不是随机的从Block集合中抓取和尝试,而是对block进行测试,并按照复杂性增长的顺序搜索网络架构。这种方法虽然不会缩小搜索空间,可是能让搜索以更智能的方式完成。

SMBO的基本意思是:从简单开始,而不是当即尝试全部可能。PNAS这种方法的效率是NAS的8倍。

Efficient Nerual Architecture Search(ENAS)是另一种试图提升通用网络架构搜索效率的方式。ENAS的提出能让更多没有充足GPU资源的人也能使用神经网络搜索。做者的假设是NAS的计算瓶颈在于对每一个模型进行收敛的训练,而后测试其准确率,而后就丢弃训练过的权重。

在研究和实践中已经反复证实,因为接受过相似训练任务的网络具备类似的权重,迁移学习有助于在短期内实现更高的精度。ENAS算法强制让全部模型共享权重,而不是去从头训练从头收敛。 所以,每次训练新的模型的时候,实际上都进行了迁移学习,这样收敛速度会很是快。

下表显示了使用单个1080Ti GPU进行半天的训练后ENAS的效率要高得多。

NAS算法对比

深度学习新范式:AutoML

许多人将AutoML称为深度学习的新方法,无需设计复杂的深度网络,只需运行预设的NAS算法。Google经过提供Gloud AutoML将这一点发挥到了极致。只需上传数据,Google的NAS算法便可为你提供快速简便的网络架构。

AutoML的想法是简单地抽象出深度学习的全部复杂部分。须要提供的只有数据。剩下的让AutoML设计最困难的部分。这样一来,深度学习就会像其余工具同样,成为插件工具。

AutoML工做流程

Cloud AutoML的价格确实高达2000美圆,很遗憾,训练好之后也没法导出模型;将不得不使用他们的API在云上运行你的网络。还有其余一些彻底免费的替代方法,但确实须要更多工做。

AutoKeras是一个使用ENAS算法的GitHub项目。可使用pip进行安装。因为它是用Keras编写的,所以很是易于控制和使用,所以能够深刻研究ENAS算法并尝试进行一些修改。若是你更喜欢TensorFlow或Pytorch,能够参考如下项目:

https://github.com/melodyguan/enas

https://github.com/carpedm20/ENAS-pytorch

对NAS和AutoML将来的预测

很高兴看到过去几年在自动化深度学习方面取得了长足的进步。它使用户和企业更易于获取;整体来看,深度学习的力量将变得更加易于公众使用。可是,依然有一些改进的空间。

网络架构搜索变得更加高效;使用ENAS找到一个网络在一个GPU上,通过一天的训练就能够获得至关不错的结果。然而,咱们的搜索空间仍然很是有限。目前的NAS算法仍然使用手工设计的结构和构建块,只是将它们以不一样的方式组合在一块儿而已。

一个强大的和潜在的突破性的将来方向将是更普遍的搜索,真正寻找新的架构。这种算法可能会揭示出在这些庞大而复杂的网络中隐藏的更深层次的学习秘密。固然,这样的搜索空间须要高效的算法设计。

NAS和AutoML的这个新方向为人工智能社区提供了使人兴奋的挑战,并为科学上的另外一个突破提供了真正的机会。

英文原文

连接:https://towardsdatascience.com/everything-you-need-to-know-about-automl-and-neural-architecture-search-8db1863682bf

后记

英文翻译过来有点拗口,感谢阅读。笔近期将研究这个方向,欢迎类似方向的同窗添加个人微信,多多沟通。


本文分享自微信公众号 - GiantPandaCV(BBuf233)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。