神经网络剪枝行不行?-【Network Pruning发展近况】
WHAT IS THE STATE OF NEURAL NETWORK PRUNING?
Source:https://arxiv.org/abs/2003.03033
一、摘要:
缺乏标准化的基准和度量标准,以至于很难比较不同的剪枝技术,提出具体的补救措施,并引入ShrinkBench,一个框架来促进修剪方法的标准化评估。
尝试去回答:
哪种技术能最好地兼顾精确性和效率?
在特定的架构或数据集上,是否有最有效的策略?
哪种高级设计选择是最有效的?
二、存在的问题
通过调研81篇论文。(语料库包括2010年以来发表的79篇剪剪论文和两篇经典论文。)
发现,的确,基于其参数大小的剪枝实质上压缩了网络而不降低精度,而且许多剪枝方法的性能优于随机剪枝。
但是,
很少有论文互相比较,而且论文之间的方法是不一致,自己很难进行比较。
例如,四分之一的论文与没有其他修剪方法相比,一半的论文与最多一种其他方法相比,还有几十种方法从未被任何后续工作进行过比较。数据集/网络对甚至在三分之一的论文中都没有出现,评估指标差异很大,超参数和其他混杂因素也各不相同或未指定。
三、什么是网络剪枝?
剪枝算法的一般流程:
首先训练网络的收敛性。然后对网络中的每个参数或结构元素给出一个分数,并根据这些分数对网络进行剪枝。修剪会降低网络的准确性,因此需要进一步训练(称为微调)来恢复。修剪和微调的过程通常要重复多次,从而逐渐减小网络的规模。
在算法1的框架内,修剪方法主要在稀疏性结构、评分、调度和微调方面的选择上有所不同。
Structure.
Scoring.
Scheduling.
Fine-tuning.
四、如何去衡量剪枝效果?
- 减少神经网络的存储空间
- 减少推理的计算成本
- 减少推理的能量需求
不同目标-->不同设计-->不同评估指标
这些目标中的每一个都支持不同的设计选择,并且需要不同的评估指标。
例如,在减少网络的存储空间占用时,可以平等地对待所有参数,这意味着应该评估通过修剪实现的总体压缩比。
然而,在降低推理计算量时,不同的参数可能会产生不同的影响。
例如,在卷积层中,应用于空间较大输入的滤波器比应用于较小输入的滤波器涉及更多的计算量。
不管目标是什么,剪枝都会在模型效率和质量之间进行权衡,剪枝会提高前者,而(通常)降低后者。
这意味着一种剪枝方法的最佳特征不是它剪枝的单一模型,而是对应于效率-质量曲线上不同点的一组模型。
量化效率:快、小
第一个是使用修剪后的网络执行推理
所需的multiply-adds (通常称为FLOPs)。
第二个是被修剪的参数的比例。衡量质量:准
几乎所有的论文都报告Top-1
或Top-5图像分类精度的变化。举个栗子:(图源:《Filter Pruning via Geometric Median for Deep Convolutional Neural Networks Acceleration》)
But these metrics are far from perfect.
因为参数和FLOPs计数是真实世界延迟、整个过程、内存使用和能量功耗的一个松散代理。
同样,图像分类只是神经网络应用于无数任务中的一项。
五、Lessons From The Literature.
•How Effective is Pruning?
好,肯定比随机修剪好…(作者的态度还是相对悲观的)
有时能提高精度
•Pruning vs Architecture Changes
修剪在多大程度上提供了跨架构的相似好处?
首先,它强化了这样一个结论,即剪枝可以提高给定架构的时间或空间精度的权衡,有时甚至可以提高精度。其次,它表明,修剪通常不会像切换到更好的架构那样有用。最后,它表明修剪对于一开始效率较低的架构更有效。
修剪后的模型有时会比原来的体系结构表现更好,但很少会比更好的体系结构表现更好。
从最开始挑个好网络不香嘛?
六、缺少比较
方法好不好,比一比才知道
虽然在修剪文献中确实出现了一些普遍和一致的发现(见上一节),但到目前为止最清楚的结论是,修剪论文很少与现有的方法进行直接和控制比较。缺乏比较主要是由于缺乏实验的标准化和结果报告的碎片化。这种分割使得即使是最忠实的作者也很难与许多现有方法进行比较。
许多论文声称提高了这一技术的水平,但却无法与其他发表了同样声明的方法进行比较——包括许多已发表的方法。
一个相关的问题是,论文倾向于比较少数现有的方法。在图2的下半部分中,我们看到超过四分之一的语料库无法与以前提出的任何修剪方法进行比较,另外四分之一的语料库只能与一种方法进行比较。相比之下,几乎所有的论文都只有三篇或更少。
Gale等人(2019)和其他人认为,在评估一种方法在现实网络中的工作效果时,使用更大的数据集和模型是必不可少的。MNIST的结果可能特别不可能泛化,因为这个数据集在图像分类方面与其他流行数据集有显著的不同。特别是它的图像是灰度的,大部分由零组成,使用简单的模型可以达到99%以上的准确率。(所以在实验结果中,再使用MNIST数据集的话就不太好了。。。)
Confounding Variables(混杂变量)
即使比较包括相同的数据集、模型、指标和操作点,其他混淆变量仍然使有意义的比较困难。一些特别有趣的变数包括:
一般来说,我们不清楚是否有任何一篇论文能够成功地解释所有这些混杂因素,除非该论文使用了与它比较的方法相同的代码,并且报告了足够的测量结果以平均出随机变化。
在这方面,一个几乎普遍的做法是报告相对于原始模型的准确度的变化
至少还有两个实证理由相信混杂变量可以产生显著的影响。
首先,正如我们在图3中所观察到的那样,在报告的操作点上,方法通常引入的准确度变化小于1%。这意味着,即使混杂因素对准确性只有很小的影响,它们仍然可以对哪种方法看起来更好有很大的影响。
第二,如图5所示,现有的结果表明,不同的训练和微调设置可以产生几乎和不同的方法一样多的可变性。
七、比较中更多的障碍(太南了...)
•Architecture Ambiguity
通常很难甚至不可能确定作者使用的确切架构。
•Metrics Ambiguity
要知道报告的度量标准意味着什么也很困难
--->most often papers entirely omit their formula for computing FLOPs.
八、总结
•很难确定准确的实验设置和指标,
•使用的(数据集、架构)组合太少,
•对于任何给定的组合,在权衡曲线中报告的点太少,并且没有对集中趋势的度量,
•省略与许多可能是最新的方法的比较
•未能控制混杂变量。
一些实用的建议。
- •确定使用的确切的架构、数据集和指标集,理想情况下以一种结构化的方式,而不是分散在整个结果部分。
- •使用至少三对(数据集、架构),包括现代的、大规模的。MNIST和玩具模型不算数。AlexNet、CaffeNet和Lenet-5不再是现代的架构。
- •对于任何给定的修剪模型,报告压缩比和理论加速。压缩比定义为原始大小除以新大小。理论加速被定义为原始的乘加数除以新的数。没有理由只报告这些度量标准中的一个。
- •对于ImageNet和其他多类数据集,报告Top-1和Top-5的准确性。同样没有理由只报告其中一项。
- •无论为给定的修剪模型报告什么度量,也要为适当的控制报告这些度量(通常是修剪之前的原始模型)。
- •绘制给定数据集和架构的权衡曲线,以及竞争方法的曲线。
- •在绘制权衡曲线时,使用至少5个跨越压缩比范围的工作点。比率集合2;4;8;16;32是不错的选择。
- •报告和绘图平均值和样本标准差,而不是一次性测量,只要可行。
- •确保所有被比较的方法都尽可能使用相同的库、数据加载和其他代码。