INT8量化的symmetric和asymmetric区别?per-tensor vs `per-cha…INT8量化的symmetric和asymmetric区别?per-tensor vs per-channel?
Symmetric:零点固定在 0,量化公式为 scale * (x/scale).round(),正负范围对称(如 INT8 为 -128~127)。实现简单、推理时无需存 zero_point,适合权重和激活分布较对称的情形(如 ReLU 后)。
Asymmetric:引入 zero_point,公式为 round(x/scale) + zero_point,可把真实范围映射到 [0,255],更好地拟合非对称分布(如激活多非负),精度通常更好,但推理需多一次减 zero_point 的运算与存储。
Per-tensor:整个 tensor 共用一个 scale(和可选 zero_point),计算与存储开销最小,但若通道间分布差异大(如 Conv 各 output channel),易产生较大误差。
Per-channel(或 per-axis):对某一维(如 Conv 的 output channel)各用一套 scale/zero_point,表达能力更强、精度更高,尤其对权重;代价是多组量化参数与逐 channel 的缩放逻辑,推理实现稍复杂。
权重常用 per-channel symmetric(兼顾精度与实现);激活可选 per-tensor 或 per-channel、asymmetric 更稳。PTQ 时根据校准数据选 scheme;QAT 可端到端学 scale/zero_point。
| 返回模块 | 返回总览 |