剪枝论文阅读-Rethinking the Value of NetWork Pruning

论文标题

论文概述

传统结构化剪枝往往分为三步走,训练-剪枝-finetune

剪枝方面默认的常识是:

  1. 从一个大的、过参数化的模型开始训练是有必要的,因为这样的模型具有很强的表示和优化能力,只有从这样的模型中删除冗余参数,才能尽可能少的损失模型的精度;而直接从一个小模型开始从头训练得到的精度总是低于通过剪枝-finetune之后的模型精度
  2. 剪枝之后的结构和剪枝后的参数偶被认为是构建一个最终的高效网络的重要条件。

本文揭示了几个违背过往剪枝常识的观察:

  1. 对于获得一个有效的最终模型而言,训练一个大的、过参数化的模型可能不是必要操作
  2. 剪枝之后的finetune得到的模型效果,往往差于直接从头训练剪枝模型,虽然从头训练剪枝之后的结构的模型往往需要更多的训练轮次。这预示着剪枝操作之后保留的参数其实没有那么重要。而在我们之前的剪枝常识中,剪枝保留的参数是对模型非常重要的参数,决定了剪枝之后的模型性能。剪枝之后的参数可能会导致新的模型陷入一个比较差的局部最优解。
  3. 剪枝之后的模型结构而不是剪枝之后的权重参数,对我们来说是更为重要的存在。对于哪些固定的剪枝策略(比如每层删除固定比率的channel层),可以直接从剪枝之后的模型开始训练,而不需要进行训练-剪枝-finetune。而对于动态的剪枝策略来说,剪枝操作的作用更多的在于获得剪枝之后的有效网络结构,所以剪枝的作用也可以理解为模型最优化模型结构搜索

注意,作者上述的观察都是基于结构化剪枝的。对于非结构化剪枝,只有在小数据集合上,从头开始训练可以达到和剪枝-finetune相同的精度,在大数据集合上则会失败。

为什么之前的论文实验中,从头开始训练的实验效果都没有使用剪枝之后的参数的效果好?因为想当然的思想,使得之前的在“ 从头开始训练的”实验中没有仔细选择超参数、数据扩充策略,并且也没有给从头开始训练足够的计算时间和轮次(因为作者提到从头开始训练需要更多的轮次才能得到和利用剪枝参数进行finetune类似的精度)

当然,如果已经具备了一个训练好的大模型,那么剪枝和finetune可以加快获得高效网络的时间。

背景介绍

常见的减小网络参数量的方法有低秩化、量化、剪枝。剪枝因为其高效卓越的表现得到了广泛的关注。

剪枝可以分为非结构化剪枝和结构化剪枝。非结构化剪枝作用在单个权重上;导致卷积核的权重参数稀疏化。结构化剪枝作用在channel层以及layer层。

这篇文章受到了一些研究剪枝特征的论文的启发。

  1. 2018年的《Recovering
    from random pruning: On the plasticity of deep convolutional neural network》这篇论文发现随机剪枝可以达到和精巧设计的剪枝策略同等的精度。
  2. 2019年的《The Lottery Ticket Hypothesis》一文,观察到特定的节点连接以及他们的初始化训练参数,可以让剪枝之后的模型从头训练(从特定的初始化训练参数)得到和finetune类似的精度。

文本则是论文2的更进一步发现,不需要特定的初始化参数,直接从头开始训练就可以得到类似精度乃至更加优秀的高效模型。节点的连接,也就是剪枝之后的网络结构才是给高效模型带来提升的重要因素。

方法论

数据:CIFAR-10, CIFAR-100 , 和ImageNet datasets。
** 实验模型:VGG、ResNet、DenseNet是剪枝论文常用的三个网络,具有较好的代表性。
** 对比其他论文的方法
:对比了两个自动剪枝方法、4个预定义结构的剪枝方法
训练的开销:对于从头开始训练的剪枝模型,怎么分配训练轮次合适?之前的方法都是和大模型采用相同的轮次,用Scratch-E表示;如果按照训练过程中的浮点数计算,那么一个被剪枝50%的模型,应该训练的轮次为原始模型的2倍,这种训练方式用Scratch-B表示。在直觉上,小的模型只需要更少轮次就可以实现收敛,但是在本文的实验中,发现部分情况下,Scratch-B的训练方式是有必要的,可以提升精度.

实验分析

实验的分析章节就是对简述中提到的结论的验证,这边就不展开赘述了。

网络剪枝==网络结构搜索

1. 剪枝策略和等比例剪枝

对于《 Learning efficient convolutional networks through network slimming》这篇文章,采用全局剪枝的方式,根据不同的剪枝比率可以得到不同的剪枝模型。对不同的剪枝模型从头开始训练可以得到图中的蓝色曲线;采用相同的剪枝比率,但是逐层等比例剪枝(比如剪枝比率为0.2,在上面的论文中,是网络所有层参数排序之后,减掉排序末尾的20%;而后面这种等比例剪枝,则是每层减掉20%),从头开始训练可以得到图中红色曲线。可见即使不采用剪枝之后的权重,剪枝保留的结构也是很有用的。


net slimming

作者针对《 Learning efficient convolutional networks through network slimming》这篇文章进行了5次随机从头训练,发现如果指定比率剪枝,那么5次剪枝之后,每层的保留层数总是神奇的相似,这说明这个方法确实可以得到一个比较高效稳定的结构。


剪枝后每层剩余数量

更进一步的实验发现,在VGG网络上,net-slimming剪枝策略优于每层等比例剪枝,而在ResNet,DenseNet上,net-slimming剪枝策略可能不如每层等比例剪枝。作者分析了这些网络剪枝之后的结构,发现这种结构趋向于每层等比例剪枝,这可能就是这个策略剪枝之后的效果约等于每层等比例剪枝的原因。而VGG网络每层的冗余并不是均衡的,因此剪枝策略有效。

精心设计的剪枝策略效果低于等比例剪枝的实验图

2.剪枝策略设计的原则

根据net slimming算法在VGG网络上的成功结果,是否可以挖掘到一个设计网络结构的基本原则?
对于VGG网络,剪枝之后的相邻层有相似的channel数量,将相似channel数量的层分为一个stage,网络分为三个stage。将同一个stage中的平均层数作为新模型的该stage中的层数,这样得到的新网络称为“Guided Pruning”
在VGG16上剪枝的模型迁移到VGG19上,这样得到的新网络称为迁移“Guided Pruning方法
下图展示了剪枝算法、“Guided Pruning”、迁移“Guided Pruning方法以及每层均匀剪枝策略在不同剪枝比率(x轴是参数量,餐数量少的剪枝比率高)时的准确率。可以看到前三者的准确率大差不差。因此不需要从头开始训练一个大的网络,可以采用迁移学习的方式从小网络直接得到一个性能还不错的更深层网络

针对net slimming的分析

你可能感兴趣的:(剪枝论文阅读-Rethinking the Value of NetWork Pruning)