2、量化基础:数值表示(定点/浮点)、量化参数(scale/zero-point)、均匀量化与非均匀量化

在TinyML的工程实践中,模型量化本质上是一个数值表示转换问题:将神经网络权重和激活值从高精度的浮点表示(通常是FP32)映射到低精度的定点表示(如INT8、INT16或INT4)。这一转换过程看似简单,却直接决定了模型压缩率、推理速度与精度损失之间的平衡。理解数值表示的本质差异、量化参数的数学含义以及均匀/非均匀量化的适用边界,是进行QAT(量化感知训练)调优的前提。本章将从这三个核心维度展开,帮助读者建立扎实的量化理论基础。

数值表示 量化参数 量化策略 浮点 FP32 符号1位+指数8位+尾数23位 定点 INT8 符号1位+整数7位,范围[-128,127] 动态范围对比 FP32: ±3.4×10³⁸ | INT8: ±127 精度与存储 FP32: 4字节 | INT8: 1字节 Scale (缩放因子) 浮点步长,映射关系核心 Zero-Point (零点) 浮点0对应的定点值 仿射变换公式 r = S × (q - Z) 对称 vs 非对称 Z=0 或 Z≠0,影响零点处理 均匀量化 等间距映射,硬件友好 非均匀量化 对数/幂次映射,动态范围大 适用场景 均匀:CNN/RNN | 非均匀:Transformer 硬件支持度 均匀:广泛支持 | 非均匀:受限 决定量化粒度 决定映射精度 决定策略选择 QAT调优决策基础

2.1 数值表示:定点与浮点的本质差异

核心原理

浮点数(Floating-Point)采用科学计数法表示实数,由符号位、指数位和尾数位组成。以FP32为例,其布局为1位符号、8位指数、23位尾数,能够表示约±3.4×10³⁸的动态范围,且精度随数值大小动态变化。定点数(Fixed-Point)则使用固定的整数位宽和小数位宽,例如Q7.8格式表示7位整数、8位小数。在TinyML场景中,INT8定点表示是最常见的量化目标,其取值范围为[-128, 127],步长为1。

两者的核心差异在于动态范围与精度分布。浮点数的精度在接近零时极高,在远离零时较低;而定点数的精度在整个数值范围内恒定。神经网络权重通常呈现近似高斯分布,大部分值集中在零附近,这导致浮点表示存在大量“浪费”的精度位。量化正是利用这一统计特性,将有限的定点位宽分配给实际有效的数值范围。

判断方法:选择定点格式的关键指标

  • 权重分布范围:统计权重张量的最小/最大值,若范围超过INT8可表示范围,需考虑per-channel量化或非均匀量化。
  • 激活值分布形态:ReLU后的激活值非负,适合非对称量化;若激活值近似正态分布,对称量化更高效。
  • 精度敏感度:通过逐层量化实验,观察哪些层对量化误差更敏感(通常第一层和最后一层最敏感)。

案例拆解:FP32到INT8的转换过程

假设某层权重张量范围为[-2.5, 2.5],采用对称量化(zero-point=0)。计算scale:S = (2.5 - (-2.5)) / (127 - (-128)) = 5.0 / 255 ≈ 0.0196。将浮点值0.5转换为定点:q = round(0.5 / 0.0196) = round(25.51) = 26。反量化误差为 |0.5 - 26×0.0196| = |0.5 - 0.5096| = 0.0096,相对误差约1.9%。

工程要点:在实际部署中,INT8量化后的权重通常以int8_t数组存储,推理时通过int16或int32累加器进行乘加运算,最后再反量化回浮点。这种混合精度计算是TinyML推理引擎(如TensorFlow Lite Micro)的标准做法。

2.2 量化参数:Scale与Zero-Point的数学映射

核心原理

量化映射的数学本质是仿射变换:r = S × (q - Z),其中r为浮点实数,q为量化后的整数,S为缩放因子(scale),Z为零点(zero-point)。S是浮点数,表示每个量化步长对应的浮点范围;Z是整数,表示浮点0值对应的量化值。这一公式构成了所有均匀量化方案的基础。

对称量化(Symmetric)设定Z=0,适用于权重分布关于0对称的场景,计算更简单且无需存储零点。非对称量化(Asymmetric)允许Z≠0,能够更精确地覆盖非对称分布(如ReLU后的激活值),但需要额外存储和计算零点偏移。

操作流程:确定量化参数的步骤

  1. 收集统计量:在训练或校准阶段,记录每层权重/激活的最小值r_min和最大值r_max。
  2. 计算Scale:对于非对称量化,S = (r_max - r_min) / (q_max - q_min);对于对称量化,S = max(|r_min|, |r_max|) / q_max。
  3. 计算Zero-Point:Z = round(q_min - r_min / S),并确保Z在[q_min, q_max]范围内。
  4. 量化与反量化:q = round(r / S) + Z,r_hat = S × (q - Z)。

