神经网络模型参数的压缩
近年来,深度神经网络在计算机视觉、语音识别等领域取得了巨大成功。为了完成更加复杂的信息处理任务,深度神经网络变得越来越深,也使得其计算量越来越大。然而,手机、车载等移动端应用对深度神经网络的需求越来越多,因而深度神经网络模型的压缩、加速、优化变的越来越重要。这也是本届VALSE的热点之一。
深度学习算法是计算密集型和存储密集型的,这使得它难以被部署到资源有限的嵌入式系统上。优化一般有以下两个方向:
1、通过减少参数数量,达到模型压缩的目的。而压缩基于一个很重要的理论,即神经网络模型通常是过参数化的,也就是说,我们通常不需要那么多参数 就可以表达出模型特征。
2、通过节省计算,降低计算量,达到模型运算加速的目的。
今年的VALSE大会上,关于神经网络模型的压缩、加速、优化主要有如下几个报告:
1、原微软亚洲研究院首席研究员、旷世科技研究院院长孙剑,介绍了旷视科技在网络模型加速和压缩方面的工作。
2、中科院自动化研究所模式识别国家重点实验室研究员、人工智能与先进计算联合实验室主任程健,作了“深度神经网络快速计算方法”的tutorial。
3、新加坡国立大学教授、360人工智能研究院院长颜水成教授作了“深度学习的三个维度:Compactness,Speed, and Accuracy”的特邀报告。
下面通过几个讲者的PPT来介绍一下这方面的进展。
孙剑:简化网络设计方法
旷世科技研究院院长孙剑的报告中介绍了模型压缩优化。他举了个例子,比如在对图像分类的时候,随着层级的增加,应该把图像的空间分辨率慢慢缩小,但这同时也需要增加每一层中的filter 数。另外实践中发现用小的filter 是更经济的,还有用Low-rank分解逼近的方法也比较有效。
在简化网络方面,主要考虑结构剪枝。还有一个概念是结构化剪枝。虽然仅有一字之差,但是结构剪枝和结构化剪枝是两个不同的概念。结构剪枝是指对网络结构进行修剪,而结构化剪枝是属于结构剪枝的一种具体方法,指按照特定的结构(相对于随机)进行剪枝。结构剪枝如下图所示一共有3种方法。
- 第一种方法是稀疏连接,本来一个网络里有很多连接的,其基本思想是去除不重要的连接,让这个连接变稀疏。虽然它可以减少网络的模型大小,但是不一定能够减少网络的运行时间。
- 第二种就是张量分解的方法,就是把一个卷积网络参数矩阵通过张量分解,用它的低秩特性做逼近。
- 第三种是channel 剪枝,就是训练好一个网络后,简单粗暴的把一些channel 去掉。
还有一种方法就是Low-bit表达。如下图输入一个三维的feature map,feature map标准的话都是float表示的,卷积核其实也是一个三维的矩阵,它也是float表示的。Low-bit表达就是用低精度的表达来代替这些高精度的float,比如用8位或者更加极端的两位来表示。
有两篇比较著名的工作。一个是Binary connect,他的思想是把这个weight都变成01,这也是很夸张的一个想法。下面是更进一步的工作,它是将feature和weight全变成01,叫XNOR-Net,好处是卷积神经网络里的矩阵层,可以变成一个bitcount的指令,就可以完成它想要完成的计算,这个是在硬件中很有效的一个方法,也是Low-bit网络非常吸引人的地方。优点在于:1.内存可以降得非常多;2.潜在的加速比非常大。
Low-bit表达除了能量化weight或feature,还可以量化gridient,因为gridient其实也是float的。他们团队使用的设置是weight用01表示,activation用两位表示,gridient用4位表示,他们将这个网络取名为DOReFa-Net。该网络结构在并行训练或者FPGA/ASIC上训练时可以提高不少效率。
程健:深度神经网络优化计算
程健研究员的报告主要针对嵌入式平台的深度学习优化方法。他列举了近年来在深度神经网络模型加速和压缩方面的几个有效方法:
1、剪枝与稀疏
研究表明网络中很多连接都是接近0或者冗余的,如何对这些参数进行稀疏就变的很有意义。如下图所示是SVD分解的算法性能对比。SVD分解可以从模型压缩和提高运算速度两个方面进行优化。
但是并不是只要剪枝就一定会提高运算速度。原因是如果剪枝过于随机,并不能有效提升运算速度。所以需要结构化剪枝(structured pruning)。
剪枝一般需要如下图左的三个步骤:先在原始的网络结构下训练网络,然后通过设置一个阈值,把一些权值较小的连接进行剪枝,重新训练权重,对训练好的模型再剪枝,再重新训练,直到满足设定条件为止。
2、低秩分解
有很多种分解方法,比如奇异值分解、tucker分解、块分解。
3、权值量化
通常神经网络中的权值一般用单精度的浮点数表示,需要占用大量的存储空间。而用码书对权值进行量化可以共享权值,从而减轻存储负担。
利用哈希编码对权重进行编码,从而达到压缩权重的目的。也是一种有效的方法,如下所示。
另外就是定点和二值化(fixed point / binary)的方法。量化方式有二值量化(0,1):
也有三值量化:
4、用定点来代替浮点数计算。
颜水成:深度学习的三个维度
新加坡国立大学颜水成教授介绍了深度学习的三个维度:Compactness, Speed, and Accuracy。也就是小模型、速度快、预测准。
小模型可以考虑network in network。如下所示。
极端化一点,是否可以考虑设计全部由1x1的卷积层组成小模型?如下图所示就是使用1x1的卷积,它的基本结构包括以下三个部分:
经过研究统计发现,网络在经过ReLU后,有平均超过40%的输出都是0,这些其实是无用信息,而且这些输出0值在经过ReLU前的操作也是没有意义的。可以想办法找到这些位置进行优化。
提高模型预测精度的一个有效方法是共享跨层信息,例如ResNet的跨层连接设计。
以上就是VALSE2017上关于深度学习网络模型压缩优化的部分选摘。
神经网络模型参数的压缩相关推荐
- ann神经网络模型评价指标,神经网络模型参数辨识
用MATLAB的newrb函数建立的神经网络,怎么查看网络参数 . newrb设计了径向基网络,调用格式:net=newrb[net,tr]=newrb(P,T,goal,spread,MN,DF)P ...
- 神经网络模型参数辨识,神经网络模型应用实例
1.神经网络参数如何确定 神经网络各个网络参数设定原则: ①.网络节点 网络输入层神经元节点数就是系统的特征因子(自变量)个数,输出层神经元节点数就是系统目标个数.隐层节点选按经验选取,一般设为输入 ...
- VALSE 2017 | 神经网络模型压缩优化方法
本文 首发在个人微信公众号:计算机视觉life上. 近年来,深度神经网络在计算机视觉.语音识别等领域取得了巨大成功.为了完成更加复杂的信息处理任务,深度神经网络变得越来越深,也使得其计算量越来越大. ...
- 神经网络模型结果怎么看,图像识别神经网络模型
BP神经网络模型各个参数的选取问题 样本变量不需要那么多,因为神经网络的信息存储能力有限,过多的样本会造成一些有用的信息被丢弃.如果样本数量过多,应增加隐层节点数或隐层数目,才能增强学习能力. 一.隐 ...
- 深度神经网络模型压缩方法总结
新的卷积计算方法 这种是直接提出新的卷积计算方式,从而减少参数,达到压缩模型的效果,例如SqueezedNet,mobileNet 1. SqueezeNet: AlexNet-level accur ...
- 微软NNI进行神经网络模型剪枝压缩的踩坑记录
微软NNI进行神经网络模型剪枝压缩的踩坑记录 NNI进行模型剪枝分类 NNI剪枝的流程 NNI现有剪枝方法 剩下的剪枝操作比较复杂还没有研究透,不过应该大同小异,有机会继续研究更新. 最近做毕设嵌入式 ...
- 深度神经网络模型压缩与加速研究综述
深度神经网络模型压缩与加速研究综述 文章目录 深度神经网络模型压缩与加速研究综述 前言 介绍 PARAMETER PRUNING AND SHARING A. quantization and bin ...
- 深度学习中神经网络模型压缩的解决办法( flask API、onnx、ncnn在嵌入式、流媒体端口应用)
深度学习中神经网络模型压缩的解决办法( flask API.onnx.ncnn在嵌入式.流媒体端口应用) 1 开发环境的创建 1.1 Conda简介 1.2 miniconda 1.3 conda操作 ...
- PyTorch | (4)神经网络模型搭建和参数优化
PyTorch | (1)初识PyTorch PyTorch | (2)PyTorch 入门-张量 PyTorch | (3)Tensor及其基本操作 PyTorch | (4)神经网络模型搭建和参数 ...
- Rich Caruana:压缩深度神经网络模型让你兼得可解释性与准确性!
来源: 微软研究院AI头条 本文共1757字,建议阅读5分钟. 本文讲述了在机器学习的世界里,准确性和可解释性总是不可兼得:复杂的模型准确但令人费解,简单的模型容易理解也容易出错. [ 导读 ]微软研 ...
最新文章
- Linux简单的颜色设置
- linux检测网卡步骤,linux网卡检测命令
- Grafana Labs 携手阿里云,将提供国内首款 Grafana 托管服务
- Linux NAT网络连接权威指南
- python中运算符号怎样表示_Python中的运算符与表达式
- Linux的实际操作:用户管理(查ls -ahl,chown改文件所属者,chgrp改文件所属组,usermod改用户所属组)
- 对任意长度字符串,删除其中的任意的N(N=0)个字符
- linux基本命令与终端操作、linux命令英文全称解释、ls clear cd pwd cat touch cp rm rmdir mkdir mv file find grep sudo su
- mysql n叉树_MySQL索引底层:B+树详解
- 关于直播,所有的技术细节都在这里了(一)
- oracle 扩展分区,Oracle在线扩展分区
- PMP培训内容有哪些?都要仔细看!
- ppt视频音画不同步怎么解决?ppt音画同步设置方法
- 【洛谷1137】旅行计划【拓扑排序模板】
- 给出a-z,0-9,输出所有的3个字符的组合
- PC端如何双开/多开微信(实测可用)
- 2022小美赛认证杯数学建模D题完整原创成品来啦!
- 《新科学家》:十大最不可思议计算机
- html5制作交互式课件,网易科技频道--Hot Potatoes 教你如何制作交互式Web课件的新工具...
- 用 .NET / C# 实现录屏小程序并保存为视频文件
热门文章
- Linux之centos7 VMware安装教程
- JavaScript == 和 ===
- hdu 3829 最大独立集
- C#串口数据读写——计数器数据获取重置功能记录
- GCC、VS对C++标准的支持情况总结(转载)
- 46. 考虑使用函数对象而不是函数作为STL算法的参数
- 删除链表中相邻重复元素
- Linux运行多个openssl,linux – 使用多选项解释rsa的openssl速度输出
- python设置字符_Python基础教程 将字符串格式设置功能用于字典
- 如何调节idea jvm的最大内存_那个小白还没搞懂内存溢出,只能用案例说给他听了