【Pruning Convolutional Neural Networks for Resource Efficient Inference】论文笔记

[ICLR’17]论文链接:https://arxiv.org/abs/1611.06440
这篇论文也是修剪卷积核的。对应的PyTorch实现代码地址 https://github.com/jacobgil/pytorch-pruning
这篇论文来自NVIDIA,论文中提出了一种用于修剪神经网络中的卷积核的新公式,以实现有效的推理。
论文中提出了一个基于泰勒展开的新准则,用它去近似由于修剪网络参数引起的损失函数的变化。

主要思想:

修剪方法包括以下步骤:
1)微调网络直到目标任务收敛。
2)交替迭代修剪和进一步微调。
3)在达到准确度和修剪目标之间的目标折衷之后停止修剪。
关键在于采用正确的修剪标准。这篇文章的重点:使用泰勒展开进行修剪标准的衡量。
【Pruning Convolutional Neural Networks for Resource Efficient Inference】论文笔记_第1张图片
论文中使用下图这个函数去衡量修剪的W是否达到最优,即寻找一个修剪后效果最接近预训练好原始权重的W,使得损失函数变化最小。论文中认为找到一个好的W,同时保持尽可能接近原始成本值是一个组合问题
这里写图片描述

ORACLE PRUNING:

依次修剪每个非零参数,并记录损失变化,然后找出最优的组合。这种方法的效果最好,但是计算成本过高,需要对训练数据集进行评估,对每个剩余的非零参数进行一次评估。所以后面论文中提出并评估了性能和估计成本方面的若干标准。
论文中给出了两种方法:
1)oracle-loss量化重要性作为损失的符号变化。
这里写图片描述
2)oracle-abs采用绝对差值,上面的公式去绝对值。
oracle-loss版本鼓励修剪,这可能会减少损失,而oracle-abs会根据损失的变化来惩罚任何修剪,而不管修改的方向如何。

CRITERIA FOR PRUNING:

Minimum weight:

根据卷积核核权重的大小进行修剪。这种方法简单,并且在微调过程中不需要任何额外的计算。

Activation:

统计激活层的结果大小。假设激活值(输出特征图)很小,那么这个卷积核对于网络输出来说其实并不重要。

Mutual information:

利用互信息(MI)来衡量。互信息是衡量一个变量中关于另一个变量存在多少信息的度量,可以看作是两个变量相互依赖的程度。

Taylor expansion:

泰勒展开,也是论文的主要思想。
前面讲到修剪又称为优化问题,即试图用有限数量的非零元素去找到一个W,使损失变化最小。
修剪前后的损失变化用下面这个公式表示,hi=0代表的是修剪之后的损失。
这里写图片描述
使用1阶泰勒展开去逼近∆C(hi),去掉高阶项,最后得到:
这里写图片描述
M是特征图的向量长度。从论文中后面的结果图可以看出,泰勒展开的效果要好很多。

注意事项:

1) 在原始的OBD中,在训练后期梯度趋近于0,变化贡献量较小的情况下,OBD会将该项视为0然后重点去进行二阶泰勒展开。而论文中使用一阶项近似的方式,直接用 |y| 来代替,这样就避免了二阶泰勒展开项的计算,或者他的简化对角Hessian矩阵计算。
2) 由于ReLU提供了负激活(变为0值),对于一个特征图来讲,非0值的比例可以衡量该特征图的重要性。
3) L2归一化处理,跨层归一化。L2归一化之后,所有的裁剪标准结果都和ORACLE PRUNING结果相似。
4) FLOPs正则化,这种方法可以避免分层计算剪枝灵敏度。如果内核的L2范数低于预定义的阈值,那么高正则化修剪的思想可以扩展到去除整个特征映射的内核。
5) 具有最大池的层往往比那些没有的层更重要。
6) 最大和最小等级表明每个图层都具有一些全局重要的特征图和其他全局重要性较低的特征图。结合后续实验的结果,作者选择鼓励进行均衡修剪,以便在所有层中分配选择。
7) Oracle-abs的效果比Oracle-loss要好一些。
8) 作者同时将多个标准进行了组合,将泰勒展开和神经元平均激活线性组合2个标准在一起,结果发现效果的提升可以忽略不计。
9) OBD通过计算参数的平方幅度与Hessian对角线上相应元素的乘积来计算参数的显着性。 对于许多深度学习框架而言,对角线评估的高效实施并非易事,必须应用近似技术。作者在论文后面给出了改进方案。在第一次修剪迭代之前,显着性从1000个minibatch和10次迭代离线计算的值中初始化。然后,在每个minibatch中,只进行一次迭代计算OBD准则,并应用系数为0.99的指数滑动平均。
10) 泰勒标准由激活项和梯度项组成。考虑到网络中的所有神经元,梯度和激活都表现出与泰勒标准线性相关的趋势。然而,对于评分底部10%的神经元,激活标准显示更强的泰勒相关性,较低的激活表明较低的泰勒评分。

你可能感兴趣的:(网络压缩,参数裁剪,论文笔记)