AutoML

AutoML


什么是AutoML?

​ 目前一个优秀的机器学习和深度学习模型,离不开这几个方面:

​ 一、优秀的数据预处理;

​ 二、合适的模型结构和功能;

​ 三、优秀的训练策略和超参数;

​ 四、合适的后处理操作;

​ 五、严格的结果分析
​ 这几方面都对最终的结果有着举足轻重的影响,这也是目前的数据工程师和学者们的主要工作。但由于这每一方面都十分繁琐,尤其是在构建模型和训练模型上。而大部分情况下,这些工作有无须过深专业知识就能使用起来。所以AutoML主要的作用就是来帮助实现高效的模型构建和超参数调整。例如深度学习网络的架构搜索、超参数的重要性分析等等。当然AutoML并不简单的进行暴力或者随机的搜索,其仍然需要机器学习方面的知识,例如贝叶斯优化、强化学习、元学习以及迁移学习等等。目前也有些不错的AutoML工具包,例如Alex Honchar的Hyperopt、微软的NNI、Autokeras等。

自动化超参数搜索的方法有哪些?

​ 目前自动化搜索主要包含网格搜索,随机搜索,基于模型的超参优化

​ 网格搜索:

​ 通常当超参数量较少的时候,可以使用网格搜索法。即列出每个超参数的大致候选集合。利用这些集合 进行逐项组合优化。在条件允许的情况下,重复进行网格搜索会当优秀,当然每次重复需要根据上一步得到的最优参数组合,进行进一步的细粒度的调整。网格搜索最大的问题就在于计算时间会随着超参数的数量指数级的增长。

​ 随机搜索:

​ 随机搜索,是一种用来替代网格搜索的搜索方式。随机搜索有别于网格搜索的一点在于,我们不需要设定一个离散的超参数集合,而是对每个超参数定义一个分布函数来生成随机超参数。随机搜索相比于网格搜索在一些不敏感超参上拥有明显优势。例如网格搜索对于批样本数量(batch size),在[16,32,64]这些范围内进行逐项调试,这样的调试显然收益更低下。当然随机搜索也可以进行细粒度范围内的重复的搜索优化。

​ 基于模型的超参优化:

​ 有别于上述两种的搜索策略,基于模型的超参调优问题转化为了优化问题。直觉上会考虑是否进行一个可导建模,然后利用梯度下降进行优化。但不幸的是我们的超参数通常情况下是离散的,而且其计算代价依旧很高。

​ 基于模型的搜索算法,最常见的就是贝叶斯超参优化。有别于的网格搜索和随机搜索独立于前几次搜索结果的搜索,贝叶斯则是利用历史的搜索结果进行优化搜索。其主要有四部分组成,1.目标函数,大部分情况下就是模型验证集上的损失。2、搜索空间,即各类待搜索的超参数。3、优化策略,建立的概率模型和选择超参数的方式。4、历史的搜索结果。首先对搜索空间进行一个先验性的假设猜想,即假设一种选择超参的方式,然后不断的优化更新概率模型,最终的目标是找到验证集上误差最小的一组超参数。

AutoML for Image Classification

  • We already have many good solutions for image classificaiton. Inception, Resnet…Why use AutoML?
  • 如果可以通过自动搜索,找到比人类设计的最好算法还好的算法,那么说明这一领域的研究价值。
  • 图像分类任务已经被很好学习了,AutoML以此为起点更加合适。

NAS(Neural Architecture Search)One example of AutoML

NAS简介

Neural Architecture Search基本遵循这样一个循环:首先,基于一些策略规则创造简单的网络,然后对它训练并在一些验证集上进行测试,最后根据网络性能的反馈来优化这些策略规则,基于这些优化后的策略来对网络不断进行迭代更新。

使用强化学习

之前的NAS工作可以大致分为两方面,首先是强化学习,在神经结构搜索中需要选择很多的元素,如输入层和层参数(比如选择核为3还是5的卷积操作)的设置,设计整个神经网络的过程可以看作一系列的动作,动作的奖赏就是在验证集上的分类准确率。通过不断对动作更新,使智能体学习到越来越好的网络结构,这样强化学习和NAS就联系起来了。

使用遗传算法

另一方面NAS是一些进化算法,这一大类方法的主要思路是,用一串数定义一个神经网络结构。如图是ICCV2017谢凌曦博士的工作,他用一串二进制码定义一种规则来表达特定的神经网络连接方式,最开始的码是随机的,从这些点出发可以做一些突变,甚至在两个数串(拥有较高验证准确率)之间做突变,经过一段时间就可以提供更好的神经网络结构。

