模型剪枝中的预训练权重真的有用么?重新思考模型剪枝的价值

论文地址:https://arxiv.org/pdf/1810.05270.pdf

发表时间:2019年3月5日

相关笔记:https://blog.csdn.net/qq_19784349/article/details/107202447

Liu等人的多项实验结果表面对剪枝模型进行微调只能提供比使用随机初始化权值训练该模型相当或更差的性能。对于假设有一个预定义的目标网络体系结构的剪枝算法,我们可以摆脱完整的pipeline,直接从头开始训练目标网络。我们观察多个网络架构、数据集是一致的,这意味着:

  • 1)训练大型,过度参数化模型通常不是一个有效的最终模型 在imagenet上的模型迁移到私域数据中存在较多的冗余
  • 2)学习到的大模型的"重要"权重,在较小的剪枝中是没有价值的 只有在剪枝比例比较高时,预训练权重才是占优势的
  • 3)修剪架构本身,而不是一组继承的"重要的"权重,对最终模型的效率更重要,修剪作为一个限定检索范围的轻量化模型结构搜索范式是有用的。

我们的研究结果表明,在未来的结构化修剪方法的研究中,需要更仔细的基线评估。我们还与"彩票假说"(Frankle & Carbin,2019)进行了比较,发现在最佳学习率下,弗兰克kle&Carbin(2019)中使用的"中奖彩票"初始化并没有比随机初始化带来改善。这里主要表明初始学习率对训练效果的影响,使用sgd,lr=0.1训练效果好于0.01;这里只在cifar10数据上对比,仅表明在易数据上,loss线鞍部较多,使用大学习率更容易跳出鞍部

本文主要表明,在小数据集上(分类数较少),使用imagenet预训练后的重参数模型去迁移训练再剪枝是没有必要的,不如直接去训练轻量化模型;在任务难度较大时(分类数较多时),可以剪枝过程中得到的预训练权重才能发挥一定程度的价值。 现有的论文中,剪枝之所以有用,是因为对不使用预训练权重的剪枝结构训练不到位

1、模型剪枝

1.1 剪枝定义

过度参数化是深度神经网络中一个被广泛存在的情况,这导致了高计算成本和高推理内存占用。在低资源环境下,网络剪枝被广泛用于降低深度模型的推理成本。典型的网络剪枝过程包括三个阶段: 1)训练一个大型的、过参数化的模型(有时有预训练后的模型),2)根据一定的标准对训练后的大型模型进行剪枝,3)对剪枝后的模型进行微调,以恢复失去的性能。

网络剪枝方法的一个主要分支是个体权重剪枝(非结构化剪枝),该方法基于权重对结果的贡献进行剪枝(如L1、L2范数等)。然而,这些非结构化剪枝方法的一个缺点是,由此产生的权重矩阵是稀疏的,如果没有专用的硬件,这就不能达到压缩和加速的效果。

网络剪枝方法的另一个分支是结构化修剪方法,该方法会在通道甚至层的级别上进行修剪。由于网络的基本结构仍然被保留下来,因此不需要专门的硬件/库来实现其好处。在结构化剪枝方法中,通道剪枝是最流行的,因为它在最细粒度的级别上运行,同时仍然适合传统的深度学习框架。还有一些启发式方法,基于训练后的权重信息按照剪枝目标从原始模型中遴选出预训练权重。结合本文的观点,结构化剪枝,是不需要预训练权重的。

1.2 剪枝理论依据

一般来说,在这个修剪过程背后有两个共同的信念。首先,我们认为从训练一个大型的、过度参数化的网络开始是重要的,因为它提供了一个高性能模型(由于更强的表示和优化能力),可以安全地删除一组冗余参数,而不显著影响精度

人们通常认为这优于直接从头开始训练更小的网络。其次,修剪后的体系结构训练后的权重是重新训练好小模型的关键。因此,很多剪枝方法都在研究如何删除冗余权重,保留重要权重

1.3 剪枝真的必要么?

