4. 训练后量化基础
训练后量化(Post-Training Quantization, PTQ)是STM32N6 NPU模型部署中最常用的压缩手段。它的核心思想是:在不重新训练的前提下,用一组校准数据统计浮点张量的动态范围,然后把这个范围线性映射到定点整数区间。理解这个映射过程,是后续调优量化精度的前提。
一、仿射映射:量化的数学本质
量化本质是一个仿射变换。设浮点实数 r,量化后的整数 q,则:
q = round(r / S) + Z
r ≈ S × (q − Z)
其中 S 是缩放因子(scale),Z 是零点(zero-point)。S 决定了每个整数步长代表多大的浮点跨度,Z 则保证浮点零能被整数精确表示。STM32N6 NPU 的权重与激活通常使用 8 位整数(int8),因此 q 的取值范围是 [−128, 127]。
缩放因子由浮点范围决定。若浮点张量的最小值为 r_min、最大值为 r_max,则:
S = (r_max − r_min) / (q_max − q_min)
Z = round(q_min − r_min / S)
例如某层激活经校准后范围为 [−3.2, 4.8],映射到 int8 的 [−128, 127]:S = 8.0 / 255 ≈ 0.03137,Z = round(−128 − (−3.2/0.03137)) ≈ round(−128 + 102) = −26。这意味着浮点 0 对应整数 −26,浮点 4.8 对应整数 127。
二、对称量化与非对称量化
对称量化强制 Z = 0,即浮点零映射到整数零,正负范围对称。它要求 r_max = −r_min,通常取绝对值最大值 |r|_max 作为边界,S = |r|_max / 127。对称量化的优点是计算简单,卷积中的乘加可以省去零点修正项,NPU 硬件执行效率更高;缺点是当数据分布明显偏斜(例如 ReLU 后的激活全为非负)时,会浪费一半整数区间,精度下降。
非对称量化允许 Z ≠ 0,能贴合任意分布。对于 ReLU 输出这类单边分布,非对称量化可以把 [0, 6.0] 完整映射到 [−128, 127],而对称量化只能映射到 [0, 127],有效位宽减半。代价是每次乘加后需要额外处理零点偏移,硬件实现更复杂。
三、per-tensor 与 per-channel 的差异
per-tensor 量化对整个张量使用同一组 (S, Z)。它实现简单,但当一个卷积层的多个输出通道数值范围差异很大时,小范围通道会被大范围通道“淹没”。例如某层 64 个输出通道,通道 0 的权重范围是 [−0.05, 0.05],通道 63 是 [−1.2, 1.2],若统一用 S = 1.2/127 ≈ 0.00945,通道 0 的权重只能落到整数 −5 到 5 之间,量化误差极大。
per-channel 量化对每个输出通道单独计算 S(通常仍取 Z = 0)。上例中通道 0 的 S = 0.05/127 ≈ 0.000394,能充分利用整数区间。代价是每个通道需要存储一个 scale,推理时逐通道缩放。STM32N6 NPU 的权重存储支持 per-channel scale,因此卷积权重推荐使用 per-channel 对称量化;激活由于是运行时动态产生的,通常只能 per-tensor。
四、STM32N6 NPU 上的实际差异
在 STM32N6 的 NPU 数据通路中,权重以 per-channel 对称 int8 存储,每个输出通道附带一个 32 位浮点 scale。推理时,NPU 先完成整数乘加,再按通道乘以 S_weight × S_activation 还原到浮点域,最后重新量化为下一层的 int8 激活。这个“反量化—再量化”过程由硬件流水线完成,开发者只需在量化工具中正确设置粒度。
激活的 per-tensor 非对称量化意味着每层激活只有一个 (S, Z)。如果某层激活分布随输入变化剧烈,固定 scale 会导致溢出或精度损失。此时可以在校准阶段使用更多样本,或对敏感层保留浮点(混合量化)。
五、校准与参数确定
PTQ 的精度高度依赖校准。常用方法有 min-max、移动平均 min-max、KL 散度等。min-max 直接取校准集上的全局极值,简单但对离群点敏感;KL 散度通过最小化量化前后分布差异选择截断阈值,能缓解离群点影响。在 STM32Cube.AI 或 ST Edge AI 工具链中,通常提供 --calibration 选项指定校准数据,并可选 per_channel 开关。
一个实用的校准流程是:从训练集或验证集中抽取 100~500 个代表性样本,覆盖不同场景;对每层激活统计 min/max;若某层激活范围异常大,检查是否存在离群通道,必要时改用 KL 校准或对该层做混合量化。校准完成后,用验证集评估量化模型与浮点模型的精度差,通常要求 top-1 下降不超过 1%~2%。
六、小结与工程建议
浮点到定点的映射是仿射变换,S 和 Z 决定了量化精度。对称量化计算高效,适合权重;非对称量化贴合分布,适合激活。per-tensor 实现简单但精度受限,per-channel 精度更高但需硬件支持。STM32N6 NPU 的组合策略是权重 per-channel 对称、激活 per-tensor 非对称。工程上应优先保证校准集代表性,再根据精度反馈决定是否启用 per-channel 或混合量化。