訓練後量化 是什麼?

Post-Training Quantization:訓練後量化 的完整解釋

在模型訓練完成後應用的量化技術,通過將浮點參數轉換為低精度整數或定點數來減少模型大小和計算成本,實現過程簡單但精度損失相對較大。

核心概念

訓練後量化的核心是量化映射函數。對於浮點值 x,量化的目標是找到整數 q 使得 q 能在降低的位數內精確表示 x:

q = round(clip(x / scale + zero_point, min_int, max_int))
x_q = (q - zero_point) * scale

其中 scale 和 zero_point 是量化參數,由激活值的統計特性決定。對於對稱量化(常用於權重),zero_point 為 0;對於仿射量化(常用於激活值),zero_point 使量化範圍以 0 為中心。

訓練後量化主要包含均勻量化和非均勻量化。均勻量化將浮點範圍均勻分割成 2^b 個區間,計算簡單;非均勻量化(如對數量化)針對非均勻分佈的權重和激活值,能更好地保留精度。大多數硬件只支持均勻量化,因此應用最廣泛。

運作原理

訓練後量化通常分為校準(Calibration)和量化(Quantization)兩個階段。

校準階段的目標是確定每層激活值的量化範圍。方法包括:最小最大值方法(Min-Max),選擇所有運行統計中的最小和最大值作為量化邊界,實現簡單但對異常值敏感;百分位法(Percentile),選擇 99.9% 或 99.99% 百分位數,能忽略極端值;熵最小化法(Entropy-based),選擇使量化分佈與原始分佈 KL 散度最小的範圍,數學上最優但計算成本高;基於逐層誤差(Per-layer KL)的校準,直接測量量化後模型輸出誤差。

實際操作流程:(1)準備小規模校準數據集(通常 100-1000 張圖像或等量數據);(2)用校準數據前向傳播一遍,統計每層的激活值;(3)根據統計結果計算每層的 scale 和 zero_point;(4)應用量化映射。

權重量化通常使用對稱量化,因為權重分佈通常以 0 為中心。激活值量化使用仿射量化,因為激活值受 ReLU 等非線性函數影響,分佈往往非對稱。

實際應用

訓練後量化因實施簡單被廣泛應用。在移動端推理框架中(TensorFlow Lite、Core ML),PTQ INT8 是標準量化方案,能實現 4 倍的內存節省和 2-3 倍的推理加速。在雲端推理服務中,多個量化模型共存時,訓練後量化無需重新訓練,降低運維成本。

Google TPU、NVIDIA GPU 等硬件都優化了 INT8 推理,使 PTQ 成為部署 BERT、ResNet、YOLOv3 等大型模型的標準方案。語音識別系統中,PTQ 8 位量化的 WER(字誤率)相比 32 位浮點通常只增加 0.1-0.3%。推薦系統中,PTQ 幫助在線服務縮減延遲 30-50%。

PTQ 還常用於模型壓縮的第一步,先用 PTQ 初步壓縮,再視精度損失決定是否進一步用 QAT 精調或其他方法優化。

常見誤區

常見誤解認為 PTQ 和 QAT 的效果差不多,只是成本不同。實際上,精度損失差異較大。在分類任務上,精度敏感度較低,兩者差異通常在 0.5-1%;在檢測和分割任務上,差異可達 2-5%。

另一個誤區是校準數據集大小無所謂。實際上,校準集的代表性很重要。如果校準集不代表實際推理分佈,估計的量化範圍會過大或過小,導致量化誤差增加。建議校準集大小為整個訓練集的 1-5%,且應隨機採樣。

還有人認為量化精度損失是不可避免且不可控的。實際上,通過選擇合適的校準方法、量化粒度(按層、按通道、按組等),以及混合精度(不同層不同位寬),可以大幅降低損失。

與相關技術的比較

  • 與量化感知訓練的區別:PTQ 無需重訓(小時級),QAT 需重訓(天級),但精度 PTQ 低 2-5%。PTQ 適合快速部署原型,QAT 適合追求精度的生產系統。
  • 與動態量化的關係:動態量化在推理時動態決定激活值範圍,無需校準階段,但精度更低且推理稍慢;PTQ 提前離線校準,推理速度和精度都更好。
  • 與混合精度量化的結合:可為敏感層(如首尾層)保留 16 位,中間層用 8 位,這樣既保精度又節成本。
  • 與知識蒸餾的關係:用 FP32 教師模型蒸餾 INT8 學生模型,結合了兩種壓縮技術的優勢,精度損失更小。

常見問題