每天给你送来NLP技术干货!


作者:Colorjam

https://zhuanlan.zhihu.com/p/97198052

剪枝是模型压缩的一个子领域,依据剪枝粒度可以分为非结构化/结构化剪枝,依据实现方法可以大致分为基于度量标准/基于重建误差/基于稀疏训练的剪枝,并且逐渐有向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

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

  • 技术文章配图指南

下载一:中文版!学习TensorFlow、PyTorch、机器学习、深度学习和数据结构五件套!  后台回复【五件套】
下载二:南大模式识别PPT  后台回复【南大模式识别】

投稿或交流学习,备注:昵称-学校(公司)-方向,进入DL&NLP交流群。

方向有很多:机器学习、深度学习,python,情感分析、意见挖掘、句法分析、机器翻译、人机对话、知识图谱、语音识别等。

记得备注呦

整理不易,还望给个在看!

剪枝乱炖 | 模型加速与压缩相关推荐

  1. 移动端机器学习模型压缩也自动化了:腾讯新框架为自家模型加速50%

    夏乙 发自 凹非寺 量子位 出品 | 公众号 QbitAI 把深度学习模型压缩部署到手机上直接本地运行的趋势,愈演愈烈.从Google的TensorFlow Lite.苹果的Core ML,到小米今年 ...

  2. 模型转换、压缩、加速工具

    20210618 sky_hole: 回成都工作了吗?wang shi yang: 嗯 我现在已经在成都上班了sky_hole: 不用付费,我之前发你的视频你好好看看就可以入门了sky_hole: 成 ...

  3. 模型转换、模型压缩、模型加速工具汇总

    点击上方"计算机视觉工坊",选择"星标" 干货第一时间送达 编辑丨机器学习AI算法工程 一.场景需求解读   在现实场景中,我们经常会遇到这样一个问题,即某篇论 ...

  4. 【模型加速】关于模型加速的总结

    概述 ● 模型加速的目标: a. Increase inference speed:加快推理速度(应用层面). b. Reduce model size:压缩模型. ● 关于模型的加速大致可以分为三个 ...

  5. yolo模型部署——tensorRT模型加速+triton服务器模型部署

    将最近的工作做个记录,方便日后学习回顾: 1.针对项目需求开发满足任务的模型,拿到任务就要去选相应的算法,由于是工程应用型,必须找填坑多的算法,这样遇到问题可参考的资料多. 2.做好以后,还要将开发的 ...

  6. 乱炖“简书交友”数据之代码(1)

    上一篇文章乱炖数据之2700余篇"简书交友"专题文章数据的花式玩法发布后,不少人想学习下代码,由于此前不曾在GitHub上开源过,流程还不熟悉,再者本项目中很多尝试性的代码,异常杂 ...

  7. 模型加速之轻量化网络

    模型加速之轻量化网络 当前物体检测结构大都依赖使用卷积网络进行特征提取,即 Backbone,通常使用 VGGNet.ResNet 等优秀的基础网络,但是这些网络往往计算量巨大,依赖这些基础网络的检测 ...

  8. 乱炖“简书交友”数据之代码(2):关键词抽取、Word2Vec词向量

    继续更新出来本系列的代码:乱炖数据之2700余篇"简书交友"专题文章数据的花式玩法 在乱炖"简书交友"数据之代码(1)一文里,主要涉及结构化数据的分析,文本挖掘 ...

  9. 关于PVT、corner、RC乱炖

    关于PVT.corner.RC乱炖 时序分析的wcl.wc.lt.tc.ml 工艺角(Process Corner) PVT (process, voltage, temperature) RC快速理 ...

  10. 让机器“删繁就简”:深度神经网络加速与压缩|VALSE2018之六

    编者按:郑板桥在<赠君谋父子>一诗中曾写道, "删繁就简三秋树:领异标新二月花." 这句诗讲的是,在画作最易流于枝蔓的兰竹时,要去掉其繁杂使之趋于简明如"三秋 ...

最新文章

  1. [转]ubuntu下ATI/Intel双显卡切换的方法
  2. [译]写程序更快、更好、更便宜的艺术
  3. CodeForces - 1059D(二分+误差)
  4. 牛客网 【每日一题】6月11日题目精讲 背包
  5. mkfs.jffs2参数详解
  6. C语言再学习——分支结构
  7. tasm报错illegal memory reference的解决办法
  8. Centos6.x 64位 安装JDK
  9. 用MSDN下载镜像(以Windows11为例)
  10. stm32 boot设置
  11. Big FAT32 Format Pro(U盘格式化工具)官方正式版V2.0 | u盘无法格式化怎么办 | 万能u盘修复工具下载 | 突破FAT文件系统4GB的限制
  12. unity中的游戏推出代码
  13. DEDECMS5.7自动采集更新伪原创插件高级版GBK
  14. 特立独行的幸福(25分)Python
  15. HighCharts一个基于JavaScript的图表插件
  16. 【如何选】校园卡购买必读,移动联通电信校园卡套餐对比及购买策略(1预热)...
  17. 值得重点推荐的BI软件有哪些?全在这里了
  18. MySQL数据库范围、模糊、时间范围(时间段)查询语句
  19. PCB:FPC原材料,设计,加工,组装终极解决方案
  20. (大全)预后Cox 列线图Nomogram 校正曲线calibration curve 时间依赖ROC survivalROC C指数C-index 两ROC比较

热门文章

  1. vue-cli3使用vue-router 使用动态路由,在刷新页面时报错
  2. [UnityShader基础]06.#pragma multi_compile
  3. 我的Python之路:浏览器模拟
  4. Exception.ToString()使用及其他方法比较
  5. Knockout v3.4.0 中文版教程-6-计算监控-可写的计算监控
  6. python--os模块
  7. [poj1741 Tree]树上点分治
  8. 浏览器是如何工作的系列:页面布局
  9. 将Java程序作成exe文件的几种方法
  10. Java 数组类型转字符串类型