暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

神经网络剪枝方法概述

上海市计算机软件评测重点实验室 2020-10-14
1161

随着人工智能的飞速发展,现阶段AI模型的架构愈发复杂,虽然效果更佳,但是于此同时也带来了一些“麻烦”:例如模型体积过大,推断时间过长等,模型变得足够“精准”但不够“轻快”。这些弊端让AI模型在移动端的部署变得困难,以手机为例,模型占用的内存过大,计算速度过慢无法给用户带来良好的体验。而模型压缩就是让模型“瘦身”,通过剪枝、权重因子分解、知识蒸馏、量化等策略提高AI模型的速度并减小体积。剪枝是模型压缩领域的一种常见方法,像给树木修剪枝叶那样修剪神经网络,让它变得“小而快”,有效提高AI模型的实用性,经过合适剪枝的模型在AI模型性能测试中有更好的效果。本文介绍神经网络剪枝的概念与常见方法,并着重介绍ICLR2019的最佳论文《The Lottery Ticket Hypothesis: Finding Sparse, Trainable Neural Networks》(彩票假设)。


新的挑战


在现阶段,神经网络不能一味的“求准”,研究人员认识到虽然体量庞大的神经网络可以在各种任务中获得令人惊叹的效果,但是当真正落地时却面临着很多挑战,例如:

  1. 模型参数冗余,推断与训练时间长,既不利于实时计算,又抑制了深度学习开发者的生产效率。

  2. 模型体量大,造成计算资源浪费,能耗升高,每次执行推断都需要很高的成本,加大了深度学习之间的“贫富差距”,同时造成了各种大公司之间的算力“军备竞赛”,提升了行业壁垒。

  3. 由于体量大,不易在移动端部署,很难在本地运行,应用场景受限,如果通过请求服务器的方式又涉及安全性、隐私性问题。

这些挑战让学术界和工业界都开始关注一个问题:如何将模型变得更小、推理速度更快,同时又不损失太多的精度?而神经网络剪枝就是其中的典型技术。


什么是剪枝


剪枝主要解决的问题是提高推断效率,目的是在不损失过多精度的情况下,从冗余的模型中去除一些不重要的参数或结构。具体方法是对已经训练好的模型,找到一种有效的手段评价模型结构或是参数的重要性,将不重要的模型元素裁剪(例如:减少卷积核个数,缩减“卷积-批归一化-激活”(CBR)重复次数等)、将不重要的参数设为0。根据剪枝的方式不同,模型剪枝主要分为结构化剪枝与非结构化剪枝。

神经网络剪枝属于模型压缩领域的一种常见方法,其应用场景主要是模型部署阶段,例如当训练好的模型需要在手机、智能家居等移动设备上部署的时候,常常需要通过剪枝来缩减模型的大小,从而让模型具有更快的推断速度、占用更小的内存。

目前我国正在研制神经网络模型压缩的相关国家标准《信息技术 神经网络表示与模型压缩》,旨在指导神经网络模型的研制、开发、测试评估、应用。神经网络模型压缩方法的性能关系到模型的推断时间、运行占用的系统资源,是人工智能模型评估的重要指标。


结构化剪枝


结构化剪枝主要指对模型结构进行裁剪,对于不重要的层或是卷积核,直接将整层舍弃(如图1),最终得到的网络结构与原始结构不同,主要思想是找到哪些层对网络层的输出影响不显著,其中《Channel Pruning for Accelerating Very Deep Neural Networks》[1](ICLR2017) 采用Lasso regression。《NISP: Pruning Networks using Neuron Importance Score Propagation》[2](CVPR2018))通过最小化网络倒数第二层的重建误差,并将反向传播的误差累积考虑在内,来决定前面哪些卷积核需要裁剪。


图1 结构化剪枝示例


这种方式的优点是:首先,可以得到一个新的轻量级网络结构,并大幅度减少参数量;其次,对现有生态可以较好的集成和支持,因为修剪出的参数并不稀疏,所以无需在参数储存、推理上再做过多的处理。

但是这种方式损失精度一般较大,无法超过原模型,并且参数与结构依然存在冗余。


非结构化剪枝


非结构化剪枝指在不对模型进行修改的基础上,通过某些标准将不重要的参数设置为0,将原有稠密的参数转化成稀疏的,可以降低推理时计算量(FLOPs)(如图2)。现阶段学术界更多的研究方向在非结构化剪枝或是两种方式结合的剪枝方式上,这是因为:非结构化剪枝可以保留模型结构,而结构决定了模型效果的上限,精度更高,甚至在一些剪枝策略方式下,可以小幅度提高模型效果。


图2 非结构化剪枝示例


