Auto Byte

专注未来出行及智能汽车科技

微信扫一扫获取更多资讯

Science AI

关注人工智能与其他前沿技术、基础学科的交叉研究与融合发展

微信扫一扫获取更多资讯

推翻剪枝固有观点?清华、伯克利提出NN过参数化真的不重要

刚刚,reddit 上出现了一篇关于论文《Rethinking the Value of Network Pruning》的讨论,该论文的观点似乎与近期神经网络剪枝方面论文的结论相矛盾。这非常令人惊讶,它甚至会改变我们对神经网络的固有观点,即神经网络的过参数化对模型训练与拟合是有益的。


针对该论文,一些网友提出了自己的看法。

@jiecaoyu:

这个结果倒蛮有趣。它有助于为网络压缩找到一些新的东西。然而,目前我认为它不会改变工作流程。因为基本上,重新训练仍是必需的,而对训练好的模型进行剪枝可以减少再次训练的时间。

 @rantana:

对于任何使用该论文「PREDEFINED TARGET ARCHITECTURES」部分所述方法的工作流程来说,训练大型模型实在没有必要,因为目标模型的总训练时间更少,工作流程总体来说也更简单。在「Generalizable Design Principles from Pruned Architectures」中,作者构建了针对预定义目标架构和非结构化剪枝方法可以从头开始训练的架构。因此,在这两种情况下,大型的架构都没有什么意义(对预定义的情况来说尤其如此)。

也有网友指出了该论文存在的一些问题:

@M4mb0:

我读了摘要,感觉作者似乎忽略了很重要的一点:在没做出模型之前,我们并不知道究竟多大的网络比较合适,因此一种简单的做法就是先训练一个过大的网络,再通过 dropout、剪枝等操作对其进行调整。

在该论文 ICLR 2019 的双盲审评论区,论文「ThiNet」的一作 Jian-Hao Luo 和论文「通道剪枝」的一作 Yihui He 提出了修改意见。Jian-Hao Luo 分别对表 2 中 VGG-16 和 ResNet-50 的结果提出了质疑,但同时也认为这是一篇「Interesting paper」,研究社区应该对「剪枝」方法和「从零开始训练」方法进行更深入的思考。Yihui He 要求作者按照他们论文《Channel Pruning for Accelerating Very Deep Neural Networks》的表 1、表 2 和表 4 中关于 VGG-16 的准确率结果进行修改。作者也向他们作出了积极的回应。

论文 ICLR 2019 地址:https://openreview.net/forum?id=rJlnB3C5Ym

目前该论文提交到了 ICLR 2019 会议,正处于双盲审阶段,但从 arXiv 上我们可以发现该论文是由清华与加州大学伯克利分校的研究者合作的。机器之心对该论文的核心内容进行了介绍,欢迎大家留言探讨。

1 引言

参数化是深度神经网络的公认特性(Denton et al., 2014; Ba & Caruana, 2014),该特性导致高计算成本和高内存占用。作为一种补救措施,神经网络剪枝(LeCun et al., 1990; Hassibi & Stork, 1993; Han et al., 2015; Molchanov et al., 2016; Li et al., 2017)可以在计算成本有限的情况下,提高深度网络的效率。网络剪枝的典型过程包括三步:1)训练一个大的过参数化模型,2)根据某个标准修剪训练好的模型,3)微调修剪后的模型,以恢复损失的性能。

图 1:典型的三步网络剪枝步骤。

一般来说,剪枝过程背后有两个共识:一,大家都认为首先训练一个大的过参数化模型很重要(Luo et al., 2017),因为这样会提供高性能模型(更强的表征和优化能力),而人们可以安全地删除冗余参数而不会对准确率造成显著损伤。因此,这种观点很普遍,人们认为该方法比从头开始直接训练更小的网络(一种常用的基线方法)更优秀。二,剪枝后的架构和相关的权重被认为是获得最终高效模型的关键。因此大多现有的剪枝技术选择微调剪枝后的模型,而不是从头开始训练它。剪枝后保留下来的权重通常被视为至关重要,因为准确地选择一组重要的权重并不容易。

在本研究中,我们认为上面提到的两种观点都未必正确。针对多个数据集及多个网络架构,我们对当前最优剪枝算法进行了大量实证评估,得出了两个令人惊讶的观察结果。首先,对于具备预定义目标网络架构的剪枝算法(图 2),从随机初始化直接训练小目标模型能实现与使用经典三步流程相同的性能。在这种情况下,我们不需要从训练大规模模型开始,而是可以直接从头训练剪枝后模型。其次,对于没有预定义目标网络的剪枝算法,从头开始训练剪枝后的模型也可以实现与微调相当甚至更好的性能。

这一观察结果表明,对于这些剪枝算法而言,重要的是获得的网络架构而不是保留的权重,尽管这些目标架构还是需要训练大模型才能获得。我们的结果和文献中结果的矛盾之处在于超参数的选择、数据增强策略和评估基线模型的计算力限制。

