模型剪枝 是什麼?
Pruning — 模型剪枝 的完整解釋
模型剪枝是一種減少模型大小和計算複雜度的技術,透過移除模型中不重要的權重或神經元來實現。
容易混淆
剪枝 vs 量化 量化是把數值精度壓低。 剪枝是把不重要的權重或神經元直接移除。 最關鍵的區別:一個改數字表示,一個砍連結。
剪枝 vs 知識蒸餾 知識蒸餾是用大模型教小模型。 剪枝是直接把原模型縮小。 最關鍵的區別:一個重新學,一個直接瘦身。
剪枝 vs 正則化 正則化是在訓練時限制模型別長太複雜。 剪枝是在訓練後或訓練中把多餘部分移除。 最關鍵的區別:一個管學習過程,一個管模型結構。
記住這句就好
砍掉不重要的連結,讓模型更輕更快。
實際案例
手機端分類器 把影像分類模型裡很少被用到的權重剪掉後,裝置端推論會明顯變快。 如果準度幾乎不變,這種縮小就很划算。
雲端服務降成本 服務端想降低 GPU 成本時,會先看能不能用結構化剪枝減少計算量。 這比單純換更大的主機更省。
算法與應用
常見做法有非結構化剪枝和結構化剪枝,前者砍零散權重,後者砍整個通道或神經元。 判斷哪些部分重要,常會看權重大小、梯度或對驗證集的影響。 剪完通常還要再微調,否則準度容易掉太多。
情境判斷
Q1(直覺題): 你已經有一個訓練好的模型,只想讓它跑得更快,先考慮什麼?
→ 先看剪枝或量化,因為它們都是為了把現有模型變輕巧。
Q2(判斷題): 如果你想大幅縮小模型,但不太想改變數值精度,剪枝一定是唯一選項嗎?
→ 不是,還可以考慮蒸餾或量化,要看你比較在意結構大小還是數值壓縮。
相關術語
常見問題
剪枝會不會讓模型準度暴跌?
有可能,所以通常要控制剪枝比例,並在剪完後再微調。
只剪權重不剪神經元有用嗎?
有用,但如果硬體不吃稀疏矩陣,實際加速可能有限。
剪枝適合所有模型嗎?
不一定,結構、部署環境和效能目標都會影響它值不值得做。