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