一些量化(quantization)技巧
对象:对权重量化,对特征图量化(神经元输出),对梯度量化(训练过程中)
过程:在inference网络前传,在训练过程(反传)
一步量化(仅对权重量化),
两步量化(对神经元与特征图量化,第一步先对feature map进行量化,第二步再对权重量化)。

32位浮点和16位浮点存储的时候,
第一位是符号位,中间是指数位,后面是尾数。
英特尔在NIPS2017上,提出了把前面的指数项共享的方法。
这样可以把浮点运算,转化为尾数的整数定点运算,加速网络训练。
分布式训练梯度量化:
对权重数值进行聚类,量化的思想非常简单。
CNN参数中数值分布在参数空间,
通过一定的划分方法,总是可以划分称为k个类别。
通过储存这k个类别的中心值,或者映射值,压缩网络的储存。
量化可以分为
Low-Bit Quantization(低比特量化)、
Quantization for General Training Acceleration(总体训练加速量化)和
Gradient Quantization for Distributed Training(分布式训练梯度量化)。
由于在量化、特别是低比特量化实现过程中,由于量化函数的不连续性,在计算梯度的时候,会产生一定的困难。
对此,阿里巴巴把低比特量化,转化成ADMM可优化的目标函数,从而由ADMM来优化。
另一个角度思考,使用哈希把二值权重量化,再通过哈希求解。
用聚类中心数值,代替原权重数值,配合Huffman编码,具体可包括标量量化或乘积量化。
如果只考虑权重自身,容易造成量化误差很低,但分类误差很高的情况。
Quantized CNN优化目标是重构误差最小化。
可以利用哈希进行编码,映射到同一个哈希桶中的权重,共享同一个参数值。

聚类例子:
例如下面这个矩阵。
1.2 1.3 6.1
0.9 0.7 6.9
-1.0 -0.9 1.0
设定类别数k=3,通过kmeans聚类。得到:
A类中心: 1.0 , 映射下标: 1
B类中心: 6.5 , 映射下标: 2
C类中心: -0.95 , 映射下标: 3

储存矩阵可以变换为(距离哪个中心近,就用中心的下标替换):
1  1  2
1  1  2
3  3  1

提出需要对量化后的值进行重训练,挽回一点丢失的识别率。
基本上所有压缩方法都有损,重训练还是比较必要的。
深度神经网络压缩 Deep Compression
为了进一步压缩网络,考虑让若干个权值共享同一个权值,需要存储的数据量也大大减少。
采用kmeans算法来将权值进行聚类,在每一个类中,所有的权值共享该类的聚类质心,
最终存储一个码书和索引表。

1.对权值聚类
采用kmeans聚类算法,通过优化所有类内元素,到聚类中心的差距(within-cluster sum of squares ),确定最终的聚类结果。
2. 聚类中心初始化
常用的初始化,包括3种:
a) 随机初始化。
即从原始数据,随机产生k个观察值,作为聚类中心。
b) 密度分布初始化。
现将累计概率密度CDF的y值,分布线性划分,
根据每个划分点的y值,找到与CDF曲线的交点,再找到该交点对应的x轴坐标,作为初始聚类中心。
c) 线性初始化。
将原始数据的最小值到最大值之间的线性划分,作为初始聚类中心。
三种初始化方式的示意图,如下所示:

由于大权值比小权值更重要(参加HanSong15年论文),线性初始化方式,能更好地保留大权值中心,文中采用这一方式,后面的实验结果,验证了这个结论。
3. 前向反馈和后项传播
前向时需要将每个权值,用对应的聚类中心代替,后向计算每个类内的权值梯度,
将梯度和反传,用来更新聚类中心。
如图:

共享权值后,就可以用一个码书和对应的index来表征。
假设原始权值用32bit浮点型表示,量化区间为256,即8bit,共有n个权值,量化后需要存储n个8bit索引和256个聚类中心值,可以计算出压缩率compression ratio: r = 32*n / (8*n + 256*32 )≈4 如果采用8bit编码,至少能达到4倍压缩率。

参考链接:
https://github.com/Ewenwan/MVision/tree/master/CNN/Deep_Compression/quantization#1-%E6%B7%B1%E5%BA%A6%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C%E5%8E%8B%E7%BC%A9-deep-compression

