现在“边缘计算”越来越重要,真正能落地的算法才是有竞争力的算法。随着卷积神经网络模型堆叠的层数越来越多,网络模型的权重参数数量也随之增长,专用硬件平台可以很好的解决计算与存储的双重需求,但目前还不成熟,存在些亟待解决的问题,没能大规模商用。对模型进行参数量化的主要目的是减小模型存储体积,加速运算,能够将算法应用在通用的嵌入式移动平台。陆陆续续阅读了关于模型量化的论文,通过这篇博客做一个小结吧,欢迎交流讨论。

模型量化目前主要有两个究方向,一个研究方向是权值共享,基本思想是多个网络连接的权重共用一个权值,还有一个是权值精简,既权值的低比特表示。

1、权值共享

主要代表性研究工作如下:

1.1 聚类方式共享

文献【1】是深鉴科技的韩松大佬写的,论文质量非常高,是ICLR2016的best paper,有幸使用过他们公司的定点工具,虽然精度有一定损失,但还是可以接受的。论文对每一层weight矩阵利用K-means聚类算法聚类成若干个cluster,用每个cluster的聚类中心值代表该cluster的权重,由于同一cluster的weight共享一个权重大小,因此我们只需要存储权值的cluster的index即可,通过查表获取该index对应的value,为了减少精度损失,再通过训练微调的方式对权重进行补偿,所有的梯度信息按照权重矩阵之前的分组进行。下图很形象的说明了聚类量化与训练过程

文献【2】提出一个量化神经网络架构(Q-CNN),基于k-means聚类算法加速和压缩模型的卷积层和全连接层,通过减小每层输出响应的估计误差可实现更好的量化结果,并提出一种有效的训练方案抑制量化后的多层累积误差 。

1.2 哈希方式共享

文献【3】设 计 了 一 种新型网络架构hashnet,利用哈希函数随机将网络连接权重分组到哈希桶(hash bucket),每个哈希桶内的网络连接共享相同的权重参数,该方法与特征哈希类似(feature hashing),将高维数据降到低维空间,该方法可显著减小模型体积,并对输出精度影响较小。

2、权值精简

我们知道,现在神经网络的weight和bias都是用单精度4字节的float32或者双精度8字节的float64的表示,为了降低模型的存储空间而达到模型压缩加速的目的,越来越多的学者企图通过更少的bit位来表示模型实际的浮点型权值。

这种权值精简的方法之所以有效,从广义上讲,有两个原因:首先DNN经过训练后,对噪声和较小的扰动是非常鲁棒的,这就意味着,即使我们巧妙的将数据四舍五入,仍然可以得出一个相当准确的结果(手动滑稽.jpg);其次,我们将训练好模型的权重和激活进行可视化会发现,每层权重和激活通常处于较小的范围内,这样我们可以将较小的bit集中在较小的范围内,当然准确了解这个范围是至关重要的。

这方面又可以分为定点和动态定点两个小方向

2.1定点:

文献【4】发表于2011年,主要介绍了在X86 CPU下大大降低计算成本的一些技术,其中提到了8位定点化技术,应该是最早一篇介绍8位定点论文了。论文采用线性定点化的方法,将激活值定点化位unsigned char,权值定点化位signed char,将bias定点化位32bit int,输入层仍然采用浮点数(这个应该跟他做的是语音识别实验有关),实验结果表明8bit定点化在模型精度不受什么影响的前提下大幅度提升速度(2.5x)

文献【5】开发并测试8-bit近似算法,将32bit的梯度和激活值压缩到8-bit,这里的8bit用来表示浮点数,并通过动态确定指数位和小数位的范围来减少误差,利用GPU集群测试模型和数据的并行化性能,在保证模型预测精度的条件下,提出的方法取得2x的数据传输加速