基于对具有多个网络架构的多个数据集上最先进的剪枝算法的广泛的经验评估,观察到以下两种现象。

  • 首先,对于具有预定义目标网络架构的结构化剪枝方法(图2),直接从随机初始化中训练小目标模型可以实现与从三阶段管道中获得的模型相同的性能,如果不是更好的话。在这种情况下,不需要从一个大型模型开始,而是可以直接从头开始训练目标模型。

  • 其次,对于具有自动发现目标网络的结构化剪枝方法,从头开始训练剪枝后的模型也可以获得比微调相当甚至更好的性能

以上结论表明,模型剪枝中最为重要的是剪枝后的结构,而非预训练的权重,这里其实也间接性证明了结构化剪枝是正确的。 应该将模型剪枝研究的重心放到结构遴选,而非预训练权重。

本文实验还发现非结构化修剪方法的预训练权重在大规模数据集上是有用的,但小规模数据集上没有先验优势。这其实是由剪枝方法所确定的,结构化剪枝,重点在于结构;而非结构化剪枝,重点在于权重,其破坏了结构的优雅性,从而使的没有预训练权重的模型更难被优化。

2、研究方法及数据

2.1 剪枝方法说明

结构化剪枝 :目标剪枝模型的体系结构可以由人(即预定义的结构化修剪)或剪枝算法(即自动结构化剪枝)来确定。

当人类预先定义目标体系结构时,一个常见的标准是在每一层中要修剪的通道的比率。例如,我们可能希望在VGG的每层中删除50%的通道。在这种情况下,无论哪些特定的通道被修剪,剪枝后的目标体系结构都保持不变,因为剪枝算法只在局部修剪每一层中最不重要的50%的通道。在实践中,每一层的比例通常是通过实证研究或启发式来选择的。

当目标架构由剪枝算法自动确定时,它通常基于剪枝标准,该准则全局比较跨层的结构(例如,通道)的重要性。

非结构化剪枝 也属于自动方法的类别,其中剪枝权重的位置是由训练过程和剪枝算法决定的。

使用Scratch-E来表示训练相同epoch的修剪模型,

使用Scratch-B表示相同计算预算的训练(在ImageNet上,如果修剪模型节省的FLOPs超过2倍,则将训练epoch的数量增加一倍)

2.2 预定义的结构化修剪

基于l1-范数的滤波器剪枝 是关于卷积网络的滤波器/信道剪枝的最早的工作之一。在每一层中,有一定比例的l1-范数较小的滤波器将被修剪。表1显示了我们的结果。"修剪模型"列显示了预定义目标模型的目标模型列表。我们观察到,在每一行中,经过Scratch训练的模型至少达到了与微调模型相同的精度水平,在大多数情况下,Scratch-b略高于Scratch-e。在ImageNet上,两种Scratch-B模型都明显优于微调模型


ThiNet方法 贪婪地修剪对下一层激活值影响最小的通道。如表2所示,对于VGG-16和ResNet-50,Scratch-e和Scratch-b几乎总是可以比微调模型获得更好的性能,通常有很大的优势。唯一的例外是VGG-Tiny的Scratch-e,模型从VGG-16(流量减少了15×),因此大大减少了Scratch-e的训练预算。该模型的Scratch-B的训练预算也比原来的大模型小7倍,但它可以达到与微调模型相同的精度水平。

基于回归的特征重建方法 通过最小化下一层的特征图重建误差来修剪信道。与ThiNet(Luo et al.,2017)相比,该优化问题是通过套索回归来解决的。结果如表3所示。同样,就大型模型的相对精度下降而言,scratch训练模型比微调模型更好。

2.3 自动结构化剪枝

Network Slimming 在训练过程中,对批处理归一化层(Ioffe&szeged,2015)的通道级比例因子施加l1稀疏性,然后对较低比例因子进行修剪。由于信道缩放因子是跨层比较的,这种方法产生自动发现的目标体系结构。如表4所示,对于所有的网络,从头开始训练的小模型可以达到与微调模型相同的精度。更具体地说,我们发现Scratch-B始终优于(10个实验中的8个),而Scratch-E略差,但仍主要在标准偏差范围内。


Sparse Structure Selection 也使用稀疏缩放因子来修剪结构,可以看作是网络瘦身的泛化。除了渠道之外,可以是ResNet或ResNeXt组中的剩余块(Xie等人,2017)。我们检查了残差块的剪枝,其中ResNet-50被剪枝为ResNet-41、ResNet-32和ResNet-26。表5显示了我们的结果。平均而言,Scratch-E优于修剪模型,并且对于所有模型,Scratch-B优于两者。

