概览:快速入门神经网络剪枝!
一、模型剪枝技术原理
什么是模型剪枝?
•深度学习网络模型从卷积层到全连接层存在着大量冗余的参数,大量神经元激活值趋近于0,将这些神经元去除后可以表现出同样的模型表达能力,这种情况被称为过参数化,而对应的技术则被称为模型剪枝。
模型剪枝是新概念吗 ?
•Dropout和DropConnect代表着非常经典的“模型剪枝技术”。
•只是这个操作仅仅发生在训练中,对最终的模型不产生影响,因此没有被称为模型剪枝技术。
•Dropout和DropConnect代表着非常经典的“模型剪枝技术”。
根据粒度的不同,至少可以粗分为4个粒度
结构化剪枝 OR 非结构化剪枝?
细粒度剪枝(fine-grained),向量剪枝(vector-level),核剪枝(kernel-level)方法在参数量与模型性能之间取得了一定的平衡,但是网络的拓扑结构本身发生了变化,需要专门的算法设计来支持这种稀疏的运算,被称之为非结构化剪枝。
而滤波器剪枝(Filter-level)只改变了网络中的滤波器组和特征通道数目,所获得的模型不需要专门的算法设计就能够运行,被称为结构化剪枝。除此之外还有对整个网络层的剪枝,它可以被看作是滤波器剪枝(Filter-level)的变种,即所有的滤波器都丢弃。
从数学来说,卷积可以理解为一种类似于加权运算一样的操作。在图像处理中,针对图像的像素矩阵,卷积操作就是用一个卷积核来逐行逐列的扫描像素矩阵,并与像素矩阵做元素相乘,以此得到新的像素矩阵。这个过程是为卷积。其中卷积核也叫过滤器或者滤波器,滤波器在输入像素矩阵上扫过的面积称之为感受野。
cnn是很多层layer的组合。每一层都通过一个不同的函数将一种activation转化为另一种。通常使用三种layer:convolutional layer, pooling layer,和fully-connected layer。将这些layer堆积起来成为ConvNet architecture.
在CNN中,卷积层是有一定的厚度的。它是有多个卷积filter组成的。通过卷积得到的图像我们一般称为featuremap(因为卷积可以提取出图像的特征features)。
举个例子,我们的图像如果是彩色rgb的图像。那么图像本身的通道数(channels)就是3。卷积时我们可以直接用通道数为3的卷积层来进行卷积。这个过程可以分解成上面的卷积过程。首先对应r通道的filter对r通道卷积得到一张featuremap。rgb一次我们可以得到3张中间过程的featuremap。最后我们将3张中间过程的featuremap对应位置相加得到最后本次卷积的结果,也就是一张featuremap。一般我们最后得到的featuremap张数称为输出通道数。有多少个输出通道就有多少个卷积层。(按照上面介绍的,每个卷积层最终能够得到一张featuremap(3个通道对应位置相加后就只剩下一张)。所以多少个卷积层就可以得到多少张最终的featuremap,也就是多少个输出的通道。
二、模型剪枝的必要性
在《To prune, or not to prune: exploring the efficacy of pruning for model compression》中探讨了具有同等参数量的稀疏大模型和稠密小模型的性能对比,在图像和语音任务上表明稀疏大模型普遍有更好的性能。
在参数的稀疏性分别为0%,50%,75%,87.5%时,模型中非零参数分别是原始模型的1,0.5,0.25,0.128倍进行了实验。实验结果表明在稀疏性为50%时,Inception V3模型的性能几乎不变。稀疏性为87.5%时,在ImageNet上的分类指标下降为2%。 Top-1,Top-5 acc表明什么含义?
除了在大模型上的实验结果,还对小模型MobileNet也进行了实验,分别在同样大小参数量的情况下,比较了更窄的MobileNet和更加稀疏的MobileNet的分类指标,发现稀疏的MobileNet模型性能明显优于非稀疏的MobileNet模型。
那Top-1 Accuracy和Top-5 Accuracy是指什么呢?区别在哪呢?
我们知道ImageNet有大概1000个分类,而模型预测某张图片时,会给出1000个按概率从高到低的类别排名,
所谓的Top-1 Accuracy是指排名第一的类别与实际结果相符的准确率,
而Top-5 Accuracy是指排名前五的类别包含实际结果的准确率。 所以相对来说Top5acc.一般情况下都要比Top1acc.
三、核心算法:
这些方法各自有交叉,无法完全分开,下面我们就基于两大不同的粒度来介绍一些训练中剪枝的代表性方法,而不再单独介绍稀疏约束以及训练前剪枝方法;
A 细粒度剪枝核心技术(连接剪枝)
B 粗粒度剪枝核心技术(通道剪枝)
四、剪枝算法的展望
1. 重要性因子选择
通过某种准则来判断一个连接或者通道是否重要,比如范数。
缺陷:但这类方法的假设前提条件太强,需要权重和激活值本身满足一定的分布。
Geometric Median方法就利用了几何中位数对范数进行替换,那是否有更多更好的指标呢?
2. 剪枝流程优化
当前大部分框架都是逐层进行剪枝,而没有让各层之间进行联动
在当前阶段冗余的模块,并不意味着对其他阶段也是冗余的
以NISP为代表的方法就通过反向传播来直接对整个网络神经元的重要性进行打分,一次性完成整个模型的剪枝。(具体细节尚不清楚)
3. 个性化剪枝
模型在剪枝完后进行推理时不会发生变化,即对于所有的输入图片来说都是一样的计算量,但是有的样本简单,有的样本复杂
---->动态推理框架,可以对不同的输入样本图配置不同的计算量,剪枝框架也可以采用这样的思路
以Runtime Neural Pruning 为代表。
4. 自动化剪枝
在提取低级特征的参数较少的第一层中剪掉更少的参数,对冗余性更高的FC层剪掉更多的参数
由于深度神经网络中的层不是孤立的,这些基于规则的剪枝策略并不是最优的,也不能从一个模型迁移到另一个模型
AutoML方法的应用 --高端
• 除此之外,还有训练前剪枝,注意力机制增强等等许多方向
AutoML for Model Compression(AMC)是其中的代表
概览:快速入门神经网络剪枝!相关推荐
- 2小时入门神经网络与深度学习
入门神经网络与深度学习 [唐宇迪带你学AI]2个小时快速入门神经网络与深度学习是什么感受? 人工神经网络就是一个大黑箱,通过这个黑箱子就可以提取出比较好的特征. p1 深度学习,就是计算机去学习(提取 ...
- ArduinoYun快速入门教程第1章ArduinoYun概览
ArduinoYun快速入门教程第1章ArduinoYun概览 本章是全书的开篇,在本章笔者将把Arduino以及Yun的方方面面介绍给大家.其中包括Arduino这个术语的解释.Yun相对其他开发板 ...
- 快速入门PyTorch(2)--如何构建一个神经网络
2019 第 43 篇,总第 67 篇文章 本文大约 4600 字,阅读大约需要 10 分钟 快速入门 PyTorch 教程第二篇,这篇介绍如何构建一个神经网络.上一篇文章: 快速入门Pytorch( ...
- 学神经网络需要什么基础,神经网络快速入门
有哪些 Python 经典书籍 . <深度学习入门>([日]斋藤康毅)电子书网盘下载免费在线阅读资源链接:链接:?pwd=bhct提取码:bhct 书名:深度学习入门作者:[日]斋藤康毅译 ...
- c# wpf listbox 高度_WPF快速入门系列(1)——WPF布局概览
一.引言 关于WPF早在一年前就已经看过<深入浅出WPF>这本书,当时看完之后由于没有做笔记,以至于我现在又重新捡起来并记录下学习的过程,本系列将是一个WPF快速入门系列,主要介绍WPF中 ...
- BERT模型超酷炫,上手又太难?请查收这份BERT快速入门指南!
点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 来自 | GitHub 作者 | Jay Alammar 转自 | 机器之心 如 ...
- BERT模型超酷炫,上手又太难?请查收这份BERT快速入门指南
2019-12-31 10:50:59 选自GitHub 作者:Jay Alammar 参与:王子嘉.Geek AI 如果你是一名自然语言处理从业者,那你一定听说过最近大火的 BERT 模型.本文是一 ...
- 深度学习工程应用快速入门
课程介绍 伴随人工智能时代的到来,深度学习技术也发挥着越来越重要作用,越来越多的技术人才开始投身入这一行业中,并希望发展成为一名深度学习算法工程师.然而,在实际的工程设计中,深度学习研发者总会面临着各 ...
- 庖丁解牛剖析国际学术论文写作的快速入门
2020年3月17日,在超千人同时在线的"智源论坛·论文写作专题报告会"上,三位智源青年科学家分别进行了精彩的在线分享,题目分别为:中国科学院计算技术研究所研究员兰艳艳<论文 ...
最新文章
- 不上市就等死?AI故事难讲,豪门盛宴背后的“血”与“泪”
- 新概念英语(1-47)A cup of coffee
- 解决在Yii2中使用PHPExcel出现Class ‘app\controllers\PHPExcel‘ not found的问题
- dedecms插件开发教程
- JS实现ul,li排序效果
- 如何写一篇酷炫的博文(博文列表中展现字幕)
- SD--如何在输出控制中增加自定义字段
- 学习官方示例 - SysUtils.EncodeDate、EncodeTime、StrToDate、StrToTime、StrToDateTime
- lamp兄弟连视频笔记
- 【LeetCode笔记】剑指 Offer 21-. 调整数组顺序使奇数位于偶数前面(Java、双指针)
- linux-用户管理
- Python解决滑块验证码
- 复旦大学提出《Meta-FDMixup》解决跨域小样本学习中的域偏移问题
- Python Imaging Library: ImageFilter Module(图像滤波模块)
- mybatis自增主键回填
- 软考中级软件设计师该怎么备考
- 多旋翼无人机动力系统发展历程
- 网易企业邮箱:与POP3、WebMail相比,为什么Imap4更被接受
- 技术领导力1-CTO 能力、素质与战略类
- 远程计算机或设备将不受连接(能联网QQ能上,但浏览器无法上网)