转自:https://blog.csdn.net/u012101561/article/details/80868352

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u012101561/article/details/80868352
      现在“边缘计算”越来越重要,真正能落地的算法才是有竞争力的算法。随着卷积神经网络模型堆叠的层数越来越多,网络模型的权重参数数量也随之增长,专用硬件平台可以很好的解决计算与存储的双重需求,但目前还不成熟,存在些亟待解决的问题,没能大规模商用。对模型进行参数量化的主要目的是减小模型存储体积,加速运算,能够将算法应用在通用的嵌入式移动平台。陆陆续续阅读了关于模型量化的论文,通过这篇博客做一个小结吧,欢迎交流讨论。

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

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=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.

————————————————
版权声明:本文为CSDN博主「吃不胖的卷卷」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u012101561/article/details/80868352

模型量化从1bit到8bit,二值到三值相关推荐

  1. 【知识星球】模型量化从1bit到8bit,二值到三值

    欢迎大家来到<知识星球>专栏,这里是网络结构1000变小专题,模型量化是当前工业界的核心技术,我们最近在知识星球更新相关的内容. 作者&编辑 | 言有三 1 1bit量化-二值网络 ...

  2. 深度学习模型压缩与加速技术(二):参数量化

    目录 总结 参数量化 参数量化定义 参数量化特点 1.二值化 二值化权重 二值化权重与激活函数 2.三值化 3.聚类量化 4.混合位宽 手工固定 自主确定 训练技巧 参考文献 深度学习模型的压缩和加速 ...

  3. 【AI不惑境】模型量化技术原理及其发展现状和展望

    大家好,这是专栏<AI不惑境>的第十篇文章,讲述模型量化相关的内容. 进入到不惑境界,就是向高手迈进的开始了,在这个境界需要自己独立思考.如果说学习是一个从模仿,到追随,到创造的过程,那么 ...

  4. 【杂谈】当前模型量化有哪些可用的开源工具?

    模型量化属于模型优化中的重要技术之一,是非常有效地提升模型推理速度的技术方案,那么当前有哪些可用的模型量化工具呢? 作者&编辑 | 言有三 1 Tensorflow Lite TensorFl ...

  5. linux下将8bit二值位图转化为1bit单色位图【C/C++】

    linux下将8bit二值位图转化为1bit单色位图 bmp位图主要由文件头和信息头两部分,根据windows api下bmp结构体定义,可转化为以下linux可用的结构体(禁用了gcc/g++编译器 ...

  6. 【项目实战课】基于ncnn框架与KL散度的8bit对称模型量化与推理实战

    欢迎大家来到我们的项目实战课,本期内容是<基于ncnn框架与KL散度的8bit对称模型量化与推理实战>. 所谓项目实战课,就是以简单的原理回顾+详细的项目实战的模式,针对具体的某一个主题, ...

  7. 用主动游泳的三维水母模型量化美杜莎的(medusan)机械空间的性能(二)(2017)

    文章目录 用主动游泳的三维水母模型量化美杜莎的(medusan)机械空间的性能(二)(2017) 原文链接:https://doi.org/10.1017/jfm.2017.3 结果 3.1 参考案例 ...

  8. R语言使用keras包实现包含多个全连接层的二分类预测模型:在模型训练过程中动态可视化每个epoch后的loss值以及accuray值

    R语言使用keras包实现包含多个全连接层的二分类预测模型:在模型训练过程中动态可视化每个epoch后的loss值以及accuray值 目录

  9. 【星球知识卡片】模型量化的核心技术点有哪些,如何对其进行长期深入学习...

    大家好,欢迎来到我们的星球知识小卡片专栏,本期给大家分享模型量化的核心技术点. 作者&编辑 | 言有三 1 二值(1bit)量化 二值量化是最高效率的量化方式,也可以称之为1bit量化,即将3 ...

最新文章

  1. 数据科学家必须要掌握的5种聚类算法
  2. 那些上学的时候没很好理解的数学概念(原)
  3. 高人对libsvm的经典总结(全面至极)
  4. 纯java生成excel
  5. apache.commons.lang.StringUtils 使用心得
  6. MindManager中读图工具的使用
  7. linux网络服务学习笔记--基本网络配置
  8. Web票据在线打印和套打解决方案
  9. 《青山翠影》伍 现实的拷问 | 一错又错
  10. 整形平台新氧的商标纠纷案背后:商标是创业公司命根子
  11. java duration 设置值,Java中的Duration toHours()方法
  12. C++表达式语句实训 对 26 个大写英文字母进行循环加密,输入一个大写英文字母(明文)和一个整数秘钥,输出用秘钥对该大写英文字母加密后的结果(密文)。
  13. 如何写出一份完美的BP(商业计划书)?
  14. 永磁同步电机工作原理
  15. MCAL系列介绍04-GPT
  16. 基于stm32的室内环境监测系统 9746字
  17. 【SQL】获取第二高薪水
  18. 自古猛兽皆独行,唯有牛羊结成群
  19. android smallestWidth 限定符屏幕适配方案dimens.xml
  20. BufferedImage是什么意思?

热门文章

  1. APISpace 人像比对API
  2. 【11】Activity的生命周期
  3. 黑苹果开启——HiDPI 技术
  4. SVN怎么去掉版本控制,去除调svn绿色图标显示
  5. 面试系列之-如何选择外包与自研公司
  6. 产品生命周期,鸿沟理论和CNCF项目孵化
  7. 软考常考知识点整理-项目生命周期、信息系统生命周期与产品生命周期
  8. linux pppd源码下载_linux pppd脚本配置
  9. matlab如何将二进制转换为十进制,matlab – 如何在不使用循环的情况下将二进制转换为十进制?...
  10. 从零学会Photoshop经典教程300集