一、代理模型介绍

代理模型顾名思义就是用来代替某个模型的模型。由于大型卷积网络模型的计算成本非常高,在神经架构搜索任务中如果每一个备选模型个体都要从头开始训练的话,计算代价是会非常高的。以NASNet为例,它采用了500张V100显卡经过5天的时间才得到其论文中提出的效果,这个计算成本在实际应用中是绝对不可能接受的(价值数千万的硬件设备,5天内只能完成一个任务)。代理模型的使用可以在一定程度上缓和这个问题。代理模型的核心思想是训练并利用一个计算成本较低的模型去模拟原本计算成本较高的那个模型的预测结果,从而避开大型模型的计算。当需要计算的大型模型数量较多的时候,这个做法是可以节省很多计算量的。本论文提出的PNAS,它比强化学习和遗传算法都高效,其中关键点之一是使用了一个代理模型来指导网络结构的搜索。具体来说,这个代理模型是个LSTM模型,输入为网络结构的变长字符串描述,输出预测的验证精度。也正是有个这个利器,使得它里边提出方法即使用看起来并不复杂的启发式搜索,也能达到很好的效果。

二、总览

提出一种学习卷积神经网络(CNN)结构的新方法,该方法比现有的基于强化学习和进化算法的技术更有效。使用了基于序列模型的优化(SMBO)策略,在这种策略中,按照增加的复杂性对结构进行搜索,同时学习代理模型(surrogate model)来引导在结构空间中的搜索。在相同搜索空间下直接比较的结果表明,该方法比Zoph等人(2018)的RL方法所评估的模型数量多5倍,总计算速度快8倍,并且用该结构在CIFAR-10和ImageNet上实现了最高的分类精度。

三、方法

1. 搜索空间

PNAS继承了NASNet方法的基本设定,以cell作为网络骨架的基本单位。首先作者没有区分convolutional cell 和reduction cell,当过滤器数量增加一倍,stride=2,以此实现feature map的size变化。每个cell都是由B个block组成,每一个block有两个input tensor 和一个output tensor,我们将block定义为一个5元组Progressive Neural Architecture Search(论文阅读)_元组,其中Progressive Neural Architecture Search(论文阅读)_元组_02是前置输入,Progressive Neural Architecture Search(论文阅读)_搜索_03是操作方式,Progressive Neural Architecture Search(论文阅读)_搜索_04Progressive Neural Architecture Search(论文阅读)_搜索_03输出特征图的结合方式,输出结果用Progressive Neural Architecture Search(论文阅读)_元组_06表示。每个block可以用下图表示。

Progressive Neural Architecture Search(论文阅读)_元组_07


作者将 combination operators Progressive Neural Architecture Search(论文阅读)_搜索_04设置为addition,这样五元组Progressive Neural Architecture Search(论文阅读)_元组就变成了4元组Progressive Neural Architecture Search(论文阅读)_元组_10,对于Progressive Neural Architecture Search(论文阅读)_搜索空间_11可能输入集合为同cell下previous blocks的输出Progressive Neural Architecture Search(论文阅读)_搜索_12,加previous cell的输出Progressive Neural Architecture Search(论文阅读)_搜索_13, 加previous-previous cell的输出Progressive Neural Architecture Search(论文阅读)_搜索_14Progressive Neural Architecture Search(论文阅读)_搜索_15存在8种方式如下:

3x3 depthwise-separable convolution

identity

5x5 depthwise-separable convolution

3x3 average pooling

7x7 depthwise-separable convolution

3x3 max pooling

1x7 followed by 7x1 convolution

3x3 dilated convolution

我们用Progressive Neural Architecture Search(论文阅读)_搜索空间_16表示block可能存在的种类,即Progressive Neural Architecture Search(论文阅读)_搜索_17,其中Progressive Neural Architecture Search(论文阅读)_搜索空间_18。当Progressive Neural Architecture Search(论文阅读)_搜索_19时,Progressive Neural Architecture Search(论文阅读)_搜索_20,因此Progressive Neural Architecture Search(论文阅读)_元组_21。当Progressive Neural Architecture Search(论文阅读)_元组_22Progressive Neural Architecture Search(论文阅读)_搜索_23,但这些可能的cell里有一些对称的结构,例如b=1时只有136个独一无二的cell,那么整个搜索空间大小大概是Progressive Neural Architecture Search(论文阅读)_搜索空间_24 数量级,比NASNet的Progressive Neural Architecture Search(论文阅读)_元组_25 小了不少。

Progressive Neural Architecture Search(论文阅读)_搜索_26

2. Progressive Neural Architecture Search

作者从最简单的模型开始,按渐进的方式搜索,首先训练所有的1-block cells,只有256个这样的cell。虽然可以通过枚举的方式,但性能会很低,因为只有1个block的cell不如包含5个block的cell有效。但是,这部分性能信息可以为是否继续采用这个cell的信号提供辅助,基于1-block cell的表现,我们可以尝试发现最有希望的2-block cell,并对其进行训练,如此迭代,即可构建整个网络。但是这种方法并不是可取的,假如基于某个参数空间下,第一个block有256种可能;在多了一个block之后,前置输入节点1的参数空间会增大,此时可以假设第二个block有576种可能,那么总的可能结构会有256 x 576种。此时,2个bock的情况有数十万种可能性,去一一进行评估是不太可能的。因此PNAS引入了代理模型的方法,通过学习一个LSTM代理模型来进行预评估。

Progressive Neural Architecture Search(论文阅读)_搜索空间_27


这个例子设cell里最多有B=3个block,Progressive Neural Architecture Search(论文阅读)_搜索空间_16表示有b个block时候选cell的集合。当cell包含一个block时,Progressive Neural Architecture Search(论文阅读)_元组_29,训练这些并评估这些cell,然后更新代理模型;在第二轮,将Progressive Neural Architecture Search(论文阅读)_元组_30里的每个cell扩展到2个block,此时Progressive Neural Architecture Search(论文阅读)_元组_31 ,预测它们的性能,选择其中最高的Progressive Neural Architecture Search(论文阅读)_搜索空间_32个组成 ,训练并评估它们,然后更新代理模型;在第三轮,将Progressive Neural Architecture Search(论文阅读)_搜索空间_33里的每个cell扩展为3个block,得到有3个block的cell的集合的子集Progressive Neural Architecture Search(论文阅读)_搜索_34

Progressive Neural Architecture Search(论文阅读)_搜索_35

3. 基于代理模型的性能预测器

在实际训练cell之前,我们需要一种机制来预测cell的最终性能。这样的预测器至少有三个所需的属性:

  • 处理可变长度的输入字符串。
  • 与真实性能相关性。我们并不一定非要获得较低的均方误差,但我们确实希望代理模型预测的性能排序同真实的大致相同。
  • 样本效率:我们希望训练和评估尽可能少的cell,这意味着代理模型的训练数据将是稀缺的。

具体地说,作者使用读取长度为4Progressive Neural Architecture Search(论文阅读)_搜索_36的序列(代表每个块的Progressive Neural Architecture Search(论文阅读)_搜索_37)的LSTM,并且在每步输入大小是Progressive Neural Architecture Search(论文阅读)_搜索_38Progressive Neural Architecture Search(论文阅读)_元组_39的one-hot向量,对Progressive Neural Architecture Search(论文阅读)_搜索空间_40使用Progressive Neural Architecture Search(论文阅读)_元组_41维的嵌入,对于Progressive Neural Architecture Search(论文阅读)_搜索空间_42使用另一套Progressive Neural Architecture Search(论文阅读)_元组_41维嵌入,这样可以使一个四元组Progressive Neural Architecture Search(论文阅读)_搜索_44转变为一个4Progressive Neural Architecture Search(论文阅读)_元组_41向量,以此作为输入。最终的LSTM hidden state通过fully-connected layer和sigmoid来验证准确性。

论文同时尝试了MLP预测网络性能,假设一个Cell有Progressive Neural Architecture Search(论文阅读)_搜索空间_46个pairwise,依据上述方法,我们可以得到Progressive Neural Architecture Search(论文阅读)_搜索空间_46Progressive Neural Architecture Search(论文阅读)_元组_48维的向量,接着对每一维上的数据进行平均,得到一个Progressive Neural Architecture Search(论文阅读)_元组_48维的向量,作为MLP的输入。

Progressive Neural Architecture Search(论文阅读)_元组_50

四、实验

Progressive Neural Architecture Search(论文阅读)_元组_51

五、 结论

代理模型的思路乍一想可能会觉得不太合理,但是从真实的实验结果来看,PNAS在性能上不输于其他SOTA算法,PNASNET-mobile在ImageNet上取得了74.2%(TOPI)的正确率,PNASNET-large在ImageNet上取得了82.9%(TOPI)的正确率,同时在速度上以5倍以上的优势大幅领先,说明代理模型的方法还是能够起到一定作用的。

参考引用

https://www.sohu.com/a/257601330_651893?_f=index_chan25news_184 《深入理解AutoML和AutoDL》