图 2:预定义和未预定义(自动发现)的目标架构之间的区别。稀疏度 x 是用户指定的,a、b、c、d 由剪枝算法决定。

该论文的结果表明,我们需要重新审视现有的网络剪枝算法。第一阶段的过参数化似乎不像之前想象得那么有效。此外,继承大模型的权重不一定是最优选择,而且可能导致剪枝后的模型陷入局部极小值,即使这些权重剪枝标准来看是「重要的」。该论文的结果显示自动剪枝算法的价值可能在于识别高效结构、执行隐性架构搜索,而不是选择「重要的」权重

论文:Rethinking the Value of Network Pruning

论文链接:https://arxiv.org/abs/1810.05270

源代码链接: https://github.com/Eric-mingjie/rethinking-network-pruning

摘要神经网络剪枝是降低深度模型计算成本的常用方式。典型的剪枝算法分为三个步骤:训练(大型模型)、剪枝和微调。在剪枝期间,我们需要根据某个标准修剪掉冗余的权重,并保留重要的权重以保证模型的准确率。在本文中,我们有许多与以往的研究冲突的惊人发现。我们测试了 6 个当前最优剪枝算法,微调剪枝模型的性能只相当于用随机初始化权重训练剪枝模型,有时甚至还不如后者。对于采用预定义目标网络架构的剪枝算法,可以不用典型三步流程,直接从头开始训练目标网络。我们在多个网络架构、数据集和任务上对大量剪枝算法的观察结果是一致的。结果表明:1)训练过参数化的大型模型不一定会得到高效的最终模型;2)学习大型模型的「重要」权重对于较小的剪枝模型未必有用;3)最终模型的高效率不是由一组继承的「重要」权重决定的,而是剪枝架构本身带来的,这表明一些剪枝算法的作用可以被视为执行网络架构搜索。

4 实验

在我们的实验中,我们使用 Scratch-E 来表示用相同的 epoch 数训练小型剪枝模型,使用 Scratch-B 来表示用相同的计算预算来训练(例如,在 ImageNet 上,如果剪枝模型节省了超过两倍的 FLOPs,我们只需要在训练 Scratch-B 的时候加倍 epoch 数,这相当于比大型模型训练有更少的计算预算)。

4.1 预定义的目标架构

表 1:基于通道剪枝(Li et al., 2017)的 L1 范数准确率)结果。「Pruned Model」指大模型修剪后的模型。模型配置和「Pruned Model」均来自原论文。

表 2:ThiNet(Luo et al., 2017)的(准确率)结果。「VGG-GAP」和「ResNet50-30%」这些模型是按照 Luo 等人 (2017) 论文中定义的配置环境修剪后的模型。为调节我们的实现所使用框架与原论文框架不同所造成的影响,我们对比了未修剪大型模型的准确率下降程度。例如,对于修剪后的模型 VGG-Conv,−1.23 是相对于左侧的 71.03 而言的,71.03 是原论文中未修剪模型 VGG-16 的准确率;−2.75 是相对于左侧的 71.51 而言的,71.51 是我们的实现中 VGG-16 的准确率

4.2 自动发现的目标架构

表 4:Network Slimming (Liu et al., 2017) 的(准确率)结果。「Prune Ratio」表示整个网络中被剪掉的通道的比例。每个模型的 Prune Ratio 都和原论文一致。

4.3 向目标检测任务的迁移学习

表 7:剪枝在检测任务上的(mAP)结果。剪枝后的模型来自于 Li et al. (2017)。Prune-C 指在分类预训练权重剪枝,Prune-D 指在迁移至检测任务之后的权重上进行剪枝。Scratch-E/B 表示从头开始在分类任务上预训练剪枝后的模型,然后迁移至检测任务。

5 用网络剪枝进行架构搜索

图 3:不同方法的剪枝后架构,所有模型都是从头训练的,平均运行 5 次。自动剪枝方法(左:Network Slimming (Liu et al., 2017),右:非结构化剪枝 (Han et al., 2015))获得的架构比在整个网络中均匀修剪通道或稀疏权重的方法具备更高的参数效率。

剪枝后架构的设计原则

如果自动发现的架构参数效率更高,研究者可能会想:可以从中得出如何设计更好架构的普遍原则吗?为解答该问题,我们分别对 Network Slimming 和非结构化剪枝进行了两次实验,使用的数据集分别是 VGG-19 和 CIFAR-100。

对于 Network Slimming,我们使用剪枝后架构每个层阶段(具备相同特征图大小的层)的平均通道数来构建新的架构集合,我们将该方法称为「Guided Pruning」;对于非结构化剪枝,我们分析了剪枝后架构的稀疏度模式(图 4),并用它们构建新的稀疏模型集合,我们将该方法称为「Guided Sparsifying」,结果见图 5。可以看到对于 Network Slimming(左)和非结构化剪枝(右),指导设计出的架构(绿色)性能与剪枝后架构(蓝色)不相上下。

图 4:VGG-16 的非结构化剪枝模型中特定层阶段的 3×3 卷积核的平均稀疏度模式。颜色越深表示权重被保留的概率越高。

