关于剪枝的几种方法


文章目录

  • 关于剪枝的几种方法
  • 前言
  • 一、ThiNet
  • 二、Channel Purning for Accelerating Very Deep Neural Networks
  • 三,基于深度神经网络二阶信息结构化剪枝算法
  • 总结

前言

随着人工智能时代的到来,深度学习也越来越受重视,语音识别,目标检测,自然语言处理等热门的领域目前都会用到深度网络,虽然深度网络可以很好的提取特征,但是这同样也会带来一个很大的问题,就是网络的参数量。我们无法将其运用到一些算力很小的设备上,比如说无人机,手机等。于是对于模型的优化变成了现在很热门的一个研究领域。对于模型的优化主要是对模型的压缩,常用的压缩方法有:剪枝,量化,知识蒸馏。
本次我们主要针对的是模型的剪枝。


提示:以下是本篇文章正文内容,下面案例可供参考

一、ThiNet

先上一下这个方法的示意图:

先来看第一行,如果我们可以用i+1层的一个channel的一个子集来近似代替所有的channel的话,我们可以把这层多余的channel删除,并且第i层的一个filter就代表i+1层的一个channel,于是在删除i+1的一个channel的同时,我们又可以把第i层的对应的filter删除
再看第二行,在第i+1层把部分channel删除后,我们会得到更窄的网络,但是第i+2层的维度不会变化,因为i+2层的channel对应的是i+1层的filter的个数。
再看第三行,这行是微调的示意图,这里为了节约时间,当对每一层做了剪枝后,都对当前层微调1-2遍,等所有层都微调完后,再整体调一遍。因此整体上就是上面这三步迭代应用到每一层上,一次对每一层做剪枝。

重点:如何选取选择合适的channel?

这是卷积层输出公式,假设这是我们i层的输出,也就是i+1层的输入。

这里把每个channel的值定义为这个。

于是公式(1)便可以简化为上述公式,这是所有channel层的输出。

这是损失函数,其中s便是以前channel的一个子集。作者在此采用贪心算法,去寻找最好的可以保留的s,但是次数计算量有点大,因为我们知道,要保留的通道数肯定比要删除的多,于是此损失函数又可以进一步进化为下面的函数。

这样求解的速度会更快。

前面讲的都是算法的细节和思想,那怎么应用到深层网络上呢。
这里我们把网络分为单分支和多分枝结构,单分支就按上面的来。而多分支看下图。

对于上图,我们只剪枝前两层,最后一层的结果需要和开始的那个做element-wise product,这样的话就得保证该block的最后一层卷积的输出channel个数和一开始的那个输出channel一样。对于vgg-16,由于前面10层卷积占据了90%的计算量,而全连接层又占据了86%的参数,因此作者采用对前面10层卷积进行剪枝,达到加速目的,另外将所有全连接层用一个global average pooling 层代替。

二、Channel Purning for Accelerating Very Deep Neural Networks

和上面一样,先来看一下示意图:

这篇文章也是针对通道进行剪枝的文章,和第一篇不同的地方在于他们选取channel的标准不一样,让我们看看这篇文章是怎么选取重要通道的吧。
第一步是channel selection ,这一步是采用LASSO regression来做的,就是添加了一个L1正则项,来约束权重,因为L1范数可以使得权重大部分值为0,所以权重会很稀疏,这样就可以把那些稀疏的channel减掉;第二步便是利用剪好的枝去得到权重,这一步用的是最小二乘法,来约束剪枝后的feature map 尽量和剪枝前的feature map相等,也就是最小二乘法值越小越好。

我先来解释一下上面的这个图吧。其中B代表feature map,w代表卷积核,c代表通道数,kh,kw代表卷积核的长和宽,于是一个卷积核的尺度为khkwc,最后n代表最后的feature map的通道数,同时也代表卷积核的个数。原理其实和我们上一篇的原理是一样的,通过减掉B的通道,相当于减掉w中对应的小方块,于是对应的前面一层的filter也可以删除。

所以最关键的步骤就是如何选取合适的channel。

这个公式其实和我们第一篇的那个公式差不多,唯一不同的就是这个公式采用B来稀疏化w的权重,但这个式子没办法直接优化,于是我们就在这个公式的基础上添加了一个正则项用来约束B,如下图:

这里作者正则项使用的是L1范数,即绝对值求和.于是整个步骤可以分为两步。
1,先固定w求B,如下图:

2,固定B求w,如下图:

作者在实验中发现这样迭代操作比较耗时间,因此采取的策略是先不断优化公式3,直到达到上面这个的约束时在优化公式4一次。

和上面一样,这种优化方法分为单分支和多分支,其中单分支就用上面的方法就可以直接优化。而多分枝就要按照下图的方法进行剪枝。

首先对多分支的第一层先做通道缩减,二三层正常剪枝,左后一层则按Y1+Y2-Y’来优化,其中Y’表示前面层剪枝后得到的结果。

三,基于深度神经网络二阶信息结构化剪枝算法

老样子,先上示意图:

