专栏首页人工智能前沿讲习模型加速与压缩 | 剪枝乱炖

模型加速与压缩 | 剪枝乱炖

剪枝是模型压缩的一个子领域,依据剪枝粒度可以分为非结构化/结构化剪枝,依据实现方法可以大致分为基于度量标准/基于重建误差/基于稀疏训练的剪枝,并且逐渐有向AutoML发展的趋势。由于实现方法在剪枝粒度上是有通用性的,本文主要从实现方法进行展开,康康近年来关于剪枝的有的没的,从个人角度对近几年经典的剪枝方法以及其拓展进行一下梳理。

基于度量标准的剪枝

这类方法通常是提出一个判断神经元是否重要的度量标准,依据这个标准计算出衡量神经元重要性的值,将不重要的神经元剪掉。在神经网络中可以用于度量的值主要分为3大块:Weight / Activation / Gradient。各种神奇的组合就产出了各种metric玩法。

这里的神经元可以为非结构化剪枝中的单个weight亦或结构化剪枝中的整个filter。

Weight:基于结构化剪枝中比较经典的方法是Pruning Filters for Efficient ConvNets(ICLR2017),基于L1-norm判断filter的重要性。Filter Pruning via Geometric Median for Deep Convolutional Neural Networks Acceleration(CVPR2019) 把绝对重要性拉到相对层面,认为与其他filters太相似的filter不重要。

Activation:Network trimming: A data-driven neuron pruning approach towards efficient deep architectures 用activations中0的比例 (Average Percentage of Zeros, APoZ)作为度量标准,An Entropy-based Pruning Method for CNN Compression 则利用信息熵进行剪枝。

Gradient:这类方法通常从Loss出发寻找对损失影响最小的神经元。将目标函数用泰勒展开的方法可以追溯到上世纪90年代初,比如Lecun的Optimal Brain Damage 和 Second order derivatives for network pruning: Optimal Brain Surgeon 。近年来比较有代表性的就是Pruning Convolutional Neural Networks for Resource Efficient(ICLR2017),对activation在0点进行泰勒展开。原作者也很好的向我们展现了如何优雅地进行方法迁移 Importance Estimation for Neural Network Pruning(CVPR2019),换成weight的展开再加个平方。类似的方法还有 Faster gaze prediction with dense networks and Fisher pruning,用Fisher信息来近似Hessian矩阵。SNIP: Single-shot Network Pruning based on Connection Sensitivity(ICLR2019)则直接利用导数对随机初始化的权重进行非结构化剪枝。相关工作同样可以追溯到上世纪80年代末Skeletonization: A Technique for Trimming the Fat from a Network via Relevance Assessment(NIPS1988)。历史总是惊人的相似:

还有一些考虑实际硬件部署并结合度量标准进行剪枝的方法,对网络层的剪枝顺序进行了选择。Designing Energy-Efficient Convolutional Neural Networks using Energy-Aware Pruning(CVPR2017)利用每层的energy consumption来决定剪枝顺序,NetAdapt: Platform-Aware Neural Network Adaptation for Mobile Applications(ECCV2018)建立了latency的表,利用贪心的方式决定该剪的层。

基于重建误差的剪枝

这类方法通过最小化特征输出的重建误差来确定哪些filters要进行剪裁,即找到当前层对后面的网络层输出没啥影响的信息。ThiNet: A Filter Level Pruning Method for Deep Neural Network Compression 采用贪心法,Channel Pruning for Accelerating Very Deep Neural Networks(ICLR2017) 则采用Lasso regression。NISP: Pruning Networks using Neuron Importance Score Propagation(CVPR2018) 通过最小化网络倒数第二层的重建误差,并将反向传播的误差累积考虑在内,来决定前面哪些filters需要裁剪。

基于稀疏训练的剪枝

这类方法采用训练的方式,结合各种regularizer来让网络的权重变得稀疏,于是可以将接近于0的值剪掉。Learning Structured Sparsity in Deep Neural Networks 用group Lasso进行结构化稀疏,包括filters, channels, filter shapes, depth。Data-Driven Sparse Structure Selection for Deep Neural Networks(ECCV2018)通过引入可学习的mask,用APG算法来稀疏mask达到结构化剪枝。A Systematic DNN Weight Pruning Framework using Alternating Direction Method of Multipliers(ECCV2018) 的思想类似,用约束优化中的经典算法ADMM来求解。由于每个通道的输出都会经过BN,可以巧妙地直接稀疏BN的scaling factor,比如 Learning Efficient Convolutional Networks through Network Slimming(ICCV2017) 采用L1 regularizer,Rethinking the Smaller-Norm-Less-Informative Assumption in Channel Pruning of Convolution Layers(ICLR2018) 则采用ISTA来进行稀疏。MorphNet: Fast & Simple Resource-Constrained Structure Learning of Deep Networks(CVPR2018) 也是直接利用L1 regularizer,但是结合了MobileNet中的width-multiplier,加上了shink-expand操作,能够更好的满足资源限制。

Random and Rethinking

有采用各种剪枝方法的就有和这些剪枝方法对着干的。Recovering from Random Pruning: On the Plasticity of Deep Convolutional Neural Networks 就表明了度量标准都没啥用,随机赛高。Rethinking the Value of Network Pruning(ICLR2019) 则表示剪枝策略实际上是为了获得网络结构,挑战了传统的 train-prune-finetune的剪枝流程。Pruning from Scratch 则直接用Network Slimming的方法对训练过程中的剪枝结构进行了一波分析,发现直接采用random初始化的网络权重能够获得更丰富的剪枝结构。

走向NAS的自动化剪枝

从AMC: AutoML for Model Compression and Acceleration on Mobile Devices[ECCV2018]开始将强化学习引入剪枝,剪枝的研究开始套上各种Auto的帽子,玩法更是层出不穷。AutoSlim: Towards One-Shot Architecture Search for Channel Numbers先训练出一个slimmable model(类似NAS中的SuperNet Once for All: Train One Network and Specialize it for Efficient Deployment),继而通过贪心的方式逐步对网络进行裁剪。

Network Pruning via Transformable Architecture Search(NIPS2019) 则把NAS可导的一套迁移过来做剪枝。Approximated Oracle Filter Pruning for Destructive CNN Width Optimization(ICML2019)平行操作网络的所有层,用二分搜索的方式确定每层的剪枝数。Fine-Grained Neural Architecture Search 把NAS的粒度降到了通道,包含了空的操作即剪枝。还有各种拿进化来做的也就不提了。

此外,还有基于信息瓶颈的方法Compressing Neural Networks using the Variational Information Bottleneck(ICML2018),聚类的方法Centripetal SGD for Pruning Very Deep Convolutional Networks with Complicated Structure(CPVR2019),等等等等等......

剪枝之外

提升精度: 利用剪枝的方式来提升模型精度,比如DSD: Dense-Sparse-Dense Training for Deep Neural Networks(ICLR2017)利用非结构化剪枝,阶段性的砍掉某些权重再恢复。稀疏训练Sparse Networks from Scratch: Faster Training without Losing Performance在训练过程中保持网络的稀疏率不变,动态调整层间的稀疏率。

动态结构:不同的输入图片可以走网络中的不同结构。BlockDrop: Dynamic Inference Paths in Residual Networks(CVPR2018)引入一个Policy Network,以Block为单位进行选择。Dynamic Channel Pruning: Feature Boosting and Suppression(ICLR2019)引入SEBlock,以Channel为单位进行选择。Improved Techniques for Training Adaptive Deep Networks采用截断式的选择,简单的图片采用靠前的网路层解决,复杂的加入后面得网络层。

总结

一脉梳理下来感觉做纯的剪枝感觉很难了,对比人工设计的结构和准则,NAS出来的模型可以又小巧精度又高,剪枝也逐渐受其影响快、准、狠地寻找结构。这些效果好的结构和权重背后到底还藏着些什么,请勇士们冲吧。

Reference

1、闲话模型压缩之网络剪枝(Network Pruning)篇

https://blog.csdn.net/jinzhuojun/article/details/100621397

2、技术文章配图指南

https://draveness.me/sketch-and-sketch/

作者:Colorjam

地址:https://www.zhihu.com/people/cherrycherryan

本文分享自微信公众号 - 人工智能前沿讲习(AIFrontier)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-06-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • AI综述专栏 | 深度神经网络加速与压缩

    在科学研究中,从方法论上来讲,都应先见森林,再见树木。当前,人工智能科技迅猛发展,万木争荣,更应系统梳理脉络。为此,我们特别精选国内外优秀的综述论文,开辟“综述...

    马上科普尚尚
  • 医学图像分割:U-Net系列网络简介

    在图像分割任务特别是医学图像分割中,U-Net[1]无疑是最成功的方法之一,该方法在2015年MICCAI会议上提出,目前已达到四千多次引用。其采用的编码器(下...

    马上科普尚尚
  • 【NSR特别专题】张坤:学习因果关系和基于因果关系的学习「全文翻译」

    编者按:《国家科学评论》于2018年1月发表“机器学习”特别专题,由周志华教授组织并撰写文章。专题内容还包括对AAAI前主席Tom Dietterich的访谈,...

    马上科普尚尚
  • 【AI不惑境】模型剪枝技术原理及其发展现状和展望

    进入到不惑境界,就是向高手迈进的开始了,在这个境界需要自己独立思考。如果说学习是一个从模仿,到追随,到创造的过程,那么到这个阶段,应该跃过了模仿和追随的阶段,进...

    用户1508658
  • YOLOv3剪枝再升级!

    该项目也说明在使用YOLOv3进行单类目标检测时,模型存在大量冗余,剪枝可以较好的减少参数、提高速度。

    CV君
  • AAAI 2020 | 滴滴&东北大学提出自动结构化剪枝压缩算法框架,性能提升高达120倍

    近年来,随着深度神经网络模型性能不断刷新,模型的骨干网络参数量愈发庞大,存储和计算代价不断提高,从而导致难以部署在资源受限的嵌入式平台上。滴滴 AI Labs ...

    机器之心
  • 【星球知识卡片】模型剪枝有哪些关键技术,如何对其进行长期深入学习

    大家好,欢迎来到我们的星球知识小卡片专栏,本期给大家分享模型剪枝的关键技术以及一些学习资料。

    用户1508658
  • 深度学习算法优化系列一 | ICLR 2017《Pruning Filters for Efficient ConvNets》

    这篇文章是深度学习算法优化系列的第一篇文章,主要解读一篇ICLR 2017年的《Pruning Filters for Efficient ConvNets》,...

    BBuf
  • 模型算法基础——决策树剪枝算法(二)

    在上一篇模型算法基础——决策树剪枝算法(一)中,我们介绍了误差降低剪枝(REP),今天我们继续介绍另一种后剪枝算法——悲观错误剪枝(PessimisticErr...

    企鹅号小编
  • 决策树算法那些事--CART|机器学习

    一、树算法介绍 当前数据挖掘领域中存在10个火热的算法、它们涉及到数据的聚类、分类、关联规则、排序等方面。今天就跟大家说说基于树的分类算法--决策树,决策树有非...

    陆勤_数据人网

扫码关注云+社区

领取腾讯云代金券