ProxyLessNAS : Direct Neural Architecture Search On Target Task And Hardware
Related Work
Proxy Tasks:
1.在小数据集上训练
2.只学习一些小的Blocks
3.只训练一小部分的Epoch
Motivation
1.基于 Proxy Tasks的NAS方法并没有考虑到诸如Latency等性能的影响
2.现存的NAS结构是采用搜索Block的方法进行Stack组成最终的网络结构,但是实际情况中,每一个Block是可以不同的
3.DARTS是一种创造性的将Architecture 和Weight联合进行SGD优化的,但是在使用Proxy Tasks学习Block进行堆叠的同时又存在GPU Consumption的方法
m O D A R T S ( x ) = Σ i = 1 N p i o i ( x ) = Σ i = 1 N e x p ( α i ) Σ j e x p ( α j ) o i ( x ) m_O^{DARTS}(x)=\mathop {\Sigma}\limits_{i=1}\limits^{N}p_i o_i(x)=\mathop{\Sigma}\limits_{i=1}\limits^{N}\frac{exp(\alpha_i)}{\Sigma_jexp(\alpha_j)}o_i(x) mODARTS(x)=i=1ΣNpioi(x)=i=1ΣNΣjexp(αj)exp(αi)oi(x)
4.Drop Path是一种可以找到紧性的高效网络结构的方法
m O O n e − S h o t ( x ) = Σ i = 1 N o i ( x ) m_O^{One-Shot}(x)=\mathop{\Sigma}\limits_{i=1}\limits^{N}o_i(x) mOOne−Shot(x)=i=1ΣNoi(x)
Overview
本文提出了一种Path-Level的剪枝方法
**Step 1:**直接训练一种包含所有候选Path的超参Network
**Step 2:**在训练过程中,通过引入结构化参数来学习通路的冗余性
**Step 3:**在最终获得紧性的优化结构时将具有冗余性的Path进行剪枝
存在问题:
-
随着可选Operations的增加,可选Network的Size越大,会增加GPU Memory
- Solution:借助"Binary Connect"的思路,将Architecture Parameters二值化,在一个Run-Time中只允许一个Path被激活
-
Hardware Objectives(e.g. Latency)不可微
- 将Network Latency抽象成连续函数,利用正常的Loss进行优化
- Reinforce-Based Algorithm
Contributions
1.直接在大型数据集上且不需要使用Proxy Task的技术进行训练和学习
2.允许在大型的候选集上进行搜索
3.打破了Block 堆叠的Network的构成方式
4.提出了对于NAS做剪枝的方案,展示了NAS与模型压缩之间的相近的关系,同时通过Path剪枝,本文的方法节约了大约一个量级的计算量
5.提出了一个基于Latency Regularization Loss的梯度下降方法以解决硬件目标问题
Method
Construction of Over-Parameterized Network
Question:为了能够进行搜索,必须要对整个超参的网络结构进行定义
解决方案:所有的Path都是混合通路,学习的是整个Network而不是Block
将Network用 N ( e = m O 1 , . . . , e = m O n ) N(e=m^1_O,...,e=m^n_O) N(e=mO1,...,e=mOn)表示
- e i e_i ei代表一个有向无环图的一条确定的边
- O = { o i } O=\{o_i\} O={ oi}是一个含有 N N N个初始Operations(卷积、池化、Identity、Zero)的集合
- m O m_O mO每条边上含有N条并行通路的一个混合操作
因此,对于一个输入 x x x,混合操作 m O m_O mO的输出结果是基于 N N N条通路所形成的
Learning Binarized Path
**Question:**随着Path可选的空间逐渐扩大,Weight的运算量将不断增加
**解决方案:**二值化Path
ProxyLessNet在训练过程中,在众多的Path中,只激活一个Path,故此本文将所有的Path进行二值化处理
g = b i n a r i z e ( p 1 , . .