Locally Free Weight Sharing for Network Width Search
2. PROBLEM FORMULATION
在给定网络结构的情况下,网络宽度搜索的目标是在一定的预算范围内(算力、延迟等)优化各层的网络宽度。假设目标网络具有L层,则网络宽度可以表示为 c = ( c 1 , c 2 , . . . , c L ) c=(c_1,c_2,...,c_L) c=(c1,c2,...,cL)的L长度元组,其中 c i c_i ci表示第i层的宽度。在不损失清晰度的情况下,我们只专注于寻找 c i c_i ci的最佳宽度。将第i层的最大允许宽度表示为 n i n_i ni。那么超网中所有子网的数目等于 ∏ i = 1 L ( 2 n i − 1 ) ∏^L_{i=1}(2^{n_i}−1) ∏i=1L(2ni−1),这非常大。目前,基于权重共享的超网络 (supernet)的通道(channel) 搜索方法被广泛应用。在典型的固定权重分享模式中,每层宽度 c i ∈ [ 1 : n i ] = { 1 , 2 , . . . , n i } c_i∈[1:n_i]=\{1,2,...,n_i\} ci∈[1:ni]={1,2,...,ni}由一个且仅由一个sub-network表示 (see Fig.1(b)),,并且sub-network内的所有层采用相同的权重享模式,则搜索空间C的大小减小到 ∏ i = 1 L n i ∏^L_{i=1}n_i ∏i=1Lni。
在指定每个宽度及其对应的子网之后,我们可以通过调查子网在具有 shared weights的超网中的性能来对子网进行评估。然后,整个搜索过程分为 supernet training 和 searching with supernet 两个步骤。通常,原始训练数据集被分成两个数据集,即训练数据集
D
t
r
D_{tr}
Dtr和验证数据集
D
v
a
l
D_{val}
Dval。通过随机抽样宽度c并用权重
ω
c
⊂
W
\omega_c⊂W
ωc⊂W优化其对应的子网络来训练具有权重
W
W
W的one-shot supernet
N
N
N,即,
其中
U
(
C
)
U(C)
U(C)是搜索空间中网络宽度的均匀分布,E[·]是随机变量的期望值。训练超网后,通过在训练好的超网N∗上评估其子网络,来表示不同网络宽度的性能(如分类精度)。并且最佳宽度对应于验证数据集上的最高性能,即,
F
b
F_b
Fb是对FLOPs的约束,这里我们考虑FLOPs而不是延迟作为硬件约束,因为我们不针对任何特定的硬件设备,如 EfficientNet 和其他宽度搜索或通道修剪的 baseline。公式(2)的搜索可以通过各种算法(如随机搜索或进化搜索)来有效地实现。
3. CAFENET
3.1 局部自由的权重共享方式
为了建立 supernet 的权重与搜索空间中的结构的对应关系,传统的网络宽度搜索算法会采用 Fixed weights pattern。例如,固定选择 left n 个通道(Figure 1(b))。
然而这种强约束也限制了supernet的性能。例如,小的宽度对应的supernet的权重永远是大的宽度的一个子集(因为 left 选择 n 个通道,大的情况总会包含小的情况),这种固定的对应关系将导致任意两组不同的网络宽度的权重共享程度达到最大。事实上,对于固定的对应关系,任意两组不同网络宽度的权重共享程度都是1。权重共享度由(4)式获得。
如果度
d
(
c
,
c
~
)
d(c,\widetilde{c})
d(c,c
)较大,则宽度
c
c
c和
c
~
\widetilde{c}
c
的子网络将共享更多的权重,这意味着超网将强制宽度
c
c
c和宽度
c
~
\widetilde{c}
c
具有更相似的性能。
理想情况下,每组网络宽度都应有充分的自由度来选择其与 supernet 的权重对应关系,任意两组网络宽度的共享程度可能是完全共享,部分共享或者是没有共享。然而,这样做也会导致,搜索空间从O(n) 增长到 O(2^n),从而增加 supernet 准确排序的负担。
因此,我们提出局部权重共享的策略。对于每一组网络宽度,部分channel 采用固定的对应策略,对于剩余的channel给与其一定的自由度以选择合适的对应关系。local-free(一部分固定选择,一部分自由选择)
Supernet优化和搜索方式
为了在提出的局部自由的权重共享方式中,找到合适的 supernet 与网络宽度之间的对应关系,我们提出 采用每组网络宽度对应的取得最佳 performance(如,最大 accuracy 和最小的 loss)的权重对应方式来构建其与 supernet 之间的联系。
基于supernet的训练过程:
相应的搜索过程:
3.2 基于FLOPs敏感度的通道数分组方法
3.3 多阶段搜索方法
为了搜索到高精度且细粒度的网络结构,往往需要定义一个十分巨大的搜索空间。然而,从巨大的搜索空间中很难直接搜索到合适的网络宽度。针对这个问题,作者提出多阶段搜索来避免搜索空间过大的问题,同时保证搜索结果的细粒度。
如3.2节所述,将公式(9)中的bin size的最小值β设置更小,将引入更小的搜索单元,因此将期望得到更细粒度的结构。然而,伴随而来的是更大的搜索空间,这对超网的rank能力和搜索性能都是一个挑战。这样,我们可以利用多阶段搜索策略来避免搜索空间过大,但仍然可以在细粒度级别上进行搜索。具体而言,我们提出了在多阶段FLOPS预算下寻找宽度,这是线性衰减的,即,
F L O P s ( t ) ← F L O P s ( 0 ) − ( F L O P s ( 0 ) − F b ) × t T , β ( t + 1 ) ← β ( t ) / α ( 10 ) (10) FLOPs(t) ←FLOPs(0) −(FLOPs(0) −F_b) × \frac tT , β(t + 1) ←β(t)/α (10) \tag{10} FLOPs(t)←FLOPs(0)−(FLOPs(0)−Fb)×Tt,β(t+1)←β(t)/α(10)(10)
其中FLOPs(t)表示第t阶段的FLOPs预算,FLOPs(0)是超网的FLOPs。 F b F_b Fb是所有T个阶段之后的target FLOPs,如公式(13)所示。此外,在每个阶段,我们缩小了最小bin大小β,使其进化速度α>0。这样,搜索空间将从粗粒度向细粒度演化,并且大小可控。然而,多阶段搜索不可避免地会带来更多的计算量。因此,我们只在小数据集(即CIFAR-10)中实现此方法。