摘要
自动化神经网络结构设计越来越受到研究人员的关注。现有的结构搜索方法在计算上可能是昂贵的,需要从头开始训练数千种不同的结构。最近的工作探索了在各个模型之间进行权重共享,以减少训练成本。尽管以前的方法将结构搜索的成本降低了几个数量级,但它们仍然很复杂,需要hypernetworks或强化学习控制器。我们旨在了解one-shot结构搜索的权重共享。通过仔细的实验分析,我们表明可以从复杂的搜索空间中高效识别有效的网络结构,而无需使用hypernetworks或RL。
1.介绍
设计神经网络是一项劳动密集型过程,需要专家进行大量的反复试验。自动搜索良好的神经网络结构的兴趣日益浓厚。例如,Zoph et al. (2017)表明,可以找到一种在CIFAR-10,ImageNet和COCO数据集上同时达到最新性能的结构。但是,这些搜索方法非常耗费资源。Zoph et al. (2017)在四天内使用了450个GPU,仅为运行一个实验。他们提出了一种基于RL的方法,其中神经网络(控制器)枚举了一组要评估的网络结构。每种架构都在CIFAR-10上从头开始进行了固定次数的训练,然后在验证集上进行了评估。控制器的权重随后根据训练模型的验证精度进行更新。
对于典型的机器学习从业人员而言,训练成千上万的模型是非常困难甚至是不可能的。为了解决结构搜索的这一弱点,一些新的方法已经被提出。一个有效的方向是在模型之间共享权重:与其从头训练成千上万的单独模型,不如训练一个能够模拟搜索空间中任何结构的大型网络。
图1中显示了一个简单的示例,其中我们可以选择在网络的特定位置应用3x3卷积,5x5卷积或最大池化层。无需训练三个单独的模型,我们可以训练包含所有三个操作的单个模型(one-shot model)。我们在评估时有选择地将三个运算的输出中的两个清零,以确定哪个运算可带来最佳的预测精度。在更复杂的示例中,搜索空间可以包括网络内许多不同位置的选择。搜索空间的大小随选择的数量呈指数增长,而one-shot model的大小仅线性增长。相同的权重用于评估许多不同的网络结构,从而将运行网络结构搜索所需的资源减少了几个数量级。
尽管效率有所提高,但自然想知道各个模型之间的权重共享是否存在固有限制。为什么一组异构网络可以共享一组权重? one-shot model通常仅用于对搜索空间中的结构进行排名;搜索完成后,将从头开始对性能最佳的结构进行重新训练。但是,即使有此限制,单个固定权重集在各种体系结构中都能很好地起作用的想法是违反直觉的。SMASH试图通过使用hypernetwork在每个候选架构中生成很大比例的权重来解决这一问题。高效神经结构搜索(ENAS)通过训练模型共享权重和训练控制器来解决相同的问题,该控制器从搜索空间中识别出要关注的网络结构子集。
本文的目标是了解权重共享在高效结构搜索方法中的作用。也许出乎意料的是,我们表明,不需要超网络或RL控制器即可获得良好的结果。为此,我们训练了一个大型的one-shot model,其中包含搜索空间中的所有可能操作。然后,我们将一些操作屏蔽,并评估其对模型预测准确性的影响。经过训练,我们表明网络会自动将其注意力集中在对生成良好预测最有用的操作上。屏蔽不太重要的操作对模型的预测影响很小。相比之下,将较重要的操作屏蔽会对模型的预测及其验证集准确性产生较大的影响。实际上,通过查看训练集中未标记示例的行为,可以预测网络结构在验证集的准确性。此行为是权重共享的隐式结果,不需要hypernetwork或显式控制器。
2.相关工作
使用元学习来改善机器学习的历史由来已久。 除了结构搜索外,元学习已被用来优化学习算法的其他组成部分,例如更新规则和激活函数。
我们的工作与SMASH密切相关,而后者又受到NAS的推动。在NAS中,神经网络控制器用于搜索良好的结构。NAS控制器的训练需要一个循环:控制器提出了经过训练和评估的子模型架构。然后通过策略梯度来更新控制器,以随着时间的推移对更好的体系结构进行采样。控制器完成训练后,将选择最佳结构,并对该结构进行更长时间的训练,以提高其准确性。NAS的主要瓶颈是对子模型体系结构的训练。SMASH旨在减少其成本。在SMASH中,先验地训练了一个超网络,以为搜索空间中的每个子模型体系结构生成合适的权重。然后,将相同的固定超网络用于评估许多不同的子模型架构。
NAS和SMASH都将结构搜索视为黑盒优化问题,可以使用现有技术对其进行优化。在超参数优化中,还研究了种群之间模型共享参数的想法。
遗传和神经进化算法也已用于设计良好的神经网络结构,例如Stanley & Miikkulainen (2002);Bayer et al. (2009);Jozefowicz et al. (2015); Miikkulainen et al. (2017);Xie & Yuille (2017)。对于这些方法,已经探索了具有积极作用的模型之间的参数共享(也称为权重继承)。
黑盒方法在验证集中测量经过训练的网络结构的准确率。相比之下,MorphNets直接在训练集上做出结构决策,应用L1正则化来减少稀疏性。像MorphNets一样,我们从一个非常完整的网络结构开始,然后修剪最无用的部分。但是,尽管 Gordon et al. (2017)专注于滤波器尺寸,我们专注于修剪操作和残差连接。来自SMASH和ENAS的实验表明,我们的方法可以扩展到搜索滤波器尺寸。我们还可以将MorphNets应用于我们通过结构搜索找到的模型。
3.One-Shot结构搜索
所提出的one-shot结构搜索方法包括四个步骤,我们将在本节的其余部分中介绍这些步骤:
(1)设计一个搜索空间,该搜索空间使我们能够使用单个one-shot模型来表示多种架构。
(2)训练one-shot模型以使其能够预测结构的验证准确率。
(3)使用预先训练的one-shot模型在验证集上评估候选结构。
(4)从头开始重新训练最忧的结构,并在测试集上评估其性能。
3.1 搜索空间设计
为one-shot结构搜索设计良好的搜索空间是一个具有挑战性的问题,因为它要求我们平衡许多竞争需求。第一:搜索空间应该足够大且具有表现力,以捕获各种有趣的候选架构。第二:one-shot模型产生的验证集准确率必须能够预测独立模型训练产生的准确率。第三:one-shot模型必须足够小以使用有限的计算资源(即内存和时间)进行训练。搜索空间中最好的结构还必须具有竞争优势。但是,由于我们的主要目标是了解权重共享的作用,因而我们的搜索空间尚未完全优化完毕,并且我们认为有进一步改进的可能。
我们从一个搜索空间的示例开始(如图3.1所示),该示例合并了有关网络结构和应用于网络内不同位置的操作的重要决策。
在训练时,one-shot模型包含被拼接在一起的三个不同的输入。但是,在评估时,我们可以通过将输入1和输入3的连接从经过训练的网络中屏蔽或删除来模拟仅包含输入2的网络。
一般而言,我们可以选择启用或禁用传入连接的任何组合。这样,搜索空间的大小随传入的残差连接的数量呈指数增长,而one-shot模型的大小仅线性增长。拼接后总是进行1x1卷积,无论有多少个传入的残差连接,卷积中输出滤波器的数量保持恒定。
然后,one-shot模型将几个不同的操作应用于1x1卷积的输出,并将结果相加。在评估时,我们将从网络中屏蔽或删除其中一些操作。在我们的运行示例中,我们有四个可能的操作:一对3x3卷积,一对5x5卷积,最大池化层或恒等操作。但是,在评估架构时,仅使用5x5卷积的输出。
这种方法适用于更大的模型,如图3所示。在Zoph et al. (2017)之后,我们的网络由几个相同的单元组成,这些单元彼此堆叠。每个单元都包含固定数量的选择块。选择块的输入来自(1)先前单元的输出,以及(2)同一单元内先前选择块的输出。
每个单元中的选择块数
N
c
h
o
i
c
e
N_{choice}
Nchoice是搜索空间的超参数。在我们的实验中,我们设置
N
c
h
o
i
c
e
=
4
N_{choice}=4
Nchoice=4。每个选择块都可以选择网络中两个最近单元的输出。这意味着每个选择块最多可以从五个可能的输入中进行选择:两个输入来自先前的单元,最多三个来自同一单元内的先前选择块。
每个选择块都可以从具有七个可能选项的菜单中选择最多两个操作:(1)恒等,(2)一对深度可分离的3x3卷积,(3)一对深度可分离的5x5卷积,(4)一对深度可分离的7x7卷积,(5)1x7卷积,然后是7x1卷积,(6)最大池化层,(7)平均池化层。
搜索空间大小。我们搜索空间中的每个结构都由一堆相同的单元组成;现在,我们估计搜索空间中可能存在的单元数量。每个单元都有四个选择块。对于
i
=
0
,
1
,
2
,
3
i=0,1,2,3
i=0,1,2,3,第
i
i
i个选择块至少需要
1
1
1个输入,最多需要
2
+
i
2+i
2+i个输入。这意味着第
i
i
i个选择块有
2
2
+
i
−
1
2^{2+i}-1
22+i−1种可能的输入组合。此外,每个选择块都可以在7个可能的选项中应用一个或两个不同的操作。因此,我们可以在每个块中应用
C
7
1
+
C
7
2
=
7
+
21
=
28
C_7^1+C_7^2=7+21=28
C71+C72=7+21=28个可能的操作组合。因此,在整个搜索空间中,存在
(
2
2
−
1
)
⋅
(
2
3
−
1
)
⋅
(
2
4
−
1
)
⋅
(
2
5
−
1
)
⋅
2
8
4
≈
6
∗
1
0
9
(2^2-1)·(2^3-1)·(2^4-1)·(2^5-1)·28^4\thickapprox 6 *10^9
(22−1)⋅(23−1)⋅(24−1)⋅(25−1)⋅284≈6∗109个可能的单元。
3.2 训练one-shot模型
许多结构搜索方法使用代理度量来有效地找到有效的模型。如果代理度量标准提供了较强的模型相对排名,则可以在经过训练以收敛时发现高性能的模型。例如,一种常见的代理指标是经过少量训练后测试验证集上的准确率。此代理指标已成功在原始NAS论文中使用。在这项工作中,以及在SMASH和ENAS中,代理指标是通过激活one-shot模型中的各个体系结构而获得的验证准确率。
one-shot模型是使用SGD和Momentum训练的标准大型神经网络。为了确保特定体系结构的one-shot模型精度与独立模型精度具有较好的关联性,我们必须考虑以下方面。
(1)对共适应的鲁棒性
在评估时,我们将one-shot模型的大部分进行屏蔽,以评估特定的体系结构。如果我们仅简单地训练one-shot结构,则网络中各组件间会产生共适应。此时,从网络中删除操作(甚至是不重要的操作)都可能导致模型的预测质量严重下降。one-shot模型准确性与独立模型准确性之间的相关性也会降低。
我们在模型训练时引入了路径dropout,以确保模型对此类更改具有鲁棒性。在训练one-shot模型时,对于每一个mini-batch,我们随机将操作的子集屏蔽。通过在训练开始时禁用路径dropout并使用线性schedule逐渐增加dropout率,我们取得了良好的效果。训练结束时的dropout率设置为
r
1
/
k
r^{1/k}
r1/k,其中
0
<
r
<
1
0<r<1
0<r<1是模型的超参数,
k
k
k是网络中给定操作的传入路径数。传入路径越多,每个可能的输入被丢弃的可能性就越大。但是,丢弃所有输入到节点的概率保持不变,无论其输入数如何。假设
r
=
0.05
r=0.05
r=0.05。如果一个节点有
k
=
2
k=2
k=2个输入,则每个节点将以
0.0
5
1
/
2
≈
0.22
0.05^{1/2}\thickapprox 0.22
0.051/2≈0.22的概率独立dropout,并以
0.78
0.78
0.78的概率保留。如果一个节点有
k
=
7
k=7
k=7个输入路径,那么每个路径将以
0.0
5
1
/
7
≈
0.65
0.05^{1/7}\thickapprox 0.65
0.051/7≈0.65的概率被独立丢弃,并以
0.35
0.35
0.35的概率被保留。在这两种情况下,丢弃所有op的输入路径的概率均为0.05。
在单个单元内,不同的操作彼此独立地dropout。但是,如果一个模型包含多个单元,则每个单元都将dropout相同的操作。我们发现,独立删除同一单元格内的不同路径是有益的,但并未调查跨单元的行为。
(2)模型训练的稳定性
one-shot模型训练在早期实验中非常不稳定。我们发现使用batch normalization可以稳定训练。我们依次尝试了BN-Relu-Conv和Relu-BN-Conv。虽然两者都显示出较好的效果,但我们将前者用于本论文的实验。当one-shot模型用于从搜索空间评估候选结构时,我们会将其操作的子集屏蔽。这样做会更改每个层的批处理统计信息。因为我们不预先了解候选结构的批处理统计信息,所以在评估时与训练期间完全一样地应用batch normalization-动态计算批处理统计信息。
ghost batch normalization(Hoffer et al., 2017)这种变体进一步稳定了训练。如果我们在单个batch中为每个样例dropout相同的路径子集,则one-shot模型训练往往会变得不稳定。但是,我们发现,如果我们在样例的不同子集上dropout不同的路径,则可以使其稳定。最初,我们尝试为batch中的每个样例分别dropout不同的路径。但是,这种方法不适用于batch normalization,当多个样例的路径相同时,该方法可以更好地计算批量统计信息。作为一种折衷,我们将每个训练batch划分为多个ghost batches。一个训练batch可能包含1024个样例,这些样例可以划分为32个大小为32的ghost batches。对于ghost batches中的每个样例,我们都删除相同的路径,但是对于不同的ghost batches则删除不同的路径。
(3)防止过度正则化
给定的卷积层可能仅用于搜索空间中结构的子集。在训练期间,L2正则化仅应用于当前结构使用的模型部分。如果不进行此更改,则频繁dropout的层将被过度正规化。
3.3 评估候选结构
一旦训练了one-shot模型,我们就可以使用它来评估在验证集上许多不同结构的性能。在我们的实验中,遵循Brock et al. (2017)的观点,从固定的概率分布中独立地对结构进行采样。我们注意到随机搜索可以被其他搜索方法代替,例如进化算法或基于神经网络的强化学习。
3.4 最终模型的选择和训练
搜索的输出是按one-shot准确率排名的候选结构列表。完成搜索后,您可以从头开始重新训练性能最佳的结构。根据可用的计算资源数量和模型精度要求,作为后处理步骤,还可以筛选和超参数调整许多性能最佳的模型。但是,其他有效的结构搜索方法会忽略此提高准确率的步骤,因此我们为了跟这些方法进行比较而采用了同样的方法。为了评估one-shot模型的使用,我们采样了通过搜索发现的性能最佳的结构。在CIFAR-10上,在完整的训练集上从头开始训练每种结构300个epoch,然后在测试集上进行评估。在ImageNet上,每种结构都经过200个epoch的训练。整个实验都使用TensorFlow完成。
可以按比例放大结构(以提高其准确性),也可以按比例缩小(以降低其推理成本)。在我们的实验中,我们通过增加滤波器的数量来扩展结构。也可以增加模型中的单元数量以进一步改善性能,但是在所有CIFAR-10实验中我们使用固定深度的六个单元,在ImageNet实验中使用八个固定单元。