譯者 | 李睿
審校 | 重樓
近年來,深度學習模型在自然語言處理(NLP)和計算機視覺基準測試中的性能穩步提高。雖然這些收益的一部分來自架構和學習算法的改進,但數據集大小和模型參數的增長是重要的驅動因素。
下圖顯示了top-1 ImageNet分類精度作為GFLOPS的函數,GFLOPS可以用作模型復雜性的指標。
擴大數據規模和模型復雜性增加似乎是主要趨勢,擁有數十億個甚至萬億個參數的模型并不罕見。雖然這些大型模型具有令人印象深刻的性能,但這些模型的龐大規模使得它不可能用于邊緣設備或延遲關鍵的應用程序。
這正是模型壓縮發揮作用的地方。模型壓縮的目標是減少模型的參數數量和/或延遲,同時力求將對模型性能的負面影響降至最低。雖然有一些方法,但它們可以分為三大類:
- 剪枝(Pruning)
- 量化(Quantization)
- 知識蒸餾(KD)
雖然還有其他方法(例如低秩張量分解),但本文不涵蓋這些方法。以下詳細討論這三種主要技術。
剪枝
通過剪枝,可以從神經網絡中移除不太重要的權重(神經元連接)或層,從而使模型變得更小。一個簡單的策略是,如果某個神經元連接的權重低于某個閾值,則將其移除。這被稱為權重剪枝,它確保移除的是冗余的連接或者是對最終結果影響不大的連接。
同樣,可以根據神經元重要性的一些指標來移除神經元本身,例如輸出權重的L2范數。這被稱為神經元剪枝,通常比權重剪枝更有效。
與節點剪枝相比,權值剪枝會導致稀疏網絡,這在GPU等硬件上很難優化。雖然它會減少內存占用和FLOPS,但可能不會降低延遲。剪枝的思想也可以擴展到卷積神經網絡(CNN),其中過濾器/內核的相對重要性可以根據其L1/L2范數來確定,并且只能保留重要的過濾器。在實踐中,剪枝是一個迭代過程,將在剪枝和微調模型之間交替進行。
使用這種方法,可以在性能下降最小的情況下,將網絡參數減少50%以上,如下圖所示:
量化
基于量化的模型壓縮背后的主要思想是降低模型權重的精度,以減少內存和延遲。通常情況下,深度學習模型在訓練期間或訓練后將其權重存儲為32位浮點數(FP32)。通過量化,這些權重通常被轉換為16位(FP16)或8位(INT8)精度,以便在運行時部署。
量化可以分為兩類:
訓練后量化(PTQ)
這涉及到訓練后權重和激活的量化,并通過一個稱為校準的過程來實現。該過程的目標是在最小化信息損失的同時,找出從原始到目標精度的映射。為了實現這一點,使用數據集中的一組樣本,并在模型上運行推理,跟蹤模型中不同激活的動態范圍,以確定映射函數。
量化感知訓練(QAT)
使用較低精度權重和激活進行訓練的主要問題是沒有正確定義梯度,因此無法進行反向傳播。為了使用QAT解決這個問題,該模型模擬了前向傳播過程中的目標精度,但使用后向傳播的原始精度來計算梯度。
雖然PTQ易于實施并且無需重新訓練模型,但它可能會導致性能下降。另一方面,QAT與PTQ相比通常具有更高的準確性,但其實施起來不那么容易,并且會增加訓練代碼的復雜性。
從數學的角度來看,給定權重/激活的量化和校準涉及確定兩個值:比例因子和零點。假設想要將FP32轉換為INT8:
Python
1 # max_int for INT8 would be 255 and min_int 0
2 # max_float, min_float are deteremined in the calibration process
3 scale = (max_float - min_float) / (max_int - min_int)
4
5 # to allow for both positive and negative values to be quantized
6 zero_point = round((0 - min_float) / scale)
7
8 int8_value = round(fp32_value / scale) + zero_point
知識蒸餾(KD)
顧名思義,知識蒸餾(KD)試圖將原始模型(在這種情況下稱為教師模型)中的知識提煉或轉移到一個較小的模型(可以稱之為學生模型)中。實現這一目標的方法有多種,但最常見的方法是嘗試使教師模型的輸出或中間特征表示與學生模型相匹配。有趣的是,使用真實標簽和教師模型輸出的軟標簽組合訓練的學生模型,其性能優于僅使用真實標簽訓練的學生模型,有時甚至能達到教師模型的性能。對于這種行為的一種假設是,由于軟標簽包含比真實標簽(硬標簽,例如zero-shot)更多的信息,它有助于學生模型更好地泛化。
知識蒸餾是一種更靈活的模型壓縮技術,因為生成的模型可以具有與原始模型不同的架構,并且與剪枝或量化相比,具有更大的內存和延遲減少潛力。然而,它也是訓練最復雜的技術,因為它涉及訓練教師模型,然后設計和訓練學生模型。
結論
在實踐中,通常將多種壓縮技術結合在一起(例如,知識蒸餾之后PTQ或剪枝)來實現所需的壓縮和準確性結果。
原文標題:Model Compression: Improving Efficiency of Deep Learning Models,作者:Inderjot Singh Saggu