1. 论文概述

这篇文章认为卷及神经网络中每层生成的特征图中包含信息量的大小可以使用特征图的秩作为评判标准,特征图秩的大小和对应着卷积核的重要性。因此本文在网络压缩中将保留 High Rank 对应的 filter, 裁剪 Low Rank 对应的 filter。上述网络裁剪的前提是基于每个 filter 产生的特征图的 rank 均值是一致的,并不会被 CNN 的参数和数据集中图片的不同而改变。同时,文章用数学证明了具有low-rank属性特征图对应的 filter 具有较少的信息,具有 high-rank属性特征图对应的 filter 具有更多的信息。

网络裁剪通常分成两类:weight pruning (非结构化剪枝)filter pruning(结构化剪枝),第一种剪枝策略产生的是稀疏的权重矩阵,第二种剪枝策略是根据 filter 的重要性进行裁剪。本文从两个方向衡量 filter 的重要性。

  • A. Property Importance: 这种类型的方法是建立在网络的固有属性上的,并不需要修改网络的损失训练损失函数,在完成剪枝之后需要finetune用以恢复精度。一些典型的方法有L1或L2范数/一阶梯度度量/特征图反向映射filter重要性/网络层的几何中值。这些方法会存在精度和压缩比例的局限;
  • B. Adaptive Importance:这种类型的方法是将剪裁的方法嵌入到网络的训练过程(给损失函数添加额外的正则项并使其稀疏)中,这样通过在网络训练过程中通过数据流的形式选择更加的裁剪方案。一些方法有:在BN中scaling稀疏/引入结构稀疏参数。这些直接在网络中加入的稀疏约束的方式一般比第一种方法中获得结果要好,但是由于网络的损失函数已经被改变,这就使得整个网络都需要重新训练而不仅仅是重新fintune了;

这篇论文则是根据 filter 产生的特征图的秩的大小衡量 filter 的重要性,从而决定裁剪掉哪些 filter,其流程如下图所示:

filter ruby code 语法 filter using_深度学习


同时,文章还发现网络的特征图的秩并不会根据训练 batch 的变化而变化(也就是filter对输入数据分布并不敏感),见下图:

filter ruby code 语法 filter using_深度学习_02


本篇论文的贡献:

  • A. 文章发现单个 filter 生成的特征图秩的均值并不会随着网络参数的改变而改变;
  • B. 文章证明了具有 low-rank 属性的特征图信息含量较少,而 high-rank 属性的
    特征图信息含量较多。
  • C. 实验证明文章中提出的算法在模型压缩和加速方面具有很好的表现。

2. 数学建模

2.1. 变量说明

假设CNN中拥有 filter ruby code 语法 filter using_人工智能_03 层卷积,filter ruby code 语法 filter using_损失函数_04代表第filter ruby code 语法 filter using_深度学习_05个卷基层,该层的卷积参数表示为 filter ruby code 语法 filter using_深度学习_06 ,生成的特征图表示为 filter ruby code 语法 filter using_filter ruby code 语法_07。经过选择可以将原有的 filter 分为两个子集: 保留集 filter ruby code 语法 filter using_算法_08 和剪除集 filter ruby code 语法 filter using_损失函数_09, 上述两个集合构成了原有的 filter, 并且两者之间并没有交集。

2.2 HRank 描述

Filter Pruning 的目标是辨别和剪除包含较少信息的 filter, 文章中给出的待优化目标函数:
filter ruby code 语法 filter using_深度学习_10
filter ruby code 语法 filter using_算法_11
其中,指示函数 filter ruby code 语法 filter using_损失函数_12, 当filter很重要的时候值为1,否则为0. filter ruby code 语法 filter using_人工智能_13 是度量函数,衡量 filter 的重要性。

这篇文章中设计的度量函数希望的是度量输入图像(特征图)的分布与输出鲁棒,否则会出现取得次优解。这篇文章将度量的对象放在了特征图上,而不是 filter 的权值,这样做的好处是可以很好共同反应filter与输入图像(特征图)的特性。因而上面建立的最优化模型就可以描述为:
filter ruby code 语法 filter using_算法_14
filter ruby code 语法 filter using_算法_11
其中,filter ruby code 语法 filter using_filter ruby code 语法_16 是输入图像(特征图),其采样的分布是filter ruby code 语法 filter using_人工智能_17, filter ruby code 语法 filter using_人工智能_18度量filterfilter ruby code 语法 filter using_算法_19生成的特征图filter ruby code 语法 filter using_人工智能_20的信息含量,因此,filter ruby code 语法 filter using_人工智能_18filter ruby code 语法 filter using_深度学习_22是正相关的关系,特征图包含的信息越多,与之相对应的filter也就越重要。

因而当前的问题已经转化成估计filter产生的特征的信息度量函数 filter ruby code 语法 filter using_人工智能_18, 之前的一些度量方法对输入数据的分布filter ruby code 语法 filter using_人工智能_17比较敏感。因而,本文中提出了使用 rank 概念的度量方式,特征图的度量就可以描述为:
filter ruby code 语法 filter using_人工智能_25
其中,filter ruby code 语法 filter using_人工智能_26是输入图像 filter ruby code 语法 filter using_filter ruby code 语法_16的 rank, 在输入图像对应的矩阵上使用 SVD分解,并划分重要区域与非重要区域,得到:
filter ruby code 语法 filter using_算法_28
文章将当前特征图包含的信息量描述为: filter ruby code 语法 filter using_损失函数_29

2.3 网络裁剪

文章发现由某个filter生成的特征其 rank 不与输入的数据相关(不同输入样本可以通过求取期望的形式进行平滑近似),而且其 rank 还可以表示数据含有信息的多少,根据上述两个性质对网络中 filter 进行裁剪, 因而度量网络层中的重要性可以用某个filter下的rank期望:
filter ruby code 语法 filter using_损失函数_30
因而可以将原来的最优化表达式描述为:
filter ruby code 语法 filter using_损失函数_31
filter ruby code 语法 filter using_损失函数_32
因而,文章中的网络裁剪过程可以具体描述为:

  • A. 首先计算生成当前层特征图的每个 filter 的 rank 期望 filter ruby code 语法 filter using_算法_33;
  • B. 对这些 rank 值进行降序重排后的值 filter ruby code 语法 filter using_filter ruby code 语法_34;
  • C. 按照设定好的裁剪阈值将上述的 rank 划分成两个部分,也就是要保留的和裁剪的;
  • D. 移除裁剪的部分之后对重要的部分的参数进行初始化对网络进行 finetune。

3. 实验结论

CIFAR-10数据集上 ResNet-56/110 结果:

filter ruby code 语法 filter using_算法_35


ImageNet数据集上 DenseNet-40:

filter ruby code 语法 filter using_算法_36


ImageNet 数据集上 ResNet-50:

filter ruby code 语法 filter using_人工智能_37