基于NISP (Neuron Importance Score Propagation)算法的网络剪枝

"NISP: Pruning Networks using Neuron Importance Score Propagation"这篇文章认为:若只单独考虑深度网络某一层或接连两层neurons的重要性,并裁剪掉看似不重要的neuron连接,可能会对后续层甚至更深层的响应输出产生影响,而且误差会逐层累积。因此需要从网络整体考虑neurons的重要性。


如上图所示,文章提出了NISP (Neuron Importance Score Propagation)算法:首先将深度网络中与分类器层相连的最后一个隐层定义为Final Response Layer (FRL),并通过Feature Selection方法决定FRL中各个Feature的重要性,而后将重要性得分反向传播至之前所有层(neurons),最后根据裁剪比率(pruning ratio)裁减掉具有低重要性得分的neurons。重要性反向传播及网络裁剪的总体原则,便是要确保FRL输出响应的重建误差最小,该误差可以用裁剪后网络FRL与原网络FRL之间的L1距离予以度量。网络裁剪比率是预先定义的超参数,依据给定的约束目标而定,如FLOPS、Memory Footprint、Accuracy等。如果在filter-level裁剪网络,那么裁剪后网络不会依赖特定平台或算法库的支持。

文章采用Inf-FS算法计算FRL中Feature的重要性,并通过反向传播得到整个网络neurons的重要性得分。重要性反向传播及裁剪问题可以定义为二值化掩码优化问题(binary integer programming),即通过寻求每一层最优的二值掩码矢量,使得网络裁剪后最小化FRL输出响应误差,从而在达到指定压缩比的同时能够最小化精度损失。下式表示M个样本的累积目标函数:


单个样本的目标函数表示为如下加权形式(表示重要性得分矢量):


为确定以指导每一层的裁剪(pruning),则首先需要确定相应层的重要性得分矢量,然后根据该层的裁剪比率计算可按递归方式确定:


Proposition 2可进一步表示为:


即第k层第j个neuron的重要性得分可由下一层相连接neurons重要性得分的加权平均获得,该原则适用于BN、Pooling层等。则通过一次性反向传播便可获得网络中所有neurons的重要性得分,然后指导每一层的pruning。对于全连接层,裁剪个别neurons;对于卷积层,裁剪个别输出通道(channels),每个通道的重要性得分表示为该通道内所有neurons重要性得分之和。被剪除的neurons或channels不参与前一层的反向传播:


实验部分,文章对多个标准数据集(MNIST、Cifar10、ImageNet等)及CNN网络(Inception-net、Resnet等)做了测试。并将比较了基于NISP的网络剪枝、随机方式的网络剪枝、以及随机初始化训练的网络(网络结构与裁剪后网络结构相近)。同时也与其他两种剪枝方法做了对比,包括基于幅度的裁剪方法、以及逐层裁剪方法。具体结果及结论参看论文。

论文地址:https://arxiv.org/abs/1711.05908

猜你喜欢

转载自blog.csdn.net/nature553863/article/details/80462574
今日推荐