线性非对称量化,浮点数量化为有符号定点数的计算原理

📅 2026/7/8 5:15:05
线性非对称量化,浮点数量化为有符号定点数的计算原理
在使用瑞芯微官方的工具rknn_toolkit量化yolov8n时为进一步学习量化过程及原理影响量化精度的因素记录一下一下量化这玩意到底是怎么回事。一以线性非对称量化为例浮点数量化为有符号定点数的计算原理如下------公式一其中 为浮点数Xmin为量化定点数[.]为四舍五入运算 s为量化比例因子 z为量化零点 b为量化位宽如INT8数据类型中b为8clamp为截断运算具体定义如下反量化过程二量化误差由公式一可知量化误差分为舍入误差和阶段误差即[.]和clamp运算。四舍五入的计算方式会产生舍入误差误差范围为{-0.5s,0.5s}。浮点数x过大比例因子s过小时容易导致量化定点数超出阶段范围产生阶段误差。理论上比例因子s的增大可以减小截断误差但会造成舍入误差的增大。因此为了权衡两种误差需要设计合适的比例因子和零点来减小量化误差。三量化算法量化比例因子s和零点z是影响量化误差的关键参数而量化范围的求解对量化参数起到决定性作用。本章节介绍三种关于量化范围求解的算法NormalKL-Divergence和MMSE。Normal量化算法是通过计算浮点数中的最大值和最小值直接确定量化范围的最大值和最小值。从公式一量化计算原理可知Normal量化算法不会产生截断误差但对异常值很敏感因为大异常值可能会导致舍入误差过大。KL-Divergence量化算法计算浮点数和定点数的分布通过调整不同的阈值来更新浮点数和定点数的分布并根据KL散度最小化两个分布的相似性来确定量化范围的最大值和最小值。KL-Divergence量化算法通过最小化浮点数和定点数之间的分布差异能够更好地适应非均匀的数据分布并缓解少数异常值的影响。MMSE量化算法通过最小化浮点数与量化反量化后浮点数的均方误差损失确定量化范围的最大值和最小值在一定程度上缓解大异常值带来的量化精度丢失问题。由于MMSE量化算法的具体实现是采用暴力迭代搜索近似解速度较慢内存开销较大但通常会比Normal量化算法具有更高的量化精度。