第二章:量化原理与数学基础

量化,说白了就是用更少的比特去表示一个数。你想想看,FP32有32个比特,INT8只有8个,压缩了4倍。但问题是——怎么保证压缩完还能用?

我在做第一个量化项目时,踩了不少坑。当时天真地以为,直接把FP32截断成INT8就完事了。结果模型精度直接崩了,推理结果完全不能用。后来才明白,量化的核心在于找到合适的映射关系。

2.1 对称量化 vs 非对称量化

这两种方式,我习惯用一个比喻来解释:

  • 对称量化:就像一把尺子,零点在正中间。正负范围对称。
  • 非对称量化:零点可以偏移。说白了,就是尺子可以往左或往右挪。

先看公式。对称量化的映射关系很简单:

INT8值 = round(FP32值 / 缩放因子)

而非对称量化多了一个零点:

INT8值 = round(FP32值 / 缩放因子 + 零点)

嗯,这里要注意。零点是什么?它就是一个偏移量,让FP32的0能映射到INT8的某个整数上。

核心区别:

  • 对称量化:零点固定为0,适合权重分布对称的场景
  • 非对称量化:零点可调,适合激活值分布不对称的场景

我在项目中遇到过这样一个情况:某个模型的激活值全是正数,范围在0到6之间。如果用对称量化,那负半轴的空间就浪费了。这时候非对称量化就派上用场了——把零点挪到0附近,整个量化精度能提升不少。

2.2 量化公式推导

咱们一步步来。假设有一个FP32的浮点数 x,要量化成INT8的整数 q。

第一步,确定缩放因子 S:

S = (x_max - x_min) / (q_max - q_min)

第二步,确定零点 Z:

Z = round(q_max - x_max / S)

第三步,量化:

q = round(x / S + Z)

反量化回去也很简单:

x_approx = (q - Z) * S

你想想看,这个过程其实就是在找一个线性映射。把FP32的连续区间,映射到INT8的离散整数上。

我的习惯:在实际部署时,我会先统计一下数据的分布。如果数据分布比较均匀,对称量化就够了。如果分布明显偏斜,那就用非对称量化。这个选择直接影响最终精度。

2.3 零点与缩放因子

这两个参数,是量化的灵魂。

缩放因子 S:决定了量化步长。S越小,精度越高,但能表示的范围越小。S越大,范围越大,但精度越低。这是个trade-off。

零点 Z:确保FP32的0能精确映射到INT8的某个值。为什么这么重要?因为很多网络层(比如ReLU、BatchNorm)对0值有特殊处理。如果0映射不准,误差会累积。

我曾经踩过一个坑:在量化某个轻量级模型时,忽略了零点的作用。结果模型在推理时,某些层的输出一直有微小偏差。排查了两天才发现,是零点计算时用了floor而不是round。嗯,细节决定成败。

注意:零点必须是整数。计算时用round取整,不要用floor或ceil。否则零点偏移会导致量化误差增大。

2.4 量化误差分析

量化误差,说白了就是信息丢失。FP32有32位精度,INT8只有8位,压缩过程中必然有损失。

误差主要来自三个方面:

  1. 截断误差:超出量化范围的值被截断。比如FP32的值是128,但INT8最大只能表示127,那就只能截断到127。
  2. 舍入误差:量化时round操作带来的误差。比如FP32的值是3.7,量化成INT8的4,误差就是0.3。
  3. 零点偏移误差:零点计算不精确导致的系统性偏差。

怎么评估误差?我一般用两个指标:

指标 公式 说明
MSE mean((x - x_approx)²) 均方误差,反映整体偏差
Max Error max(|x - x_approx|) 最大绝对误差,反映最坏情况

在实际项目中,我建议重点关注Max Error。因为MSE小不代表每个点都准,有时候个别点的巨大误差会毁掉整个推理结果。

避坑指南:我曾经在量化一个检测模型时,MSE看起来很小,但推理结果却差得离谱。后来发现是某个关键特征点的量化误差特别大。从那以后,我每次量化完都会检查一下最大误差的位置。

2.5 知识体系总览

下面这张图,是我自己总结的量化知识体系。你可以把它当作一个快速索引:

INT8量化知识体系 量化类型 量化类型 对称量化 非对称量化 缩放因子 S 零点 Z 量化误差分析 截断误差 舍入误差 零点偏移误差

这张图把量化拆成了三个核心模块:量化类型、关键参数、误差分析。我个人习惯在开始量化前,先对着这张图过一遍,确保每个环节都考虑到了。

小技巧:如果你刚开始接触量化,建议先从对称量化入手。它简单、直观,适合大多数权重分布对称的场景。等熟悉了再尝试非对称量化,处理那些分布偏斜的激活值。

好了,这一章的内容就到这里。量化原理听起来抽象,但说白了就是找映射、算参数、控误差。下一章我们会聊具体的量化策略——怎么选校准集、怎么确定量化范围。到时候见。

可可精品资料库