今天阅读了ThiNet: A Filter Level Pruning Method for Deep Neural Network Compression。
剪枝可以用一句话总结:得到各神经元的重要性,去除不重要的神经元并微调网络。如下图所示:
ThiNet的框架分如下几步:
- 滤波器选择,利用layer i+1 的input channels来选择剪枝layer i哪些部分。
- 剪枝,去除layer i+1的弱input channels所对应的layer i的滤波器。
- 微调,修复模型,为节省时间,对一层剪枝后仅训练一两个epochs,当整个网络都剪枝后,再训练足够多轮。
- 循环至第一步对下一层网络剪枝。
在对layer i剪枝时,其先采样足够多的数据,得到layer i+1 的输入值x_{i+1},以及layer i+1的输出值Y(relu前),相应的x_{i+1}与layer i+1的filter卷积结果X,X在输出通道上的累计就是Y,如下图:
选择一个X的子集,该子集和最接近Y,即: