Proxy Tasks:
1.在小数据集上训练
2.只学习一些小的Blocks
3.只训练一小部分的Epoch
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)
本文提出了一种Path-Level的剪枝方法
**Step 1:**直接训练一种包含所有候选Path的超参Network
**Step 2:**在训练过程中,通过引入结构化参数来学习通路的冗余性
**Step 3:**在最终获得紧性的优化结构时将具有冗余性的Path进行剪枝
存在问题:
随着可选Operations的增加,可选Network的Size越大,会增加GPU Memory
Hardware Objectives(e.g. Latency)不可微
1.直接在大型数据集上且不需要使用Proxy Task的技术进行训练和学习
2.允许在大型的候选集上进行搜索
3.打破了Block 堆叠的Network的构成方式
4.提出了对于NAS做剪枝的方案,展示了NAS与模型压缩之间的相近的关系,同时通过Path剪枝,本文的方法节约了大约一个量级的计算量
5.提出了一个基于Latency Regularization Loss的梯度下降方法以解决硬件目标问题
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)表示
因此,对于一个输入 x x x,混合操作 m O m_O mO的输出结果是基于 N N N条通路所形成的
**Question:**随着Path可选的空间逐渐扩大,Weight的运算量将不断增加
**解决方案:**二值化Path
ProxyLessNet在训练过程中,在众多的Path中,只激活一个Path,故此本文将所有的Path进行二值化处理
g = b i n a r i z e ( p 1 , . . . , p N ) = { [ 1 , 0 , . . . , 0 ] w i t h p r o b a b i l i t y p 1 . . . [ 0 , 0 , . . . , 1 ] w i t h p r o b a b i l i t y P N g=binarize(p_1,...,p_N)=\left\{ \begin{aligned} [1,0,...,0] & & with &probability&p_1\\ ...\\ [0,0,...,1] & & with & probability& P_N \end{aligned} \right. g=binarize(p1,...,pN)=⎩⎪⎨⎪⎧[1,0,...,0]...[0,0,...,1]withwithprobabilityprobabilityp1PN
因此对于给定的binary gate g g g
m O B i n a r y ( x ) = Σ i = 1 N g i o i ( x ) = { o 1 ( x ) w i t h p r o b a b i l i t y p 1 . . . o N ( x ) w i t h p r o b a b i l i t y p N m_O^{Binary}(x)= \mathop{\Sigma}\limits_{i=1}\limits^{N}g_io_i(x)=\left\{ \begin{aligned} o_1(x) & with&probability&p_1\\...\\o_N(x)&with &probability & p_N \end{aligned} \right. mOBinary(x)=i=1ΣNgioi(x)=⎩⎪⎨⎪⎧o1(x)...oN(x)withwithprobabilityprobabilityp1pN
[说明]:此处值得注意的是 a r c h i t e c t u r e architecture architecture p a r a m e t e r s parameters parameters并没有直接包含在 m O B i n a r y m_O^{Binary} mOBinary的计算公式中,因此不能直接通过该公式对 A r c h i t e c t u r e Architecture Architecture进行优化,下文中,借用DARTS中的方法对 A r c h i t e c t u r e Architecture Architecture进行转换
**Question:**对于以上网络的定义,就像先前的NAS,必须要解决Architecture和Weight的更新迭代问题
**解决方案:**Binary Connect–>Weight 更新Architecture
[说明]:以上两个优化过程必须要交替进行
**Question:**此处值得注意的是 ∂ L ∂ g j = o j \frac{\partial L}{\partial g_j}=o_j ∂gj∂L=oj,因此借助网络的反向传播算法是可以计算的但是, o j o_j oj是需要保存在memory中
**解决方法:**本文考虑将选择N个候选中的一个路径的任务分解为多个二进制选择任务
Step 1:更新Architecture Parameters
Step 2:根据多项式分布 ( p 1 , p 2 , . . . p N ) (p_1,p_2,...p_N) (p1,p2,...pN) 采样两个Path [此处利用了MASK]
通过以上两个步骤,就可以直接将候选操作的数量由 N N N降解为2.同时 p a t h path path w e i g h t weight weight和 B i n a r y Binary Binary G a t e Gate Gate也要随之重置
Step 3:利用公式 ( 5 ) (5) (5)重新采样的两个Path的 A r c h i t e c t u r e Architecture Architecture P a r a m e t e r s Parameters Parameters进行更新
Step 4:通过在Architecture Parameters上应用softmax来计算Path Weight,需要通过乘以比率因子来重新调整这两个更新的Architecture Parameters的值,以保持非采样路径的路径权重不变
[效果]:
Question:Latency不可微
解决方法:构建可微函数,使得网络可以通过反向传播进行SGD更新优化
Step 1:使得Latency 可微
假设:
{ o j } \{o_j\} {oj}:一个混合操作的动作候选集
p j p_j pj:与 o j o_j oj相对应的path weight,代表了选择 o j o_j oj的概率
E [ l a t e n c y i ] \mathbb{E}_{[latency_i]} E[latencyi]:是第 i i i个Block的Latency的期望值
F ( ˙ ) F(\dot{}) F(˙)代表的是Latency 预测模型
∂ E l a t e n c y i ∂ p j i = F ( o j i ) \frac{\partial \mathbb{E}_{latency_i}}{\partial p^i_j}=F(o^i_j) ∂pji∂Elatencyi=F(oji)
因此对于整个网络来说:
E [ l a t e n c y ] = Σ i E [ l a t e n c y i ] \mathbb{E}_{[latency]}=\Sigma_i\mathbb{E}_{[latency_i]} E[latency]=ΣiE[latencyi]
L o s s = L o s s C E + λ 1 ∣ ∣ w ∣ ∣ 2 2 + λ 2 E [ l a t e n c y ] Loss=Loss_{CE}+\lambda_1||w||^2_2+\lambda_2\mathbb{E}_{[latency]} Loss=LossCE+λ1∣∣w∣∣22+λ2E[latency]
Question:针对于Binary Gate的优化问题的解决方案
**解决方法:**ReInforce可以用于训练二值权重
具体的公式推演可以详看论文
GPU
CPU: