搜尋意圖: 如果你在找「訓練後量化 是什麼」或「訓練後量化 和相近概念差在哪」,先看這頁的短定義、完整說明與延伸比較。
TL;DR: 在模型訓練完成後應用的量化技術,通過將浮點參數轉換為低精度整數或定點數來減少模型大小和計算成本,實現過程簡單但精度損失相對較大。
實用情境: 適合用在閱讀 AI 文章、產品文件或和同事討論時,先用一頁快速對齊概念。
下一步: 先讀完定義,再往下看延伸比較與對應工具,把概念轉成實際應用。
在模型訓練完成後應用的量化技術,通過將浮點參數轉換為低精度整數或定點數來減少模型大小和計算成本,實現過程簡單但精度損失相對較大。
核心概念
訓練後量化的核心是量化映射函數。對於浮點值 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 學生模型,結合了兩種壓縮技術的優勢,精度損失更小。
常見問題
校準數據集的選擇如何影響訓練後量化效果?
校準集的代表性直接影響量化參數的準確性。如果校準集分佈與實際推理數據不一致,估計的激活值範圍會偏離,導致量化時要麼丟棄重要信息(範圍過小),要麼保留過多雜訊(範圍過大)。例如,一個在 ImageNet 訓練的分類模型如果用 10 張完全不同領域的圖像作為校準集,量化效果會很差。建議選擇與真實推理數據分佈相同的隨機子集,大小為全訓練集的 1-5%。若數據多樣性高,可以增加校準集比例到 10%。對於流數據場景,可以從實時推理日誌中定期採樣,不斷更新量化參數。
熵最小化校準法相比最小最大值法的優勢是什麼?
最小最大值法簡單但對異常值敏感。如果權重或激活值中出現幾個很大的異常值,量化範圍就會被迫擴大,導致正常值的量化精度下降。熵最小化法通過 KL 散度衡量量化前後分佈的相似性,選擇使信息損失最小的範圍,對異常值具有魯棒性。具體地,熵法會遍歷多個可能的量化邊界(如 Min-Max 的 50%-100%),測試每個邊界下量化分佈與原始分佈的 KL 散度,選擇最小的。實驗表明,在激活值差異大的任務上(如某些 NLP 模型),熵法精度保留比最小最大值法高 1-2%。代價是計算成本增加 10-20%,但校準通常只需要做一次。
為什麼某些層對量化更敏感,應該如何處理?
不同層對量化的敏感度不同,主要原因是信息流和梯度流的不同。首層(input layer)和尾層(output layer)通常最敏感,因為它們直接關係到輸入輸出質量;深層特徵層對量化相對不敏感。此外,某些非線性層(如 softmax 前層)敏感度高,因為其輸出分佈差異影響下游計算。處理方法包括混合精度量化(首尾層用 16 位,中層用 8 位)、逐通道量化(為每個輸出通道單獨計算量化參數而非全層共用一個),和分組量化(將層分成幾個組分別量化)。實踐中,通過逐層評估量化後模型的輸出變化量(如 cosine 相似度下降),可以識別敏感層,對其應用保守的量化策略。