1.1 网络裁剪的一般过程
网络裁剪通常遵循“筛选-裁剪-微调”三步。 “筛选”指的是根据一定的准则,选择出待裁剪的目标,通常被筛选出的裁减目标是对网络性能影响较小的对象,或者是冗余的对象。筛选出待裁剪对象后,进行第二步裁剪。我们通过把与神经元相连的所有参数置为0,或者将滤波器的所有参数置为0来进行裁剪。此时,在物理上神经元仍然存在于网络之中,但在信号处理的流程里,参数被置0的神经元已经不能对网络的运算做出任何贡献,在信号处理流程中被裁剪出了网络。一般而言,进行网络裁减后,网络的性能会退化。性能退化的主要原因是网络裁剪导致网络参数脱出了之前的局部最优点,因此需要进行微调。
如果网络的裁剪是通过参数置0的方法完成的,那么在微调的时候需要注意阻止这些参数更新。如果网络的裁剪是物理上将目标脱出网络,则可以直接进行微调。将网络提升到原有性能所需要的微调次数是衡量网络裁剪效果的重要指标之一。
1.2 神经元贡献评价
在这里我们将卷积层中的一个滤波器或全连接层中的一个计算节点统称为神经元。在神经元级的网络裁剪中,神经元的重要性评价,或称为神经元贡献评价是网络裁剪的核心问题。神经元贡献评价就是为网络中的每一个神经元打一个分数,该贡献分反应了当前神经元对网络性能的影响情况。通常,对网络性能贡献度较小的神经元会被最先剪除。一种简单的评价神经元贡献的方法是,观察剪除该神经元后网络在验证集上的性能变化,并以此作为神经元的得分。这种评价方式相对而言最为有效,但深度神经网络通常含有成千上万个神经元,而神经元的贡献分在每一轮裁剪和微调后又需要重新评估,因此这种打分方式是极为低效的。
1.3 数据相关的评价准则
我们将文献[75]对神经连接的贡献评价推广到神经元上。由于该类评价准则的神经元分数贡献需要借助训练集,因此我们称之为为数据相关的评价准则。首先,我们规定网络层对数据的响应。我们记Y l 为卷积层对单个输入样本的输出,则Y l ∈ R m×n×c ,该层卷积层对输入样本的响应定义为样本在该层的输出特征沿通道维的平均。这种定义方式实际上取的是滤波器对该样本响应的强度,等价于在卷积层后的全局平均值池化。对全连接网络而言,网络的计算节点对样本的响应是单个实数值,因此全连阶层的输出可以直接作为网络对样本的响应。不含有参数的网络层不是网络裁剪的对象,因此不必规定。设第l层网络对第i个训练样本的响应为R i l ,训练集样本数为N ,则我们可以利用神经元对训练集响应的平均值作为神经元贡献准则,定义如下: