论文笔记:ThiNet——一种filter级的模型裁剪算法
来源:互联网 发布:网络音乐吧飘飘可可mp3 编辑:程序博客网 时间:2024/05/17 06:26
论文地址:ThiNet: A Filter Level Pruning Method for Deep Neural Network Compression
本文地址:http://blog.csdn.net/wspba/article/details/77427960
前言
近两年来,有关模型压缩的论文越来越多,人们不再一昧的只追求强大的性能,而是开始慢慢的将模型的大小、运算量以及效率考虑进来,人们做的越来越多的是,在性能可接受的范围内,模型越小越好。这也说明了一点,深度学习模型已经开始被广泛的运用在了平常的生活当中,可以理解为现在的手机和以前的大哥大之间的关系。今天分享的一篇文章是今年ICCV的一篇入选论文,是南京大学的作品:ThiNet: A Filter Level Pruning Method for Deep Neural Network Compression,所提出的一种与以往方式不同的模型裁剪方案。
动机
Pruning Filters for Efficient Convnets、APoZ,这两篇文章可以作为之前公认效果很好的模型压缩的代表,他们分别从每一层的weight以及输出的feature map出发,通过评价weight或者feature map的重要性,将对应的filter给裁掉,来达到模型压缩的效果。
可以这么说,这两种所代表的方法,都是根据这一层的weight或者feature map,来决定当层所需要被裁掉的参数,但是本文的作者认为,这两种方法,都没有考虑到由于这样的裁剪给下一层会带来什么样的影响,因此作者提出了一个这样的想法,如果能够利用第i+1层的输入的一个子集,就能够产生和原始输出近似的结果,那么我们就可以将剩下没有用到的输入给剔除掉,那么上一层对应的输出以及相应的filter也被提出,这样既可以兼顾到由于裁剪所带来的影响,也可以达到模型压缩的效果,见下图。
方案
由于涉及到feature map,因此本文也是数据驱动的方法。在卷积层中,一个卷积操作可以看成以下方式:
其中 每一个input channel的卷积结果,而输出为这些结果在所有input channel的求和,如果我们能够找到一个input channel的子集,可以满足,也就是说,如果我只用原始输入的一部分就能够达到和原始输入一样的效果,那我也就没有要其他剩下输入的必要了。于是就变成了以下优化问题:
为了方便求解,可以看成:
其中T为S在C上的补集,也就是说这些输入在经过卷积之后的得到的输出最小。
关于实现,作者是通过一种greedy的方式,在输入通道中不断遍历得到的:
在得到了裁剪目标之后,就可以将这些对应的filter给裁剪掉,因为是filter级别的,因此可以适用在各种计算平台上,实现起来也较简单。在裁剪完毕之后,作者还另外做了一步,减少重构误差:
其中 为剩余输入所产生的卷积结果,在这里w可以看成在剩余通道上的一个权重,可以这么理解,剩余的输入可以看成一个具有很强表达能力的字典,而w就是这个字典用来表达原始输出的系数,这样就能用来进一步减少输出与原始输出之间的误差。
最后一步就是finetuning,作者提出,在每一步裁剪之后,仅通过一个较小的学习步长来略微提升模型性能,这样可以避免模型进入到局部最优中,而在最后一步裁剪之后,再通过一个较大的学习步长来恢复模型的性能。
实验结果
作者在ImageNet数据集上,使用VGG16和ResNet-50上得到的实验结果如下:
总的来说,这种压缩方法的性能还是不错的。
总结
虽然目前的深度神经网络都具有非常强大的性能,具有非常好的表达能力,但是它的参数一定是存在冗余的,如何能够找到一种好的评价手段,来找到模型中这些冗余的部分,并将它们剔除掉,也就是模型压缩所做的事情。
- 论文笔记:ThiNet——一种filter级的模型裁剪算法
- 阅读笔记:一种用于深度神经网络压缩的滤波器级别的剪枝算法ThiNet
- ThiNet算法详解
- 算法学习笔记 —— MergeSort 的一种循环实现
- 论文 | AlphaGo Zero 的模型和算法
- 论文笔记:AlexNet模型
- 论文笔记:VGG模型
- 我的论文:一种粗糙集改进算法1
- Linux根文件系统裁剪 论文阅读笔记
- 【裁剪】线段的裁剪——Cohen-Sutherland算法及代码实现
- 【裁剪】线段的裁剪——Liang-Barskey算法以及代码实现
- 判断质数的一种高效方法——基于裁剪策略
- 光栅图形学算法——裁剪算法
- 一种基于闪存的数据库复合存储模型的论文总结
- 一种强化的基于局部直方图裁剪均衡化的对比度调节算法。
- [iOS] 图像处理 - 一种高效裁剪图片圆角的算法
- 自己的笔记——filter
- 直线的裁剪算法
- 选择器的优先级分析
- 骨骼蒙皮动画(Skinned Mesh)的原理解析(一)
- Nginx 日志查询(类型于SQL条件的多样式查询)
- 超强PHP集成环境,支持800多个不同PHP版本同时运行,无限自定义添加mysql与php版本
- Grafana Time Range设置实现同一Dashboard下不同Graph时间独立
- 论文笔记:ThiNet——一种filter级的模型裁剪算法
- 理解js设计模式之策略模式
- 简易解说拉格朗日对偶(Lagrange duality)
- 运维定位服务故障时,前5分钟都在忙啥?
- html网页布局之大盒套小盒布局
- 纯绿色集成环境,可切换180个Mysql、700个PHP版本
- Dubbo_spring配置说明
- JVM学习笔记(1)
- eclipse在线安装svn插件