深度学习模型量化原理

深度学习模型量化原理

深度学习模型的量化Quantization)是一种优化技术,它通过减少模型中权重和激活值的精度来减小模型大小和提高推理速度,同时尽量保持模型的准确度。

模型在训练时,一般是以标准的float32类型(fp32)进行运算的,即使用32个bit来表示一个浮点数并进行浮点数运算。但是在边缘计算设备上进行推理时,处理器往往没有那么高的算力支持fp32的运算。此时,我们常常将模型量化为int8类型减小模型大小加快推理速度

对称量化与非对称量化

int8量化分为对称量化(Symmetric Quantization)与非对称量化(Asymmetric Quantization),通常对称量化的性能会优于非对称量化, 而精度上非对称量化更优。

非对称量化

如图所示,非对称量化就是把数值缩放到[-128,127](int8)或者[0,255](uint8)之间,量化公式如下:
r = S ( q + Z ) q = i n t ( r S ) − Z S = max − min qmax − qmin Z = R o u n d ( − min S + qmin ) r=S(q+Z) \quad q=int(\frac{r}{S})-Z \\ S=\frac{\text{max}-\text{min}}{\text{qmax}-\text{qmin}} \\ Z=Round(-\frac{\text{min}}{S}+\text{qmin}) r=S(q+Z)q=int(Sr)−ZS=qmax−qminmax−minZ=Round(−Smin+qmin)

其中, Z Z Z是zeropoint, S S S是scale, q q q是量化后的值, r r r是真实的值; min / max \text{min}/\text{max} min/max是原始值的范围, qmin / qmax \text{qmin}/\text{qmax} qmin/qmax是量化后值的范围。

非对称量化的优点是能够更灵活地表示数据范围,特别是当数据分布不是以零为中心对称时。然而,非对称量化的缺点是执行量化和反量化操作可能需要更多的计算

对称量化

对称量化是当 Z = 0 Z=0 Z=0时非对称量化的特例。
r = S q q = i n t ( r S ) r=Sq \quad q=int(\frac{r}{S}) r=Sqq=int(Sr)

这种方法比非对称量化更简单,容易在硬件上实现,并且对称量化可以减少量化和反量化过程中的计算量,因为它不需要像非对称量化那样处理零点偏移。

对称量化假设数据分布是对称的,但在实际应用中,很多数据分布并不是对称的,这限制了对称量化的应用场景。

校准

当我们对激活值进行非对称量化时,需要知道值的动态范围(最小值、最大值),但是模型训练后一般是不会保存这些信息的,所以在量化阶段我们仍然需要一个比较小的训练集(一般从模型的训练集中抽取100-200张各个类型的数据)来进行校准Calibration)。

校准就是收集输入数据在模型各层的输出值,并统计得到动态范围。除此以外,TensorRT等方法还使用了KLD方法(基于KL散度)来获取量化门限,这种方法不是直接将 [ m i n , m a x ] [min,max] [min,max]映射到 [ − 127 , 127 ] [-127,127] [−127,127],而是寻找一个阈值,将阈值以外极值附近的点直接映射为最大/最小值。

参考文献:

个阈值,将阈值以外极值附近的点直接映射为最大/最小值。

参考文献:

A Survey of Quantization Methods for Efficient Neural Network Inference

相关推荐
迅易科技31 分钟前
借助腾讯云质检平台的新范式,做工业制造企业质检的“AI慧眼”
人工智能·视觉检测·制造
古希腊掌管学习的神2 小时前
[机器学习]XGBoost(3)——确定树的结构
人工智能·机器学习
ZHOU_WUYI2 小时前
4.metagpt中的软件公司智能体 (ProjectManager 角色)
人工智能·metagpt
2401_857439692 小时前
SSM 架构下 Vue 电脑测评系统:为电脑性能评估赋能
开发语言·php
SoraLuna3 小时前
「Mac畅玩鸿蒙与硬件47」UI互动应用篇24 - 虚拟音乐控制台
开发语言·macos·ui·华为·harmonyos
xlsw_3 小时前
java全栈day20--Web后端实战(Mybatis基础2)
java·开发语言·mybatis
靴子学长3 小时前
基于字节大模型的论文翻译(含免费源码)
人工智能·深度学习·nlp
独行soc3 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍06-基于子查询的SQL注入(Subquery-Based SQL Injection)
数据库·sql·安全·web安全·漏洞挖掘·hw
梧桐树04294 小时前
python常用内建模块:collections
python
AI_NEW_COME4 小时前
知识库管理系统可扩展性深度测评
人工智能