但是,非结构化剪枝同样有一些弊端:首先,稀疏参数的数量与稠密参数相同,利用传统的存储方式并不能减少模型大小,只有通过特定的稀疏矩阵的存储方式才可以减小模型体积;其次,稀疏的参数在推理过程中也需要配合量化等方式进行优化才能发挥更好的效果。


彩票假设


彩票假设[3]是ICLR2019的最佳论文,来自MIT CSAIL团队。论文中提出:随机初始化的密集神经网络包含一个初始化的子网,当经过隔离训练(trained in isolation)时,它可以匹配训练后最多相同迭代次数的原始网络的测试精度。我们可以将一个复杂网络的所有参数当做奖池,上述一组子参数对应的子网络就是中奖彩票,我们所要做的就是找到那些“中奖的彩票”,值得庆幸的是,我们现在手里有所有的彩票,中奖的彩票一定就在其中。

那么如何有效的找到这些“彩票”呢?文中提出了两种方式:one-shot和iterative方法。

其中one-shot方式为:

  1. 随机初始化一个复杂神经网络

  2. 训练这个网络j次直到收敛

  3. 根据设定的规则剪掉部分权重参数

  4. 将剩下的子网络用第1步权重进行初始化

  5. 训练子网络,比较准确率

而iterative方式则是重复3~5步执行n次,若最终剪掉p%的权重,则每次剪掉p^(1/n)%的权重。

作者分别在针对 MNIST 的全连接神经网络和针对 CIFAR10 的卷积神经网络上做了大量实验。以 MNIST 实验为例:

从实验结果(如图3)可以看出,在用文中方式进行裁剪时,不同剪枝率的子网络的性能不一样,令Pm为剩余参数与原始参数量之比,Pm>21.2% 时,Pm 越小,即剪枝的参数越多,准确率越高,当 Pm<21.1% 时,Pm 越小,准确率会下降。从图4可以看出,中奖彩票要比原始网络收敛的更快,同时具有更高的准确率和泛化能力。


图3 MNIST实验结果


图4 MNIST训练速度与loss收敛情况


彩票假设对模型剪枝问题造成了深远的影响,一方面说明合理的剪枝策略不仅不会对精度造成损失,还会提升精度,给学者们足够的信心;另一方面,很多知名研究机构在此基础上进一步研究,做出了很多惊喜成果(如Uber AI Lab根据彩票假设设计出超级掩膜[4]、Facebook田渊栋团队在强化学习中使用[5]、复旦邱锡鹏团队在多任务学习[6]中使用等)。

很多学者认为剪枝的本质是对于网络结构的搜索,是对于特定参数网络的结构优化,如果以这种思路去思考,很多剪枝方法则都可以表示为一些优化问题,这样,彩票假设的思路也就顺理成章了。


缺点与展望


现在的剪枝方法蓬勃发展,已经涌现出很多新的思路,例如通过低秩化来稀疏参数,将稀疏参数重新变成稠密等。但是,这些剪枝策略还是都建立在已经训练好的网络模型上,如果能创建出一种不依赖于参数,只依赖于模型结构的剪枝策略,就可以在训练前作出剪枝,这样可以大幅度缩短神经网络训练周期。最后,希望大家可以一起探讨这些悬而未决的问题,并贡献出更好的解决方案。


参考文献

[1] Yihui, H.; Xiangyu, Z.; Jian, S. 2017. Channel Pruning for Accelerating Very Deep Neural Networks. ICLR2017 workshop.

[2] Ruichi, Y.; Ang, L. et. al. 2018. NISP: Pruning Networks using Neuron Importance Score Propagation. The IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 2018, pp.

[3] Frankle, J.; Dziugaite, G. K.; Roy, D. M.; Carbin, M. 2019. The lottery ticket hypothesis: Finding sparse, trainable neural networks. ICLR2019.

[4] Hattie, Z.; Janice, L.; Rosanne, L.; Jason, Y. 2019. Deconstructing Lottery Tickets: Zeros, Signs, and the Supermask. https://arxiv.org/abs/1905.01067

[5] Ari, S.; Haonan, Y.; Michela, P.; Yuandong, T. 2019. One ticket to win them all: generalizing lottery ticket initializations across datasets and optimizers. https://arxiv.org/abs/1906.02773

[6] [4] Tian S. et. al. 2019. Learning Sparse Sharing Architectures for Multiple Tasks. https://arxiv.org/abs/1911.05034

觉得内容还不错的话,给我点个“在看”呗

我知道你在看

上海市计算机软件测评重点实验室(简称SSTL),由上海市科委批准成立于1997年,是全国最早开展信息系统质量与安全测评的第三方专业机构之一,隶属于上海计算机软件技术开发中心。

文章转载自上海市计算机软件评测重点实验室,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论