论文:CNNPruner: Pruning Convolutional Neural Networks with Visual Analytics

作者:Guan Li, Junpeng Wang, Han-Wei Shen, Kaixin Chen, Guihua Shan, and Zhonghua Lu

发表:Proceedings of the 2017 CHI Conference on Human Factors in Computing Systems. ACM, 2017

由于不同的设备因素,大型的卷积神经网络往往需要进行模型压缩才能迁移到其他小型设备。现在的一些自动模型压缩方法大多依赖一个给定的阈值来自动对网络的神经元进行迭代的剪枝。本文提出了一种可视化的分析方法,引入不稳定性和敏感性指标,使用户可以通过交互制定模型压缩方案。

介绍

模型剪枝就是移除模型中对结果不相关或者没有那么重要的参数,对CNN来说,就是移除一些不重要的卷积核。最早LeCun通过信息理论对模型中的参数进行度量,来移除那些不重要的参数。现在的一些剪枝算法也是依据某些特定的指标来移除不重要的参数。

典型的剪枝流程一般为自动迭代的算法,流程如图所示,主要有三个步骤。

1.卷积核的评估

2.卷积核的删除

2.模型微调

一般的自动迭代的剪枝算法也有一些不足之处:

1.自动算法缺少灵活性,不能主动在剪枝效率和预测准确率之间取得平衡

2.自动算法每一轮只移除固定比例的卷积核,但是每一轮需要移除的卷积核数量可能不同,多和少都会对剪枝效果产生影响

3.模型剪枝和模型微调之间影响关系比较复杂,自动化剪枝只关注剪枝模型的准确率而不注意剪枝过程中状态的变化

基本概念

泰勒展开指标

本系统按照泰勒展开指标对卷积核进行剪枝。该指标的想法是,移除一个卷积核然后检查移除后模型损失函数的变化情况。也就是说,可以用损失函数的变化量来表示某一个卷积核的重要程度。如果移除一个卷积核对损失影响较小,那么表明使可以移除的。

$\Delta L(f_i)=|L(D,f_i = 0)-L(D,f_i)|$

D表示训练数据,$f_i$表示某一个卷积核输出的特征图,为0表示移除该卷积核。按照上述公式直接计算需要消耗很大的计算量,可以通过泰勒展开进行近似。

$L(D,f_i = 0) = L(D,f_i)-\frac{\partial L}{\partial{f_i}}f_i$

带入后该指标简化为

$\Delta(f_i)=|\frac{\partial L}{\partial{f_i}}f_i|$

这样只需要计算特征图和他的梯度即可,然后结果计算其L2范数。通过这一指标,可以对那些不太重要,即对损失函数影响较小的卷积核进行剪枝。选择一个合适的阈值以及决定需要剪裁的数量叫做pruning plan。系统的目标就是通过交互和可视分析得到有效的pruning plan。

微调

移除某些卷积核后,模型的结构就受到了破坏,准确率会下降。为了恢复模型原来的准确率,需要对模型进行微调。因为大多数重要的卷积核都保留了下来,所以只需要几个epoch就可以使准确率恢复到原来的水平,这一过程称为微调。

卷积核可视化

在该系统中,我们需要对卷积核进行可视化来更好的展示什么样的特征被移除了,方便用户更加直观地确定其重要程度。这里采用Guided back-propagation方法,这里不详细描述。

敏感性和不稳定性

敏感性反映了一个卷积被移除后核对模型损失的影响,这可以使用前面的泰勒展开指标表示。该指标较低的卷积核应当被优先移除来减小对模型的影响。

但是这还有一个问题,敏感性的计算依赖训练数据,也就说在训练过程中根据数据batch的不同可能会计算出不同的敏感性。对于一些重要的卷积核来说batch的随机性影响不大,因为他们的敏感性始终都很大。但是对一些没那么重要的卷积核来说,他们敏感性数值虽然小但是很容易受到这种随机性的影响。