文献【6】表明,使用随机取整(stochastic rounding)时,仅16位定点表示法,可以显著降低内存和浮点运算,而在分类精度方面几乎不会降低。具体做法是首先正常训练神经网络模型(按float32全精度),接下来,我们使用16位定点计算对网络进行retrain。不过该论文没有开源代码,且该论文验证性能的硬件平台是FPGA,并为矩阵乘法设计了一个高吞吐、高性能的体系结构,并不适用于通用的ARM CPU,不过这种随机取整的方法或许值得借鉴:

文献【7】是今年CVPR谷歌推出的量化论文,受文献【4】和文献【6】的启发。提出了仅整数算术推理的量化方法,将weights和input量化位uint8,bias量化位unit32,并将unit32的accumulators量化位unit8,与文献【4】不同,这里采用的不是线性量化方法,而是非线性量化,通过缩放系数S(scale)和零点Z(zero-point)确定实际值r对应的量化值q,即  ,权重和输入的S和Z根据每一层的权值范围确定:scale = (max - min) / (qmax - qmin),zero_point = qmin – min / scale,偏置的S=S1*S2(S1、S2分别为权值和输入的scale),Z=0。同时作者协同设计了一个模拟量化训练框架来保证端到端的精度。训练期间,反向和普通一样,用浮点数保存权值和偏置,前向的时候采用伪量化,反向的误差修正不量化,且BN层融入了conv层一起做量化,节省了单独做BN的计算,如下图所示

作者还提出模型量化时,用ReLU6代替ReLU,可以增加精度。

说句题外话,目前成熟的量化方案都是8bit量化,主要是NVIDIA的tensorRT方案,直接量化,无需训练;还有就是google的那套方案,也就是是文献[7]中提到的,需要retain,比NVIDIA的那套麻烦点。不过精度有保障。NVIDIA的那套量化方案下载地址如下http://on-demand.gputechconf.com/gtc/2017/presentation/s7310-8-bit-inference-with-tensorrt.pdf

文献【8】提出一种模型近似框架 ristretto,用于分析模型卷积层和全连接层的权重和输出的数值分辨率,进而将浮点型参数转化为定点型数值,并通过训练过程对定点型模型进行微调,在容许误差为1%的条件下,将 caffenet和 squeezenet压缩到8-bit参数形式

除了把参数量化为8或者16bit,也有一些论文将其量化为2的幂次,有利于在硬件上通过通过位移操作表示乘法过程

文献【9】提出渐进式网络量化(Incremental Network Quantization,INQ)无损低比特权重量化技术(5 bit),可将浮点型深度神经网络模型转化为无损的低比特二进制化数据模型,在硬件通过移位计算实现乘法过程,有利于在移动平台的部署和加速,该方法首先将模型的每一层参数按照其绝对值分为两组,将权重值较大一组的参数量化后保持固定,另外一组参数通过再训练过程进行调整,以补偿参数量化所造成的精度损失,重复该过程直到权重全部量化完毕。

文献【10】也是采用移位和加法来实现乘法,从而减少计算量。比如计算 y=wxy=wx, 而 ww 通过量化已经被我们表示成了类似于 这种形式,于是 

除了将参数量化为8bit 16bit或者2的幂次,现在学术界把更多精力放在2值 3值或者XNOR经网络这种极限的bit压缩上。中且这方面的论文解读比较多,再这里就不多说了。这种方法往往精度损失比较大实用性不强,虽然乘法变为了位操作,理论上速度提升很大,但在ARM上实际并没有,应该是需要专门的硬件平台(fpga)支持才行,而且ARM对乘法操作做了优化,速度其实也很快,另外,在ARM上现在也没有很好用的2值库,这些都限制了2值网络在ARM上的应用

但是 ,文献【11】(Face++提出的 DoReFa-Net)利用低比特的梯度参数训练低比特的模型权重,且激活值也为低比特数据,该技术可对训练和预测过程进行加速,并可有效地应用到CPU,FPGA,ASIC和 GPU等硬件。DoReLa-Net 的贡献在于提供了不同量化因子的实验结果,即 2,4,8,16,32 bit 的权重、激活函数量化,同时在后向反馈中也实现了梯度的量化

2.2动态定点:

卷积神经网络中,网络各层数值动态范围存在差异,例如在普遍采用 ReLu作为激活函数的网络模型中,当该神经元输出大于 0 时,该值等于上层的输出与权重的点积,其输出数据范围远大于当前层权重。定点表示的数值范围有限,因此采用动态定点(Dynamic fixed point)来表示网络的权重和激活函数,具体可见文献【12】【13】

先简单说一下,以后有时间在慢慢补充完善,欢迎交流讨论
--------------------------------------------------------------------------------------------------------------------

参考文献

[1]Han S, Mao H, Dally W J. Deep compression: Compressing deep neural networks with pruning, trained quantization and huffman coding[J]. arXiv preprint arXiv:1510.00149, 2015.

[2]Wu J, Cong L, Wang Y, et al. Quantized Convolutional Neural Networks for Mobile Devices[C]// IEEE Conference on Computer Vision and Pattern Recognition. IEEE Computer Society, 2016:4820-4828.

[3]Chen W, Wilson J, Tyree S, et al. Compressing neural networks with the hashing trick[C]//International Conference on Machine Learning. 2015: 2285-2294.

[4]Vanhoucke V, Senior A, Mao M Z. Improving the speed of neural networks on CPUs[J]. in Deep Learning and Unsupervised Feature Learning Workshop, NIPS, 2011.

[5]Dettmers T. 8-bit approximations for parallelism in deep learning[J]. arXiv preprint arXiv:1511.04561, 2015.

[6]Gupta S, Agrawal A, Gopalakrishnan K, et al. Deep learning with limited numerical precision[C]//International Conference on Machine Learning. 2015: 1737-1746.

[7]Jacob B, Kligys S, Chen B, et al. Quantization and training of neural networks for efficient integer-arithmetic-only inference[J]. arXiv preprint arXiv:1712.05877, 2017.

[8]Gysel P, Motamedi M, Ghiasi S. Hardware-oriented approximation of convolutional neural networks[J]. arXiv preprint arXiv:1604.03168, 2016.

[9]Zhou A, Yao A, Guo Y, et al. Incremental Network Quantization: Towards Lossless CNNs with Low-Precision Weights[J]. 2017.

[10]Gudovskiy D A, Rigazio L. ShiftCNN: Generalized Low-Precision Architecture for Inference of Convolutional Neural Networks[J]. arXiv preprint arXiv:1706.02393, 2017.

[11]Zhou S, Wu Y, Ni Z, et al. DoReFa-Net: Training Low Bitwidth Convolutional Neural Networks with Low Bitwidth Gradients[J]. 2016.

[12]Courbariaux M, Bengio Y, David J P. Training deep neural networks with low precision multiplications[J]. Computer Science, 2014.

[13]Williamson D. Dynamically scaled fixed point arithmetic[C]// Communications, Computers and Signal Processing, 1991. IEEE Pacific Rim Conference on. IEEE, 1991:315-318 vol.1.

神经网络模型量化论文小结相关推荐

  1. 定点 浮点 神经网络 量化_神经网络模型量化论文小结

    神经网络模型量化论文小结 发布时间:2018-07-22 13:25, 浏览次数:278 现在"边缘计算"越来越重要,真正能落地的算法才是有竞争力的算法.随着卷积神经网络模型堆叠的 ...

  2. 神经网络模型量化方法简介

    笔记mark: jpg算法中就用到了量化. png压缩算法中用到了霍夫曼编码. 本文主要梳理了模型量化算法的一些文章,阐述了每篇文章主要的内核思想和量化过程,整理了一些对这些文章的分析和看法. Dee ...

  3. 作者解读ICML接收论文:如何使用不止一个数据集训练神经网络模型?

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:欧明锋,浙江大学 导读:在实际的深度学习项目中,难免遇到多个相似数 ...

  4. 【学术相关】作者解读ICML接收论文:如何使用不止一个数据集训练神经网络模型?...

    作者:欧明锋,浙江大学 导读:在实际的深度学习项目中,难免遇到多个相似数据集,这时一次仅用单个数据集训练模型,难免造成局限.是否存在利用多个数据集训练的可能性?本文带来解读. 01 介绍 迄今为止,在 ...

  5. 神经网络模型训练简记(二)

    神经网络模型训练简记(二) 内容简述 三.机器视觉网络模型分类及简介 3.2目标检测 3.2.1RCNN 3.2.2SPPNet 3.2.3Fast RCNN 3.2.4Faster RCNN 3.2 ...

  6. 数学建模神经网络应用,构建神经网络模型方法

    数学模型的建立与求解 . 8.3.2.1数学模型的求解本次研究采用地下水数值模拟软件ProcessingModflow,利用美国地质调查局所开发的三维有限差分地下水流模型Modflow(Modular ...

  7. 神经网络模型预测控制,神经网络回归预测模型

    bp神经网络为什么要采用非线性函数来进行预测? 提问:bp神经网络为什么要采用非线性函数来进行预测? 回答:简单的讲,主要是复杂的bp神经网络的行为动态及神经元之间的相互作用是无法用简单的线性函数来描 ...

  8. 深度神经网络模型压缩方法总结

    新的卷积计算方法 这种是直接提出新的卷积计算方式,从而减少参数,达到压缩模型的效果,例如SqueezedNet,mobileNet 1. SqueezeNet: AlexNet-level accur ...

  9. 深度神经网络模型压缩与加速研究综述

    深度神经网络模型压缩与加速研究综述 文章目录 深度神经网络模型压缩与加速研究综述 前言 介绍 PARAMETER PRUNING AND SHARING A. quantization and bin ...

最新文章

  1. Kafka Eagle 源码解读
  2. 第三次作业+105032014101
  3. 【问底】严澜:数据挖掘入门——分词
  4. XP系统自动关机命令
  5. js的字符串和变量拼接
  6. 数据科学与大数据技术的案例_作为数据科学家解决问题的案例研究
  7. flex item的width VS flex-basis
  8. (43)Xilinx RAM IP核配置(四)(第9天)
  9. 2017级C语言大作业 - 水果忍者
  10. ppapi插件(可自定义方法)
  11. php工具箱下载安装方法
  12. gif大小怎么压缩?教你无损压缩gif动图
  13. 微信开发之网页返回关闭浏览器
  14. 【安全牛学习笔记】密钥交换、AIRCRACK-NG基础、AIRODUMP-NG排错
  15. catalina.home和catalina.base
  16. Java实现23种设计模式教程(作者原创)
  17. Windows 源码运行 ThingsBoard
  18. Python·.·.print()函数格式化输出-超详解
  19. Objective-c语言_数组练习题2:
  20. 暖通空调知识:机房制冷技术之蓄冰槽的安装

热门文章

  1. 终于明白了异地恋为什么那么难
  2. 怎么裁剪音频?这个方法建议收藏备用
  3. 聊一下“深度学习”的基本思想
  4. Python模拟鼠标键盘:pykeyboard库的使用
  5. 2019年组装的一台计算机
  6. Vue3使用element-plus1.3.0版本的el-menu菜单组件引入动态渲染icon图标时,图标组件刚好是Menu时报错,菜单不显示的解决方法
  7. 「GoTeam 招聘时间」腾讯教育 后端高级工程师
  8. 消除Word文档被加密、限制编辑的解决方法
  9. 【Centos】sshd 无法启动(解决问题篇,附问题排查思路和解决方法)
  10. 中继器、集线器;网桥、交换机;路由器及网关之间的区别