CNN模型压缩——使用网络稀疏化方法(Learning Effcient Convolutional Network through Network Sliming)
文章目录
- Introduction
- Related Work
- 网络稀疏化(Network Slimming)
- why choose chennel-level sparsify
- how to implement
- 在模型中加入BN(Batch Normalization)层
本文中的方法来自于论文《Learning Effcient Convolutional Network through Network Sliming》
论文:Learning Effcient Convolutional Network through Network Sliming
Introduction
CNN模型压缩最主要的是下面三个方面:
- 模型大小(model size),其中包含训练参数和关联的网络结构。
- 运行内存(run-time memory),包括加载训练参数等。
- 计算操作数量(numbers of computing operation)。
相比于CNN网络,该方法做了以下修改:
- 训练的时候,在第iii层和第i+1i+1i+1层加入了一层chennel scaling factors的训练层,他们与前一层的卷积层意一一对应,与后一层卷积层使用全连接。
- 在训练完成之后,检查scaling层的参数,如果参数低于某一阈值就删除该chnnel,并且还要对其他channel进行微调。
Related Work
其他CNN模型压缩的方法还有:
- Low-rank Decomposition,该方法对全连接层有奇效。
- Weight Quantuzation,该方法通过hash将权重由一个较大的范围转变到一个较小的范围。例如,在MNIST中,将像素的值由[0,255]转变为[0,1][0,255]转变为[0,1][0,255]转变为[0,1]。
- weight pruning/Sparsify,权重剪枝,将一些值较小的一些权重删去,从而达到压缩的目的。
- structured pruning/sparsify,t通过随机停用一些channel来达到压缩的目的,类似于TensorFlow中的Dropout层通过将一定数量的channel变为0类似。
- neural architecture learning,这个类似于CNN中的Inception模型,让网络在预先的几个模型中进行学习,选择最好的。
网络稀疏化(Network Slimming)
稀疏化:按照我的理解即是淘汰部分对结果影响较低的权重、或者通道等。
why choose chennel-level sparsify
稀疏化可以用于不同维度。我们可以在weight-level、kernel-level、channel-level、layer-level进行稀疏化。
在weight-level、kernel-level进行处理,能够具有较高的压缩效率,同时还兼具灵活性和普遍性,但是往往需要软件以及硬件支持才能在准确度兼具的情况下进行。
相反,在layer-level层面上进行,就缺乏灵活性和普遍性,事实上只有在层数>50时,对layer进行稀疏化才能获得较好的效果。
在chennel层面进行稀疏化,能够在一定程度上兼具上述优点,同时不需要软件和硬件支持。
how to implement
在scaling层,如果仅仅只将factor较小的channel删除,那么仅仅只能压缩十分之一。因此,还需要对其他channel进行微调(fine-tune),在这里映入了L1-pealty loss即在最终的loss函数中加入正则化。
lossfunctiong:L=∑(x,y)l(f(x,W),y)+λ∑γ∈Tg(γ)loss functiong: \\ L = \sum_{(x,y)}l(f(x,W),y)+\lambda\sum_{\gamma\in \Tau}g(\gamma) lossfunctiong:L=(x,y)∑l(f(x,W),y)+λγ∈T∑g(γ)
其中,(x,y)代表input,output,W表示训练权重,λ表示平衡前后loss的超参数,T表示scaling层的参数,一般g函数选择L1或者是smooth−L1(x,y)代表input,output,\\W表示训练权重,\\ \lambda表示平衡前后loss的超参数,\\ \Tau 表示scaling层的参数,\\一般g函数选择L1或者是smooth-L1(x,y)代表input,output,W表示训练权重,λ表示平衡前后loss的超参数,T表示scaling层的参数,一般g函数选择L1或者是smooth−L1
下面是关于smooth-L1的解释:
L1;smooth={∣x∣if ∣x∣>α;1∣α∣x2if ∣x∣≤αL_{1;smooth} = \begin{cases}|x| & \text{if $|x|>\alpha$;} \\ \frac{1}{|\alpha|}x^2 & \text{if $|x| \leq \alpha$}\end{cases} L1;smooth={∣x∣∣α∣1x2if ∣x∣>α;if ∣x∣≤α
α\alphaα is a hyper-parameter here and is usually taken as 1. 1α\frac{1}{\alpha}α1 appears near x2x^2x2 term to make it continuous.
Smooth L1-loss combines the advantages of L1-loss (steady gradients for large values of xxx) and L2-loss (less oscillations(振荡,因为L1正则化当x在0附近时,会在-1,1振荡) during updates when xxx is small).
Another form of smooth L1-loss is Huber loss. They achieve the same thing. Taken from Wikipedia, Huber loss is
Lδ(a)={12a2for ∣a∣≤δ,δ(∣a∣−12δ),otherwise.L_\delta (a) = \begin{cases} \frac{1}{2}{a^2} & \text{for } |a| \le \delta, \\ \delta (|a| - \frac{1}{2}\delta), & \text{otherwise.} \end{cases} Lδ(a)={21a2δ(∣a∣−21δ),for ∣a∣≤δ,otherwise.
——引用自StackExchange
在模型中加入BN(Batch Normalization)层
在BN层中对数据进行下列变化:
z^=zin−μβσ2+ϵ;zout=γz^+β{\widehat{z}=\frac{z_{in} - \mu_{\beta}}{\sqrt{\sigma^2+\epsilon}}}; {z_{out} = \gamma \widehat{z}+\beta} z=σ2+ϵzin−μβ;zout=γz+β
其中μβ为样本中位数,σ为方差,γ,β是可训练的参数其中\mu_{\beta}为样本中位数,\sigma为方差,\\\gamma,\beta 是可训练的参数 其中μβ为样本中位数,σ为方差,γ,β是可训练的参数
事实上,如果我们不加入BN层,scaling层的factor值就无法代表重要性(虽然我们依然可以通过参数来选择channel),因为我们可以将权重的值扩大n倍,将factor的值缩小n倍,而不会影响输出结果。
(待续)
CNN模型压缩——使用网络稀疏化方法(Learning Effcient Convolutional Network through Network Sliming)相关推荐
- 模型剪枝经典论文解读:《Learning Efficient Convolutional Networks through Network Slimming》
Learning Efficient Convolutional Networks through Network Slimming 摘要: CNN在落地中的部署,很大程度上受到其高计算成本的限制.在 ...
- 【综述】闲话模型压缩之网络剪枝(Network Pruning)
关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 来自 | CSDN 地址 | https://blog.csdn.net/jinz ...
- 【嵌入式AI】CNN模型压缩(剪枝,量化)详解与tensorflow实验
1,CNN模型压缩综述 1 模型压缩的必要性及可行性 (1)必要性:首先是资源受限,其次在许多网络结构中,如VGG-16网络,参数数量1亿3千多万,占用500MB空间,需要进行309亿次浮点运算才能完 ...
- 闲话模型压缩之网络剪枝(Network Pruning)篇
1. 背景 今天,深度学习已成为机器学习中最主流的分支之一.它的广泛应用不计其数,无需多言.但众所周知深度神经网络(DNN)有个很大的缺点就是计算量太大.这很大程度上阻碍了基于深度学习方法的产品化,尤 ...
- CNN 模型压缩与加速算法总结
CNN 模型压缩与加速算法 转载地址:https://blog.csdn.net/QcloudCommunity/article/details/77719498 导语:卷积神经网络日益增长的深度和尺 ...
- CNN 模型压缩与加速算法综述
导语:卷积神经网络日益增长的深度和尺寸为深度学习在移动端的部署带来了巨大的挑战,CNN模型压缩与加速成为了学术界和工业界都重点关注的研究领域之一. 作者:姜媚 前言 自从AlexNet一举夺得ILS ...
- CNN模型压缩加速综述
前言 自从AlexNet一举夺得ILSVRC 2012 ImageNet图像分类竞赛的冠军后,卷积神经网络(CNN)的热潮便席卷了整个计算机视觉领域.CNN模型火速替代了传统人工设计(hand-cra ...
- 【剪枝算法】通过网络瘦身学习高效的卷积网络Learning Efficient Convolutional Networks through Network Slimming论文翻译
此论文翻译仅仅用于自己方便学习.译文来自其他处. 在许多实际应用中部署深度卷积神经网络(CNN)很大程度上受到其计算成本高的限制.在本文中,我们提出了一种新的CNNs学习方案,能同时1)减小模型大小; ...
- 【模型剪枝】|Learning Efficient Convolutional Networks through Network Slimming
作用对象:BN层(和不重要的通道) 作用方式: imposes sparsity-induced regularization on the scaling factors(比例因子) 通过对批量归一 ...
- 转-CNN模型的压缩与加速算法综述
本文转自微信公众号:微信AI 原文地址:链接 前言 自从AlexNet一举夺得ILSVRC 2012 ImageNet图像分类竞赛的冠军后,卷积神经网络(CNN)的热潮便席卷了整个计算机视觉领域.CN ...
最新文章
- 我是如何做到的:不切换 Git 分支,同时在多个分支上工作的?
- 【必看】小公司如何做网络规划
- 扬州大学计算机专业考研分数线,扬州大学2021考研分数线已公布
- gcc-5.4.0 static dwarf2 compile
- zookeeper 的安装配置及简单使用
- 利用IDEA创建hadoop文件
- “耳边的AI助理” 出门问问发布TicPods 2系列头控真无线耳机
- Nginx upstream性能优化
- Java CSV操作(导出和导入)
- 毕设题目:Matlab三维装箱
- DiffMerge 工具记录
- Pycharm 专业版与社区版的区别
- aide制作软件教程_AIDE开发教程合集
- ABC-Endless Walk-(缩点+拓扑dp)
- NLP自然语言处理系列-音乐推荐系统实战 -计算相似度得到推荐结果
- [RoarCTF 2019]Easy Calc
- GitHub 被超火的 ChatGPT 霸榜!
- matlab geoshow 地质,Matlab 绘制三维立体图(以地质异常体为例)
- Hello, Weka
- Android之获取移动网络ip