所以引入另一个标准,不稳定性。不稳定性由卷积核的敏感性在不同轮中排名的平均绝对偏差表示。

在每一次计算中我们都计算每个卷积核的敏感性并将其排序来找到那些需要被剪枝的卷积核。重要的卷积核在排名中会处于一个稳定的位置,而不重要的则受随机性影响经常变动。

恶化样本和改善样本

这指的是模型经过剪枝后可能会对同一个样本的预测结果发生改变。可能是原来预测正确,剪枝后预测错误,也可能是原来预测错误,剪枝后预测正确。系统会对这两种样本进行区分 ,并向用户展示,来帮助用户确定剪枝方案是否合理。

设计需求

作者综合专家在该问题上的一些问题总结了如下系统设计师需要满足的用户需求。

R1:在剪枝过程中展示CNN不同水平的信息。

​ R1.1 追踪剪枝过程中的中间模型

​ R1.2 展示模型的统计数据,追踪剪枝过程中状态的变换

​ R1.3 可视化模型的内部结构和卷积核的属性

R2:可交互的分析和决定需要移除的卷积核数量

​ R2.1 提前估计剪枝方案对模型的影响

​ R2.2 评估剪枝方案的质量

​ R2.3 支持用户确定出更好的需要剪枝的卷积核数量

R3:理解模型剪枝过程和调整剪枝方案

​ R3.1 对感兴趣的卷积核进行可视化,帮助用户理解某个卷积核的作用

​ R3.2 可交互的调整剪枝策略

系统概览

树视图

这部分视图(a)主要用来追踪剪枝过程中各个模型的变化过程,根节点是原始模型,子节点则为剪枝之后的模型。

每个节点有两个数值分别表示对应模型的预测准确率和压缩率,左侧为系统对模型的自动编号。一条边表示了子节点模型由上一个模型微调得到。灰色的线表示模型收敛,紫色的线表示不收敛。鼠标hover一个节点时,会提示该模型的文件大小。单击某一节点将在其他视图对应更新该节点对应模型的统计信息。

该视图还提供了剪枝预测的功能,这通过对两个对应节点的卷积核数量以及准确率进行线性插值得到。

统计信息视图

b1展示了模型在测试数据集上的混淆矩阵

b2展示了模型在剪枝后的恢复能力。这里恢复能力就是说剪枝后的模型恢复到剪枝前模型预测准确率的能力。横轴为模型ID,纵轴是模型预测准确率。条状图表示了对应模型在微调的各个epoch中准确率的分布情况,长条表示微调前后准确率变化大。如果减去的卷积核对模型影响较小,那么对应的这个长条也会比较短。

b3展示了损失函数的变化。横轴是模型ID,纵轴是损失函数值。如果移除了重要的卷积核,那么loss会有一个较大的波动。如果剪枝方案比较好,那么图中的损失变化应当也比较小。

b4图展示了模型的恢复开销。横轴为模型ID,纵轴epoch计数。微调使用的epoch少,说明模型收到的影响小,更容易恢复到原来的预测水平

b5展示了参数和计算开销。纵轴是计算次数(左轴,柱状图)和参数数量(右轴,折线图)。

模型视图

c1 展示了模型架构 不同颜色代表了不同类型的层

c2 展示了对每个卷积核的评估。雷达图展示了剪枝方案的影响。气泡图展示了每个层每个卷积核的敏感性和不稳定性。X轴表示敏感性,气泡的大小表示不稳定性,越大不稳定性越高。垂直的滑竿可拖拽,用来确定接下来需要移除的卷积核。右侧的百分数用户可直接点击,系统将会自动移除指定比例的卷积核。

c3 展示了每层要被移除的卷积核。不同颜色代表不同层,下面的线代表将要在各层中移除的卷积核的比例,气泡表示了被移除的卷积核编号。

卷积核视图

