文章全名:ThiNet: A Filter Level Pruning Method for Deep Neural Network Compression 原文链接
简介
过去几年计算机视觉方面发展迅速,各种模型被提出来提升精度,但是有一个很现实的问题,这些模型对硬件要求高,导致模型受限制无法部署在一些可移动设备上。模型压缩是因此被提出,剪枝也是其中一个非常火的方向去减少模型复杂度。在本文中作者重点关注卷积核级别的剪枝方法,并将其作为一个优化问题,同时作者提出我们需要依据下一层计算的数据统计来剪枝卷积核,这样是ThiNet不同于其他方法的地方,最后经过试验,证明了方法的有效性。
相关工作
许多研究人员发现,深层模型会受到严重的 over-parameterization。实际上一个网络可以有效地利用其原始参数的一小部分来构造。最近的一些方法被提出追求模型大小和准确率的平衡。
Han提出一种迭代的剪枝方法去一处深度模型里面的多余变量,主要的意见是小权值 的连接在一个基准下的应该被抛弃。Lebedev和Lempitsky通过对loss function的组稀疏正则化去探索组稀疏的卷积,这样一些组的权值会被收缩到0,就可以被移除了。
符合我们研究方向的,一些方法也被提出了,核心都是评估神经网络的重要性。
ThinNet整体框架
ThiNet的插图。首先,我们关注虚线框。部分确定了几种弱通道及其对应卷积核(第一行用黄色突出显示)。这些通道
(以及相关的卷积核)对整体的影响很小性能,因此可以被丢弃,从而导致一个修剪模型。最后,对网络进行微调以恢复其准确性。
1. Filter selection.
与现有方法使用i层的统计来指导第i层卷积核的修剪,我们使用层i + 1指导层i的修剪。其关键思想是:如果我们可以在层中使用通道的子集(i + 1)的输入来近似第i + 1层的输出,则剩余的v其他通道可以安全地从删除第i+ 1层的输入。注意图层(i + 1)中的一个通道输入是由第i层中的一个卷积核产生的,因此我们可以安全地修剪第i层中相应的卷积核。
2. Pruning.
层(i + 1)的输入的弱通道它们在图层i中对应的卷积核将被修剪离开,导致一个更小的模型。请注意,,剪枝网络具有完全相同的结构但是更少的卷积核和渠道。换句话说,原始的宽网络正在变得越来越薄。这就是为什么我们称我们的方法为“ThiNet”。
3. Fine-tuning.
微调是恢复的必要步骤。过滤修剪破坏了泛化能力。但大型数据集和复杂数据集需要很长时间模型。为了节省时间,我们修剪一层后进行了微调一个或两个epoch。在为了得到一个精确的模型,在所有图层被修剪后更多的epoch会进行。
In order to determine which channel can be removed safely,a training set used for importance evaluation would be col-
lected
Collecting training examples
为例决定哪些通道可以被安全的移除,评估重要性的训练集必须被收集。
如上图所示,一个随机采样数据y ,是随机从Tensor(relu之前)采样的。W是卷积核,x是滑动窗口
一个卷积过程如下图所示:
如果我们定义为:
那么公式1可简化为:
这里=y-b,值得注意的是和是随机变量,=(,,””,)是独立的。如果找到一个子集S{1,2,…,C’},同时保证
这样一些通道就可以被丢弃了。
作者用贪心算法去解决通道选择问题: