Post-Training Quantization(PTQ,训练后量化)是一种在模型训练完成后对其进行低精度量化的技术,核心特点是无需重新训练模型,仅通过少量校准数据计算量化参数(缩放因子、零点),即可将 FP32 模型转换为低精度(如 INT8、INT4)模型。相比量化感知训练(QAT),PTQ 更轻量、部署效率更高,是工业界快速实现模型压缩和加速的主流方案。
PTQ 的本质是 **“离线校准 + 静态量化”**:在模型训练完成后,利用少量 “校准数据”(通常为 100-1000 张样本)统计模型各层权重和激活值的分布,计算量化参数(缩放因子 S、零点 Z),再将 FP32 的权重和激活值映射到低精度整数。
其核心特点包括:
- 无需重新训练:避免 QAT 的训练成本,适合已冻结的预训练模型;
- 校准数据量小:仅需少量代表性数据(无需标签),降低数据依赖;
- 部署速度快:量化流程可在数分钟内完成,适合快速迭代场景。
PTQ 的完整流程可分为 5 个步骤,核心是通过校准数据 “模拟” 量化效果,确定最优量化参数:
- 输入已训练好的 FP32 模型(如 PyTorch 的
nn.Module
、TensorFlow 的tf.keras.Model
); - 移除训练相关层(如 Dropout、BatchNorm 的训练模式切换为推理模式);
- 对模型进行 “层融合”(如 Conv+BN+ReLU 融合),减少量化节点数量,提升效率。
- 选择代表性数据:需覆盖模型实际输入的分布(如 ImageNet 的校准数据应包含各类别图像),避免因数据分布偏移导致量化参数不准确;
- 数据量:通常 100-1000 张样本即可(如 ResNet-50 用 500 张 ImageNet 图像校准),过多会增加校准时间,过少则统计不准。
通过 “校准”(Calibration)过程统计权重和激活值的分布,计算缩放因子(S)和零点(Z),关键是平衡量化范围与信息保留。
权重是静态的(训练后固定),可直接统计全量权重的分布:
- 通常采用逐通道量化(Per-Channel):对卷积层的每个输出通道独立计算 S 和 Z,减少通道间数值差异导致的误差;
- 计算方法:多采用 Min-Max(取权重的最小值和最大值),因权重分布相对稳定(训练中已收敛)。
激活值是动态的(随输入变化),需通过校准数据统计其分布,常用方法有两种:
- Min-Max 校准:统计校准数据中激活值的全局最小值
x_min
和最大值x_max
,计算 S=(xmax−xmin)/(qmax−qmin),Z 同理。
优点:计算快;缺点:对离群值敏感(如激活值中的极端值会扩大量化范围,压缩有效信息)。 - KL 散度校准:通过搜索最优阈值
T
(截断离群值),使量化后的激活值分布与原分布的 KL 散度最小。
优点:对离群值更鲁棒(如 ReLU6 的激活值常因溢出产生离群值,截断后精度损失更小);缺点:计算成本略高。
例如:对 BERT 的激活值量化,KL 散度校准可比 Min-Max 校准将精度损失降低 1.5%。
- 用计算好的 S 和 Z 将 FP32 权重转换为低精度整数(如 INT8),存储为量化模型;
- 激活值在推理时动态量化(输入数据→量化为 INT8→参与计算→反量化为 FP32 输出,或硬件直接支持低精度计算);
- 部分框架(如 TensorRT)会自动优化量化节点的执行顺序,减少反量化次数。
- 用测试集验证量化模型的精度(如分类模型的 Top-1 准确率、检测模型的 mAP);
- 若精度损失过大,可调整量化策略(如对敏感层保留 FP16、改用逐通道量化、优化校准数据)。
- 逐张量量化(Per-Tensor):对整个权重 / 激活值张量用同一套 S 和 Z,计算简单但精度较低(适合激活值分布均匀的层,如全连接层);
- 逐通道量化(Per-Channel):对卷积层的每个输出通道独立计算 S 和 Z,能更好适应通道间的数值差异(如 ResNet 的卷积层,可使精度损失降低 2-3%)。
- 对称量化:量化范围关于原点对称(如 INT8 的 [-127, 127]),零点 Z=0,适合权重(多分布在 0 附近);
- 非对称量化:量化范围不对称(如 INT8 的 [-128, 127]),零点 Z 非 0,适合激活值(如 ReLU 输出非负,分布在 [0, x_max])。
对模型中 “量化敏感层”(如 Transformer 的注意力头、检测模型的输出层)保留 FP16/FP32,其余层用 INT8,平衡精度与效率。例如:用 PTQ 量化 YOLOv5 时,对输出层保留 FP16,可使 mAP 损失从 3% 降至 0.5%。
- 部署效率高:无需训练 pipeline,量化流程可在分钟级完成;
- 数据依赖低:仅需少量校准数据(无需标签),适合数据隐私严格的场景;
- 通用性强:支持大部分神经网络(CNN、轻量级网络如 MobileNet)。
- 精度损失可能较大:尤其对低比特(如 INT4)或动态范围大的模型(如 Transformer、BEV 感知模型);
- 对激活值分布波动大的层(如 NLP 模型的激活值)适配性较差。
- 轻量级模型部署(如 MobileNet、EfficientNet 在移动端的分类任务);
- 对精度要求不苛刻、需快速上线的场景(如视频监控的目标检测);
- 作为 QAT 的 “快速验证工具”:先用 PTQ 评估量化潜力,再决定是否投入 QAT。
- 离群值处理:激活值中的极端值会扩大量化范围,可通过 “阈值截断”(如保留 99.9% 的分布)或 “动态量化”(推理时实时调整量化范围)缓解;
- Transformer 模型适配:Transformer 的激活值分布动态性强,PTQ 精度损失较大(如 BERT-base 在 GLUE 任务中 INT8 量化损失约 2-3%),需结合 “量化感知蒸馏”(用 FP32 模型指导 PTQ 模型)补偿;
- 低比特量化(INT4/INT2):PTQ 在 INT4 时精度损失显著(如 ResNet-50 损失 > 5%),需结合 “权重聚类”(将相似权重合并)或 “混合位宽”(敏感层用 INT8,其余用 INT4)优化。
PTQ 是 “以最小成本实现模型加速” 的核心技术,通过离线校准和静态量化,在无需重新训练的情况下将模型压缩 4-8 倍,推理速度提升 2-4 倍。尽管其精度损失略高于 QAT,但凭借 “轻量、高效” 的优势,成为边缘设备部署(如手机、摄像头)的首选方案。在实际应用中,需根据模型类型(CNN/NLP)和精度需求,选择合适的校准方法(Min-Max/KL 散度)和量化粒度,平衡效率与精度。