網絡剪枝
剪枝目的在於找出網絡冗餘連接並移除。由於全連接的連接冗餘度遠高於卷積層,傳統的剪枝多在全連接層對冗餘神經元及連接進行移除。雖然移出的神經元及連接對結果影響不大,但仍會對性能造成影響,常見方法爲對剪枝後的模型進行微調,剪枝與微調交替進行,保證模型性能。
剪枝兩種方法。
後剪枝:模型訓練後進行剪枝。
訓練時剪枝:模型邊訓練邊剪枝。
剪枝後,權值矩陣由稠密變得稀疏。
權值量化
網絡量化通過減少表示每個權重的比特數的方法來壓縮神經網絡。量化的思想就是對權重數值進行聚類。模型的權值參數往往以 32 位浮點數的形式保存,神經網絡的參數,會佔據極大的存儲空間,因此,如果在存儲模型參數時將 32 位浮點數量化爲 8 位的定點數,可以把參數大小縮小爲原來的 1/4,整個模型的大小也可以縮小爲原來的 1/4,不僅如此,隨着參數量化後模型的減小,網絡前向運算階段所需要的計算資源也會大大減少。
量化有效原因:
- 1.量化相當於引入噪聲,但CNN對噪聲不敏感。
- 位數減少後降低乘法操作,運算變快
- 3 .減少了訪存開銷(節能),同時所需的乘法器數目也減少(減少芯片面積)。
低秩近似
低秩分解的方法從分解矩陣運算的角度對模型計算過程進行了優化。
通過使用線性代數的方法將參數矩陣分解爲一系列小矩陣的組合,使得小矩陣的組合在表達能力上與原始卷積層基本一致,這就是基於低秩分解方法的本質。
缺點:
- 低秩分解實現並不容易,且計算成本高昂;
- 目前沒有特別好的卷積層實現方式,而目前研究已知,卷積神經網絡計算複雜度集中在卷積層;
- 低秩近似只能逐層進行,無法執行全局參數壓縮。
知識蒸餾
使用一個大型預先訓練的網絡(即教師網絡)來訓練一個更小的網絡(又名學生網絡)。一旦對一個繁瑣笨重的網絡模型進行了訓練,就可以使用另外一種訓練(一種蒸餾的方式),將知識從繁瑣的模型轉移到更適合部署的小模型。
高效網絡結構
GoogleNet 使用了Inception 模塊而不再是簡單的堆疊網絡層從而減小了計算量。ResNet 通過引入瓶頸結構取得了極好的圖像識別效果。ShuffleNet 結合了羣組概念和深度可分離卷積,在 ResNet 上取得了很好的加速效果。MobileNet 採用了深度可分離卷積實現了目前的最好網絡壓縮效果。
- 減小卷積核大小
- 減少通道數
- 減少filter數目
- 池化操作