一些量化(quantization)技巧相关推荐

  1. MLIR算子量化Quantization

    MLIR算子量化Quantization 本文概述了MLIR量化系统的设计.虽然术语"量化"是高度过载的,用于将浮点计算转换为以整数数学表示,适配的变量进行推理的技术的相当窄的范围 ...

  2. 语音识别(一):特征抽取~1.1 抽样(sampling)和量化(quantization)

    1. 采样(sampling):一个信号通过度量它在特定时刻的振幅来进行抽样. 采样的目的是还原出声音的波形.在足够密集的采样频率下,人声的每个波形都能有多于两个的采样,这样的采样记录下说话人声音的频 ...

  3. 【零基础】极星量化小技巧:启动时自动轮换合约

    交流Q群1064240775 ​​​​​​​一.前言 很多童鞋苦恼于要交易的合约很多,每天早上启动量化是个很痛苦的工程.其实这是个非常容易解决的问题,python的扩展性可以是无限的,限制的只是你的相 ...

  4. python期货量化交易实战_Python期货量化交易实战

    ·了解交易的规则与数据指标,学习正确的金融算法·基于真实的数据进行回测和分析,了解期货交易的内涵·循序渐进的案例式教学,按部就班地操作就能上手·基于Python 3.7进行分析,提供示例代码,可在异步 ...

  5. python量化实战_Python量化交易实战

    (1)构建Python股票交易量化平台,实现交易量化技术;(2)详解股票交易主要模型.算法及其实现.应用;(3)量化交易工具提供云盘下载,方便读者学习 ¥62.40定价:¥79.00(7.9折)电子书 ...

  6. 知识星球《玩转股票量化交易》精华内容概览-2023扬帆起航

    星球的价值 学习量化交易的终极目的是形成一套量化交易系统进行实战. 如何学会搭建自己的量化交易系统? 知识星球<玩转股票量化交易>帮助交易者学习搭建属于自己的量化交易系统! 我们提供的产品 ...

  7. A Survey of Quantization Methods for Efficient Neural Network Inference---2021年

    A Survey of Quantization Methods for Efficient Neural Network Inference--2021年 Abstract I. INTRODUCT ...

  8. 视频编解码学习之三:变换,量化与熵编码

    第6章 变换编码 1. 变换编码 变换编码的目的 去除空间信号的相关性 将空间信号的能力集中到频域的一小部分低频系数上 能量小的系数可通过量化去除,而不会严重影响重构图像的质量 块变换和全局变换 块变 ...

  9. 【视频编解码-07】变换,量化与熵编码

    第6章 变换编码 1. 变换编码 变换编码的目的 去除空间信号的相关性 将空间信号的能力集中到频域的一小部分低频系数上 能量小的系数可通过量化去除,而不会严重影响重构图像的质量 块变换和全局变换 块变 ...

最新文章

  1. 【swjtu】数据结构实验7_Huffman编码
  2. 1月末周中国五大顶级域名总量增3.4万 美国增3.3万
  3. 解决TCP网络传输“粘包”问题
  4. 硕士学历真的很重要吗?过来人道出实情,看到最后一句很感动
  5. zookeeper分布式锁代码实例
  6. boost::mp11::mp_bind_q相关用法的测试程序
  7. 如何“暴力破解”Oracle性能优化的极端问题(附精彩案例解读)
  8. Python字符串怎样实现contains效果
  9. 【缓存】缓存,这么用才真正达到缓存的效果
  10. MFC中CString,int,string,char * ,char[] 之间互转
  11. vue企业门户网站模板_门户网站建设费用需要多少钱?
  12. SQL动态配置,动态解析SQL
  13. java app微信支付接口_APP支付微信支付,Java后台开发
  14. word转pdf转换器11.0注册码
  15. 超全山东华为天翼网关电信光猫HS8145c超级密码获取
  16. 155页4万字智慧交通电子警察系统平台解决方案
  17. 网易发起“疾风”智造IoT联盟,深化“互联网+先进制造业”发展
  18. Every plan I should insist on !!
  19. 播放器实战22 解决花屏与卡顿问题
  20. 绿地签约十家酒店项目,轻资产输出步伐再提档

热门文章

  1. Kotlin协程使用,协程使用注意事项,协程中的await方法使用|不使用suspend使用协程
  2. 2022-2028年中国低氧铜杆行业市场研究及前瞻分析报告
  3. 2022-2028年中国电容器电子薄膜行业市场研究及前瞻分析报告
  4. events.out.tfevents文件
  5. pytorchviz visdom 可视化 pytorch
  6. 大数据目标检测推理管道部署
  7. 2021年大数据HBase(十四):HBase的原理及其相关的工作机制
  8. 整数n的倒数第k个数字
  9. System.err: java.lang.UnsatisfiedLinkError: dlopen failed: library “libc++_shared.so“ not found
  10. It is currently in use by another Gradle instance