Progressive Neural Architecture Search(论文阅读)

一、代理模型介绍

代理模型顾名思义就是用来代替某个模型的模型。由于大型卷积网络模型的计算成本非常高,在神经架构搜索任务中如果每一个备选模型个体都要从头开始训练的话,计算代价是会非常高的。以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元组(I1,I2,O1,O2,C)(I_1,I_2,O_1,O_2,C),其中I1,I2I_1,I_2是前置输入,O1,O2O_1,O_2是操作方式,CCO1,O2O_1,O_2输出特征图的结合方式,输出结果用HbcH_{b}^{c}表示。每个block可以用下图表示。
Progressive Neural Architecture Search(论文阅读)
作者将 combination operators CC设置为addition,这样五元组(I1,I2,O1,O2,C)(I_1,I_2,O_1,O_2,C)就变成了4元组(I1,I2,O1,O2)(I_1,I_2,O_1,O_2),对于IbI_b可能输入集合为同cell下previous blocks的输出{H1c,,Hb1c}\left\{H_{1}^{c}, \ldots, H_{b-1}^{c}\right\},加previous cell的输出HBc1H_{B}^{c-1}, 加previous-previous cell的输出HBc2H_{B}^{c-2}OO存在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

我们用Bb\mathcal{B}_{b}表示block可能存在的种类,即Bb=Ib2×O2×C\left|\mathcal{B}_{b}\right|=\left|\mathcal{I}_{b}\right|^{2} \times|\mathcal{O}|^{2} \times \mid \mathcal{C},其中Ib=(2+b1),O=8\left|\mathcal{I}_{b}\right|=(2+b-1),|\mathcal{O}|=8。当b=1b=1时,I1={HBc1,HBc2}\mathcal{I}_{1}=\left\{H_{B}^{c-1}, H_{B}^{c-2}\right\},因此Bb=256|\mathcal{B}_{b}|=256。当B=5B=5B1:5=22×82×32×82×42×82×52×82×62×82=5.6×1014|B_{1:5}| = 2^2× 8^2× 3^2× 8^2× 4^2× 8^2× 5^2× 8^2× 6^2× 8^2= 5.6 × 10^{14},但这些可能的cell里有一些对称的结构,例如b=1时只有136个独一无二的cell,那么整个搜索空间大小大概是101210^{12} 数量级,比NASNet的102810^{28} 小了不少。
Progressive Neural Architecture Search(论文阅读)

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(论文阅读)
这个例子设cell里最多有B=3个block,​Bb\mathcal{B}_{b}表示有b个block时候选cell的集合。当cell包含一个block时,S1=B1\mathcal{S}_{1}=\mathcal{B}_{1},训练这些并评估这些cell,然后更新代理模型;在第二轮,将S1\mathcal{S}_{1}里的每个cell扩展到2个block,此时S2=B1:2\mathcal{S}_{2}^{\prime}=\mathcal{B}_{1: 2} ,预测它们的性能,选择其中最高的KK个组成 ,训练并评估它们,然后更新代理模型;在第三轮,将S2\mathcal{S}_{2}里的每个cell扩展为3个block,得到有3个block的cell的集合的子集S3B1:3S_{3}^{\prime} \subseteq \mathcal{B}_{1: 3} (在第二轮里已经选择了K个最好的cell,已经是子集了,再扩展地话依然是子集),预测它们的性能,选择最好的K个,训练评估它们,最后得到最好的模型。

Progressive Neural Architecture Search(论文阅读)

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

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

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

具体地说,作者使用读取长度为4bb的序列(代表每个块的I1,I2,O1,O2I_1,I_2,O_1,O_2)的LSTM,并且在每步输入大小是Ib|\mathcal{I}_{b}|O|O|的one-hot向量,对I1,I2II_{1}, I_{2} \in \mathcal{I}使用DD维的嵌入,对于O1,O2OO_{1}, O_{2} \in \mathcal{O}使用另一套DD维嵌入,这样可以使一个四元组<I1,I2,O1,O2><I_1,I_2,O_1,O_2>转变为一个4DD向量,以此作为输入。最终的LSTM hidden state通过fully-connected layer和sigmoid来验证准确性。

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

四、实验

Progressive Neural Architecture Search(论文阅读)

五、 结论

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

参考引用

https://blog.csdn.net/u014157632/article/details/102568194
https://www.sohu.com/a/257601330_651893?_f=index_chan25news_184
《深入理解AutoML和AutoDL》
https://blog.csdn.net/dhaiuda/article/details/102599427