NAS的缺点

算力要求太高!

用了500块P100GPU训练了4天,而且这是在非常小的CIFAR-10数据集上做的

PNAS(Progressive Neural Architecture Search)

论文地址

论文认为网络由许多个Cell构成。首先搜索可重复的cells(可以看作是Residual block),一旦找到一个cell,就可以自由地选择其叠加方式,形成一个完整的网络.

AutoML_第1张图片

一个网络通常由这三个要素来确定:cell的结构,cell重复的次数N,每一个cell中的卷积核个数F,为了控制网络的复杂度,N和F通常经手工设计。可以理解为,N控制网络的深度,F控制网络的宽度。

在我们的搜索空间中,一个cell由5个block组成,每个block是一个( I 1 I_1 I1, I 2 I_2 I2, O 1 O_1 O1, O 2 O_2 O2, C C C)的元组。以下将具体介绍.

AutoML_第2张图片

对于灰色的部分,它是输入,可能是三种来源:

  • 前一个cell的输出 H B c − 1 H_B^{c-1} HBc1
  • 前一个的前一个的cell输出 H B c − 2 H_B^{c-2} HBc2
  • 当前cell的当前block的所有之前的输出 H 1 c , … , H ( b − 1 ) c {H_1^c,…,H_{(b-1)}^c } H1c,,H(b1)c

对于黄色的方框,即 O 1 , O 2 O_1, O_2 O1,O2

这其实是对刚才选取的隐含层的一元运算符,它包含了33的卷积,55的卷积,77的卷积,identity,33的均值池化,33的最大值池化,33的加宽池化以及17后接71的卷积。让数据在搜索空间中学习找到最适合的操作
AutoML_第3张图片

对于绿色的方框

绿色框代表C这个运算,它把由 I 1 I_1 I1, I 2 I_2 I2产生的 O 1 O_1 O1, O 2 O_2 O2通过一定的方式组合到一起,产生一个新的隐含空间。这个C操作是按位加和的操作

Naive Algorithm

  • 直接进行搜索对于一个包含五个block的cell其可能的搜索空间为
    4.png-6.5kB
    之前介绍的无论是强化学习还是基于进化算法,都是直接搜索,这样在搜索时是非常迷茫的。
  • 首先训练所有的1-block cells,只有256个这样的cell。虽然可以通过枚举的方式,但性能会很低,因为只有1个block的cell不如包含5个block的cell有效。但是,这部分性能信息可以为是否继续采用这个cell的信号提供辅助,基于1-block cell的表现,我们可以尝试发现最有希望的2-block cell,并对其进行训练,如此迭代,即可构建整个网络。
  • 上面的想法可以简单概括为一个简单的算法,训练和评估当前有b个blocks的cells,然后根据其中最好的K个cells来枚举b+1个blocks,然后去训练和评估。
  • 但是实际上,这个算法是有问题的,对于一个合理的 K ( 1 0 2 ) K(10^2) K(102),需要训练的子网络就高达 1 0 5 10^5 105个。这个运算量已经超过了以往的方法。因此,我们提出了一个准确率预测器,它可以不用训练和测试,而是只通过观察数串,就能评估一个模型是否是有潜力的。

Progressive Neural Architecture Search

  • 使用一个LSTM网络来做准确率预测器,之所以使用它,是因为在不同的block中可以使用同一个预测器。
  • 首先训练并评估当前b个blocks的K个cells,然后通过这些数据的表现来更新准确率预测器,可以使准确率预测器更精确,借助预测器识别K个最有可能的b+1个block。这样学出来的结果可能不是最正确的,但却是一个合理的trade-off结果。
    AutoML_第4张图片
  • ,最开始b=1,Q1时有256个网络,对它全部训练测试,然后用这K个数据点训练准确率预测器。枚举Q1的所有后代M1,并把这个准确率预测器运用在M1的每个元素上,选出其中最好的K个,即得到了b=2时的集合Q2。然后将b=2的网络进行训练测试,经过上述相同的过程,可以得到Q3。Q3中最好的模型即为PNAS返回的结果。

算法

AutoML_第5张图片

实验

  • 如图是最后学习到的网络结构,可以看出,最开始学习到的是separable和max convolution的组合,后面渐渐学习到更多的组合。
    AutoML_第6张图片
  • ImageNet上的结果
    AutoML_第7张图片

你可能感兴趣的:(CNN模型)