1. 程式人生 > >模型壓縮 方法彙總和梳理

模型壓縮 方法彙總和梳理

Introduction

預訓練後的深度神經網路模型往往存在著嚴重的 過引數化 問題,其中只有約5%的引數子集是真正有用的。為此,對模型進行 時間空間 上的壓縮,便謂之曰“模型壓縮”

模型壓縮技術包括 前端壓縮後端壓縮 這兩部分。

對比

前端壓縮 後端壓縮
實現難度 較簡單 較難
可逆否 可逆 不可逆
成熟運用 剪枝 低秩近似、引數量化
待發展運用 知識蒸餾 二值網路

前端壓縮

不會改變原始網路結構的壓縮技術。

  
  • 1

1. 知識蒸餾

蒸餾模型採用的是 遷移學習,通過採用 預先訓練好 的 複雜模型(Teacher model)的 輸出 作為 監督訊號 去訓練另外一個簡單的網路。這個簡單的網路稱之為student model。

2. 緊湊的模型結構設計

“擠壓”設計 與 “擴張”設計。

3. 濾波器層面的剪枝

在訓練時使用稀疏約束(加入權重的稀疏正則項,引導模型的大部分權重趨向於0)。完成訓練後,剪去濾波器上的這些 0 。

  • 優點:
    簡單。

  • 缺點:
    剪得不乾淨。

後端壓縮

會大程度上改變原始網路結構的壓縮技術,且不可逆。

  
  • 1

1. 低秩近似

使用結構化矩陣來進行低秩分解。

  • 優點:
    該方法在中小型網路模型上效果不錯。

  • 缺點:
    在大型網路模型上玩不轉。

2. 未加限制的剪枝

完成訓練後,不加限制地剪去那些冗餘引數。

  • 優點:
    使模型更加成熟。

  • 缺點:
    易導致網路結構隨機且稀疏。由於被剪除的網路連線在分佈上缺乏連續性,導致在實際使用模型時,CPU cache和記憶體之間會增加很多不必要的頻繁切換。這種“每次少放,多次拿取”的弊端,使得實際使用中的加速效果大打折扣。
    同時,剪枝後,通用的執行庫(比如conv2d)不能用了,還得另行設計新的運算介面。So 麻煩。。

3. 引數量化

從權重中 歸納出 若干的“代表”,由這些“代表”來 表示某一類權重具體數值

4. 二值網路

所有 引數的取值 只能是 ±1


[1] 解析卷積神經網路—深度學習實踐手冊
[2] 深度壓縮之蒸餾模型

Introduction