论文地址:https://arxiv.org/abs/1611.06440v2

英伟达出品的模型剪枝论文,NVIDIA Transfer Learning Toolkit就是基于这篇论文进行实现的?

0 摘要

本文提出了一种新的对神经网络中卷积核进行剪枝的算法以实现高效推理。作者交错进行基于贪婪标准的剪枝和通过反向传播的微调,实现了高效的剪枝,并且剪枝后的模型保持了良好的泛化能力。作者提出了一种基于泰勒展开的新的评价标准,该标准近似于修剪网络参数引起的代价函数的变化。与其他标准(例如,对用于细粒度分类的大型CNN使用卷积核或特征图的范数进行剪枝只使用了一阶梯度信息)相比,本文提出的标准性能更好。实验表明,本文算法在理论上可以在基本不影响模型准确率的情况下将3D卷积滤波器的大小压缩超过10倍,本文的算法也适用于基于ImageNet数据集训练的模型。

1 简介

卷积神经网络(CNN)广泛用于计算机视觉应用,包括目标分类和定位、行人和汽车检测以及视频分类。许多指定领域的问题都只有少量精心收集的训练数据。在这些情况下,可以通过微调先前在更大的标注视觉数据集上训练的现有深度模型来提高准确度,例如来自ImageNet的图像(Russakovsky等,2015)或来自Sports-1M的视频(Karpathy等。,2014)。虽然这种形式的迁移学习获取了最先进的精确度,但由于网络很大,推理所需的时间、功率和内存都很大,推理速度很慢。

虽然现代深度CNN由多种网络层组成,但推理过程的耗时主要由卷积层的计算量决定。为了加快推理速度,作者对整个特征图进行剪枝,以便即使在嵌入式设备上也可以高效推理。本文交错进行基于贪婪标准的剪枝和通过反向传播的微调,实现了高效的剪枝,并且剪枝后的模型具有良好的泛化能力。

神经网络剪枝是神经网络早期发展的先驱(Reed,1993)。Optimal Brain Damage(LeCun等,1990)和Optimal Brain Surgeon(Hassibi&Stork,1993)利用二阶泰勒展开来选择要删除的参数,使用剪枝作为正则化来改进训练和泛化过程。该方法需要部分或完全地计算Hessian矩阵,存储和计算量很大。

Anwar等人(2015)描述了对网络卷积层的特征图和权重矩阵进行结构化剪枝,以及在权重中规则化的使用跨度稀疏性。通过粒子滤波进行剪枝,使用分类错误率加权。该方法在小型CNN上显示出良好的结果,但是不适合于更大的CNN。

Han等人(2015)通过使用 l2 正则化去除低于预定阈值的权重和微调实现了更简单的剪枝方法。这种非结构化修剪对于网络压缩非常有效,并且取得了良好的性能。但非结构化剪枝可能无法直接转化为更快的推理,因为现代硬件(CPU/GPU)基于规则化的计算实现高吞吐量。因此,可能需要设计专门的硬件来实现具有稀疏核的网络(Han et al。,2016)的高效推理。这种方法还需要比较长的微调时间,可能要比原始网络的训练时间多3倍以上。系列三的文章等提出了基于组稀疏的正则化来去掉不重要的参数。基于正则化的剪枝方法需要对每层进行灵敏度分析,增加了计算量。相反,本文的方法依赖于对所有层进行全局缩放,并且不需要灵敏度估计,剪枝更快,因为本文算法是直接修剪不重要的参数,而不是通过正规化下的优化使这些不重要的参数的值变得足够小。

其他剪枝方法,包括将参数与相关权重相结合(Srinivas&Babu,2015),降低精度(Gupta等,2015; Rastegari等,2016)或张量分解(Kim等,2015)。这些方法通常需要单独的训练过程或精心的微调,也可以与本文的方法相结合以取得更好的效果。

2 方法

本文提出的剪枝方法包括以下步骤:

  • 针对给定任务微调网络;
  • 交替进行剪枝和进一步微调;
  • 在达到准确性和剪枝目标之间的平衡后停止剪枝,剪枝目标可以是运算量(FLOPs)或内存占用量。

