一:背景介绍

众所周知的是,神经网络有个很大特点就是参数太多了,计算量太大了,可能是几百兆的规模,这么大的存储量和计算量在小型设备上是运行不起来的,我们 必须要做对网络进行精简。
精简后有很多好处,比如
1)最直接的好处就是计算量和存储量的减小,从而使计算时间更少,功耗更小。
2)Memory footprint变小,可以放到更低端的设备上跑。。
3)Size更小的包有利于应用发布和更新。

所以这一些都是非常工程化的方法了。

一般大方向上来说,方法有如下:
Outline:
网络剪裁(Network pruning)
知识蒸馏(Knowle Distillation)
参数量化(Parameter Quantization)
架构设计(Architecture Design)
动态调整计算。
深度压缩等方法。

学习自李宏毅的课程。我们今天主要简单学习下Network pruning,其他的在后续的博文中将逐渐学习。

一:Network pruning
模型不能随便剪裁,因为可能会带来很多精度的损失。
这里简单学习学习,浅浅解析下。

当然,也有情况会在pruning后精度提高的,这说明原模型过似合(overfit)了,这样的话,pruning起到了regularization的作用。就一般情况下讲,核心问题是成如何有效地裁剪模型且最小化精度的损失。

其思想就是把网络中不重要的部分给剪裁掉。
包括参数和单元。

整体步骤如下:
1:初始化训练网络
2:评估各个参数和Neuron单元的重要性,并做排序。
3:裁减掉部分不重要的参数和Neuron单元,一次不要裁剪太多,否则可能网络精度损失到无法恢复。
4:查看模型的精度,如何精度提升则跳过,如果精度损失(希望别损失太多)则重新利用数据进行训练,希望能把精度恢复回来,这时候就是对剩下的结构进行微调。
5:是否满足大小和精度要求?满足则结束算法,不满足则跳到第二步重新来一遍。

现在整体的流程就是这样了,下面大概讲一下一些吧。
核心问题是怎么评估所谓的“重要性”以及每一次取裁剪时候的剪裁量。

所谓的“重要性”
1:对于参数来说,使用L1,L2的大小来衡量,越接近于0,越不重要,对于Neuron单元来说,在训练过程中,总是出现接近于0值,相对于其他Neuron单元激活值小,说明这个Neuron单元没什么贡献,那这个Neuron单元就不重要。实际中,更一般主要选择Neuron单元进行裁剪,如果按照参数裁剪会产生不规则的结构,参数个数不一致,少的补充0,可能导致没有什么大的变化。参数裁剪作为辅助。

2:通过衡量参数/Neuron单元对Loss的影响程度。将归一化的目标函数相对于参数/Neuron单元的导数绝对值作为重要性的衡量指标,如果偏导数越小,越不重要。

3:第三个思路是考虑对特征输出的可重建性的影响,即最小化裁剪后网络对于特征输出的重建误差,它的intuition是如果对当前层进行裁剪,然后如果它对后面输出还没啥影响,那说明裁掉的是不太重要的信息。

4:其他方法,例如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》。
• 规划问题:如比较新的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》。
• 基于梯度的方法:如2017年的论文《Learning Sparse Neural Networks through L0 Regularization》。
• 基于聚类的方法:如2018年的论文《SCSP: Spectral Clustering Filter Pruning with Soft Self-adaption Manners》和《Exploring Linear Relationship in Feature Map Subspace for ConvNets Compression》。
如上论文都是可以在google学术上可以搜索到的。

另外还有个核心问题是在哪里裁剪多少,即sparsity ratio的确定。这里的sparsity ratio定义为层中为0参数所占比例,有些文章中也称为pruning rate等。从目标结构或者sparsity ratio的指定方式来说,按2018年论文《Rethinking the Value of Network Pruning》中的说法可分为预定义(predifined)和自动(automatic)两种方式。Predefined方法由人工指定每一层的比例进行裁剪,因此目标结构是提前确定。而automatic方法会根据所有的layer信息(即全局信息)由pruning算法确定每层裁剪比例,因此目标结构一开始并不确定。

有一些可以参考的pruned网络比如:
MobileNet:https://arxiv.org/abs/1704.04861
SqueezeNet:https://arxiv.org/abs/1602.07360
ShuffleNet:https://arxiv.org/abs/1707.01083
Xception:https://arxiv.org/abs/1610.02357

二:其他
为什么要prune?难道不能一开始就去训练个小的网络么?
小的网络可能比较难训练,大的网络包含了很多不同形式的小网络,从概率上讲会更大概率train好的。

其实小网络也可能存在可以prune的地方。这是个思路,不管是大网络,还是小网络,其实都可以在训练好之后进行prune,毕竟将网络简化,有利于存储和计算,节省内存。

本文学习自:
李宏毅的机器学习课程
https://blog.csdn.net/jinzhuojun/article/details/100621397

