Introduction
預訓練後的深度神經網路模型往往存在著嚴重的 過參數化 問題,其中只有約5%的參數子集是真正有用的。為此,對模型進行 時間 和 空間 上的壓縮,便謂之曰“模型壓縮” 。
模型壓縮技術包括 前端壓縮 和 後端壓縮 這兩部分。 對比 前端壓縮 後端壓縮 實現難度 較簡單 較難 可逆否 可逆 無法復原 成熟運用 剪枝 低秩近似、參數量化 待發展運用 知識蒸餾 二值網路 前端壓縮
不會改變原始網路結構的壓縮技術。
1. 知識蒸餾
蒸餾模型採用的是 遷移學習,通過採用 預先訓練好 的 複雜模型(Teacher model)的 輸出 作為 監督訊號 去訓練另外一個簡單的網路。這個簡單的網路稱之為student model。 2. 緊湊的模型結構設計
“擠壓”設計 與 “擴張”設計。 3. 濾波器層面的剪枝
在訓練時使用稀疏約束(加入權重的稀疏正則項,引導模型的大部分權重趨向於0)。完成訓練後,剪去濾波器上的這些 0 。
優點:
簡單。
缺點:
剪得不乾淨。 後端壓縮
會大程度上改變原始網路結構的壓縮技術,且無法復原。
1. 低秩近似
使用結構化矩陣來進行低秩分解。
優點:
該方法在中小型網路模型上效果不錯。
缺點:
在大型網路模型上玩不轉。 2. 未加限制的剪枝
完成訓練後,不加限制地剪去那些冗餘參數。
優點:
使模型更加成熟。
缺點:
易導致網路結構隨機且稀疏。由於被剪除的網路連接在分布上缺乏連續性,導致在實際使用模型時,CPU cache和記憶體之間會增加很多不必要的頻繁切換。這種“每次少放,多次拿取”的弊端,使得實際使用中的加速效果大打折扣。
同時,剪枝後,通用的運行庫(比如conv2d)不能用了,還得另行設計新的運算介面。So 麻煩。。 3. 參數量化
從權重中 歸納出 若干的“代表”,由這些“代表”來 表示某一類權重 的 具體數值 。 4. 二值網路
所有 參數的取值 只能是 ±1 。
[1] 解析卷積神經網路—深度學習實踐手冊
[2] 深度壓縮之蒸餾模型