实现过程很简单,但关键点在于要设置正确的剪枝标准。本节给出了几种有效的剪枝标准和相关的注意事项。

假设训练集D={{X=x0,x1,⋯ ,xN},y={y0,y1,⋯ ,yN}}D = \{\{X = x_0,x_1,\cdots,x_N\},y=\{y_0,y_1,\cdots,y_N\}\}D={{X=x0,x1,,xN},y={y0,y1,,yN}},X和y分别表示输入和输出。网络参数W={(w11,b11),(w12,b12),⋯ ,(wLCl,bLCl)}W = \{(w_1^1,b^1_1),(w_1^2,b_1^2),\cdots,(w_L^{C_l},b_L^{C_l})\}W={(w11,b11),(w12,b12),,(wLCl,bLCl)},损失函数C(D∣W)C(D|W)C(DW)。最常用的损失函数是−log⁡-\loglog函数。代价函数的选择与剪枝无关,仅取决于要解决的任务类型,分类任务就是要负对数似然函数,回归任务就是用L1/L2/Smooth L1等。迁移学习中,一般使用在相关但不同的数据集上预先训练的模型W0来作为初始化模型。

剪枝过程,就是保持模型准确性的情况下调整模型参数,即C(D∣W′)≈C(D∣W)C(D|W^{'}) \approx C(D|W)C(DW)C(DW)。剪枝可以表示成:
minw′∣C(D∣W′)−C(D∣W)∣,s.t.∣∣W′∣∣0≤Bmin_{w^{'}}|C(D|W^{'}) - C(D|W)|,s.t. ||W^{'}||_0 \leq BminwC(DW)C(DW),s.t.W0B

∣∣W′∣∣0≤B||W^{'}||_0 \leq BW0B表示W′W^{'}W中非零参数的数量小于B。直观来看,如果W′W^{'}W = W,误差值最小,但是W′W^{'}Wl0l_0l0范数也最大。

找到一个好的参数子集,同时尽可能接近原始的损失值是一个组合问题。需要对2∣W∣2^{|W|}2W个参数子集计算损失值。对于当前的网络结构,遍历测试的话计算量太大,例如VGG-16具有|W| = 4224个卷积特征图。

本文中作者研究了一种贪婪算法。如图1所示,从初始模型W开始,迭代地识别并移除最不重要的参数。因为每次迭代都是在删除参数,那么各次迭代结果都满足W′W^{'}Wl0l_0l0约束。

在这里插入图片描述
由于我们将分析重点放在修剪卷积层的特征图上,我们用zl∈RHl×Wl×Clz_l \in R^{H_l \times W_l \times C_l}zlRHl×Wl×Cl表示特征图,其大小为Hl×WlH_l \times W_lHl×Wl,具有ClC_lCl个通道。该特征图可以是模型的输入z0z_0z0,也可以是网络的某一个卷积层的输出zl,l∈[1,2,⋯ ,L]z_l,l\in [1,2,\cdots,L]zl,l[1,2,,L]。单个特征图表示成zl(k),k∈[1,2,⋯ ,Cl]z_l^{(k)},k \in [1,2,\cdots,C_l]zl(k),k[1,2,,Cl]。参数为wl(k)∈RCl−1×p×pw_l^{(k)} \in R^{C_{l-1}\times p \times p}wl(k)RCl1×p×p的卷积层lll对输入的特征图zl−1z_{l-1}zl1应用卷积运算:
zl(k)=gl(k)R(zl−1∗wl(k)+bl(k))z_l^{(k)} = g_l^{(k)}R(z_{l-1}*w_l^{(k)}+b_l^{(k)})zl(k)=gl(k)R(zl1wl(k)+bl(k))
其中,zl(k)∈RHl×Wlz^{(k)}_l \in R^{H_l \times W_l}zl(k)RHl×Wl是每一个大小为p×pp \times pp×p的卷积核和其输入特征图块卷积后再和偏差项bl(k)b_l^{(k)}bl(k)相加的结果。这里引入了一个剪枝门函数gl∈{0,1}Clg_l \in \{0,1\}^{C_l}gl{0,1}Cl,用于决定某特定特征值应该在前向过程中保留还是被剪掉。g也是一个向量,按照W′=gWW^{'} = gWW=gW进行使用。

2.1 oracle剪枝

完整模型和剪枝后的模型之间的准确度差异取决于选取“最不重要”的参数的标准。最佳标准是对每个参数的精确评估,这里表示为oracle标准,通过依次消除每个非零参数w∈W′w \in W^{'}wW并记录损失值的变化来实现。

作者提到了两种oracle估计重要性的方法:

  • oracle-loss:带符号的损失值改变量C(D∣W′)−C(D∣W)C(D|W^{'}) - C(D|W)C(DW)C(DW)
  • oracle-abs:损失值改变量的绝对值∣C(D∣W′)−C(D∣W)∣|C(D|W^{'}) - C(D|W)|C(DW)C(DW)

虽然两者都不会因为剪枝增加损失,但是oracle-loss版本鼓励通过修剪减少损失,而oracle-abs不考虑损失值的变化方向,只是惩罚任何修剪造成的损失变化。

虽然oracle剪枝可以取得最佳的效果,但计算成本过高,需要在训练数据集上进行∣∣W′∣∣0||W^{'}||_0W0次评估。由于参数重要性的估计是剪枝方法的效果和效率的关键,因此作者基于模型性能和推理的计算资源需求提出了评价标准。

2.2 剪枝标准

有许多启发式的标准比oracle剪枝的计算效率更高。对特征图及卷积核重要性进行评估,合理的标准包括:

  • 卷积核的l2l_2l2范数;
  • 特征图激活值的均值、标准差和比例;
  • 激活值和预测值之间的互信息。

下面具体介绍了这三种标准并提出了基于泰勒展开的新标准

最小化权重:按卷积核权重的大小进行修剪可能是最简单的标准,并且在微调过程中不需要任何额外的计算。在根据一组权重的范数进行修剪的情况下,将该标准设置为:ΘMW:RCl−1×p×p→R\Theta_{MW}:R^{C_{l-1}\times p \times p} \rightarrow RΘMW:RCl1×p×pRΘMW(w)=1∣w∣∑iwi2\Theta_{MW}(w) = \frac{1}{|w|}\sum_iw_i^2ΘMW(w)=w1iwi2∣w∣|w|w表示权重集向量化后的维度。应用这种剪枝的原因是,具有低l2l2l2范数的卷积核检测到的特征不如具有高范数的卷积核检测到的特征重要。那么模型训练过程中可以通过应用l1或l2正则化来辅助训练,将会使那些相对不重要的卷积核具有更小的权重值。

激活值:ReLU激活函数普及的原因之一是输出激活特征图具有稀疏性。因此,可以合理地假设如果激活值(输出特征图)很小,则该特征检测器对于当前的预测任务并不重要。因此可以通过激活值得均值来评估各卷积核的重要性,对于激活值a=zl(k)a = z_l^{(k)}a=zl(k)ΘMA:RHl×Wl×Cl→R\Theta_{MA}:R^{H_l \times W_l \times C_l} \rightarrow RΘMA:RHl×Wl×ClRΘMA(a)=1∣a∣∑iai\Theta_{MA}(a) = \frac{1}{|a|}\sum_ia_iΘMA(a)=a1iai,或者可以通过激活值的标准差进行评估,ΘMAstd(a)=1∣a∣∑i(ai−ua)2\Theta_{MA_std}(a) = \sqrt {\frac{1}{|a|} \sum_i(a_i - u_a)^2}ΘMAstd(a)=a1i(aiua)2

互信息:互信息(MI)衡量一个变量中有关另一个变量的信息量。我们将MI作为修剪的标准,ΘMI:RHl×Wl×Cl→R\Theta_{MI}:R^{H_l \times W_l \times C_l} \rightarrow RΘMI:RHl×Wl×ClRΘMI(a)=MI(a,y)\Theta_{MI}(a) = MI(a,y)ΘMI(a)=MI(a,y),y是神经网络的输出。MI适用于连续变量。为了简化计算,这里使用信息增益(Information Gain,IG)替换它,IG针对量化变量定义为IG(y∣x)=H(x)+H(y)−H(x,y)IG(y|x) = H(x) + H(y) - H(x,y)IG(yx)=H(x)+H(y)H(x,y),H(x)表示变量x的熵。我们累积了多次更新中的激活值和真实值的统计数据,可以用来计算IG。

泰勒展开:如果将剪枝作为优化问题,目的就是找到W′W^{'}W,具有有限的非零元素。公式化表示即最小化∣△C(hi)∣=∣C(D∣W′)−C(D∣W)∣|\triangle C(h_i)|=|C(D|W^{'}) - C(D|W)|C(hi)=C(DW)C(DW)。通过基于泰勒展开的方法,可以直接通过去除特定参数来近似损失函数的变化。使用hih_ihi表示参数 i 的输出,对于特征图,h={z0(1),z0(2),⋯ ,zL(Cl)}h = \{z_0^{(1)},z_0^{(2)},\cdots,z_L^{(C_l)}\}h={z0(1),z0(2),,zL(Cl)}。为了方便起见,我们认为损失函数同样取决于参数和根据参数计算的输出:C(D∣hi)=C(D∣(w,b)i)C(D|h_i) = C(D|(w,b)_i)C(Dhi)=C(D(w,b)i)。假设各参数相互独立,有:
∣△C(hi)∣=∣C(D∣hi=0)−C(D,hi)∣|\triangle C(h_i)|=|C(D|h_i = 0) - C(D,h_i)|C(hi)=C(Dhi=0)C(D,hi)
其中,如果hih_ihi被修剪掉,则C(D,hi=0)C(D,h_i = 0)C(D,hi=0)表示该参数为0时的损失值;如果hih_ihi没有被修剪掉,则C(D,hi)C(D,h_i)C(D,hi)表示具有该参数时的损失值。虽然参数实际上是相互依赖的,但在模型训练期间的梯度计算过程中已经使用了参数相互独立的假设。

为了近似△C(hi)\triangle C(h_i)C(hi),我们使用一阶泰勒展开。对于函数f(x)f(x)f(x),函数在x=a处的泰勒展开为:
f(x)=∑p=0Pf(p)(a)p!(x−a)p+Rp(x)f(x) = \sum_{p=0}^{P}\frac{f^{(p)}(a)}{p!}(x-a)^p + R_p(x)f(x)=p=0Pp!f(p)(a)(xa)p+Rp(x)
其中,f(p)(a)f^{(p)}(a)f(p)(a)为 f 在点 a 处的 p 阶导数。Rp(x)R_p(x)Rp(x)为 p 阶剩余项。在hi=0h_i = 0hi=0处使用一阶泰勒展开近似C(D,hi=0)C(D,h_i = 0)C(D,hi=0)可得:
C(D,hi=0)=C(D,hi)−δCδhihi+R1(hi=0)C(D,h_i = 0) = C(D,h_i) - \frac{\delta C}{\delta h_i}h_i + R_1(h_i = 0)C(D,hi=0)=C(D,hi)δhiδChi+R1(hi=0)

R1(hi=0)R_1(h_i = 0)R1(hi=0)可以通过拉格朗日形式计算:
R1(hi=0)=δ2Cδ(hi2=ϵ)hi22R_1(h_i = 0) = \frac{\delta ^2 C}{\delta (h_i^2 = \epsilon)}\frac{h_i^2}{2}R1(hi=0)=δ(hi2=ϵ)δ2C2hi2
ϵ\epsilonϵ是介于0到hih_ihi之间的实数。这里我们忽略一阶剩余项,主要是由于需要进行大量计算,但部分原因是广泛使用的ReLU激活函数鼓励较小的二阶项。

最后,忽略掉剩余项,将式子带入可得:
ΘTE(hi)=∣△C(hi)∣=∣C(D,hi)−δCδhihi−C(D,hi)∣=∣δCδhihi∣\Theta_{TE}(h_i) = |\triangle C(h_i)| = |C(D,h_i) - \frac{\delta C}{\delta h_i}h_i - C(D,h_i)| = |\frac{\delta C}{\delta h_i}h_i|ΘTE(hi)=C(hi)=C(D,hi)δhiδChiC(D,hi)=δhiδChi

直观地,该标准剪去那些代价函数对特征映射hih_ihi梯度较小的参数。这种方法需要累积激活值的乘积和代价函数对激活值的梯度,这可以很容易地从反向传播中计算出来。ΘTE\Theta_{TE}ΘTE针对多维输出,例如对特征图,有:
在这里插入图片描述

M为特征图向量化之后得长度。对于minibatch T>1的样本,该标准对minibatch中的每一个样本进行计算并用T取平均。

和Optimal Brain Demage之间的关系:上面提出的泰勒标准近似于去除一个特征图之后导致的损失变化。核心思想与Optimal Brain Demage(OBD)相同(LeCun等,1990)。但主要区别在于泰勒展开的一阶项的处理,在我们的实现中,对于代价函数C和隐藏层激活h,y=∂C∂hhy = \frac{\partial C}{\partial h}hy=hCh。在经过足够的训练之后,梯度项∂C∂h→0\frac{\partial C}{\partial h} \rightarrow 0hC0,E(y) = 0。此时y提供的信息很少,因此OBD将该项视为零,并侧重于二阶项。然而,y的方差不为零,并且与局部激活h的稳定性相关。通过考虑修剪引起的代价的绝对值变化(如公式3所示),我们使用一阶项|y|的绝对值。基于样本独立同分布的假设,E(∣y∣)=σ2/πE(|y|) = \sigma \sqrt{2} / \sqrt{\pi}E(y)=σ2 /π ,其中σ\sigmaσ是y的标准差,为半正态分布的期望值。所以,当y趋向于0,|y|的期望正比于y的方差,y的方差作为修剪标准经验上看具备更多的信息。另外,本文的泰勒展开避免了计算二阶泰勒展开项,计算量小。

Average Percentage of Zeros(APoZ):胡等人(2016)提出使用激活的稀疏性进行网络修剪。ReLU激活函数在推理期间对激活值施加稀疏性,并且输出中正的激活值的比例可以确定神经元的重要性。直观地说,这是一个很好的标准,无论网络的目标是什么,第一层的特征图都有类似的APoZ,因为他们像Gabor滤波器一样。本文使用APoZ来估计特征图的显著性。

2.3 标准化

某些标准返回“原始”值,其比例随网络中参数层的深度而变化。一个简单的逐层“l2 标准化”可以实现跨层的重新缩放:

在这里插入图片描述

2.4 FLOPS正则化剪枝

应用剪枝的主要目的之一是减少网络的操作量。由于输入特征图和卷积核的数量和大小不同,不同层的特征图需要不同的计算量。考虑到这一点,我们引入FLOP正则化:

在这里插入图片描述
其中,λ\lambdaλ控制正则化的比例。作者使用的是λ=10−3\lambda = 10^{-3}λ=103Θflop\Theta^{flop}Θflop的计算基于卷积使用滑动窗方式进行实现的假设。可以应用其他正则化条件,例如,存储大小、卷积核大小或内存占用量。

为了计算浮点运算(FLOP)的数量,我们假设卷积是作为滑动窗口实现的,忽略非线性函数的计算量。对于卷积核,我们有:
FLOPS=2HW(CinK2+1)CoutFLOPS = 2HW(C_{in}K^2 + 1)C_{out}FLOPS=2HW(CinK2+1)Cout
其中,CinC_{in}Cin是输入特征图的通道数。 K是正方形卷积核的大小,H、W、CoutC_{out}Cout是输出特征图的高、宽和通道数。

对于全连接层,其FLOP为(2I−1)O(2I - 1)O(2I1)O,其中III表示输入维度,OOO表示输出维度。

3 实验

3.1 使用oracle修剪的结果

我们使用Caltech-UCSD Birds 200-2011数据集(Wah et al。,2011)对VGG-16网络(Simonyan&Zisserman,2014)进行微调,以对鸟类进行分类。该数据集由近6000个训练图像和5700个测试图像组成,覆盖200种鸟类。我们使用学习率为0.0001的VGG-16微调60个epoch,使用未剪切的图像实现72.2%的测试精度。

为了计算oracle,作者评估了从微调的VGG-16网络中删除每个单独的特征图所导致的损失变化。作者根据对损失的贡献对特征图进行排名,其中rank 1表示最重要的特征图(删除它导致损失的最大增加),而rank 4224表示最不重要的特征图。统计结果如图2所示,按照卷积层分组。可以看到(1)中位数的全局重要性趋于随着深度而减小。(2)使用最大池化的层往往比没有使用最大池化的层更重要(VGG-16在第2,4,7,10和13层之后使用了池化层(3)最大和最小等级表明每个层都有一些全局重要的特征图,也有一些不太重要的特征映射。结合后续实验的结果,作者认为应该进行平衡修剪,在所有层上进行剪枝。

接下来,作者使用预先计算的oracle排名迭代地修剪网络。在本实验中,不会更新网络参数或迭代之间的oracle排名。在许多修剪迭代中,训练精度在图3中示出。令人惊讶的是,按照Oracle-abs进行修剪比按照Oracle-loss进行修剪的准确率更高

在这里插入图片描述

3.2 对比评估本文提出的标准和oracle标准

为了评估计算效率标准作为oracle的替代,我们计算Spearman的秩相关性,估计两个预测器提供单调相关输出的程度,即使他们的关系不是线性的。给定每个参数 i 的oracle和标准等级di=rank(Θoracle(i))−rank(Θcriterion(i))d_i = rank(\Theta_{oracle}(i)) - rank(\Theta_{criterion}(i))di=rank(Θoracle(i))rank(Θcriterion(i))之间的差异,计算等级相关性:

在这里插入图片描述
其中N是参数的数量(和最高等级)。该相关系数取[-1,1],其中-1表示完全负相关,0表示无相关,1表示完全正相关。

在这里插入图片描述
我们在表1中显示Spearman的相关性,将oracle-abs排名与一组网络/数据集上的不同标准的排名进行比较,其中一些将在稍后介绍。在修剪迭代之前或修剪迭代之间的微调期间,根据训练数据计算数据相关标准(除了权重大小之外的所有标准)。作为健全性检查,我们评估随机排名并观察所有层的0.0相关性。“Per layer”分析显示每个卷积层内的排名,而“All layers”描述了跨层的排名。虽然有几个标准在具有原始值的层上不能很好地扩展,但是逐层标准化可以显著提高性能。泰勒标准在所有标准中具有最高的相关性,在层内和跨层(具有L2标准化)。OBD显示未使用标准化时各层之间的最佳相关性;它还显示了ImageNet数据集上相关性的最佳结果。

3.3 对基于Imagenet微调的模型进行剪枝

在这里插入图片描述
我们现在评估关于两个迁移学习问题的完整迭代修剪过程。我们专注于减少卷积特征图的数量和总估计浮点运算量(FLOP)。对于相对较小的数据集而言,如果不依赖于迁移学习,则难以进行细粒度识别。布兰森等人(2014)表明,在Birds-200数据集上从头训练CNN的测试精度仅为10.9%。将结果与随机初始化的CNN进行比较,该CNN每层的参数量为原CNN的一半,表示为“From Scratch”。

图4显示了在Birds-200数据集上进行微调后对VGG-16剪枝的结果。在每次剪枝迭代时,删除单个特征图,然后执行30个小批量SGD更新,批量大小为32,动量为0.9,学习率为1e-4,权重衰减为1e-4。该图显示了准确率-剪枝比例及准确度-GFLOPs的关系。本文的泰勒剪枝标准取得了几乎最好的效果。

在这里插入图片描述
在图5中,我们在Oxford Flowers 102 dataset上微调的AlexNet剪枝后的效果。表1总结了与oracle-abs的标准相关性。我们最初使用0.001的学习速率微调网络20个epoch,最终测试精度达到80.1%。然后修剪程序如之前针对Birds-200所述,除了在修剪迭代之间仅有10个小批量更新。我们观察到Taylor和OBD标准在参数数量和GFLOP方面的优越性能。

我们观察到泰勒标准显示出最佳性能,其中OBD紧随其后具有较低的Spearman等级相关系数。由于Hessian的对角线的计算,实施OBD需要更多的计算,并且它比仅依赖于一阶梯度的Taylor标准慢50%至300%。

在这里插入图片描述
图6显示了使用泰勒标准进行修剪以及修剪迭代之间的不同数量的微调的区别。增加更新次数会带来更高的准确性,但代价是修剪过程的额外运行时间。

在修剪期间,我们观察到精确度略有下降。其中一个原因是修剪迭代之间的微调。初始的网络通过更长的微调和更好的优化参数搜索,具有更好的准确性。例如,在额外的128k更新后,Birds-200上的未修剪得VGG16网络的准确率达到75%。在130k更新后,Flowers-102上的AlexNet上升到82.9%。应该注意的是,通过对修剪网络的进一步微调,我们也可以实现更高的精度,因此精度的一对一比较是粗略的。

3.4 修复用于手势识别的循环3D-CNN网络

在这里插入图片描述
Molchanov等(2016)使用大型递归神经网络的识别视频流中的25个动态手势。通过向Sports-1M视频数据集(Karpathy等人,2014)预训练的3D-CNN添加循环连接并对手势数据集进行微调来构建网络。完整网络在深度模态训练时达到80.7%的准确度,但单个推理需要估计37.8 GFLOP,对于嵌入式GPU上的部署来说计算量太大了。使用具有学习速率0.0003,动量0.9,FLOP正则化10-3的泰勒标准进行几次修剪迭代,我们将推断计算量减少到3.0 GFLOP,如图7所示。虽然修剪造成错误率提升了6%,额外的微调可以恢复大部分丢失的精度,从而产生最终修剪的网络,GFLOP减少12.6倍,精度损失仅为2.5%。

3.5 为ImageNet修剪网络

在这里插入图片描述
我们还在大规模ImageNet分类任务上测试我们的修剪方案。在第一个实验中,我们从经过训练的AlexNet的CaffeNet实现开始,该网络具有79.2%的Top-5验证准确度。在修剪迭代之间,我们使用学习率10-4,动量0.9,重量衰减1e-4,批量大小32和50%的dropout进行微调。使用5000个训练图像的子集,我们计算oracle-abs和Spearman与标准的秩相关性,如表1所示。修剪迹线如图8所示。

我们观察到:1)当在修剪迭代之间使用100次更新时,Taylor比随机或最小权重修剪更好。当结果显示时,w.r.t。FLOPs,与随机修剪的差异仅为0%-4%,但是当用修剪的特征图的数量绘制时,差异更高,1%-10%。2)将更新次数从100增加到1000可以显着提高泰勒标准和随机修剪的修剪性能。

对于第二个实验,除了启用FLOP正则化之外,我们使用与之前相同的参数修剪经过训练的VGG-16网络。我们在两点处停止修剪,11.5和8.0 GFLOPs,并在两个模型中微调另外五个epoch,学习率为10-4。修剪后的微调显著改善了结果:网络修剪到11.5 GFLOPs从Top-5准确率从83%提高到了87%,网络修剪到8.0 GFLOP时准确率从77.8%提高到84.5%。

3.6 速度测量

在修剪过程中,我们测量了FLOP计算的减少,这是一种常见的做法(Han et al。,2015; Lavin,2015a; b)。由于从层中移除整个特征映射,FLOP的改进导致网络的推断时间单调减少。然而,推理所消耗的时间依赖于卷积算子的特定实现、并行化算法、硬件、调度、存储器传输速率等。因此,我们测量所选网络的推理时间的改善,以与表2中的未修剪网络相比查看实际加速。我们通过提出的修剪方案观察到显著的加速。

在这里插入图片描述

4 结论

本文提出了一种迭代修剪深度卷积神经网络的新方案。可以发现:
1)根据启发式选择标准,通过在这种情况下迭代地移除最不重要的参数 - 特征图,可以成功地修剪CNN;

2)基于泰勒扩展的标准与其他标准相比有显著改进;

3)标准的每层标准化对于获得全局缩放是重要的。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