論文地址:https://arxiv.org/abs/1608.08710網絡
主要思想
這篇文章主要講了對filters的裁剪,裁剪方法是計算L1範數,而後裁剪掉較少的,多少取決於加速比。ide
實現效果
- VGG-16 34%加速
- ResNet-110 38%加速
具體實現

- 對於每個kernel matrix按列絕對值求和
- 對求和結果排序
- 裁剪掉m個filters(對應內核矩陣的列),以及對應的輸出(Xi+1層中),它又是下一層的輸入,因此也得去掉對應的輸入filters(對應內核矩陣的行)
- 剩餘的kernel weights保留
實現細節

在跨越多層裁剪的過程當中,可能出現kernel matrix裁剪交叉的狀況,兩種處理方法:blog
- Independent pruning 假設藍色是肯定要裁剪的,而後計算綠色的L1時,要考慮黃色的值,跟以前的裁剪無關。
- Greedy pruning 也就是計算綠色的L1時,不考慮已經被裁剪的黃色值
結果:
第二種的準確率輝更高。

殘差網絡的處理:排序
- 第一層隨意裁剪(根據需求),由於它只會影響Xi+1的輸入,可是不會影響最後的輸出。
- residual block裏面的裁剪須要注意,由於裁剪須要和shortcut layer保持一致,才能累加。
- 由於identical feature maps比added residual maps更重要,因此後者的裁剪結果應該由前者決定。
Prune and Retrain 方法
- 裁剪全部層後再繼續訓練網絡
- 裁剪一層,從新訓練一下 結果: 顯然第二種好啊,第一種太暴力了,可能形成沒法修復的裁剪