有趣的是,这些指导设计模式可迁移至不同数据集上的不同架构。我们把在 CIFAR-10 上训练的 VGG-16 剪枝后架构的模式提取出来,用于在 CIFAR-100 上设计高效的 VGG-19。这些架构集合被标注为「Transferred Guided Pruning/Sparsifying」。从下图中我们可以看这些架构(红褐色)的性能比直接在 VGG-19 和 CIFAR-100 上剪枝的架构(蓝色)稍差,比均匀修剪/稀疏化(红色)的架构性能好得多。在这种情况下,研究者不必在目标数据集上训练大模型来找到高效模型,因为可迁移的设计模式能够帮助我们直接获得高效架构。

图 5:不同方法的剪枝后架构,所有模型都是从头训练的,平均运行 5 次。

6 讨论及结论

我们建议未来的剪枝方法基于强大的基线模型进行评估,尤其是在目标剪枝架构已经被预定义的情况下。除了高准确率,从头训练预定义目标模型还具备以下优势:

  • 由于模型较小,我们可以使用更少的 GPU 内存来训练,可能比训练原始的大型模型更快。

  • 剪枝标准与步骤有时需要逐层微调 (Luo et al., 2017),或针对不同的网络架构进行调整,现在这些都不必要。

  • 我们避免了调整剪枝步骤中涉及的额外超参数

我们的结果支持使用剪枝方法寻找高效架构或稀疏度模式,可以通过自动剪枝方法来进行。此外,在有些案例中,传统的剪枝方法仍然比从头开始训练模型快得多,比如以下两种情况:

  • 给定预训练的大模型,且几乎没有训练预算的情况;

  • 需要获取不同大小的多个模型,在这种情况下研究者可以训练一个大模型,然后按不同比例进行修剪。

总之,我们的实验展示了从头训练小型剪枝后模型几乎总能得到与按照经典「训练、剪枝、微调」步骤训练出的模型相当或更高的准确率。这改变了我们对过参数化必要性、继承权重有效性的理解。我们进一步展示了自动剪枝算法的价值,它可以用于寻找高效架构和提供架构设计原则。

参考内容:https://www.reddit.com/r/MachineLearning/comments/9q5t92/r_recent_rethinking_the_value_of_network_pruning/

理论剪枝清华大学伯克利ICLR 2019模型压缩
5
相关数据
范数技术

范数(norm),是具有“长度”概念的函数。在线性代数、泛函分析及相关的数学领域,是一个函数,其为向量空间内的所有向量赋予非零的正长度或大小。半范数反而可以为非零的向量赋予零长度。

权重技术

线性模型中特征的系数,或深度网络中的边。训练线性模型的目标是确定每个特征的理想权重。如果权重为 0,则相应的特征对模型来说没有任何贡献。

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

剪枝技术

剪枝顾名思义,就是删去一些不重要的节点,来减小计算或搜索的复杂度。剪枝在很多算法中都有很好的应用,如:决策树,神经网络,搜索算法,数据库的设计等。在决策树和神经网络中,剪枝可以有效缓解过拟合问题并减小计算复杂度;在搜索算法中,可以减小搜索范围,提高搜索效率。

超参数技术

在机器学习中,超参数是在学习过程开始之前设置其值的参数。 相反,其他参数的值是通过训练得出的。 不同的模型训练算法需要不同的超参数,一些简单的算法(如普通最小二乘回归)不需要。 给定这些超参数,训练算法从数据中学习参数。相同种类的机器学习模型可能需要不同的超参数来适应不同的数据模式,并且必须对其进行调整以便模型能够最优地解决机器学习问题。 在实际应用中一般需要对超参数进行优化,以找到一个超参数元组(tuple),由这些超参数元组形成一个最优化模型,该模型可以将在给定的独立数据上预定义的损失函数最小化。

神经网络技术

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

准确率技术

分类模型的正确预测所占的比例。在多类别分类中,准确率的定义为:正确的预测数/样本总数。 在二元分类中,准确率的定义为:(真正例数+真负例数)/样本总数

迁移学习技术

迁移学习是一种机器学习方法,就是把为任务 A 开发的模型作为初始点,重新使用在为任务 B 开发模型的过程中。迁移学习是通过从已学习的相关任务中转移知识来改进学习的新任务,虽然大多数机器学习算法都是为了解决单个任务而设计的,但是促进迁移学习的算法的开发是机器学习社区持续关注的话题。 迁移学习对人类来说很常见,例如,我们可能会发现学习识别苹果可能有助于识别梨,或者学习弹奏电子琴可能有助于学习钢琴。

图网技术

ImageNet 是一个计算机视觉系统识别项目, 是目前世界上图像识别最大的数据库。

深度神经网络技术

深度神经网络(DNN)是深度学习的一种框架,它是一种具备至少一个隐层的神经网络。与浅层神经网络类似,深度神经网络也能够为复杂非线性系统提供建模,但多出的层次为模型提供了更高的抽象层次,因而提高了模型的能力。

推荐文章
暂无评论
暂无评论~