2.4 基于非结构化大小的修剪

基于非结构化大小的权值剪枝(Han et al.,2015)也可以被视为自动发现架构,因为在训练之前不能确定精确的零的位置,但我们强调了它与使用另一个分段的结构化剪枝的差异。因为我们评估的所有网络架构都是全卷积的(除了最后一个全连接层),为了简单起见,我们在这里只在卷积层中删除权值。在从头训练修剪后的稀疏模型之前,我们根据该层中保留多少非零权值,重新缩放权重初始化的高斯分布的标准差。这是为了保持反向梯度信号的尺度不变,如(He et al.,2015),然而,在我们的观察中,与未放尺度的同行相比,这并没有带来收益。 "剪枝比"表示在所有卷积权值集中剪枝的参数的百分比。

在较小规模的CIFAR数据集上,当修剪的比例较小(≤80%)时,Scratch-e有时不如微调的结果,但Scratch-b的性能至少与后者相当。然而,我们观察到,在某些情况下,当修剪率很大(95%)时,微调可以从头开始优于训练。在大规模ImageNet数据集上,我们注意到,尽管具有良好的精度水平,但Scratch-b结果大多比微调的结果差。这可能是由于在高度稀疏网络(CIFAR)上进行直接训练的难度增加,或者是数据集本身的规模/复杂性(ImageNet)。另一个可能的原因是,与结构化修剪相比,非结构化修剪后重量分布发生了显著的变化.(详见附录F)。Scratch-训练行为的差异也表明了结构化修剪和非结构化修剪之间的重要差异。

3、网络修剪作为架构搜索

虽然前面的实验已经证明,对于结构化剪枝,剪枝架构中所继承的权值并不比随机的好,但剪枝的体系结构本身就带来了精度/性能的提升。在本节中,我们通过比较通过剪枝获得的模型和一致剪枝的模型来评估自动网络剪枝算法的架构搜索的价值。

Parameter Efficiency of Pruned Architectures. 在图3(左)中,我们比较了通过自动通道剪枝方法(网络修剪(Liu et al.,2017))获得的架构的参数效率,与一种简单的预定义剪枝策略,该策略统一地修剪每一层中相同百分比的通道。所有的架构都是从随机初始化的相同数量的时期中训练出来的。我们可以看到,通过Network slimming获得的架构更有效,因为它们可以使用比统一剪枝架构少5×的参数达到相同的精度。对于基于宽度的非结构化剪枝(Han et al.,2015),我们进行了一个类似的实验,如图3(右)所示。在这里,我们以固定的概率均匀地稀疏所有单独的权值,并且通过这种方法获得的架构比修剪后的架构效率要低得多。

我们还发现,通道/权重修剪的体系结构表现出非常一致的模式(见表7和图4)。这表明,原始的大型模型可能是为任务冗余地设计,该剪枝算法可以帮助我们提高工作效率。这也证实了自动剪枝方法对于在所评估的架构上搜索高效模型的价值。

然而,也存在一些情况,通过剪枝获得的架构并不比均匀修剪的好。我们在图5中展示了这样的结果,其中通过剪枝(蓝色)获得的体系结构并不比统一剪枝体系结构(红色)更有效。这种现象更可能发生在现代架构上,如ResNet和DenseNet。当我们研究这些剪枝架构的稀疏模式时(如附录G中的表18、19和20所示),我们发现它们在各个阶段中表现出接近一致的稀疏模式,这可能是它只能与均匀剪枝相同的原因。相比之下,对于VGG,修剪后的稀疏性模式总是可以优于如图3和图6所示的均匀模式。我们还在附录G的表21中显示了通过网络修剪修剪的VGG(Liuetal.,2017)的稀疏性模式,它们远非均匀。与ResNet和DenseNet相比,我们可以看到VGG的冗余在跨层阶段之间是相当不平衡的。网络剪枝技术可以帮助我们在这种情况下更好地识别冗余


Generalizable Design Principles from Pruned Architectures. 鉴于自动发现的体系结构在VGG网络上往往是参数有效的,人们可能会想知道:我们能从它们中推导出如何设计一个更好的体系结构的通用原则吗?我们做了几个实验来回答这个问题。

