Discrimination-aware channel pruning论文解读

1. 算法介绍

paper:https://arxiv.org/abs/1810.11809

Discrimination-aware channel pruning (DCP, Zhuang et al., 2018)鉴别力感知的通道剪枝。这个称为鉴别力感知,就是在卷积层通道中找出那些真正具有贡献、有鉴别感知力的通道,然后保留下来,而那些对没有鉴别力(往往指那些通道只包含全零权重)的通道就剪去。从而达到model更小,速度更快的效果。

 

2. 整体框架

上图就是DCP算法的整体框架,\large L_{s}^{p}是在Lp层带有鉴别力的loss,\large L_M是重建loss,\large L_f最终loss。在阶段p,我们需要用\large L_{s}^{p}\large L_f来fine-tune剪枝模型,然后对\large \left \{ L_{p-1}+1, \; ... \;, L_p \right \}中的每层来做通道选择,选择的依据是\large L_{S}^{P}\large L_{M}

  • 通道剪枝

通道剪枝与网络量化、稀疏连接技术相比,通道剪枝从网络中删除通道、相关过滤器。所以在现有的深度学习库中得到良好的支持,通道剪枝的一个要点是通道选择,它通过计算权重的绝对值之和(L1正则化)来衡量通道的重要性,即目标函数中使用稀疏正则化(L1正则化)。但是考虑到效率方面原因,就把通道选择的方法转换成优化重建误差\large L_{M},用于贪心算法或者LASSO回归的方法来解决。

 

3. 提出的方法

\large F^{p}(W) = AvgPooling(ReLU(BN(O^{p})))

\large L_{S}^{p}(W) = -\frac{1}{N}\left [ \sum_{i=1}^{N} \sum_{t=1}^{m} I\left \{ y^{(i)}=t \right \}\log \frac{e^{\theta _{t}^{T}F(p, i)}}{\sum_{k=1}^{m}e^{\theta _{t}^{T}F(p, i)}}\right ]

总的损失函数为如下:

\large L(W) = L_M(W) + \lambda L_{S}^{P}(W)

参数\large \lambda用来平衡这两个loss.

DCP算法优化的问题就是最小化L(W)

\large min_w \; L(W), \; s.t. \; \left \| W \right \|_{2,0} \leq K_l

 

4. 算法

DCP算法如下:

上面的算法1就是整体的DCP算法。我们在{1,...,p+1}层中进行:比如在第p个阶段,计算构建辅助误差 \large L_{S}^{P},学习辅助分类参数\large \theta\large \theta \epsilon \mathbb{R}^{n_p\times m}),然后使用\large L_{S}^{P}\large L_{f}这两个loss来fine-tune模型M,再更新模型M的参数,获得在p-1阶段剪枝后的模型(恢复整体精度),提升特征鉴别能力,这样就完成了在第p层的剪枝操作。这个剪枝过程有两点是要主要的:(1)微调,对补偿前一次修剪的精度损失至关重要,以抑制累积误差;(2)剪枝时的一个重要的步骤——通道选择(算法2)。

 

通道选择算法如下:

算法2:用来做通道选择,使用的是贪心算法,对\large \left \{ L_{p-1}, \; ... \;, L_p \right \}中的每层来做通道选择,选择的依据是\large L_{S}^{P}\large L_{M}

我们先移除全部的通道,然后在深层网络中选择那些对鉴别力有贡献的通道,然后把这些选中的通道的索引(index)放到空集\large A\subset \left \{ 1, ..., c \right \}中,这样就得到了选择的通道。

算法2有两个步骤:

(1)我们从特征图中选择那些最重要的通道。在每一个迭代里面,我们计算梯度\large G_j ={\partial L}/{\partial W_j}, \large W_j表示第j层通道的输入参数,我们选择通道 \large k = arg \;max_{j\notin A}\left \{ \left \| G_j \right \|_F \right \} 作为激活的通道(即选择对梯度影响最大的通道的index),然后把k放到集合A里面。

(2)一旦集合A确定了,我们优化选中通道中的\large W 就可以通过下面的公式来最小化\large W即可:

\LARGE min_W\; L(W), \; s.t. \; W_{A^c} = 0

 \large W_{A^c} 表示\large A^c子矩阵的index,而\large A^c是集合\large A的补集。这里我们使用梯度下降法(SGD)来更新\large W_A,公式为:

\large W_A\;\leftarrow W_A-\gamma \frac{\partial L}{\partial W_A}\large \gamma为学习率。

 

5. 停止条件

在上面的算法2,在对公式(7)中的停止条件是\large \left \| W \right \|_{2,0}> k_l\large k_l是一个预先定义好的参数。实际上,参数\large k_l是很难取值的。在算法2中,因为L是凸函数,\large L(W^t)会随迭代次数t单调递减,因此我们可以采用以下的停止条件:

\large \left | L(W^{t-1}) - L(W^t) \right |/L(W^0) \leq \epsilon

\large \epsilon是一个容忍值,如果达到了停止条件,算法就会停止,选择通道的数量将会自动确定。

 

 


References:

[1] Discrimination-aware Channel Pruning for Deep Neural Networks

[2] 鉴别力感知的通道剪枝——Discrimination-aware Channel Pruning

[3]  PocketFlow Docs

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liguiyuan112

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值