深度学习网络模型压缩剪枝详细分析

深度学习⽹络模型压缩剪枝详细分析
深度学习⽹络模型压缩剪枝详细分析
旋转式清堵机看看⼀.简介
1. 背景
深度学习让计算机视觉任务的性能到达了⼀个前所未有的⾼度。但,复杂模型的同时,带来了⾼额的存储空间、计算资源消耗,使其很难落实到各个硬件平台。
为了解决这些问题,压缩模型以最⼤限度地减⼩模型对于计算空间和时间的消耗。
2. 理论基础
必要性:⽬前主流的⽹络,如VGG16,参数量1亿3千多万,占⽤500多MB空间,需要进⾏300多亿次浮点运算才能完成⼀次图像识别任务。
可⾏性:在深度卷积⽹络中,存在着⼤量冗余地节点,仅仅只有少部分(5-10%)权值参与着主要的计算,也就是说,仅仅训练⼩部分的权值参数就可以达到和原来⽹络相近的性能。
3. ⽬前⽅法
从数据,模型和硬件多维度的层⾯来分析,压缩和加速模型的⽅法
母线框1、压缩已有的⽹络,包含:张量分解,模型剪枝,模型量化;(针对既有模型)
2、构建新的⼩型⽹络,包含:知识蒸馏,紧凑⽹络设计;(针对新模型)
⼆、模型压缩剪枝的发展
深度神经⽹络(DNN)有个很⼤的缺点就是计算量太⼤。这很⼤程度上阻碍了基于深度学习⽅法的产品化,尤其是在⼀些边缘设备上。因为边缘设备⼤多不是为计算密集任务设计的,如果简单部署上去则功耗、时延等都会成为问题。即使是在服务端,更多的计算也会直接导致成本的增加。⼈们正在从各个⾓度试图克服这个问题,如这⼏年如⽕如荼的各处神经⽹络芯⽚,其思路是对于给定的计算任务⽤专⽤硬件加速。⽽另⼀个思路是考虑模型中的计算是不是都是必要?如果不是的话,有没有可能简化模型来减少计算量和存储占⽤。本⽂主要谈的就是这⼀类⽅法,称为模型压缩(Model compression)。它是软件⽅法,应⽤成本低,⽽且与硬件加速⽅法并不⽭盾,可以相互加成。细分来说,模型压缩⼜可分很多⽅法,如剪枝(Pruning)、量化(Quantization)、低秩分解(Low-rank factorization)、知识蒸馏(Knowledge distillation)。每⼀⼦类⽅法展开都可以是很⼤的话题,所以
我们⼀个个来,今天主要只限于pruning⽅法。它基于⼀个假设,或者说⽬前的共识。就是DNN的过参数化(Over-parameterization)。我们知道,深度神经⽹络与其它很多机器学习模型⼀样,可分为训练和推理两个阶段。训练阶段是根据数据学习模型中的参数(对神经⽹络来说主要是⽹络中的权重);推理阶段中将新数据喂进模型,经过计算得出结果。⽽过参数化是指训练阶段我们需要⼤量的参数来捕捉数据中的微⼩信息,⽽⼀旦训练完成到了推理阶段,我们并不需要这么多的参数。这样的假设就⽀持我们可以在部署前对模型进⾏简化。模型压缩中的pruning和quantization两类⽅法正是基于这样的前提。模型简化后有很多好处,包括但不限于:1)最直接的好处就是计算量的减⼩,从⽽使计算时间更少,功耗更⼩。2)Memory footprint变⼩,可以放到更低端的设备上跑。还有个额外的性能好处是本来需要既慢⼜耗电的DRAM参与,现在有可能放在SRAM就搞定。3)Size更⼩的包有利于应⽤发布和更新。如⼀些⼿机市场会对应⽤的⼤⼩有限制,另外也有利于车OTA升级。有了『理论』上的启发后,下⼀个问题就是how。显然不能拿了模型瞎剪,因为这样精度可以会下降得很厉害以⾄⽆法接受。当然,也有情况会在pruning后精度提⾼的,这说明原模型过似合(overfit)了,pruning起到了regularization的作⽤。就⼀般情况下讲,核⼼问题是成如何有效地裁剪模型且最⼩化精度的损失。其实这不是⼀个新的问题,对于神经⽹络的pruning在上世纪80年代末,90年代初左右就有研究了。如论⽂《Comparing Biases for Minimal Network Construction with Back-Propagation》提出了magnitude-based的pruning⽅法,即对⽹络中每个hidden unit施加与其绝对值相关的weight decay来最⼩化hidden unit数量。⼜如上世纪90年代初当时经典的论⽂《Optimal brain damage》与《
Second order derivatives for network pruning: Optimal Brain Surgeon》分别提出OBD和OBS⽅法,它们基于损失函数相对于权重的⼆阶导数(对权重向量来说即Hessian矩阵)来衡量⽹络中权重的重要程度,然后对其进⾏裁剪。但因为当时的⼤环境下,神经⽹络(那时没有deep neural network,只有neural network,或为区分称为shadow neural network)并不是机器学习的⼀个特别主流的分⽀,因此之后的很长⼀段时间也没有⼤量开枝散叶,但他们对问题的梳理定义和解决问题思路对⼆⼗多年后的很多⼯作产⽣了深远的影响。到了2012年,我们都知道深度学习⼀战成名,⼤放异彩。之后刷榜之风兴起且愈演愈烈,⼤家的注意⼒就是提⾼精度。于是⼤趋势就是不断地加深加重⽹络以提⾼精度,ImageNet准确率每年都创新⾼。2015-16年期间,Hang Song等⼈发表了⼀系列对深度神经⽹络进⾏模型压缩的⼯作。如《Learning both weights and connections for efficient neural networks》,《EIE: Efficient inference engine on compressed deep neural network》。其中《Deep Compression: Compressing Deep Neural Networks with Pruning, Trained Quantization and Huffman Coding》获得了ICLR 2016的best paper。其中对当时经典⽹络AlexNet和VGG进⾏了压缩。结合pruning,quantization和huffman encoding等多种⽅法,将⽹络size压缩了⼏⼗倍,性能获得成倍的提升。其中对于pruning带来的精度损失,使⽤了iterative pruning⽅法进⾏补偿,可以让精度⼏乎没有损失。这让⼤家意识到DNN参数冗余程度如此之⼤,可榨油⽔如此之多。之后这⼏年,模型压缩领域变得越丰富,越来越多的相关⼯作衍⽣出各种玩法。从network pruning的粒度来说,可以分为结构化剪枝(Structured pruning)和⾮结构化剪枝(Unstructured pruning)两类。早期的⼀些⽅法是基于⾮
结构化的,它裁剪的粒度为单个神经元。如果对kernel进⾏⾮结构化剪枝,则得到的kernel是稀疏的,即中间有很多元素为0的矩阵。除⾮下层的硬件和计算库对其有⽐较好的⽀持,pruning后版本很难获得实质的性能提升。稀疏矩阵⽆法利⽤现有成熟的BLAS库获得额外性能收益。因此,这⼏年的研究很多是集中在structured pruning上。Structured pruning⼜可进⼀步细分:如可以是channel-wise的,也可以是filter-wise的,还可以是在shape-wise的。
三、压缩剪枝技术详细分析
Network pruning的基本思想就是剪裁最不重要的部分。形式化地,可以表达成:
或者将参数裁剪写成约束优化形式:由于L0范数的存在,让该问题成为⼀个组合优化问题。由于是NP-hard问题,显然不能硬来。
分类
其中⼀个最简单的思路就是贪⼼法,或称为saliency-based⽅法。即按重要性排序,然后将不重要的部分去除。然⽽问题来了,就是重要性如何衡量。
思路⼀
⼀个最简单的启发就是按参数(或特征输出)绝对值⼤⼩来评估重要性,然后⽤贪⼼法将那部分⼲掉,这类称为magnitude-based weight pruning。如2016年经典论⽂《Pruning Filters for Efficient ConvNets》中把权重的绝对值作为衡量其重要性的⼿段。但训练出来的权重如果不稀疏不利于pruning怎么办,常⽤的办法是在训练时loss中加regularizer,尤其是L1 regularizer,从⽽使得权重稀疏化。对于structured pruning来说,我们想获得结构化的稀疏权重,因此常⽤group LASSO来得到结构化的稀疏权重,如2015-16年的论⽂《Learning Structured Sparsity in Deep Neural Networks》和《Sparse Convolutional Neural Networks》等。2017年论⽂《Learning Efficient Convolutional Networks Through Network Slimming》通过⼀种巧妙的⽅法,基于BN(Batch Normalization)层的⼴泛使⽤,在BN层加⼊channel-wise scaling factor 并对之加L1 regularizer使之稀疏,然后裁剪scaling factor值⼩的部分对应权重。另外,重要性评估也可以针对activation(激活值,即激活函数的输出),当然就算是针对activation最后也会体现在权重的裁剪上。⼀般来说,像Relu这样的激活函数会倾向产⽣稀疏的activation;⽽权重相对⽽⾔不太容易是稀疏的(当前,如前所说,我们可以通过regularizer这种外⼒使它变得稀疏)。从这种意义上说,activation更适合pruning。如2016年论⽂《Network Trimming: A Data-Driven Neuron Pruning Approach towards Efficient Deep Architectures》中提出采⽤Average Percentage of Zeros,即APoZ来衡量activation的重要性。它定义为activation中为0的⽐例。
思路⼆
上⾯⽅法有个假设就是参数绝对值越⼩,其对最终结果影响越⼩。我们称之为’‘smaller-norm-less-important’'准则。然⽽这个假设未必成⽴(如2018年的论⽂《Rethinking the Smaller-Norm-Less-Informative Assumption in Channel Pruning of Convolution Layers》有对其的讨论)。第⼆种思路就是考虑参数裁剪对loss的影响。其实前⾯提到的始祖级的OBD和OBS就是属于此类。但这两种⽅法需要计算Hessian矩阵或其近似⽐较费时。近年来有⼀些基于该思路的⽅法被研究和提出。如2016年论⽂《Pruning Convolutional Neural Networks for Resource Efficient Transfer Learning》也是基于Taylor expansion,但采⽤的是⽬标函数相对于activation的展开式中⼀阶项的绝对值作为pruning的criteria。这样就避免了⼆阶项(即Hessian矩阵)的计算。2018年论⽂《SNIP: Single-shot Network Pruning based on Connection Sensitivity》将归⼀化的⽬标函数相对于参数的导数绝对值作为重要性的衡量指标。
思路三
第三个思路是考虑对特征输出的可重建性的影响,即最⼩化裁剪后⽹络对于特征输出的重建误差。它的intuition是如果对当前层进⾏裁剪,然后如果它对后⾯输出还没啥影响,那说明裁掉的是不太重要的信息。典型的如2017年论⽂《ThiNet: A Filter Level Pruning Method for Deep Neural Network Compression》和《Channel pruning for accelerating very deep neural networks》都是通过最⼩化特征重建误差(Feature reconstruction error)来确定哪些channel需要裁剪。前者采⽤贪⼼法,后者⽤
的LASSO regression。2017年论⽂《NISP: Pruning Networks using Neuron Importance Score Propagation》提出只考虑后⾯⼀两层啥的不够,于是提出NISP(Neuron importance score propagation)算法通过最⼩化分类⽹络倒数第⼆层的重建误差,并将重要性信息反向传播到前⾯以决定哪些channel需要裁剪。2018年论⽂《Discrimination-aware Channel Pruning for Deep Neural Networks》提出⼀种⽐较有意思的变体。它提出DCP(Discrimination-aware channel pruning)⽅法⼀⽅⾯在中间层添加额外的discrimination-aware loss(⽤以强化中间层的判别能⼒),另⼀⽅⾯也考虑特征重建误差的loss,综合两⽅⾯loss对于参数的梯度信息,决定哪些为需要被裁剪的channel。
思路四
另外还有基于其它的准则对权重进⾏重要性排序。如2018年的论⽂《Filter Pruning via Geometric Median for Deep Convolutional Neural Networks Acceleration》讨论了magnitude-based⽅法的前提与局限(即需要其范数值⽅差⼤,且最⼩值接近于0)。它提出了
FPGM(Filter Pruning via Geometric Median)⽅法。其基本思想是基于geometric median来去除冗余的参数。我们知道贪⼼算法的缺点就是只能到局部最优解,因为它忽略了参数间的相互关系。那⾃然肯定会有⼀些⽅法会尝试考虑参数间的相互关系,试图导全局更优解。⽅法⼀
离散空间下的搜索:如2015年的论⽂《Structured Pruning of Deep Convolutional Neural Networks》
基于genetic algorithm与particle filter 来进⾏⽹络的pruning。2017年的论⽂《N2N Learning: Network to Network Compression via Policy Gradient Reinforcement Learning》尝试将⽹络的压缩分成两个阶段-layer removal和layer shrinkage,并利⽤强化学习(Reinforcement learning)分别得到两个阶段的策略。
消谐柜⽅法⼆
规划问题:如⽐较新的2019年论⽂《Collaborative Channel Pruning for Deep Networks》提出CCP(Collaborative channel pruning)⽅法,它考虑了channel间的依赖关系,将channel选取问题形式化为约束下的⼆次规划问题,再⽤SQP(Sequential quadratic programming)求解。
⽅法三
Bayesian⽅法:如2017年论⽂《Variational Dropout Sparsifies Deep Neural Networks》提出了sparse variational droput。它对variational droput进⾏扩展使之可以对dropout rate进⾏调节,最终得到稀疏解从⽽起到裁剪模型的效果。
⽅法四
基于梯度的⽅法:回顾上⾯问题定义中的数学最优化问题,其最恶⼼的地⽅在于regularizer中那个L0-
norm,使⽬标不可微,从⽽⽆法⽤基于梯度的⽅法来求解。如2017年的论⽂《Learning Sparse Neural Networks through L0 Regularization》的思路是⽤⼀个连续的分布结合hard-sigmoid recification去近似它,从⽽使⽬标函数平滑,这样便可以⽤基于梯度的⽅法求解。
⽅法五
基于聚类的⽅法:⼀般地,对于压缩问题有⼀种⽅法就是采⽤聚类。如将图⽚中的颜⾊进⾏聚类,就可以减⼩其编码长度。类似地,在模型压缩中也可以⽤聚类的思想。如2018年的论⽂《SCSP: Spectral Clustering Filter Pruning with Soft Self-adaption Manners》和《Exploring Linear Relationship in Feature Map Subspace for ConvNets Compression》分别⽤谱聚类和⼦空间聚类发掘filter和feature map中的相关信息,从⽽对参数进⾏简化压缩。
Sparsity Ratio
上⾯的很多⽅法,研究的是给定裁剪量的前提下如何做pruning,如采⽤什么样的criteria去做参数选取。然⽽其实还有个核⼼问题是在哪⾥裁剪多少,即sparsity ratio的确定。这⾥的sparsity ratio定义为层中为0参数所占⽐例,有些⽂章中也称为pruning rate等。从⽬标结构或者sparsity ratio的指定⽅式来说,按2018年论⽂《Rethinking the Value of Network Pruning》中的说法可分为预定义(predifined)和⾃动(automatic)两种⽅式。Predefined⽅法由⼈⼯指定每⼀层的⽐例进⾏裁剪,
因此⽬标结构是提前确定。⽽automatic⽅法会根据所有的layer信息(即全局信息)由pruning算法确定每层裁剪⽐例,因此⽬标结构⼀开始并不确定。
predifined
从某种意义上来说,著名的MobileNet《MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications》中提出的multiplier参数也是⼀种predefined的network pruning⽅法。只是它⽐较简单粗暴,将相同的裁剪⽐例⽤于所有层,且裁剪后权重不重⽤。2019年在《EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks》中提出的EfficientNet将这种参数调节更进⼀步,提出compound scaling method将width, depth, resolution按特定⽐例⼀起调节。但它们调节参数都是针对⽹络中所有层的,粒度⽐较粗。显然,⽹络中不同层对于pruning的敏感(sensitivity)程度是不⼀样的,只有根据层的属性为每层设置最适合的sparsity ratio才是最优的,这种为每层专设的称为local sparsity,相对地前⾯那种就称为global sparsity。2015和2016年经典论⽂《Learning both Weights and Connections for Efficient Neural Networks》和《Pruning Filters for Efficient ConvNets》中对⽹络中各层的敏感度进⾏了分析,发现卷积层⽐全连接层对pruning更敏感(直觉上,由于卷积层中的参数共享,所以参数量会⽐全连接层少得多),另外不同的卷积层之间敏感度也不⼀样,如第⼀层卷积对pruning就相对更敏感,ResNet中每个stage中第⼀个和最后⼀个residual block⽐中间block更敏感等。这⾥就引申出⼀个重要问题,就是如何确定每⼀层的最优的spar
sity ratio。在predefined这类⽅式中,⼀种就是通过前⾯的提到的sensitivity analysis进⽽确定每⼀层的sparsity ratio。
automatic
另观automatic⽅法,如上所说,它需要pruning算法从全局信息中⾃动得到每层裁剪多少。上⾯提到过的论⽂《Learning Efficient Convolutional Networks through Network Slimming》就属于此类。另外,2019年论⽂《Play and Prune: Adaptive Filter Pruning for Deep Model Compression》将pruning问题建模成min-max优化问题,然后通过两个模块交替迭代分别进⾏裁剪和通过调节pruning rate控制精度损失。2018年论⽂《ADC: Automated Deep Compression and Acceleration with Reinforcement Learning》提出ADC(Automated deep compression)⽅法,根据不同需求(如保证精度还是限制计算量),利⽤强化学习来学习每⼀层最优的sparsity ratio。2018年论⽂《“Learning-Compression” Algorithms for Neural Net Pruning》提出Learning和Compression两步交替优化的pruning⽅法,在Compression 操作中,通过将原参数向约束表⽰的可⾏集投影来⾃动到每层的最优sparsity ratio。因为此类⽅法不需要计算量较⼤的sensitivity analysis,也减少了超参数的引⼊。因此,近年来,这类⽅法的研究越来越多。
精度恢复
当模型经过pruning,⼀般会带来精度损失,因此我们在pruning的同时也需要考虑精度的恢复:前⾯提到的论⽂《Channel Pruning for Accelerating Very Deep Neural Networks》中在进⾏channel pruning后,直接通过least square来得到最⼩化特征重建精度下的新参数,因此不需要fine-tuning来恢复精度,是⼀种inference-time pruning⽅法。它的好处是pruning过程不需要训练环境。One-shot pruning指⼀趟头的裁剪,但这种往往对精度影响很⼤。⼈们发现裁完后进⾏fine-tuning可以弥补pruning带来的精度损失,因此很多⽅法会在pruning后做fine-tuning。⽐较经典的是training,pruning,fine-tuning三段式。后⾯两个阶段交替进⾏,每次pruning后损失的精度可以由后⾯的fine-tuning来弥补,该过程也称为iterative pruning。简单说就是砍⼀⼑回点⾎,再砍⼀⼑再回点⾎这样,不⼀步到位是因为有些实验表明⼀下⼦砍太狠就难回⾎了。当然现实中可以衍⽣出很多玩法。⽽在时间维度上,每步砍多少也是有艺术的。如2017年论⽂《To Prune, or Not to Prune: Exploring the Efficacy of Pruning for Model Compression》提出⼀种automated gradual pruning算法,它基于开始阶段冗余多可以裁得快,越到后⾯越裁得快的指导思想,给出在n步的pruning中,如何从初始sparsity ratio渐变到⽬标sparsity ratio的⽅法。
重新审视假设
⽐较有意思的是,最近不少⼯作开始反思⼀些之前固有的假设。⽐如⼀开始提到的over-parameterization对训练是否真的那么有益,还有原⽹络的权重是否在pruning中很重要。在ICLR2019
的best paper《The Lottery Ticket Hypothesis: Finding Sparse, Trainable Neural Networks》提出The Lottery Ticket Hypothesis,即⼀个随机初始化,密集的⽹络包含⼀个⼦⽹络,这个⼦⽹络如果沿⽤原⽹络的权重初始化,在⾄多同样迭代次数训练后就可以⽐肩原⽹络的测试精度。同时它还给出了这种⼦⽹络结构的⽅法。⽂章认为这个⼦结构和它的初始值对训练的有效性⾄关重要,它们被称为『winning logttery tickets』。另⼀篇论⽂2018年的《Rethinking the Value of Network Pruning》提出不仅over-parameterization对于训练不是重要的,⽽且从原⽹络中重⽤其权重也未必是很好的选择,它可能会使裁剪后的模型陷⼊局部最⼩。如果原⽹络的权重或其初始值不重要的话,那剩下最重要的就是pruning后的⽹络结构了。换句话说,某种意义上来说,pruning即是neural architecture search(NAS),只是由于它只涉及层的维度,搜索空间相⽐⼩⼀些。但这也是它的优点,搜索空间⼩了⾃然搜索就⾼效了。
保留模型Capacity
Pruning按最初的字⾯意思理解就是给模型做减法。之前的主流pruning⽅法中,被裁剪的部分⼀般也就直接丢弃不会再拿回来了,即模型的capacity在iterative pruning的过程中不断减少。这样的话,⼀旦有参数被不适当地裁剪掉,便⽆法被恢复。⽽这两年,学界正在尝试在模型压缩过程中保留被裁剪部分能⼒或者扩充能⼒的⽅法。2018年论⽂《Soft Filter Pruning for Accelerating Deep Convolutional Neural Networks》提出SFP(Soft filter pruning)让被裁剪的filter在训练中仍能被更新,这样它仍有
机会被恢复回来。2016年论⽂《Dynamic Network Surgery for Efficient DNNs》在pruning的基础上加了splicing操作,避免不合适的pruning带来的影响。2017年的论⽂《Morphnet:
Fast & Simple Resource-Constrained Structure Learning of Deep Networks》也是基于这种思路,它会迭代地进⾏shrink和expand的操作。Pruning的副作⽤就是可能会损害模型的capacity。尽管前⾯的各种⽅法让该影响尽可能⼩,但我们往往只能在有限的数据集上做。因此,很可能对于⼤部分简单的样本pruning对其没有影响,但对于⼩部分难的数据会有较⼤影响。那有没有可能在保留⽹络capacity的同时⼜能精简计算呢?⼀些学者尝试结合dynamic NN来达到该⽬的,即⽹络执⾏哪些模块由输出决定。如2017年论⽂《Dynamic Deep Neural Networks: Optimizing Accuracy-Efficiency Trade-offs by Selective Execution》引⼊Dynamic Deep Neural Networks,对于给定输⼊,哪部分神经元被执⾏由⽹络本⾝中的controller module来确定。这个module通过强化学习进⾏训练。另⼀篇2017年论⽂《Runtime Neural Pruning》将pruning建模为马尔可夫决策过程(Markov decision process)并通过强化学习来学习pruning策略。当然,这类⽅法也有些局限,如由于保留了⽹络原始capacity,因此size不会减少。另外由于执⾏哪部分是动态的,因此对于硬件加速会有影响(如算⼦间的fusion)。印花交联剂
四、⼩结
和DNN训练不同,DNN的部署有个很⼤的挑战是平台的多样性。云和端上的硬件平台差异很⼤,端设
备与端设备之间在硬件种类和能⼒上差异也很⼤。对于加速硬件的多样性问题,业界已有诸多研究和尝试,如像基于编译器的TVM,和runtime+⼚商backend的Android NN runtime。但计算能⼒的差异仍然是个⼤问题。如同样是⼿机,计算能⼒可能有巨⼤的差异。这本质上是⼀个考虑性能与精度等指标的多⽬标优化问题,我们需要针对不同平台在其pareto解集上合适的trade-off 。如果要将同⼀DNN适⽤于多种平台,需要按不同算⼒进⾏裁剪并且训练,这个成本很⼤(⼏乎与平台种类线性相关),可伸缩性差。⽽模型压缩成为了解决多类型平台统⼀部署⽅案的希望之⼀。像2018年论⽂《Slimmable Neural Networks》考虑不同移动端平台训练同⼀⽹络,对于不同计算能⼒的平台进⾏不同程度的裁剪。2019年论⽂《Once for All: Train One Network and Specialize it for Efficient Deployment》也是为了类似的⽬标,将⼀个⼤⽹络通过progressive shrinking approach训练不同超参下的⼦⽹络,在部署时根据不同的精度要求和资源约束搜索合适的⼦⽹络。即⼀次训练,可以适应多种平台部署,因此称为Once for All(OFA)⽅案。它既可以说是⼀种模型压缩⽅法,也可以说是⼀种神经⽹络结构搜索(Neural archtecture search)。NAS相关介绍可参见之前写的杂⽂神经⽹络架构搜索(Neural Architecture Search)杂谈[1]。类似的,2018年论⽂《ProxylessNAS: Direct Neural Architecture Search on Target Task and Hardware》中其实是⽤pruning的⽅法来做NAS。
可以看到,这⼏年network pruning作为模型压缩中的主⼒之⼀,正在受到越来越多的关注。当然,各种更好的pruning参数选取⽅法⼀定还会层出不穷。另外,从趋势来看,以下⼏个⽅向值得关注:
⽅向⼀
如前⾯提到,network pruning⽅法与NAS的界限已经模糊了。事实上,NAS分⽀上也有⼀类搜索加速⽅法,如One-Shot Architecture Search是先有⼀个⼤⽹络,然后做减法。NAS与模型压缩两个⼀开始看似关系不是那么⼤的分⽀最后似乎⾛到⼀块去了。这两个分⽀今天有了更多的交集,也必将擦出更多的⽕花。
⽅向⼆
挑战已有的固有的假设。如前⾯对于over-parameterization与重⽤已有参数是否有有益的反思⾮常有意思。这样的⼯作会给我们⾮常⼤的启发,从⽽根本改变解决问题的思路。
自动钎焊设备⽅向三
随着AutoML的⼤潮,越来越多的东西开始⾃动化。模型压缩能拉下吗?当然不能。经过前⾯的介绍我们知道,像ADC,RNP,N2N Learning这些⼯作都是试图将pruning中部分⼯作⾃动化。⽽且对于其它的模型压缩⽅法,如quantization,也有⼀些空间可以⾃动化,如2018年论⽂《HAQ: Hardware-Aware Automated Quantization》考虑⽹络中不同层信息的冗余程度不⼀样,因此可以⽤不同位数进⾏量化。
⽅向四
这⼏年机器学习最⽕热的分⽀之⼀GAN,正在不断渗透到已有领域,在pruning中也开始有它的⾝影。如2019年论⽂《Towards Optimal Structured CNN Pruning via Generative Adversarial Learning》采⽤了GAN的思想,让generator⽣成裁剪后⽹络,discrimintor来判别是否属于原⽹络还是裁剪后⽹络,从⽽进⾏更有效的⽹络结构化裁剪。
⽅向五
与硬件结合,如稀疏计算的⽀持。现在虽然有像cuSPARSE这样的计算库,但底层硬件GPU本⾝设计并不是专门为稀疏数据处理打造的。如果能将稀疏计算和处理能⼒做进芯⽚那必将极⼤提⾼计算效率,如早些年有像EIE这样的尝试。在现在神经⽹络芯⽚的⼤潮下,相信这样的案例会越来越多。
监视器安装⽅向六
如⽂章⼀开始提到的,模型压缩⽅法中pruning只是其中⼀种,它与其它⽅法并不冲突,因此与其它⽅法,如knowledge
distillation,quantization等的深度结合,是值得研究的⽅向。和其它机器学习分⽀⼀样,很多⼈提出很多算法,各家都说⾃家的好。⼀个分⽀发展到⼀定时候,就需要benchmark来进⾏客观的横向⽐较。
Google在2019年论⽂《The State of Sparsity in Deep Neural Networks》正是这⽅⾯的尝试。相信以后也会有越来越多的benchmark,和针对性的竞赛。

本文发布于:2024-09-22 19:33:48,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/314279.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:模型   参数   压缩   计算   裁剪   问题
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议