量化感知訓練(Quantization Aware Training)是什麼?

在模型訓練過程中模擬量化效果的方法,通過學習量化帶來的誤差來優化模型性能,相比訓練後量化能保持更高精度。|本頁含完整原理、應用場景、iPAS 考試重點與 3 個常見問答。

英文
Quantization Aware Training
主題標籤
量化、模型壓縮、模型訓練
考點定位
非 iPAS 核心術語
最後更新
2026/06/23
量化感知訓練(Quantization Aware Training)是什麼? 量化模型壓縮
術語快查

搜尋意圖: 如果你在找「量化感知訓練 是什麼」或「量化感知訓練 和相近概念差在哪」,先看這頁的短定義、完整說明與延伸比較。

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

實用情境: 適合用在閱讀 AI 文章、產品文件或和同事討論時,先用一頁快速對齊概念。

下一步: 先讀完定義,再往下看延伸比較與對應工具,把概念轉成實際應用。

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

核心概念

量化感知訓練的核心思想是在訓練迴圈中插入量化模擬操作。標準訓練流程是:輸入 → 浮點計算 → 浮點輸出;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 支持層級粒度的量化感知,需要為每層確定合適的位寬。

常見問題

為什麼需要在訓練中引入量化而不是訓練後再量化?

訓練後量化直接將浮點權重轉換為整數,但訓練過程中模型權重和激活值的分佈完全是為了浮點計算優化的。當突然應用量化時,會引入量化誤差,特別是在激活值上這種誤差會累積。QAT 讓模型在訓練時就知道量化的存在,優化器可以調整權重和學習率來適應量化帶來的約束,使得最終的量化模型性能更好。實驗數據表明,在語義分割任務上,訓練後量化 INT8 的 mIoU 下降 3-5%,而 QAT 只下降 0.2-0.5%。

直通估計器為什麼能工作?量化函數不可微應該怎麼處理?

直通估計器(STE)是一個實用的近似方法,而非嚴格的數學解。在前向傳播中進行真實的量化(round、clip),但在反向傳播時假設這些操作的梯度為 1。這樣做是因為完全的量化感知很困難:clip 的梯度存在不連續性,round 完全不可微。STE 的假設在許多情況下效果不錯,是因為量化誤差通常較小,相鄰區域的梯度變化也較小,直通近似的誤差在可接受範圍內。更高級的方法使用軟量化(soft quantization)或具有光滑近似的函數替代 round,但 STE 因簡單性和實用性最廣泛採用。

QAT 訓練過程中如何確定激活值的量化範圍?

激活值量化範圍的確定分為靜態和動態兩種方式。靜態方式在訓練前統計若干個批次的激活值,計算其最大最小值、百分位數(如 99.9%)作為量化範圍,整個訓練期間固定。動態方式在訓練過程中持續更新,通常使用指數移動平均(EMA)平滑激活值的統計,這樣能適應訓練過程中分佈的變化。具體地,如果當前批次的最大值為 max_val,EMA 更新為:EMA_max = 0.99 * EMA_max + 0.01 * max_val。動態方式對於量化範圍變化大的任務更魯棒,但計算成本略高。實踐中,前 10-20% 的訓練步數用靜態範圍預熱,之後切換到動態更新效果較好。