link
前言
上一章,将基于核的稀疏化方法的模型压缩方法进行了介绍,提出了几篇值得大家去学习的论文,本章,将继续对深度学习模型压缩方法进行介绍,主要介绍的方向为基于模型裁剪的方法,由于本人主要研究的为这个方向,故本次推荐的论文数量较多,但都是非常值得一读的。

基于模型裁剪的方法

  • 对以训练好的模型进行裁剪的方法,是目前模型压缩中使用最多的方法,通常是寻找一种有效的评判手段,来判断参数的重要性,将不重要的connection或者filter进行裁剪来减少模型的冗余。同样也分为regular和irregular的方式。 这类方法最多,下面列举几篇典型的方案。
  • 作者在裁剪的时候同样会考虑每一层对裁剪的敏感程度,作者会单独裁剪每一层来看裁剪后的准确率。对于裁剪较敏感的层,作者使用更小的裁剪力度,或者跳过这些层不进行裁剪。目前这种方法是实现起来较为简单的,并且也是非常有效的,它的思路非常简单,就是认为参数越小则越不重要。
  • Network Trimming: A Data-Driven Neuron Pruning Approach towards Efficient Deep Architectures 论文地址
    作者认为,在大型的深度学习网络中,大部分的神经元的激活都是趋向于零的,而这些激活为0的神经元是冗余的,将它们剔除可以大大降低模型的大小和运算量,而不会对模型的性能造成影响,于是作者定义了一个量APoZ(Average Percentage of Zeros)来衡量每一个filter中激活为0的值的数量,来作为评价一个filter是否重要的标准。APoZ定义如下:
  • 作者认为通过weight值的大小很难判定filter的重要性,通过这个来裁剪的话有可能裁掉一些有用的filter。因此作者提出了一种基于熵值的裁剪方式,利用熵值来判定filter的重要性。 作者将每一层的输出通过一个Global average Pooling将feature map转换为一个长度为c(filter数量)的向量,对于n张图像可以得到一个n*c的矩阵,对于每一个filter,将它分为m个bin,统计每个bin的概率,然后计算它的熵值 利用熵值来判定filter的重要性,再对不重要的filter进行裁剪。第j个feature map熵值的计算方式如下:
  • Designing Energy-Efficient Convolutional Neural Networks using Energy-Aware Pruning 论文地址
    这篇文章也是今天的CVPR,作者认为以往的裁剪方法,都没有考虑到模型的带宽以及能量的消耗,因此无法从能量利用率上最大限度的裁剪模型,因此提出了一种基于能量效率的裁剪方式。 作者指出一个模型中的能量消耗包含两个部分,一部分是计算的能耗,一部分是数据转移的能耗,在作者之前的一片论文中(与NVIDIA合作,Eyeriss),提出了一种估计硬件能耗的工具,能够对模型的每一层计算它们的能量消耗。然后将每一层的能量消耗从大到小排序,对能耗大的层优先进行裁剪,这样能够最大限度的降低模型的能耗,对于需要裁剪的层,根据weight的大小来选择不重要的进行裁剪,同样的作者也考虑到不正确的裁剪,因此将裁剪后模型损失最大的weight保留下来。
  • 此文的方法比较有意思,作者认为,既然我无法直观上的判定filter的重要性,那么就采取一种随机裁剪的方式,然后对于每一种随机方式统计模型的性能,来确定局部最优的裁剪方式。 这种随机裁剪方式类似于一个随机mask,假设有M个潜在的可裁剪weight,那么一共就有2^M个随机mask。假设裁剪比例为a,那么每层就会随机选取ML*a个filter,一共随机选取N组组合,然后对于这N组组合,统计裁剪掉它们之后模型的性能,然后选取性能最高的那组作为局部最优的裁剪方式。 算法流程如下:
  • 作者发现,在最后一个卷积层中,经过LDA分析发现对于每一个类别,有很多filter之间的激活是高度不相关的,因此可以利用这点来剔除大量的只具有少量信息的filter而不影响模型的性能。 作者在VGG-16上进行实验,VGG-16的conv5_3具有512个filter,将每一个filter的输出值中的最大值定义为该filter的fire score,因此对应于每一张图片就具有一个512维的fire向量,当输入一堆图片时,就可以得到一个N*512的fire矩阵,作者用intra-class correlation来衡量filter的重要性:
  • 本文为2016年的CVPR,应用场景为人脸识别的模型:DeepID。作者认为,如果一层中的某个神经元的激活与上一层的某个神经元的激活有很强的相关性,那么这个神经元对于后面层的激活具有很强的判别性。也就是说,如果前后两层中的某对神经元的激活具有较高的相关性,那么它们之间的连接weight就是非常重要的,而弱的相关性则代表低的重要性。如果某个神经元可以视为某个特定视觉模式的探测器,那么与它正相关的神经元也提供了这个视觉模式的信息,而与它负相关的神经元则帮助减少误报。作者还认为,那些相关性很低的神经元对,它们之间的连接不一定是一点用也没有,它们可能是对于高相关性神经元对的补充。在全连接层中,计算方式如下:
  • 可以看出来,基于模型裁剪的方法很多,其思路源头都是来自于Oracle pruning 的方法,即挑选出模型中不重要的参数,将其剔除而不会对模型的效果造成太大的影响,而如何找到一个有效的对参数重要性的评价手段,在这个方法中就尤为重要,我们也可以看到,这种评价标准花样百出,各有不同,也很难判定那种方法更好。在剔除不重要的参数之后,通过一个retrain的过程来恢复模型的性能,这样就可以在保证模型性能的情况下,最大程度的压缩模型参数及运算量。目前,基于模型裁剪的方法是最为简单有效的模型压缩方式。(未完待续)