对于网络瘦身,我们使用来自剪枝体系结构的每个层阶段(具有相同特征映射大小的层)的平均通道数来构建一组新的体系结构,我们称这种方法为"引导剪枝";对于基于大小的剪枝,我们分析了在修剪后稀疏性模式。并应用它们构造一组新的稀疏模型,我们称之为"引导稀疏化"。结果如图6所示。可以看出,对于网络修剪(图6左)和非结构化剪枝(图6右),体系结构的引导设计(绿色)可以与剪枝体系结构(蓝色)相当。

有趣的是,这些被引导的设计模式有时可以转移到不同的VGG变体和/或数据集。在图6中,我们从CIFAR- 10上的VGG-16中提取了修剪过的架构的模式,并将其应用于在CIFAR-100上设计高效的VGG-19。这些架构集被表示为"转移引导修剪/稀疏化"。我们可以观察到,它们(棕色)有时可能比直接修剪的结构(蓝色)稍差,但明显优于均匀修剪/稀疏化(红色)。在这些情况下,我们也不需要训练一个大型模型来获得一个有效的模型,因为转移的设计模式可以帮助我们直接实现效率。

与传统架构搜索方法的探讨 网络架构搜索技术包括强化学习(Zoph & Le,2017;Baker等人,2017)和进化算法(Xie & Yuille,2017;Liu等人,2018a)。在每次迭代中,对一个随机初始化的网络进行训练和评估来指导搜索,搜索过程通常需要数千次迭代才能找到目标体系结构。相比之下,使用网络剪枝作为架构搜索只需要一次训练,但搜索空间被限制在一个大型网络中所有"子网"的集合中,而传统的方法可以搜索更多的变化,如激活函数或不同的层序。

最近,Gordon等人(2018)使用了类似于网络瘦身(Liu等人,2017)来自动化网络架构的设计;He等人(2018c)使用强化学习对通道进行修剪,并自动压缩体系结构。另一方面,在网络架构搜索文献中,共享/继承训练参数(Pham et al.,2018;Liu et al.,2018b)已经成为减少训练预算的流行方法,但一旦找到目标架构,仍需要从头开始训练,以提高准确性。

4、关于彩票假说的实验

彩票假说(Frankle & Carbin,2019)推测,在大型网络中,一个子网络及其初始化使得训练特别有效,它们一起被称为"winning ticket"。在这个假设中,需要子网络的原始初始化(在大型模型训练之前),才能在隔离训练时实现竞争性能。实验表明,在大网络中,用随机重新初始化的权值来训练子网络比用原始初始化来训练子网络的效果更差。相比之下,我们的工作不需要重用剪枝模型的原始初始化,并表明·随机初始化足以使剪枝模型实现竞争性能·。

结论似乎是矛盾的,但在评估设置中有几个重要的差异:

  • a)我们的主要结论是根据结构化修剪方法得出的,尽管对于小规模问题(CIFAR),它也适用于非结构化修剪;Frankle & Carbin(2019)只评估非结构化剪枝。
  • b)我们评估的网络架构都是原始剪枝方法中使用的相对较大的现代模型,而Frankle & Carbin(2019)中的大多数实验使用小型浅层网络(< 6层)。
  • c)我们使用较大初始学习率 SGD(动量 0.1),广泛应用于之前的图像分类和修剪工作,是CIFAR和ImageNet事实上的默认优化设置;而弗朗克和卡宾(2019)主要使用学习率要低得多。
  • d)我们的实验包括大规模的ImageNet数据集,而弗兰克尔& Carbin(2019)只考虑了MNIST和CIFAR。

在本节中,我们展示了学习速率的差异是导致我们的工作与Frankle & Carbin(2019)之间看似矛盾的行为的原因,在CIFAR上的非结构化剪枝的情况下。对于结构化剪枝,当同时使用大的和小的学习率时,获胜的票证并不会优于随机初始化。

我们通过比较用原始初始化训练的模型("中奖彩票")和从随机重新初始化的权重训练的模型来检验彩票假设。我们实验使用两种选择的初始学习率(0.1和0.01)的逐步衰减计划,使用动量SGD。0.1在我们之前的实验和之前在CIFAR和ImageNet上的大多数工作中使用。 我们研究了迭代剪枝(在每次迭代中修剪20%)和非结构化剪枝的一次性剪枝。我们在图7和表9中显示了非结构化剪枝(Han et al.,2015)的结果,在表8中显示了基于l1-范数的过滤器剪枝(Li et al.,2017)

