模型压缩-剪枝

这篇文章是对自己关于模型压缩进行学习的总结与归纳。在研究模型压缩这一块的内容这么长时间,发现自己不够深入,有些混乱,因此希望这篇文章可以让自己的思路更加清晰。

模型压缩的方法中,包括剪枝,量化,多值网络,模型蒸馏等。其中剪枝的方法,应用的更多,此篇文章主要就说剪枝。剪枝最初是在决策树学习算法中,用于对付“过拟合”的主要手段。因为在决策树学习中,为了尽可能正确分类训练样本,结点划分过程将不断重复,有时会造成决策树分支过多,从而使模型过拟合。因此,可通过主动去除一些分支来降低过拟合的风险。

在模型压缩的过程中,也是借助于这样的思想。因为在大型模型中,总是不可避免的存在大量的权重冗余,这种冗余,有时甚至会导致模型的准确率降低。因此借助剪枝的方法压缩模型,在压缩率合适的情况下,会提高模型准确率同时减少模型大小。也有一些网络为了向移动终端部署,也会考虑损失一部分的准确率,来节省时间和空间。

由我查看论文来看,剪枝分为两种。第一种,基于幅值的剪枝;第二种,基于通道的剪枝。下面分析一下这两种剪枝方法:

一、基于幅值的剪枝

可参考论文: (1)Song Han 的文章 Deep Compression: Compressing Deep Neural Network with Pruning, Trained Quantization and Huffman Coding.

(2)Michael Zhu and Suyog Gupta的文章:To prune, or not to prune: exploring the efficacy of pruning for model compression

1、主要思想:将小于一定阈值的权重抛弃。该阈值可根据剪枝率确定。

2、方法:设置一个跟权重形状相同的mask(其值为二值张量,0或者1),用来与权重相乘,从而决定哪些权重要被剪掉(剪枝掉的权重不会再接收梯度,不可逆)。而mask中值的设置,可将权重排序,将低于阈值的权重对应的掩码设置为0.

3、实现:tensorflow库中有对文章(2)的实现,经过实验该方法还是挺有效果的。

实验过程包括三步:第一,训练原始模型;第二,对训练得到的模型,进行剪枝;第三,删除训练图中的剪枝结点(这一步必须要做,否则的话会导致模型变大)

二、基于通道的剪枝

参考论文:(1)Channel Pruning for Accelerating Very Deep Neural Networks;

(2)Zhuang Liu等人的文章:Learning Efficient Convolutional Networks through Network Slimming

(3)Hao Li等人的文章:Pruning filters for efficient convnets

1、主要思想:该方法是将不重要的整个权重通道剪掉,从而将模型变小

2、方法:对已经训练好的模型,选择要剪枝的不重要(或不太重要)的通道,删除这些通道,构造新的模型图;重新训练,恢复准确率

3、实现:复现过第三篇文章,效果还不错;

最近腾讯新出的PocketFlow框架,有些参考第二篇文章,又加入了新的内容。在尝试利用其给出的example,进行训练,结果还可以;

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值