論文地址:https://arxiv.org/abs/1608.08710
主要思想
這篇文章主要講了對filters的裁剪,裁剪方法是計算L1范數,然后裁剪掉較少的,多少取決於加速比。
實現效果
- VGG-16 34%加速
- ResNet-110 38%加速
具體實現
- 對於每一個kernel matrix按列絕對值求和
- 對求和結果排序
- 裁剪掉m個filters(對應內核矩陣的列),以及對應的輸出(Xi+1層中),它又是下一層的輸入,所以也得去掉對應的輸入filters(對應內核矩陣的行)
- 剩余的kernel weights保留
實現細節
在跨越多層裁剪的過程中,可能出現kernel matrix裁剪交叉的情況,兩種處理方法:
- Independent pruning 假設藍色是確定要裁剪的,然后計算綠色的L1時,要考慮黃色的值,跟之前的裁剪無關。
- Greedy pruning 也就是計算綠色的L1時,不考慮已經被裁剪的黃色值
結果:
第二種的准確率輝更高。
殘差網絡的處理:
- 第一層隨意裁剪(根據需求),因為它只會影響Xi+1的輸入,但是不會影響最后的輸出。
- residual block里面的裁剪需要注意,因為裁剪需要和shortcut layer保持一致,才能累加。
- 因為identical feature maps比added residual maps更重要,所以后者的裁剪結果應該由前者決定。
Prune and Retrain 方法
- 裁剪所有層后再繼續訓練網絡
- 裁剪一層,重新訓練一下
結果:
顯然第二種好啊,第一種太暴力了,可能造成無法修復的裁剪