从图7和表9中,我们可以看到,对于非结构化剪枝,使用原始初始化(Carbin,2019),只提供了比初始学习率为0.01的随机初始化的优势。对于像Li等人(2017)这样的结构化剪枝,从表8可以看出,对于大小的初始学习率,使用原始初始化只能与随机初始化相当。在这两种情况下,我们可以看到,小的学习率比广泛使用的大学习率更低。总之,在我们的评估设置中,获胜者只在非结构化修剪的情况下进行改进,且初始学习率较小,但与广泛使用的大学习率相比,这种小的学习率产生的准确性较低。请注意,弗兰克尔& Carbin(2019)也在他们的第5节中报告说,使用高学习率,无法在ResNet-18/VGG上找到中奖彩票。当学习率较小时,原始初始化很有用的原因,可能是最终训练模型的权重由于参数更新步长较小而与原始初始化相差不远。

5、实验结论

我们的研究结果鼓励对结构化剪枝方法进行更仔细和更公平的基线评估。与传统的网络剪枝过程相比,从头开始训练预定义的目标模型还有以下优点:

  • a)由于模型较小,我们可以使用较少的GPU内存训练模型,可能比训练原始大模型更快;
  • b)不需要实现剪枝准则和程序,有时需要通过层进行微调,或者需要针对不同的网络架构进行定制;
  • c),我们避免调优剪枝过程中涉及的附加超参数。

我们的结果确实支持这样一种观点,即自动结构化剪枝在某些情况下可以找到有效的架构。然而,如果通过从头训练修剪后的模型可以实现剪枝和微调的准确性,那么根据统一剪枝基线(都是从头训练)来评估修剪后的架构也很重要,以证明该方法在识别高效架构方面的价值。如果统一修剪的模型不是更糟,我们也可以跳过管道,从头开始训练它们。

即使修剪和微调在准确性方面不能优于上述基线,在某些情况下,使用这种传统智慧可以比从头开始训练快得多: a)当一个预先训练过的大型模型已经提供,并且很少或没有训练预算;我们还注意到,只有当方法不需要对大型模型训练过程进行修改时,才能使用预先训练过的模型;b)需要获得多个不同大小的模型,或者不知道理想的大小,在这种情况下,人们可以训练一个大的模型,然后按不同的比例进行修剪。

相关推荐
AI完全体8 分钟前
【AI知识点】偏差-方差权衡(Bias-Variance Tradeoff)
人工智能·深度学习·神经网络·机器学习·过拟合·模型复杂度·偏差-方差
sp_fyf_202420 分钟前
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-02
人工智能·神经网络·算法·计算机视觉·语言模型·自然语言处理·数据挖掘
羊小猪~~2 小时前
深度学习项目----用LSTM模型预测股价(包含LSTM网络简介,代码数据均可下载)
pytorch·python·rnn·深度学习·机器学习·数据分析·lstm
Cons.W2 小时前
Codeforces Round 975 (Div. 1) C. Tree Pruning
c语言·开发语言·剪枝
我是哈哈hh2 小时前
专题十_穷举vs暴搜vs深搜vs回溯vs剪枝_二叉树的深度优先搜索_算法专题详细总结
服务器·数据结构·c++·算法·机器学习·深度优先·剪枝
Tisfy2 小时前
LeetCode 2187.完成旅途的最少时间:二分查找
算法·leetcode·二分查找·题解·二分
Mephisto.java2 小时前
【力扣 | SQL题 | 每日四题】力扣2082, 2084, 2072, 2112, 180
sql·算法·leetcode
robin_suli2 小时前
滑动窗口->dd爱框框
算法
丶Darling.2 小时前
LeetCode Hot100 | Day1 | 二叉树:二叉树的直径
数据结构·c++·学习·算法·leetcode·二叉树
labuladuo5203 小时前
Codeforces Round 977 (Div. 2) C2 Adjust The Presentation (Hard Version)(思维,set)
数据结构·c++·算法