卷积核视图(d)对样本点和卷积核进行了可视化。左侧d1图中,系统使用t-SNE将样本点可视化出来。用户可以选择单独显示恶化样本和改善样本,其中颜色表示类别。选中某个样本右侧d2图会给出详细信息和各个卷积核产生的可视化卷积核图像。其中红色框中的卷积核表示会被移除。

在每个卷积核的可视化结果中还给出了详细的统计信息图表,其中卷积核右侧的柱状图表示可视化卷积核像素值的分布,而下方的柱状图表示了对应卷积核的敏感性和不稳定性。

Case

这里选择一个使用该系统的手动对模型进行剪枝的案例来简述该系统的使用方法。

上图展示了初始模型。准确率为92.76%,包含2200卷积核,6.88million的参数,26.30M。我们希望剪枝后的模型能保持92.5%的准确率。

stage1:粗略剪枝

在设置好数据集等相关参数微调后,我们使用气泡图决定接下来的压缩比例。如图b中,移除一半的卷积核对模型敏感性影响不大(6%),但可以使得不稳定性大大降低(85%),因此决定移除50%的卷积核。微调后,得到模型1。从e中,可以看到模型1保证了模型的准确率,但是e1中第一个条很长,表明准确率的波动情况比较大,这也可从e2中0-1看到。因此接下来确定移除少一些的卷积核保证模型能快速恢复准确率。注意,如果如果接下来模型不能很好的回复准确率,那么需要从模型0重新开始。

第二轮决定减少25%卷积核。结果显示准确率和损失的波动都小了很多,也就是说第二轮剪枝对模型损伤比较小。

重复上述步骤,我们得到了a所示的剪枝树。对着见着过程,模型的不稳定性初见下降(b-c-d),同时准确率的波动也越来越大,loss变化也越来越大。

stage2:使用系统估计细致剪枝

从上面剪枝可以看到我们期望的模型应当在7到8之间,这一阶段,我们使用系统提供的估计来确定加下来的剪枝比例。

第一次估计,系统推荐为182,因为我们将模型7剪枝为模型9,移除201-182=19个卷积核。再次使用估计,系统推荐为174,这次需要只需要移除8个卷积核,因此我们停止剪枝。

经过上述过程,模型从26.30MB减小到188MB,准确率为92.64%,减少了0.12%。参数减少了99.44%,计算量减少98.58%

和其他方法的对比

文中还将该方法和自动剪枝以及自动+估计剪枝两种方法进行了对比。如图,自动剪枝使用了每次剪枝50%的策略,从结果可以看到模型3是最终的剪枝结果,效果差于另外两种方法。当然如果每次剪枝的比例少一些,如1%,会得到更好的结果,但是剪枝的迭代次数会大大增加,因此自动剪枝并不灵活。自动+估计方法包含了两个阶段,首先使用50%自动剪枝策略,第二阶段使用估计值微调。但是可以看到第二阶段的总epoch数多于第三阶段,消耗了更多的时间。

反馈和总结

该可视化系统使得剪枝流程更加清晰直观。树状图清楚地梳理了剪枝地全部过程,便于回溯;同时系统提供的估计器也帮助用户能够在最后阶段确定合适地剪枝方案。该系统随卷积核地可视化也十分清楚全面,气泡图展示了整体卷积核地分布情况,用户可以很方便地进行剪枝,同时系统针对特定样本的卷积核可视化也很好的帮助用户了解各个卷积核的实际作用,便于修正模型的剪枝方案。

专家使用后也对该系统提供了系统的改进意见。首先对于多类别问题,混淆矩阵的视觉效果会不好,系统可以允许用户进行类别筛选。另外,该系统只能对卷积核进行剪枝,而全连接层也常常包含大量冗余参数,也可以融入该系统对全连接层的参数进行剪枝。模型剪枝有很多不同的指标,而该系统之选用了敏感性和不稳定性指标,专家希望该系统可以允许引入自定义指标,便于应用模型剪枝方面的最新成果。



Questions & Discussion: ✉️