其实这个示意图已经说的很详细了,第一步:用幂迭代法得到每个通道的hessian矩阵,第二步:用L1范数对每个通道进行处理,并且取前(1-Pi)Ni+1个通道。第三步:将选取的通道置为1,没选取的通道置为0,然后再进行训练。

总结

其实所有的剪枝方法的思想都是一样的,都是选择相对重要的通道从而达到压缩模型的目的,就是不同的论文对通道重要性的评定方法不一样。

总结一下最近看的关于剪枝的论文相关推荐

  1. 目前看的图神经网络(GNN)论文的一些总结

    该文首发于知乎专栏:在天大的日日夜夜 已获得作者授权 最近组会轮到我讲了,打算讲一下目前看的一些GNN论文以及该方向的一些重要思想,其中有借鉴论文[1].[2]的一些观点和<深入浅出图神经网络: ...

  2. 内存中有两个4字节以压缩的bcd_卷积神经网络的压缩与加速 -- 剪枝(PRUNING)论文(二)...

    Learning Efficient Convolutional Networks through Network Slimming Abstract: 讲道理 它这个摘要写得好霸气..太猛了 这个方 ...

  3. 看了这7篇论文,你会完全掌握卷积神经网络!

    目前,作为深度学习的代表算法之一,卷积神经网络(Convolutional Neural Networks,CNN)在计算机视觉.分类等领域上,都取得了当前最好的效果. 后来,基于深度神经网络和搜索树 ...

  4. CVPR 2020 论文开源项目一页看尽,附代码论文

    十三 发自 凹非寺 量子位 报道 | 公众号 QbitAI CVPR 2020中选论文放榜后,最新开源项目合集也来了. 本届CPVR共接收6656篇论文,中选1470篇,"中标率" ...

  5. CVPR 2020论文开源项目一页看尽,附代码论文

    十三 发自 凹非寺 量子位 报道 | 公众号 QbitAI CVPR 2020中选论文放榜后,最新开源项目合集也来了. 本届CPVR共接收6656篇论文,中选1470篇,"中标率" ...

  6. 怎么快速看完700页的论文呢?

    主要看摘要 每个文章问自己这样几个问题 背景 解决的问题 现有的问题 解决的方法(框架) 实施的结果和结论 把这几个问题搞完就非常快乐了 让我们来看看效果

  7. 想成为NLP算法工程师,你必须要看一下这10篇论文!

    微软亚洲研究院成立20周年时表示:NLP将迎来黄金十年. ACL2019NLP进展趋势也主要包括:预训练语言模型.低资源NLP任务(迁移学习/半监督学习/多任务学习/主动学习).模型可解释性.更多任务 ...

  8. 剪枝综述论文阅读:Methods for Pruning Deep Neural Networks

    文章目录 一.概述 1.分类 2.评估 二.Magnitude based pruning 1.权重剪枝 2.彩票定理 3.特征图和过滤器剪枝 (1)基于通道方差的剪枝 Inbound pruning ...

  9. # 科研牛人告诉研究生怎么看文献,怎么写论文csdn

    标签(空格分隔): 文献阅读及英文写作 一.先看综述 二.有针对地选择文献 三.如何阅读文献 四.提高阅读的效率 五.文献的整理 六.英文文章写作(阅读文献的副产品) 七.其他牛人的补充 终于写完了, ...

最新文章

  1. python 新运算符定义_【干货系列之萌新知识点】python与变量和运算符
  2. 【转】C#播放H264裸码流
  3. 记一次网易前端实习面试
  4. 现代软件工程 团队博客作业 如何评价个人在团队中的绩效
  5. golang goroutine实现_golang技术随笔(二)理解goroutine
  6. Java 笔试题集锦
  7. 【ElasticSearch】Es 源码之 LifecycleComponent 源码解读
  8. mobaxterm设置中文界面_如何使用MobaXterm打开WSL2的GUI程序
  9. mmap 系统调用 的使用
  10. What is Dymola?---Dymola的特点和架构
  11. Quake3 快速开平方和开平方倒数计算优化
  12. java8中的date和joda time中的日期相互转换
  13. 苹果创始人沃兹尼亚克:喜欢小米 乔布斯没那么神!
  14. postman tests获取cookie
  15. 计算机tpm管理,管理 TPM 命令 (Windows 10) - Microsoft 365 Security | Microsoft Docs
  16. 关闭Win10系统天气图标
  17. 粒子群优化算法改进之多子群合作粒子群优化算法
  18. jvm调优的简单手段---都是实际工作用到的。
  19. 马斯克亲自审核代码,裁员50%员工,硅谷程序员的福报来了
  20. e-dialog出现额外多了一层遮罩

热门文章

  1. 数据结构学习笔记:递归和汉诺塔问题
  2. 使用自定义View和属性动画做一个自动动画汉诺塔 !
  3. GWAS | 全基因组关联分析 | PLINK | 实战 | 统计遗传学
  4. css3,flex笔记
  5. YG-WGI系列堰闸结合测控一体化闸门
  6. 三星Note3预览图片与浮窗指令使用技巧
  7. Linux nohup运行.sh脚本文件
  8. Android深度性能优化-更底层、全局、多维度优化
  9. 详解torch.topk
  10. Hudi-集成 Hive