问题的提出
现在,神经网络模型在很多领域都展现了强大的性能(如:物体分类,目标识别,物体分割,自然语言处理等)。随着模型性能的提高,网络结构变得越来越深,参数变得越来越多,这就使得保存模型所需要的内存变多,模型进行推理所需要的计算资源与计算时间也变多。但是,在一些嵌入式设备中,内存与计算资源比较匮乏,对系统的实时性要求较高,这就需要对训练好的网络模型进行剪枝,降低保存模型所需要的内存,同时减少模型一次推理所需要的时间。所以,就需要一些方法,在不损失性能(或者损失很少的性能)的前提下,减少网络模型的参数,对模型进行压缩与加速。
在卷积神经网络中,90%的参数都是来自全连接层,但90%的计算都是来自卷积层。在这篇论文之前的一些方法,大多是对全连接层进行剪枝,然后通过权值量化的方法对网络参数进行压缩。这种方法会将网络模型由密集连接转化为稀疏连接,虽然压缩了模型参数,但并不能很好的起到模型推理加速的效果。这篇论文的作者提出了一种新的方法,对神经网络模型的卷积层进行剪枝,这种方法不会产生稀疏矩阵,在压缩网络模型的同时极大的提高了网络推理速度。
难点分析
这篇论文主要是对卷积层进行修剪,不涉及全连接层。修剪卷积层的思路是:找到不重要或者说是冗余的卷积核通道,将这条通道修剪掉。假设我们需要修剪卷积层i,修剪率为20%,这一层在修剪前的输入特征图为 ( N , x i , w i , h i ) (N,x_i,w_i,h_i) (N,xi,wi,hi),卷积核为 ( x i + 1 , x i , k i , k i ) (x_{i+1},x_i,k_i,k_i) (xi+1,xi,ki,ki),其中:N为输入神经网络的样本数, x i x_i xi为i层输入特征的通道数, w i w_i wi和 h i h_