機器學習工程與系統

模型壓縮(model compression)

/ MOD-ul kum-PRESH-un /

模型壓縮,是所有「讓一個練好的模型更小、更快、或運行更便宜,而無需從頭重訓」的技術的總稱。如果說量化、剪枝、蒸餾是單件工具,那麼模型壓縮就是整個工具箱,以及使用它們的那門手藝。目標始終如一:拿一個能用、卻對你需要的場合太重的模型,把它瘦下來、瘦到正好塞得進去——塞進一部手機、塞進一份緊巴巴的延遲預算、或塞進一張更小的雲帳單之下。

幾樣主要工具,在實踐裡彼此組合。量化用更低的精度去存每個數字。剪枝刪掉那些幾乎無關緊要的部分。蒸餾訓練一個更小的模型去模仿更大的。還有別的——把大的權重矩陣分解成小的、在層與層之間共享權重——但這三樣是主力,而且常常被疊著用:先蒸餾出一個更小的模型,再剪枝,最後把剩下的量化。

為什麼這很重要:壓縮,正是橫在「一個唬人的研究模型」與「一個人們真能大規模、或在設備上部署的模型」之間的那道關。它是應用機器學習裡最具實踐分量的領域之一。貫穿其中的誠實主題是:每一種方法,都拿某些品質去換大小或速度。有時這點損失微不足道;有時它恰好落在你最在乎的那些情形上。世上沒有免費的壓縮——工程的本事,在於誠實地度量損失,再判斷這樁權衡對你的用途值不值得。

一個 28 GB 的研究模型塞不進手機。工程師把它蒸餾成一個 3 GB 的學生,再剪枝到 2 GB,然後量化到 4 位元,最終落在 0.6 GB 上下——小到能隨一個應用一起發布,同時一輪仔細的評測確認它仍答得過得去。

把蒸餾、剪枝、量化層層疊用——並在每一步核實品質是否守得住。

當心那種「壓縮了 50 倍而無損失」的標題。這類說法通常只在某個特定基準的平均值上成立,可能藏起在邊角情形、其他語言、或罕見輸入上的真實退化。壓縮的結果,必須拿你真正在乎的那份工作負載去評判。

又稱
model optimizationmodel shrinking模型压缩模型瘦身