渐进式神经网络搜索
主要解决的问题:
NASNet的计算开销大,而且运行时间长,PNAS改进减少了计算开销,并且效果不比NASNet的差
主要创新点
- PNAS 运用SMOB策略,用SMOB取代了RL(强化学习)和EA(进化算法)
- 使用代理模型引导搜索结构空间
用什么方法解决的问题
- 提出了用启发式搜索空间架构,从简单到复杂
摘要
- 我们提出新的策略,用基于模型的优化的策略(SMOB)替代强化学习和进化算法。
- 在该策略中,我们按照增加复杂度的顺序搜索结构,同时学习一个代理模型来指导在结构空间中的搜索。
- 在相同的搜索空间下的直接比较表明,我们的方法在被评估的模型数量方面比Zoph等人(2018)的RL方法效率高5倍,在总计算方面快8倍。
1 简介
- 学习网络架构的方法主要用的是EA和RL
- EA:每一个神经网络架构被编码成字符串,在搜索空间时随机变化和重新组合字符串,每一个模型紧接着在验证集上训练和评估,然后表现顶尖的模型产生“children”
- RL:agent执行一系列动作,这些动代表模型的架构,这些模型被训练以及用reward来测量它们的表现性能,使用reward不断更新控制器RNN。
- RL和EA需要巨大的计算资源。例如RL要训练评估2000个神经网络需要500P100 GPUs 训练4天
- 我们用的是NASNet那篇论文用的架构搜索空间。
- 在此篇文章中提出一种新的启发式搜索来搜索细胞结构的空间,从简单的模型开始一步步过渡到复杂的,在这个过程中我们抛弃一些不好的架构。
- 在算法迭代b中,我们有K个候选cell(每个细胞有b blocks)用于我们在感兴趣的数据集中训练和评估。因为这个过程是昂贵的,我们学习一种在预测性能时不需要训练架构的模型或者代理函数。
- 我们将大小为b的K个候选对象扩展成大小为b + 1的 K ′ K' K′个子元素。我们应用代理函数对所有的 K ′ K' K′孩子进行排序,选择最前面的K,然后训练和计算它们。我们继续这样做,直到b = B,这是我们希望在单元格中使用的最大块数。
- 我们进化方法有很多的优点:1 简单的架构训练得更快,因此我们能很快的训练代理通过得到的一些初始结果。2 我们只要求替代物预测结构的质量,这些结构与它所见过的结构略有不同(较大) 3 我们将搜索空间分解为更小的搜索空间的产品,允许我们使用更多块的潜在搜索模型。
2 架构搜索空间
我们在NASNet下提出启发式搜索的方法,首先我们学习一个细胞的架构,然后堆叠多次cell,以创建最终的CNN。
2.1 cell拓扑
1.卷积网络中
H
∗
W
∗
F
H*W*F
H∗W∗F,
s
t
r
i
d
e
=
1
,
H
′
=
H
,
W
′
=
W
,
F
′
=
F
stride=1,H'=H,W'=W,F'=F
stride=1,H′=H,W′=W,F′=F,
2.
s
t
r
i
d
e
=
2
,
H
′
=
H
/
2
,
W
′
=
W
/
2
,
F
′
=
2
F
stride =2,H'=H/2,W'=W/2,F'=2F
stride=2,H′=H/2,W′=W/2,F′=2F
3. 一个cell有B个blocks,每个block有两个输入一个输出,我们用一个5元祖表示一个cell中的一个block,
(
I
1
,
I
2
,
O
1
,
O
2
,
C
)
(I_1,I_2,O_1,O_2,C)
(I1,I2,O1,O2,C),其中
I
1
,
I
2
I_1,I_2
I1,I2表示block的两个输入,
O
1
,
O
2
O_1,O_2
O1,O2代表应用于输入
I
i
I_i
Ii的操作,
C
C
C表示如何根据block的输出组合
O
1
和
O
2
O_1和O_2
O1和O2产生特征图,用
H
b
c
H_b^c
Hbc表示
4. 可能的输入有
I
b
I_b
Ib,他是这个细胞所有以前blocks的集合
H
1
c
,
.
.
.
.
.
,
H
b
−
1
c
{H_1^c,.....,H_{b-1}^c}
H1c,.....,Hb−1c,加上前一个细胞的输出以及前前一个的输出
H
B
c
−
1
,
H
B
c
−
2
H_B^{c-1},H_B^{c-2}
HBc−1,HBc−2
5. 操作
O
O
O有8个函数,每一个操作有一个当度的tensor
6. 可能的组合操作
C
C
C,有元素加法和拼接,然而在RL中我们发现它从来没有用过拼接,所以我们这里使用元素加法,这意味着block变成了4元祖
7. 为了突出我们提出的问题,将搜索空间的size量化,第b个block为
B
b
B_b
Bb,它的大小为
∣
B
b
∣
=
∣
I
b
∣
2
∗
∣
O
∣
2
∗
∣
C
∣
|B_b|=|I_b|^2*|O|^2*|C|
∣Bb∣=∣Ib∣2∗∣O∣2∗∣C∣,
∣
I
b
∣
=
(
2
+
b
−
1
)
,
∣
O
∣
=
8
,
∣
C
∣
=
1
|I_b|=(2+b-1),|O|=8,|C|=1
∣Ib∣=(2+b−1),∣O∣=8,∣C∣=1,对于b=1,我们有
∣
I
1
∣
=
{
H
B
c
−
1
,
H
B
c
−
2
}
|I_1|=\{H_B^{c-1},H_B^{c-2}\}
∣I1∣={HBc−1,HBc−2},因此,
∣
B
1
∣
=
256
|B_1|=256
∣B1∣=256
8. 如果我们允许一个cell中有5个blocks,细胞架构的总数量为
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
∗
1
0
14
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}
B1:5=22∗82∗32∗82∗42∗82∗52∗82∗62∗82=5.6∗1014。然而,在这个空间中存在某些对称性,使我们能够将其修剪到一个更合理的大小。例如,由一个块组成的仅有136个独特的单元。
9. 独特的cell的总数量是
1
0
12
10^{12}
1012这比我们在NASNet这篇论文中搜索的空间数量
1
0
28
10^{28}
1028更少,但是这对于搜索仍然是极其大的空间,需要我们找到更有效率的优化方法。
2.2 从cell到CNN
- 在网络的顶部,我们使用全局平均池,然后是softmax分类层
- 在CIFAR-10中,我们使用 32 ∗ 32 32*32 32∗32的图片。在ImageNet中,我们考虑两种情况,一种是高分辨率图片,大小为 331 ∗ 331 331*331 331∗331,一种是 224 ∗ 224 224*224 224∗224的低分辨率图片。后者的精确度比较低但是速度快。针对ImageNet,我们在网络开端添加stride为2的 3 ∗ 3 3*3 3∗3卷积过滤层来进一步减少开销。
- 我们不再区分Normal cells 和Reduction cells,而是用stride=2和stride=1 来区分。
3 方法
3.1渐进式神经网络架构搜索
1.输入B:blocks的数量,E:最大的epochs, F: 第一层filter的数量, K:挑选最好的几个的数量
2. 首先我们从最简单的开始,假设一个cell中只有一个block,把他放到队列中,训练,评估,更新预测器。
3. 在cell中加一个block,变成
B
1
:
2
B_{1:2}
B1:2,因为我们不能训练和评估所有的模型,所以我们选择用代理器,它只需要消耗很短的时间,用代理器我们选择K个性能最好的模型得到
S
2
S_2
S2,把它放到队列中,再去训练,评估,根据评估的reward不断地更新预测器,使得他的预测越来越准,直到一个cell中有B个blocks为止。
3.2 使用代理模型预测性能
- 在我们真正开始训练的时候,我们想要一个代理器能够提前预测cell的性能,这个预测其需要满足以下条件:
A. 变长输入:预测器可以输入不同长度的字符串。特别的,它应该能够预测任何具有b + 1块的细胞的性能,即使它只在具有最多b块的细胞上训练过。
B. 能够预测真实性能:我们不需要它能达到低的MSE,我们只需要他能得到和真实训练模型一样的次序
C. 样本效率:我们希望预测器能够训练样本数据很少的模型。 - 预测器要能输入变长字符串,我们立马建议RNN。
- 我们用LSTM来都一个长度为4的序列(表示每个block的 ( I 1 , I 2 , O 1 , O 2 ) (I_1,I_2,O_1,O_2) (I1,I2,O1,O2)),而且每一步输入都是大小为 ∣ I b ∣ |I_b| ∣Ib∣或 ∣ O ∣ |O| ∣O∣的one-hot变量,然后进行嵌入查找。对于令牌 I 1 , I 2 ∈ I I_1, I_2∈I I1,I2∈I,我们使用D维的共享嵌入,对于 O 1 , O 2 ∈ O O_1, O_2∈O O1,O2∈O,我们使用另一个共享嵌入。最后的LSTM隐藏状态通过全连通层和sigmoid回归验证精度。
- 我们还用更简单的MLP基线,我们把cell转换成变长向量:把令牌嵌入一个D维的向量,每个block中拼接这些嵌入得到4D维变量接着平均blocks。每个模型都用 L 1 L1 L1loss训练.
- 在对预测器进行训练时,一种方法是利用SGD的几个步骤来更新预测器的参数。然而,由于样本量非常小,我们拟合了5个预测因子的集合,每个预测因子(从零开始)拟合了搜索过程每个步骤中所有可用数据的4/5。我们根据经验观察到,这减少了预测的方差。
- 在未来,我们计划研究其他类型的预测器,例如带有字符串内核的高斯过程,它可能更有效地训练和生成具有不确定性估计的预测。
4 实验及结果
4.1 实验细节
- 我们的实验设置与NASNet那篇论文相同。
- 不同的是我们在CIFAR-10中做大多数实验,CIFAR-10中有50000个训练图片以及10000个测试图片。我们从训练集中取5000个作为验证集。所有的图片都进行了白化,并且我们从图片中上采样成 40 ∗ 40 40*40 40∗40并且裁剪成 32 ∗ 32 32*32 32∗32的patches。同时也用了随机水平翻转。我们在CIFAR-10中找到好的模型以后,运用到ImageNet中评估它的质量。
- 对于MLP预测器,嵌入大小为100,我们用两个全连接层,每层有100个隐藏单元。对于RNN预测器,我们用LSTM,嵌入大小和隐藏状态的大小均为100。嵌入使用统一的初始化范围在[-0.1,0.1]之间。最后一个全连接层的偏置项初始化为1.8 (sigmoid为0.86),以解释所有b = 1模型的平均观测精度。我们在b = 1级和0.002的所有以下级别中使用学习率为0.01的Adam优化。
4.2代理预测器的性能
- 在这节中,我们比较了不同代理预测期的性能。
- 注意在PNAS的b步的时候,我们训练预测器观察b个blocks的细胞性能,但是我们要用的却是b+1个blocks的细胞。我们因此要考虑既包括我们没有见过的细胞大小的预测精度,也包括比训练数据多一个block的cell。
更精确的是我们假设 U b , 1 : R U_{b,1:R} Ub,1:R为随机选择的有b个blocks的cell,R=10000,但是当b=1时,这只有136个细胞。我们把它们转换成细胞并且训练它们20个epochs,因此我们每个epochs要训练40000个模型。在算法二中,我们可以看到:从b=1:B,以及trail t=1:T时,我们做以下动作:从 U b , 1 : R U_{b,1:R} Ub,1:R中随机选择256个模型产生训练集 S b , t , 1 : K S_{b,t,1:K} Sb,t,1:K,训练和微调预测器,评估预测器,最终评估大小为b+1的不可见的随机模型的预测器性能。
- 图片三中第一行显示的是在训练集中模型的真实精度和预测精度作对比,在每个图中大概有5120个点。第二行显示了当b+1以后的细胞的真实精度和预测精度。我们发现预测器在训练集中的模型上表现良好,但在预测较大的模型时表现不佳,然而,随着预测器被训练到更多(更大)的细胞上,性能确实提高了。
- 我们用Spearman等级相关系数来总结每一个分散的点,表一得出了相关结论,我们可以看出在训练集上RNN比MLP的表现好,但是当预测更大的细胞时,MLP似乎更好。对于推断任务,集成似乎对我们有帮助。
4.3 搜索效率
- 在此节中,我们用两种方法比较了PNAS的效率:随机搜索以及NAS方法。
- 为了进行比较,我们对B = 5运行PNAS,在每个迭代B中,我们记录它所选择的b大小的256个模型的集合
S
b
S_b
Sb,并在CIFAR-10验证集上对它们进行评估(每个训练20个epoch后)。然后我们计算M∈{1,5,25}的M个顶级模型的验证精度。为了捕获由于参数初始化和优化过程的随机性而导致的给定模型性能的差异,我们重复这个过程5次。我们在图4中绘制了该统计量的平均值和标准误差。我们发现,当我们搜索更大的模型时,top M∈{1,5,25}模型的平均性能稳步提高。
- 对于我们的随机搜索基线,我们从第5.2节中描述的随机模型 U 5 , 1 : R U_{5,1:R} U5,1:R中均匀抽样6000个B = 5个block的单元格。图4显示PNAS的性能显著优于此基线。最后,我们比较NAS。
- 每个试验依次搜索6000个B = 5个block的cell。在每个迭代t中,我们将 H t H_t Ht定义为RL代理迄今访问的所有单元的集合。我们在 H t H_t Ht中计算了顶部M个模型的验证精度,并在图4中绘制了该统计量的平均值和标准误差。我们看到,平均性能稳步增长,但速度比PNAS慢。
- 量化加速因子与NAS相比,我们计算的数量模型,训练和评估直到PNAS的平均性能和NAS是相等的(注意,PNAS上产生的模型尺寸B后评估
∣
B
1
∣
+
(
B
−
1
)
×
K
| B1 | + (B - 1)×K
∣B1∣+(B−1)×K模型,也就是1160 B = 5),结果如表2所示。我们看到,PNAS在其训练和评估的模型数量方面要快5倍。
- 比较架构搜索过程中探索的模型的数量是衡量效率的一种方法。然而,有些方法,如NAS,采用二次重链接阶段来确定最佳模型; PNAS不执行重新链接阶段,而是直接使用搜索中的top模型。因此,更公平的比较是计算整个搜索过程中通过SGD处理的示例的总数。设M1为搜索过程中训练的模型数量,E1为训练每个模型所用的实例数量。因此,示例的总数是M1E1。但是,对于带有额外重新链接阶段的方法,在返回最佳结果之前,将使用E2示例对搜索过程中的顶级M2模型进行训练。这导致了M1E1 + M2E2的总成本。对于NAS和PNAS, E1 = 900K,因为它们在大小为45K的训练集中使用了20个epoch。为达到与top-1相同的精度而搜索的模型数量为:对于PNAS, M1 = 1160,对于NAS, M1 = 5808。在第二阶段,NAS对最顶端的M2 = 250个模型进行E2 = 300个epoch的训练,然后选出最好的模型。因此,我们可以看到,当考虑到总成本时,PNAS的速度大约是NAS的8倍。
4.4 CIFAR-10 图像分类的结果
4.5 ImageNet 图像分类的结果
5 讨论与未来工作
未来的工作有许多可能的方向,包括:使用更好的代理预测器,如使用字符串内核的高斯进程; 使用基于模型的早期停止,例如[3],这样我们就可以在达到E1时代之前停止对“没有前途的”模型的训练;使用“暖启动”,从较小的父类初始化较大的b+1大小的模型; 使用贝叶斯优化,我们使用一个获取函数,如预期的改进或上置信界,来对候选模型进行排序,而不是贪婪地选择最前面的K(如[31,30]);在每一步自适应地改变模型K的数量(例如,随时间减少); 速度-精度权衡的自动探索(cf.,[11]),等等。