量化感知訓練 是什麼?

Quantization Aware Training:量化感知訓練 的完整解釋

在模型訓練過程中模擬量化效果的方法,通過學習量化帶來的誤差來優化模型性能,相比訓練後量化能保持更高精度。

核心概念

量化感知訓練的核心思想是在訓練迴圈中插入量化模擬操作。標準訓練流程是:輸入 → 浮點計算 → 浮點輸出;QAT 流程是:輸入 → 浮點計算 → 量化模擬 → 浮點輸出 → 損失反向傳播。這個量化模擬在前向傳播中執行實際的量化(取整、截斷),但在反向傳播中使用直通估計器(Straight-Through Estimator, STE)來保留梯度流。

量化感知訓練主要處理兩種量化:權重量化和激活量化。權重量化直接調整模型參數,較為直接;激活量化需要估計激活值的範圍,通常通過統計訓練過程中的運行統計(running statistics)完成,如最大最小值、百分位數或直方圖的量化。

運作原理

QAT 的量化模擬過程分為三個步驟。首先是量化(Quantization):將浮點值 x 映射到量化空間

q = round(clip(x / scale, -2^(b-1), 2^(b-1)-1)) * scale

其中 b 是位寬(8 位或 4 位),scale 是量化尺度。二是直通估計器(STE)處理反向傳播。因為 round 和 clip 函數不可微,STE 在反向傳播時假設這些操作的梯度為 1:

∂L/∂x ≈ ∂L/∂q  (在梯度反向時)

三是量化參數的學習。scale 和零點(zero-point)通常在訓練開始時確定,有兩種策略:仿射量化(Affine Quantization)每層有獨立的 scale 和 zero-point;對稱量化(Symmetric Quantization)zero-point 為 0,只有 scale。

實際訓練中,權重通常使用對稱量化,激活值使用仿射量化。激活值的 scale 在訓練過程中動態更新,通常使用指數移動平均(EMA)來平滑量化範圍估計。

實際應用

QAT 廣泛應用於需要高精度的深度學習部署。在物體檢測中(如 YOLO、Faster R-CNN),直接訓練後量化會導致檢測精度明顯下降,使用 QAT 可以將 INT8 精度下降控制在 0.5-1% 以內。在語義分割中,QAT 8 位量化能保持接近 32 位浮點的分割 IoU。

在實時推理場景中,高通、蘋果等手機廠商在底層支持 INT8 推理加速;機器翻譯模型(如 Transformer)經過 QAT 能在邊緣設備上實現即時翻譯;人臉識別系統採用 QAT 來維持識別準確率的同時降低延遲。

QAT 也用於對抗訓練場景,對抗樣本的量化有特殊要求,通過 QAT 可以訓練抵抗量化和對抗攻擊的模型。在模型蒸餾中,也常將學生模型設置為已量化模型,通過 QAT 同時優化蒸餾和量化效果。

常見誤區

常見誤解認為 QAT 就是在訓練後加上量化層。實際上,QAT 要求在訓練全程中每次迭代都進行量化模擬,這顯著改變了訓練動力學。簡單在訓練後添加量化通常效果不佳。

另一個誤區是認為 QAT 的訓練成本與全精度訓練相同。實際上,QAT 需要額外計算量化和反量化,通常增加 20-30% 的訓練時間。某些框架的 QAT 實現(如早期版本)還需要統計激活值範圍,再進一步增加開銷。

還有人認為任何模型都能通過 QAT 達到全精度性能。實際上,當位寬過低(如 2-3 位)或模型本身容量受限時,QAT 也無法完全彌補損失。此外,某些層(如批歸一化層後的緩衝層)對量化敏感度不同,需要差異化處理。

與相關技術的比較

  • 與訓練後量化的區別:訓練後量化先訓練全精度模型再量化,過程簡單且計算成本低,但精度損失較大,適合精度要求不高的任務;QAT 在訓練中引入量化,精度更高但訓練成本增加,適合精度敏感任務。
  • 與漸進式量化的關係:漸進式量化在訓練中逐步降低位寬,如先 16 位再 8 位再 4 位;QAT 通常一開始就指定目標位寬。
  • 與知識蒸餾的結合:可以訓練全精度教師模型,然後用 QAT 訓練已量化的學生模型;或用蒸餾幫助 QAT 模型學習,兩者相輔相成。
  • 與混合精度量化的關係:混合精度量化為不同層指定不同的位寬,QAT 支持層級粒度的量化感知,需要為每層確定合適的位寬。

常見問題