由于深度学习模型大小以及计算资源的限制,导致将深度学习模型部署到如移动端的时候会受到一定的限制,为了解决这个问题,就形成了一个新的领域:模型压缩,即减少模型的参数以及计算量,并且依然保证模型的精度。常见的方法比如:量化、剪枝、蒸馏等,本文便是“剪枝”当中一篇非常经典的文章,也是比较有效果的一篇文章。本文方法其实比较简单:首先,使用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的情况。据统计,一般情况,也就减
最低0.47元/天 解锁文章
1830

被折叠的 条评论
为什么被折叠?



