1. 算法介绍
paper:https://arxiv.org/abs/1810.11809
Discrimination-aware channel pruning (DCP, Zhuang et al., 2018)鉴别力感知的通道剪枝。这个称为鉴别力感知,就是在卷积层通道中找出那些真正具有贡献、有鉴别感知力的通道,然后保留下来,而那些对没有鉴别力(往往指那些通道只包含全零权重)的通道就剪去。从而达到model更小,速度更快的效果。
2. 整体框架
上图就是DCP算法的整体框架,是在Lp层带有鉴别力的loss,
是重建loss,
最终loss。在阶段p,我们需要用
和
来fine-tune剪枝模型,然后对
中的每层来做通道选择,选择的依据是
和
。
- 通道剪枝
通道剪枝与网络量化、稀疏连接技术相比,通道剪枝从网络中删除通道、相关过滤器。所以在现有的深度学习库中得到良好的支持,通道剪枝的一个要点是通道选择,它通过计算权重的绝对值之和(L1正则化)来衡量通道的重要性,即目标函数中使用稀疏正则化(L1正则化)。但是考虑到效率方面原因,就把通道选择的方法转换成优化重建误差,用于贪心算法或者LASSO回归的方法来解决。
3. 提出的方法
总的损失函数为如下:
参数用来平衡这两个loss.
DCP算法优化的问题就是最小化L(W):
4. 算法
DCP算法如下:
上面的算法1就是整体的DCP算法。我们在{1,...,p+1}层中进行:比如在第p个阶段,计算构建辅助误差 ,学习辅助分类参数
(
),然后使用
和
这两个loss来fine-tune模型M,再更新模型M的参数,获得在p-1阶段剪枝后的模型(恢复整体精度),提升特征鉴别能力,这样就完成了在第p层的剪枝操作。这个剪枝过程有两点是要主要的:(1)微调,对补偿前一次修剪的精度损失至关重要,以抑制累积误差;(2)剪枝时的一个重要的步骤——通道选择(算法2)。
通道选择算法如下:
算法2:用来做通道选择,使用的是贪心算法,对中的每层来做通道选择,选择的依据是
和
。
我们先移除全部的通道,然后在深层网络中选择那些对鉴别力有贡献的通道,然后把这些选中的通道的索引(index)放到空集中,这样就得到了选择的通道。
算法2有两个步骤:
(1)我们从特征图中选择那些最重要的通道。在每一个迭代里面,我们计算梯度,
表示第j层通道的输入参数,我们选择通道
作为激活的通道(即选择对梯度影响最大的通道的index),然后把k放到集合A里面。
(2)一旦集合A确定了,我们优化选中通道中的 就可以通过下面的公式来最小化
即可:
表示
子矩阵的index,而
是集合
的补集。这里我们使用梯度下降法(SGD)来更新
,公式为:
,
为学习率。
5. 停止条件
在上面的算法2,在对公式(7)中的停止条件是,
是一个预先定义好的参数。实际上,参数
是很难取值的。在算法2中,因为L是凸函数,
会随迭代次数t单调递减,因此我们可以采用以下的停止条件:
是一个容忍值,如果达到了停止条件,算法就会停止,选择通道的数量将会自动确定。
References:
[1] Discrimination-aware Channel Pruning for Deep Neural Networks
[2] 鉴别力感知的通道剪枝——Discrimination-aware Channel Pruning
[3] PocketFlow Docs