论文解读:Single path one-shot neural architecture search with uniform sampling

Single path one-shot neural architecture search with uniform sampling



1、总览

大多数搜索空间松弛化的方法里,结构分布是被连续地参数化了,这些参数在超网络训练时一同被联合优化,因此结构搜索是在优化的过程中进行,优化结束后从结构分布中采样最好的结构。但这存在两个问题:(1)超网络里的参数是深度耦合的;(2)联合优化进一步引入了结构参数和超网络权重之间的耦合。梯度下降方法天生的贪婪特征会在结构分布和超网络权重中引入偏差,这可能会误导结构搜索。

one-shot方法为结构搜索提供了一个新的方向,并且没有结构松弛化和分布参数。结构搜索问题从超网络训练中解耦出来,变成一个单独的步骤,它结合了嵌套优化和联合优化方法的优点。刚才介绍的两篇论文就是这样的one-shot方法,解决了上面提到的第二个问题,但并没有很好地解决第一个问题,超网络的权重仍然是耦合的。在《Understanding and Simplifying One-Shot Architecture Search》里提到,one-shot成果的关键是一个使用权重继承的结构的准确率应该对已经优化好的结构有预测性。因此,作者提出超网络训练应该是随机的,所有的结构都可以同时优化它们的权重。为了减少超网络的权重耦合,作者提出了一个简单的搜索空间,单路径超网络(single path supernet)。对于超网络训练,作者采用均匀采样,平等地对待所有结构,没有超参数。

2、NAS方法回顾
我们用{\color{Red} \mathcal A}表示结构搜索空间,这是一个有向无环图(DAG),一个搜索到的结构是DAG的子图a∈Aa \in \mathcal Aa∈A,记为N(a,w)\mathcal N(a,w)N(a,w),www为权重。NAS的目的是去解决两个有关联的问题,第一个是在标准深度学习里给定一个网络结构,优化其权重:

wa=argminwLtrain (N(a,w))(1)w_{a}=\underset{w}{\operatorname{argmin}} \mathcal{L}_{\text {train }}(\mathcal{N}(a, w)) \tag{1}

a
​    
 = 
w
argmin
​    
 L 
train 
​    
 (N(a,w))(1)

Ltrain(⋅)\mathcal L_{train}(\cdot)L 
train
​    
 (⋅)是在训练集上的损失函数。第二个问题是结构优化,一般来说是通过验证集的准确率来寻找:

a∗=argmina∈AACCval (N(a,wa))(2)a^{\ast}=\underset{a \in \mathcal A}{\operatorname{argmin}} {\rm ACC}_{\text {val }}(\mathcal{N}(a, w_{a})) \tag{2}


 = 
a∈A
argmin
​    
 ACC 
val 
​    
 (N(a,w 
a
​    
 ))(2)

ACCval(⋅){\rm ACC}_{\rm val}(\cdot)ACC 
val
​    
 (⋅)是验证集准确率。真实情况下会对网络的内存消耗、FLOPs、latency、功耗等有要求,这些取决于结构aaa、软件和硬件等,但和权重waw_{a}w 
a
​    
 无关,因此作者称为“结构限制”。一个典型的限制网络的latency不大于预设的budget:

Latency(a∗)≤Latmax(3){\rm Latency(a^{\ast}) \leq {\rm Lat}_{\rm max}} \tag{3}
Latency(a 

 )≤Lat 
max
​    
 (3)

对于大多数方法来说,同时满足式(2)和式(3)是很有挑战性的。最近的NAS方法采用了权值共享的策略,结构搜索空间A\mathcal AA被编码进一个超网络,记作N(A,W)\mathcal N(\mathcal A, W)N(A,W),WWW是超网络的权重。超网络被训练一次,所有的结构都从WWW里直接继承,因此他们在相同的图节点上式共享权值的。大多权值共享的方法将离散的搜索空间转为连续的,A\mathcal AA松弛化为A(θ)\mathcal A(\theta)A(θ),θ\thetaθ为表示结构分布的连续化参数。注意新的空间包含了原始的搜索空间:A⊆A(θ)\mathcal A \subseteq \mathcal A(\theta)A⊆A(θ)。这样松弛化的好处是可以用梯度方法联合优化权重和结构分布参数,表示如下:

(θ∗,Wθ∗)=argminθ,WLtrain(N(A(θ),W))(4)\left(\theta^{*}, W_{\theta^{*}}\right)=\underset{\theta, W}{\operatorname{argmin}} \mathcal{L}_{t r a i n}(\mathcal{N}(\mathcal{A}(\theta), W)) \tag{4}
(θ 

 ,W 
θ 

 
​    
 )= 
θ,W
argmin
​    
 L 
train
​    
 (N(A(θ),W))(4)

优化后,最好的结构a∗a^{\ast}a 

 从A(θ)\mathcal A(\theta)A(θ)采样得到,然后从Wθ∗W_{\theta^{\ast}}W 
θ 

 
​    
 继承权值、微调。理论上这样做很合理,但优化式(4)是具有挑战性的。首先,在超网络里的图节点的权重是互相依赖的、深度耦合的,但从WWW中继承的权重解耦了,尚不明确为什么这样做是有效的。第二,联合训练结构参数θ\thetaθ和权值WWW进一步引入了耦合。满足结构限制也是困难的,一些工作使用精心设计的soft损失项来扩充式(4)中的损失函数Ltrain\mathcal L_{train}L 
train
​    
 ,但也很难满足像式(3)中的限制。作者总结了一下这部分提到的方法,连同作者提出的方法一同作了比较:


3、one-shot NAS 回顾
通过上面的分析,耦合的结构搜索和权重优化是困难的,我们能否同时拥有问题解耦和权值共享的优点?这引出了叫做one-shot的方法(即上面解读的两篇论文),这两种方法依然训练一个超网络然后共享其中的参数,超网络训练和结构搜索是解耦成两个步骤,这既不同于嵌套式优化也不同于联合优化。首先,第一步优化超网络权重:

WA=argminWLtrain (N(A,W))(5)W_{\mathcal{A}}=\underset{W}{\operatorname{argmin}} \mathcal{L}_{\text {train }}(\mathcal{N}(\mathcal{A}, W)) \tag{5}

A
​    
 = 
W
argmin
​    
 L 
train 
​    
 (N(A,W))(5)

相比于式(4),搜索空间的连续化参数消失了,只有权重被优化。第二步,结构搜索表示为:

a∗=argmaxa∈AACCval(N(a,WA(a)))(6)a^{*}=\underset{a \in \mathcal{A}}{\operatorname{argmax}} \mathrm{ACC}_{\mathrm{val}}\left(\mathcal{N}\left(a, W_{\mathcal{A}}(a)\right)\right) \tag{6}


 = 
a∈A
argmax
​    
 ACC 
val
​    
 (N(a,W 
A
​    
 (a)))(6)

在搜索过程中,每个采样的结构aaa从继承WAW_{\mathcal A}W 
A
​    
 继承权重,记为WA(a)W_{\mathcal A}(a)W 
A
​    
 (a)。同式(1)、式(2)相比,式(6)的主要不同是,结构的权重是合理初始化的,估计ACCval(⋅)ACC_{val}(\cdot)ACC 
val
​    
 (⋅)只需推断,没有微调或重新训练。找到最优的结构a∗a^{\ast}a 

 后,通过微调来获得wa∗w_{a^{\ast}}w 


 
​    
 。这样的搜索也是灵活的,任何适当的搜索方法都可以,这里作者采用遗传算法。结构限制,式(3)的结构限制也被精确地满足。一旦训练好超网络,搜索可以用不同的结构限制(如100ms latency 和 200ms latency)在超网络上被重复很多次,之前的方法都没有这样的特性。但超网络的权重依然是耦合的。

4、单路径超网络和均匀采样
将式(1)作为理想的情况,one-shot要求权重WA(a)W_{\mathcal A}(a)W 
A
​    
 (a)接近于最优权值waw_{a}w 
a
​    
 ,近似的程度取决于训练损失Ltrain(N(a,WA(a)))\mathcal L_{train}(\mathcal N(a, W_{\mathcal A}(a)))L 
train
​    
 (N(a,W 
A
​    
 (a)))被优化的程度。这引出一个原则,超网络的权重WAW_{\mathcal A}W 
A
​    
 应该与搜索空间中的所有子结构的优化同时进行,如下式:

WA=argminWEa∼Γ(A)[Ltrain (N(a,W(a)))]W_{\mathcal{A}}=\underset{W}{\operatorname{argmin}} \mathbb{E}_{a \sim \Gamma(\mathcal{A})}\left[\mathcal{L}_{\text {train }}(\mathcal{N}(a, W(a)))\right]

A
​    
 = 
W
argmin
​    
 E 
a∼Γ(A)
​    
 [L 
train 
​    
 (N(a,W(a)))]

Γ(A)\Gamma(\mathcal A)Γ(A)是a∈Aa \in \mathcal Aa∈A的先验分布。注意,式(7)是式(5)的实现,在每步优化中,结构aaa是随机采样的,只有权重W(a)W(a)W(a)是被更新的。从这个意义上说,超级网络本身不再是一个有效的网络,它表现为一个随机超网络(stochastic supernet)。

为了较少权重之间的互相适应,作者建议将搜索空间简化到极限,只包含但路径结构,这可以看做是path dropout策略的极端情况,每次只保留一条路径,其他全部drop,如下图所示:

它包括一系列的choice block,每个包含几个choices,每次只有一个choice被调用。这里不包含任何dorpout参数或微调。先验分布Γ(A)\Gamma (\mathcal A)Γ(A)可能是重要的,作者发现均匀采样已经足够好了。

5、超网络和choice block
和《Understanding and Simplifying One-Shot Architecture Search》中的一样,choice block用于构建随机结构,一个choice block包含多个结构选择。对这里的但路径超网络,每次只有一个choice被调用,通过采样所有的choice block来获得一条路径。这里作者设计了两种choice block:

通道数目搜索。这个choice block搜索一个卷积层的通道数目,它会预先分配一个最大通道数目的权重张量(max_c_out, max_c_in, ksize),在超网络训练过程中,系统随机选择当前输出通道数目c_outc\_outc_out,然后从其中切片出张量子集[:c_out,:c_in,:][:c\_out, : c\_in, :][:c_out,:c_in,:],如下图所示:

混合精度量化搜索。这个choice block用于搜索卷积层的权值和特征的量化精度。在超网络训练过程中,特征图的位宽和滤波器权值是随机选择的,如下图所示:

6、进化结构搜索
对于式(6)的结构搜索,前面两篇论文使用随机搜索,而作者使用遗传算法,算法伪代码如下图所示:

对于所有的实验,种群大小P=50P=50P=50,最大迭代次数T=20\mathcal T=20T=20,k=10k=10k=10,对于交叉,随机选择两个候选结构去交叉生成一个新的结构,对于变异,在每个choice block以0.1的概率从候选变异中随机选择一种变异,产生一个新的结构。在对结构进行推断之前,BN的统计量从训练集中随机选择子集样本重新计算,因为超网络的BN统计量一般来说并不适合于候选结构。

参考文献
[1] Brock A , Lim T , Ritchie J M , et al. SMASH: One-Shot Model Architecture Search through HyperNetworks[J]. 2017.
[2] Bender, Gabriel, et al. “Understanding and simplifying one-shot architecture search.” International Conference on Machine Learning. 2018.
[3] Guo, Zichao, et al. “Single path one-shot neural architecture search with uniform sampling.” arXiv preprint arXiv:1904.00420 (2019).
[4] https://www.jiqizhixin.com/articles/2019-04-02-8
[5] 《深入理解AutoML和AutoDL》
————————————————
版权声明:本文为CSDN博主「SpaceAutomation」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u014157632/article/details/102600575

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章