使用機器學習解決問題的五步驟:模型推論

1 前言
這是「機器學習基礎觀念」系列的第七篇文章。前面已經走過定義問題、建立資料集、模型訓練與模型評估,這篇要談的是最後一步:模型推論 (Model Inference)。
不少人第一次看到這個名詞會覺得有點多餘:模型都訓練完了,把它搬到機器上跑不就好了嗎?這篇文章要說明的正是這件事沒那麼單純。以下會先解釋什麼是模型推論,再比較它和模型訓練的差異,最後介紹兩個實務上最常見的模型最佳化方法:Pruning 與 Quantization。
2 模型推論的意義

模型推論指的是模型已經完成訓練與評估,被部署到實際的目標硬體上,接著把資料輸入模型、由模型產生預測結果的過程。換句話說,這是模型真正開始「上工」的階段。
用生活化的例子來說,模型推論就像一位經過長期訓練的士兵,通過了各種測驗,終於能夠獨當一面地作戰。
說到這裡可能還是有疑問。畢竟在模型訓練的過程中,我們同樣會把樣本輸入模型、同樣會拿到預測結果。難道模型訓練完成後,只要把模型「複製」到目標裝置上運行,就算是模型推論了嗎?
3 模型訓練與模型推論的差異

當然不是的。模型訓練的重點在於最小化損失函數 (Loss Function),替模型找到一組最佳的參數。這個階段的模型可能相當複雜,裡頭包含了成千上萬的參數。訓練通常也跑在資源充足的機器上,多花一點記憶體、多算幾個小時都還在可接受範圍內。
模型推論的重點則完全不同:把模型部署到目標硬體裝置或是生產線上,實際開始應用模型來解決問題。既然要把模型用在現實情境中,模型的大小與運算量就會被慎重考慮,因為這兩件事直接牽動記憶體的用量、運算所需時間與所需電力。
| 模型訓練 | 模型推論 | |
|---|---|---|
| 目標 | 最小化損失函數,找出最佳參數 | 實際套用模型產生預測 |
| 執行環境 | 資源充足的訓練機器 | 目標硬體、生產線上的裝置 |
| 最在意的事 | 模型的準確度 | 模型大小、運算速度、能耗 |
舉例來說,如果我們訓練出一個「人臉辨識」模型並把它部署到「空拍機」上,為了增強空拍機的續航力,模型的運算過程勢必不能消耗太多電力;或者我們要把模型部署到「自駕車」上,那麼模型的運算速度一定要夠快,慢了一秒都可能發生意外。同一個模型放到不同硬體上,會遇到完全不同的限制,這就是推論階段真正的難處。
因此,模型推論不單單只是輸入資料並產生預測的過程,還必須最佳化模型的效能、速度與能耗。常見的最佳化方法有兩種:Pruning 與 Quantization。
4 Pruning 與 Quantization
這裡先簡單說明兩者的概念。如果想更深入了解模型效能、速度與能耗的最佳化問題,可以參考 TensorFlow 的官方文件。
- Pruning:全名為 Weight Pruning,中文稱為「權重修剪」。透過觀察模型中哪些參數對於模型的預測過程較沒有影響,將這些參數移除,達到降低模型複雜度與運算量的目的。概念上很像整理行李,把幾乎用不到的東西先拿出來,箱子就輕了。
- Quantization:中文稱為「量化」。模型中的參數如果是 32-bit 的浮點數,將其轉為 8-bit。透過簡化模型中參數的「精確程度」,達到降低模型體積並提高運算速度的目的。
不管是 Pruning 或是 Quantization,都是希望在簡化模型複雜度、提升運算速度並降低能源與時間消耗的同時,保持模型原來的預測準確度。這裡的眉角在於「同時」兩個字:把模型砍小很容易,難的是砍完之後準確度沒有掉太多,所以這兩種方法在實務上都需要反覆測試與取捨。
5 結論
這篇文章介紹了模型推論的概念,並比較它與模型訓練的差異:前者在意的是把模型跑得又快又省,後者在意的是把參數學好。也介紹了 Pruning 與 Quantization 這兩種模型最佳化的方法。
下一篇文章會用一個完整的例子,重新複習這五個步驟:定義問題、建立資料集、模型訓練、模型評估與模型推論。