深度学习模型压缩方法(3)-----模型剪枝(Pruning)相关推荐

  1. 面向弹载图像的深度学习网络压缩方法研究

    这里写自定义目录标题 源自:航空兵器 作者:高一博 杨传栋 陈栋 凌冲 摘 要 针对基于深度学习目标识别算法具有网络结构复杂.参数量大.计算延迟高等特点,难以直接应用于弹载任务的问题,对网络轻量化方法 ...

  2. 深度学习模型压缩方法综述(二)

    深度学习模型压缩方法综述(一) 深度学习模型压缩方法综述(二) 深度学习模型压缩方法综述(三) 前言 上一章,将基于核的稀疏化方法的模型压缩方法进行了介绍,提出了几篇值得大家去学习的论文,本章,将继续 ...

  3. 深度学习机器学习面试题汇——模型优化,轻量化,模型压缩

    深度学习机器学习面试题汇--模型优化,轻量化,模型压缩 提示:互联网大厂可能考的面试题 若CNN网络很庞大,在手机上运行效率不高,对应模型压缩方法有了解吗 介绍一下模型压缩常用的方法?为什么用知识蒸馏 ...

  4. 【人工智能与深度学习】基于能量的模型中的对比方法

    [人工智能与深度学习]基于能量的模型中的对比方法 回顾 在自我监督学习中的对比法 Contrastive embedding 自我监督的结果(MoCo,PIRL,SimCLR) SimCLR 降噪自动 ...

  5. 降低预测过程计算成本,这些NLP模型压缩方法要知道

    编译 | 凯隐 出品 | AI科技大本营(ID:rgznai100) 近年来,基于谷歌Transformer的语言模型在神经机器翻译,自然语言推理和其他自然语言理解任务上取得了长足进展. 通过多种语言 ...

  6. 神经网络压缩方法:模型量化的概念简介

    来源:DeepHub IMBA 本文约3200字,建议阅读6分钟 本文为你介绍如何使用量化的方法优化重型深度神经网络模型. 在过去的十年中,深度学习在解决许多以前被认为无法解决的问题方面发挥了重要作用 ...

  7. 浅谈模型压缩之量化、剪枝、权重共享

    之前陆陆续续看了许多模型压缩相关的文章,自己业务中也接触过一些相关的客户,今天周末没事做,把模型压缩相关的内容整理一下做个分享.可能更多地从科普的角度去介绍,因为我也不是专业做这方面技术的研究. 首先 ...

  8. 模型压缩:量化、剪枝和蒸馏

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 编者荐语 近年来,BERT 系列模型成了应用最广的预训练语言模型, ...

  9. 所有你要知道的 BERT 模型压缩方法,都在这里!

    模型压缩可减少受训神经网络的冗余,由于几乎没有 BERT 或者 BERT-Large 模型可直接在 GPU 及智能手机上应用,因此模型压缩方法对于 BERT 的未来的应用前景而言,非常有价值. 软件工 ...

最新文章

  1. web类协议脚本-飞机订票系统示例
  2. redis集合数据过期_如何从Redis中的集合中自动删除过期的密钥?
  3. java语言描述一个行为_设计模式之责任链模式——Java语言描述
  4. 重置npm设置_密码重置用户流程4部曲
  5. mint java_Linux mint使用
  6. leetcode 125. 验证回文串
  7. 2006年4月全国计算机等级考试二级Java语言程序设计
  8. 软件构造学习笔记-第六周
  9. 【专栏精选】Assetbundle入门
  10. 从零开始学前端:作用域、执行顺序 --- 今天你学习了吗?(JS:Day9)
  11. android用来显示界面的组件,Android 自学之基本界面组件(上)
  12. 序列化和反序列化_PHP序列化和反序列化
  13. for each in for in for of
  14. [转]PowerDesigner使用技巧
  15. v强制打开usb调试平台_一加OnePlus 8T手机怎么打开手机开发者选项,开启USB调试连接电脑...
  16. vb6源码 ymodem_VB6 实时曲线显示源码全套资料
  17. 什么用matlab做ewma,ewma模型
  18. 初创公司怎么设置股权结构?
  19. 方图来袭,且看483万亿美元的场外衍生品市场如何风云变幻
  20. 【Ant】win 10 / win 11: Ant 下载、安装和部署

热门文章

  1. 四、linux编译规则文件Makefile
  2. 好好学python · 内置函数(range(),zip(),sorted(),map(),reduce(),filter())
  3. Linux学习8之Shell编程--基础正则表达式
  4. HDU 4609 3-idiots
  5. VMware vSphere Client安装Centos7
  6. 血泪史:阿里云+ubuntu+vnc+xfce4
  7. 排序和顺序统计学(2)——快速排序
  8. Lync客户端导入联系人
  9. 命令行 sc delete 的使用(删除服务项)
  10. ipsec_over_gre