案例拆解:非对称量化在激活值上的应用

某层ReLU激活值范围为[0.0, 6.0],使用INT8非对称量化。S = (6.0 - 0.0) / (127 - (-128)) = 6.0 / 255 ≈ 0.02353。Z = round(-128 - 0.0 / 0.02353) = round(-128) = -128。浮点值3.0对应的量化值:q = round(3.0 / 0.02353) + (-128) = round(127.5) + (-128) = 128 - 128 = 0。反量化:r_hat = 0.02353 × (0 - (-128)) = 3.013,误差约0.43%。

量化类型Zero-Point适用场景存储开销计算复杂度
对称量化固定为0权重(分布对称)低(无需存储Z)低(无零点偏移)
非对称量化需存储激活值(ReLU后)中(每层多存一个Z)中(需零点修正)
Per-tensor每层一个小模型/简单层最低最低
Per-channel每通道一个卷积层/深度可分离层较高较高
经验提醒:在QAT中,量化参数(S和Z)通常作为可学习的变量参与训练,或者通过指数移动平均(EMA)在训练过程中动态更新。这比训练后静态校准能获得更优的精度。

2.3 均匀量化与非均匀量化

核心原理

均匀量化(Uniform Quantization)将浮点范围等分为2^N个区间,每个区间的步长恒定。其优点是硬件实现简单,乘加运算可以高效映射到整数运算单元。非均匀量化(Non-uniform Quantization)则根据数值分布密度调整步长,常见的有对数量化(Logarithmic)、幂次量化(Power-of-Two)和K-means聚类量化。非均匀量化在相同位宽下能获得更低的量化误差,尤其适合动态范围极大的分布(如Transformer中的注意力分数)。

然而,非均匀量化的硬件支持度远低于均匀量化。大多数TinyML芯片(如Cortex-M系列MCU)只提供整数乘加指令,非均匀量化需要查表(LUT)或特殊解码逻辑,显著增加推理延迟和代码体积。

判断方法:选择量化策略的决策树

  • 步骤1:检查目标硬件是否支持非均匀量化指令(如查表加速)。若不支持,直接选择均匀量化。
  • 步骤2:分析权重/激活分布。若分布近似均匀或高斯,均匀量化足够;若存在长尾分布(如极端值),考虑非均匀量化。
  • 步骤3:评估精度损失。使用KL散度或余弦相似度衡量量化前后张量的分布差异,若差异超过阈值(如余弦相似度<0.99),尝试非均匀量化。

案例拆解:均匀量化在MobileNetV2上的实战

某TinyML项目将MobileNetV2部署到STM32F746(Cortex-M7,无DSP扩展)。初始使用per-tensor对称量化,Top-1精度从71.2%降至64.8%,损失6.4%。分析发现瓶颈在深度可分离卷积层,其权重分布范围差异极大(某些通道范围±0.1,某些±5.0)。

改进方案:采用per-channel非对称量化,为每个输出通道独立计算S和Z。修改后精度恢复至69.7%,仅损失1.5%。代价是模型文件增大12%(需存储每通道的S和Z),推理时间增加8%(零点偏移计算)。

风险提示:非均匀量化(如对数量化)在低比特(4-bit以下)时优势明显,但在8-bit场景下收益有限,且调试复杂度高。除非精度损失超过5%且均匀量化无法解决,否则不建议在TinyML项目中引入非均匀量化。

2.4 常见误区与总结复盘

误区一:忽略Zero-Point的符号处理

在非对称量化中,Zero-Point可能为负值。某些简化实现错误地将Z强制设为0,导致激活值(全为正)的量化范围浪费一半。正确做法是确保Z在[q_min, q_max]内,并在推理时正确处理零点偏移。

误区二:混淆Per-tensor与Per-channel的适用场景

Per-tensor量化简单但精度低,尤其当各通道权重范围差异大时。Per-channel量化精度高但计算复杂。经验法则:权重使用per-channel,激活值使用per-tensor(因为激活值在推理时动态计算,per-channel需要额外内存存储多个S和Z)。

误区三:忽视校准数据集的选择

量化参数的确定依赖校准数据集。若校准集与真实数据分布偏差大,量化误差会显著放大。建议使用至少1000张代表性样本,并覆盖各类别和光照条件。

总结复盘

量化基础的核心在于理解数值表示的精度分布特性,掌握Scale和Zero-Point的数学映射关系,并根据硬件约束和分布特征选择合适的量化策略。在QAT调优中,量化参数的可学习化、per-channel粒度的选择、以及校准数据的质量,是影响最终模型精度的三大关键因素。建议读者在动手量化前,先完成本章的数值分布分析和硬件能力评估,再进入后续的QAT训练流程。