Network slimming,一个比较好用的模型剪枝方法

由于深度学习模型大小以及计算资源的限制,导致将深度学习模型部署到如移动端的时候会受到一定的限制,为了解决这个问题,就形成了一个新的领域:模型压缩,即减少模型的参数以及计算量,并且依然保证模型的精度。常见的方法比如:量化、剪枝、蒸馏等,本文便是“剪枝”当中一篇非常经典的文章,也是比较有效果的一篇文章。本文方法其实比较简单:首先,使用L1 regularization对BN层的scaling factor进行稀疏化训练,然后将scaling factor较小的参数相连接的filter减掉,达到减少模型size的目标。最后再重新finetune剪枝后的网络,以达到更好的效果。


论文名称:Learning Efficient Convolutional Networks through Network Slimming

作者: Zhuang Liu & Jianguo Li 等

论文链接: https://arxiv.org/abs/1708.06519

github:https://github.com/liuzhuang13/slimming


模型压缩加速方法介绍

  • Low-rank Decomposition

采用奇异值分解等方法对权重矩阵进行分解,以达到减少矩阵大小的作用,这种方法适用于全连接层,大概可以减少3倍的模型大小,但是对于卷积层,作用不大。

  • Weight Quantization

参数量化,比如将参数量化的int8,或者量化到-1,0,1,可以较大的提升模型的速度,但是这种方法往往较难保证精度,精度一般都会下降。

  • Weight Pruning / Sparsifying

参数剪枝与稀疏化,将不重要的较小的权重置为0。这就需要矩阵较为稀疏才能起作用。

  • Structured Pruning / Sparsifying

结构化剪枝就是不单单是对每个参数,而是对网络结构进行剪枝,比如:channel,neurons,layers等

本文方法:Network Slimming

Advantage of Channel-level Sparsity

首先需要指出的是,稀疏化可以应用在各个level: weight-level, kernel-level, channel-level, layer-level. 其中weight-level的稀疏化程度最高,也可以达到最大的压缩率,但是在weight-level进行加速,往往需要特殊的软硬件加速器,来对稀疏的模型进行加速。

与其相反的layer-level,相对比较简单,不需要特殊的硬件,但是对layer比较多的时候才具有一定的效果,比如50个layer以上,想想可以理解,把50个layer减到40个layer可能还能保留一定的精度。但是10个layer减少到5个layer,差别就比较大了。

相比之下,channel-level就是一种很好的平衡,即不需要特殊的硬件同时还保留了一定的复杂度。

但是channel-level依然具有一定得挑战,由于channel-level的剪枝会影响到输入和输出,这就使得直接在预训练模型上面将权重减掉是不行的,因为一般不会存在输入和输出都接近0的情况。据统计,一般情况,也就减

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值