译:《基于可微退火指示器搜索的自动通道修剪》
论文地址:《DAIS: Automatic Channel Pruning via Differentiable Annealing Indicator Search》
motivation
各种表现良好的CNN网络结构被设计出来,但是由于其计算成本繁重,导致它们很难直接被部署到一些实际应用的平台如机器人、自动驾驶以及绝大多数移动设备上。一种直接的解决方法是通道剪枝,最早的通道剪枝方法是基于手工规则的如lasso回归、基于几何中位数的规则等来过滤掉不重要的通道
方法简介
问题定义
通常卷积层可以定义为:\(O_l = F_l(W_l, O_{l-1})\),其中\(W_l \in R^{k_l\ \times k_l\times c_{l-1}\times c_l}\),\(F_l(.)\)表示卷积函数,模型剪枝的优化目标就是在尽可能保持准确率的条件下从原始模型推出具有最小数量卷积过滤器的网络结构。
一种比较流行的通道剪枝方法是通道指示器方法,这是通过为每个卷积层生成稀疏的二值向量进行的:\(O_l' = F_l(W_l,O_{l-1}') \otimes I_l\),其中\(I_l\in \{0,1 \}^{c_l}\)表示指示向量,\(\otimes\)表示张量积。这种情况下,通道剪枝的优化目标就可以表示为:\(\min_{\mathcal{W},\mathcal{I}} \mathcal{L}(\mathcal{W},\mathcal{I})+\lambda \mathcal{R}(\mathcal{I})\),其中\(\mathcal{W}=[W_1,W_2,\cdots,W_L],\)\(\mathcal{I}=[I_1,I_2,\cdots,I_L]\)分别表示参数和指示器集合,\(\mathcal{L}\)表示损失函数,\(\mathcal{R}\)表示正则项。
由于上述问题定义中提到的通道指示器是二值化的,不可微分的,因此,无法直接用卷积梯度下降法优化,有些人提出将BN中的权重作为间接指标,将具有较小BN权重的通道清零。
而本文提出的则是更高效、更灵活的通道指示器方法。
可微指示器搜索
将NAS中广泛使用的可微搜索过程融入到通道剪枝,提出可微指示器搜索。具体地,本文通过辅助变量的方式将通道指示器参数化为松弛的通道指示器来使搜索空间连续,即通过辅助变量\(\alpha_l^i\)松弛每个二值通道指示器\(I_l^i,i\in[1, c_l]\)为通道指示器\(\tilde I_l^i\)
这个指示器的搜索目标则是学习模型的参数\(\mathcal{W}\)和辅助变量\(\alpha\),直观选择是在训练集上同时优化\(\mathcal{W}\)和\(\alpha\),但这样会导致过拟合。因此,本文采用的是双层搜索的方法,将\(\alpha\)作为上层变量在验证集中搜索,\(\mathcal{W}\)作为下层变量在训练集中搜索,即: \[ \min_\alpha \mathcal{L}_{val} (\mathcal{W}^*(\alpha),\alpha)+\lambda \mathcal{R}(\alpha) \\ s.t. \ \mathcal{W}^*(\alpha) = \arg \min_{\mathcal{W}}\mathcal{L}_{train}(\mathcal{W},\alpha) \]
退火-松弛通道指示器
为了使松弛通道指示器和二值通道指示器更相似,松弛通道指示器\(\tilde I^i_l\)还需要限制到0和1之间,一种直接的方法就是使用sigmoid
函数,即:\(\tilde I_l^i = \frac{1}{1+e^{-\alpha_l^i}}\)
但是,如果直接上述方法,会存在两个不可避免的问题:
- \(\tilde I^i_l\)可能不会收敛到稀疏值
- 离散化会给连续搜索结果和二值模型之间带来不可忽略的差异
因此,本文提出了一种退火-松弛通道指示器来填补这种差异: \[ \tilde I^i_l = H_T(\alpha_l^i)=\frac{1}{1+e^{-\alpha^i_l/T}}, I_l^i=\lim_{T\rightarrow 0} H_T(\alpha_l^i) \] 其中\(T\)表示温度变量,它会在一开始很高,慢慢降低,到最后变成0,这样一来,指示器就会在刚开始时是连续的以便支持辅助变量的梯度更新,最后收敛到二值状态达到剪枝目的。\(H_T(.)\)表示退火-松弛函数。
通过正则化进行结构限制
在更新辅助参数时引入三种正则化到搜索过程中
Lasso 正则化
\[ \mathcal{R}_{lasso} = \sum_{l=1}^L \sum_{i=1}^{c_l} |H_T(\alpha_l^I)| \]
连续浮点估计正则化
第\(l\)层卷积层的连续浮点估计可以表示为: \[
E_{FLOPs}(\alpha) = \sum_{l=1}^L(p_l\cdot (\sum_{i=1}^{c_{l-1}} H_T(\alpha_l^i))\cdot(\sum_{i=1}^{c_l}H_T(\alpha_l^i)))
\] 其中\(p_l=h_l\times w_l \times k_l^2\),\(k_l\)表示kernel size
,\(h_l,w_l\)表示特征图的空间大小,这样就可以正则化: \[
\mathcal{R}_{FLOPs}(\alpha) = \begin{cases}\log(E_{FLOPs}(\alpha)), \ \frac{E_{FLOPs(\alpha)}}{F}>1 \\
-\log (E_{FLOPs}(\alpha)),\ \frac{E_{FLOPs}(\alpha)}{F} < 1-\epsilon \\
0, \ otherwise\end{cases}
\] 其中\(\epsilon \ll 1\),连续浮点估计正则化可以使DAIS
在规定范围\([(1-\epsilon)*F,F]\)内优化
对称正则化
提出一种针对有残差连接(shortcut
)的网络通道剪枝的对称正则化方法: \[
\mathcal{R}_{sym} = \sum_{l,l'}|(\sum_{i=1}^{c_l}H_T(\alpha_l^i))-(\sum_{i=1}^{c_l'}H_T(\alpha_{l'}^i))|
\] 其中\((l,l')\)表示输入通道数为\(c_l\),输出通道数为\(c_{l'}\)的残差块