网络压缩《network pruning 浅析》相关推荐

  1. IOS开发之网络编程--文件压缩和解压缩

    2019独角兽企业重金招聘Python工程师标准>>> 前言: QQ表情包就用到了解压缩,从网络下载的那么多表情文件格式并不是一个一个图片文件,而是多个图片压缩而成的表情压缩包.下面 ...

  2. 第二十天: Linux文件管理+Linux备份压缩+网络与磁盘管理+shell与安装

    Linux第二天 1 Linux文件管理 1.1 touch命令 在Windows系统中,我们如果想创建一个文本文档或者word文件的时候,通常的做法是 鼠标右键---新建---文本文档,这样的话,我 ...

  3. 对抗性鲁棒性与模型压缩:ICCV2019论文解析

    对抗性鲁棒性与模型压缩:ICCV2019论文解析 Adversarial Robustness vs. Model Compression, or Both? 论文链接: http://openacc ...

  4. [论文阅读] (06) 万字详解什么是生成对抗网络GAN?经典论文及案例普及

    <娜璋带你读论文>系列主要是督促自己阅读优秀论文及听取学术讲座,并分享给大家,希望您喜欢.由于作者的英文水平和学术能力不高,需要不断提升,所以还请大家批评指正,非常欢迎大家给我留言评论,学 ...

  5. 几种常见的网络摄像头_DVR方案_整理

    几种常见的网络摄像头_DVR方案_整理 http://blog.csdn.net/ex_net/article/details/7833334 作者:张建波 邮箱: 281451020@qq.com ...

  6. 《NJUPT》网络信息安全_期末PPT整理笔记

    零.基础知识 信息安全包括:信息安全管理.物理场所安全.设备的硬件安全.软件安全(操作系统/其他系统软件应用软件).网络信息安全(TCP/IP ).密码学的应用.信息隐藏.其他不常见技术 不同的研究方 ...

  7. 网络攻防课程期末复习整理

    TTL值的特性     生存时间是指允许这个数据包在到达其目的地之前通过多少个路由器.数据包每通过一个路由器,其生存时间都会有路由器减一.当生存时间将为零时,路由器就会丢弃这个数据包.在多次环境下,经 ...

  8. Algorithm之PGM之BNet:贝叶斯网络BNet的相关论文、过程原理、关键步骤等相关配图

    Algorithm之PGM之BNet:贝叶斯网络BNet的相关论文.过程原理.关键步骤等相关配图 目录 BNet的相关论文 BNet的过程原理 BNet的关键步骤 BNet的相关论文 更新-- BNe ...

  9. 计算机网络专业现状,计算机网络的发展现状及网络体系结构涵义分析论文

    计算机网络的发展现状及网络体系结构涵义分析论文 现阶段,计算机网络技术发生了飞速发展,计算机网络是计算机技术与通信技术结合的新科技,它能够远距离通信,还能够处理通信内容并实现资源共享等优点.计算机网络 ...

  10. 目标检测学习笔记2——ResNet残差网络学习、ResNet论文解读

    ResNet残差网络学习.ResNet论文解读 一.前言 为什么会提出ResNet? 什么是网络退化现象? 那网络退化现象是什么造成的呢? ResNet要如何解决退化问题? 二.残差模块 三.残差模块 ...

最新文章

  1. 自建web3 provider服务
  2. java nio集群_java – Hazelcast:连接到远程集群
  3. day02-虚拟环境安装
  4. 代码块作用域内外的静态变量
  5. Spark面试题梳理
  6. 城市土地利用分布数据/城市功能区划分布数据/城市poi感兴趣点/植被类型分布
  7. 测试职业思考:如何成为一名优秀的软件测试工程师
  8. Day2:Surveying China’s livestreaming economy
  9. Html+CSS实现奥运五环的制作超详细讲解,附源码下载
  10. MySQL练习题(4)
  11. poj1386 Paly onWords
  12. 你真的知道什么是元音什么是辅音吗?
  13. 模糊测试框架 Sulley 使用手记
  14. 美国英文简写日期格式转换
  15. 将N阶矩阵M置成单位阵
  16. 【转】英文论文审稿意见汇总
  17. 一番星大厂面试经验分享第一弹
  18. 自然科学类计算机,自然科学基金委员会
  19. Java解压缩技术(三)BZIP2压缩-解压缩
  20. RDkit |基于RDkit计算PBF(Plane of Best Fit)描述符数值

热门文章

  1. java的URLConnection
  2. 路径获取文件名通用方法
  3. 【原】android获取设备基本信息
  4. String.Empty,NULL和的区别
  5. 【福利】计算机公开课合集(视频教程)
  6. 在 Nginx 上支持 HTTP/3
  7. Java 11 正式发布,新特性解读
  8. MacOS系统自带截图快捷键
  9. ETL(数据仓库技术)
  10. SpringBoot之创建SpringBoot项目(idea开发)