让CNN跑得更快,腾讯优图提出全局和动态过滤器剪枝

网络剪枝是一种加速 CNN 的常用方法。厦门大学和腾讯优图的一项研究提出了一种全新的全局和动态过滤器剪枝方法,能够实现更好的剪枝效果且具有更好的适应性。该论文已被将于当地时间 7 月 13-19 日于瑞典斯德哥尔摩举办的 IJCAI-18 接收。

在 ICML 2018 与 IJCAI 2018 大会期间(今年都在斯德哥尔摩),腾讯将举办 Tencent Academic and Industrial Conference (TAIC),诚邀全球顶尖 AI 学者、青年研究员与腾讯七大事业群专家团队探讨最前沿 AI 研究与应用。

1 引言

卷积神经网络(CNN)已经在多种不同应用中取得了显著的成功,其中包括图像分类 [He et al., 2016; Krizhevsky et al., 2012; Simonyan and Zisserman, 2014]、目标检测 [Girshick et al., 2014] 和形义分割 [Long et al., 2015]。但是,这样出色的表现也伴随着显著的计算成本——如果没有高效的图形处理器(GPU)的支持,将这些 CNN 部署到实时应用中会非常困难。因此,卷积网络加速已经成为了一大新兴研究方向。

卷积神经网络加速方面的近期研究工作可分为三大类,即:低秩分解、参数量化和网络剪枝。其中,网络剪枝得到的研究关注正越来越大,由于这种方法的过滤器参数和中间激活较少(轻内存的在线推理非常需要这一点),所以有内存占用量小的优势。

网络剪枝方法又可以进一步被分为非结构化剪枝和结构化剪枝两类。

非结构化剪枝 [LeCun et al., 1989; Hassibi and Stork, 1993; Han et al., 2015a; 2015b] 的目标是直接对每一层的参数单独剪枝,这会导致出现不规则的内存访问情况,从而对在线推理的效率产生不利影响,在这种情况下,通常还需要设计专用硬件 [Han et al., 2016] 或软件 [Liu et al., 2015; Park et al., 2017] 来进一步加速被剪枝的非结构化 CNN。

结构化剪枝 [Anwar et al., 2015; Lebedev and Lempitsky, 2016; Wen et al., 2016; Li et al., 2016; Luo et al., 2017; Molchanov et al., 2017; Hu et al., 2016] 的目标则是直接以整体形式移除过滤器。这种方法的效率会高很多,而且不需要专用硬件或软件平台。比如,Anwar 等研究者 [Anwar et al., 2015] 为过滤器方面和通道方面的卷积过滤器选择引入了结构化的稀疏性,并基于此通过使用粒子滤波(particle filtering)来根据规则性剪枝过滤器。Luo 等人 [Luo et al., 2017] 隐含地将当前层中的卷积过滤器与下一层中的输入通道关联到了一起,并基于此通过下一层的输入通道选择来对当前层中的过滤器进行剪枝

但是,现有的结构化剪枝方案都是以一种逐层固定的方式来剪枝卷积神经网络,这种方式的适应性更差、效率更低且效果也更差。首先,在局部剪枝中,需要迭代式的层方面的剪枝和局部的微调,这需要密集的计算。第二,对显著过滤器的错误剪枝是不可恢复的,这没有适应性而且剪枝后的网络不能得到最优表现。

在这篇论文中,我们提出了一种全新的全局和动态剪枝(GDP:global & dynamic pruning)方案,可以剪枝掉冗余的过滤器来解决上述两个问题,这能很大程度地加速剪枝后的网络,同时还能降低网络的准确度损失。

不同于之前的逐层固定过滤器剪枝方案,我们的关键创新是在所有网络层上全局地评估各个过滤器的重要度/显著性,然后在此基础上动态地和迭代地剪枝和调整网络,并且还带有重新调用在之前的迭代中被错误剪枝的过滤器的机制。图 1 展示了我们提出的框架的流程图。

我们首先初始化一个预训练的卷积网络,然后给所有过滤器施加一个全局掩模并使之等于 1(即确定对应过滤器是否被剪枝的外部开关。然后,我们设计一个全局判别函数来决定各个过滤器的显著性分数。这种分数能引导我们以全局的方式剪枝所有层上不显著的过滤器,即等价于将不显著的过滤器的掩模设为 0。最后,我们迭代式地调整这个稀疏网络并且以一种自上而下的方式动态地更新过滤器显著性。通过这样的操作,之前被掩蔽的过滤器还有重新被调用的可能,这能显著提升被剪枝后网络的准确度。在优化方面,GDP 可以被描述成一个非凸优化问题,然后可以使用贪婪的交替更新方法通过随机梯度下降有效求解。

图 1:GDP 的图示。每个有颜色的矩形(比如红色矩形)都是过滤器集合 W∗ 中的一个过滤器,具有二元值的全局掩模 m 决定了过滤器的显著性(即表示对应的过滤器是显著的或不显著的)。首先,我们使用一个预训练的模型和一个完全全局掩模来初始化网络。然后,通过将冗余过滤器对应的掩模的值设为 0 来在所有层上以全局的方式将它们剪枝掉。最后,执行过滤器和全局掩模的迭代式动态更新,从而提升剪枝后网络的准确度。

我们在 ImageNet 2012 数据集 [Russakovsky et al., 2015] 上评估了新提出的 GDP,并且基于被广泛使用 AlexNet [Krizhevsky et al., 2012]、VGG-16 [Simonyan and Zisserman, 2014] 和 ResNet-50 [He et al., 2016] 实现了它。通过对比之前最佳的过滤器剪枝方法 [Wen et al., 2016; Li et al., 2016; Luo et al., 2017; Molchanov et al., 2017; Hu et al., 2016],结果表明新提出的 GDP 方案能得到更优的表现:在 AlexNet 上以 1.15% 的 Top-5 准确度损失实现了 2.12 倍的 GPU 加速,在 VGG-16 上以 1.45% 的 Top-5 准确度损失实现了 2.17 倍的 CPU 加速,在 ResNet-50 上以 2.16% 的 Top-5 准确度损失实现了 1.93 倍的 CPU 加速。

3 全局式动态剪枝

3.1 符号标记方法

CNN 可被看作是一种将输入图像映射成某个输出向量的前馈式多层架构。在 CNN 中,最耗时的部分是卷积层。让我们将第 l 层中的图像特征图集合表示为 ,其大小为 H_l×W_l,各个特征图(即通道)为 C_l。这些特征图要么是网络 Z_0 的输入,要么是输出特征图 Z_l,其中 l∈[1, 2, ... , L]。此外,我们将各个特征图表示为 ,其中 k∈[1, 2, ... , C_l ]。第 l 个卷积层的各个输出特征图 是通过将卷积算子(∗)应用到一组输入特征图上获得的,这些特征图的过滤器参数化为:;即:

其中 f(*) 是一个非线性激活函数,比如修正线性单元(ReLU)。

在 Caffe [Jia et al., 2014] 和 TensorFlow [Abadi et al., 2016] 等很多深度学习框架中,基于张量的卷积算子通过降低输入和重新构造过滤器的形状而被重新形式化为了一种矩阵乘矩阵的乘法,比如:

其中,矩阵  的每一行都与输出张量的空间位置有关,这个输出张量是通过基于输入张量  的变换而得到的,并且矩阵  根据过滤器 W_l 重新调整了形状。

3.2 新提出的剪枝方案

算法 1:我们提出的全局式动态剪枝方案

我们的目标是以全局的方式剪枝冗余的过滤器。为此,可以直接将大型网络转换成紧凑的网络,而不重复地评估每个过滤器的显著性和逐层微调剪枝后的网络。我们引入了一种全局掩模,以在训练过程的每次迭代中临时掩蔽不显著的过滤器。基于此,公式 (2) 可改写为:

其中  是一个二元值的掩模。如果第 k 个过滤器是显著的,则,否则就为 0。⊙ 表示 Khatri-Rao 积算子。

正如我们说过的,以一种不可恢复/固定的方式剪枝过滤器在实践中不够灵活且效果很差,这会给网络表现水平带来严重损失。注意,因为过滤器之间存在复杂的互连,所以过滤器显著性可以会在剪枝了特定的层后发生很大的变化 [Guo et al., 2016]。因此,动态剪枝(即从一种全局角度实现被掩蔽的过滤器的回滚)在提升剪枝后网络的可判别性(discriminability)方面有很高的需求。

为了更好地描述新提出的 GDP 的目标函数,我们将整个网络的过滤器表示为 ,并将全局掩模表示为 。然后我们给出一个训练样本集 ,其中 X_i 和 Y_i 分别表示输入和目标输出。我们求解的是以下优化问题:

其中 L(·) 是被剪枝网络的损失函数,比如交叉熵损失。g(X; W*, m) 的输入为 X;具有过滤器 W* 和全局掩模 m,并使用它们将输入映射成一个 s 维的输出(s 是类别数)。h(·) 是用于决定过滤器的显著性值的全局判别函数,这取决于 W* 的预先知识。函数 h(·) 的输出是二元的,即如果对应的过滤器是显著的,则输出 1,否则输出 0。

(4) 式是我们的 GDP 框架的核心函数,这是非凸的,其求解方法将在 3.3 节介绍。β ∈ (0, 1] 是一个决定被剪枝网络的稀疏度的阈值。因为有  算子,所以 (4) 式是一个 NP-hard 问题。我们通过将 m 的界限设定在 W∗ 的预先知识上而简化了这个 NP-hard 问题。然后,通过使用随机梯度下降而贪婪且交替地更新 W* 和 m,我们可以对其进行求解,详见 3.3 节。

4 实验

表 1:GDP 和 GDP-D(没有动态更新的全局剪枝)的 FLOPs 比较,其中 β 设为 0.7。FLOPs% 是指剩余的 FLOPs 所占的百分比。

表 2:用于加速 AlexNet 的不同剪枝方法比较。Hy-P 表示超参数设置,批大小为 32(下面的表格都一样)

图 2:在加速 AlexNet 和 VGG-16 方面不同过滤器选择方案的比较。Scratch 表示从头开始训练的网络,Ori 表示原始 CNN,GDP-D 表示没有动态更新的全局剪枝

表 3:加速 VGG-16 的结果。

图 3:使用 GDP 方案剪枝 VGG-16 时采用不同 β 值的结果比较。(a) 使用 GDP 方案剪枝 VGG-16 时采用不同 β 值的训练损失和 Top-1 测试准确度;(b) 使用不同 β 值的 GDP 剪枝后的网络在微调后的训练损失和 Top-1 测试准确度。

表 4:加速 ResNet-50 的结果。

图 4:在 VGG-16 的第一层上动态地更新过滤器、掩模和输出特征图。左:过滤器和掩模;右:输出特征图。在左列中,每个矩形都包含了过滤器和掩模,其中黑色框表示掩模没改变,红色框表示过滤器和掩模更新了。另外,其中仅有黑白两色的小矩形表示对应的过滤器是否显著,■ 表示显著,□ 表示不显著。在右列中,对应改变的特征图用红色框标出。

论文:通过全部和动态过滤器剪枝加速卷积网络(Accelerating Convolutional Networks via Global & Dynamic Filter Pruning

论文地址:https://www.ijcai.org/proceedings/2018/0336.pdf

卷积神经网络加速近来得到了越来越多的研究关注。在文献中提出的各种方法中,过滤器剪枝一直都被视为一种有潜力的解决方案,这主要是由于其在网络模型和中间的特征图上都有显著的加速和降低内存的优势。为了做到这一点,大多数方法都倾向于以一种逐层固定的方式剪枝过滤器,这种方式无法动态地恢复之前被移除的过滤器,也不能在所有层上联合优化被剪枝的网络。在这篇论文中,我们提出了一种全新的全局和动态剪枝(GDP)方案,可剪枝冗余的过滤器,从而实现 CNN 加速。尤其值得提及的是,我们提出了一种基于每个过滤器的预先知识的全局判别函数,让 GDP 成了首个在所有层上全局地剪枝不显著过滤器的方法。另外,它还能在整个剪枝后的稀疏网络上动态地更新过滤器的显著性,然后恢复被错误剪枝的过滤器,之后再通过一个再训练阶段来提升模型准确度。特别要指出,我们通过使用贪婪的交替更新的随机梯度下降而有效地解决了新提出的 GDP 对应的非凸优化问题。我们进行了大量实验,结果表明,相比于之前最佳的过滤器剪枝方法,我们提出的方法在 ILSVRC 2012 基准的多种前沿 CNN 的加速上表现更优。

理论模型压缩高效卷积神经网络剪枝
2
相关数据
激活函数技术
Activation function

在 计算网络中, 一个节点的激活函数定义了该节点在给定的输入或输入的集合下的输出。标准的计算机芯片电路可以看作是根据输入得到"开"(1)或"关"(0)输出的数字网络激活函数。这与神经网络中的线性感知机的行为类似。 一种函数(例如 ReLU 或 S 型函数),用于对上一层的所有输入求加权和,然后生成一个输出值(通常为非线性值),并将其传递给下一层。

Alex网络技术
AlexNet

AlexNet是一个卷积神经网络的名字,最初是与CUDA一起使用GPU支持运行的,AlexNet是2012年ImageNet竞赛冠军获得者Alex Krizhevsky设计的。该网络达错误率大大减小了15.3%,比亚军高出10.8个百分点。AlexNet是由SuperVision组设计的,由Alex Krizhevsky, Geoffrey Hinton和Ilya Sutskever组成。

凸优化技术
Convex optimization

凸优化,或叫做凸最优化,凸最小化,是数学最优化的一个子领域,研究定义于凸集中的凸函数最小化的问题。凸优化在某种意义上说较一般情形的数学最优化问题要简单,譬如在凸优化中局部最优值必定是全局最优值。凸函数的凸性使得凸分析中的有力工具在最优化问题中得以应用,如次导数等。 凸优化应用于很多学科领域,诸如自动控制系统,信号处理,通讯和网络,电子电路设计,数据分析和建模,统计学(最优化设计),以及金融。在近来运算能力提高和最优化理论发展的背景下,一般的凸优化已经接近简单的线性规划一样直捷易行。许多最优化问题都可以转化成凸优化(凸最小化)问题,例如求凹函数f最大值的问题就等同于求凸函数 -f最小值的问题。

卷积神经网络技术
Convolutional neural network

卷积神经网路(Convolutional Neural Network, CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。卷积神经网路由一个或多个卷积层和顶端的全连通层(对应经典的神经网路)组成,同时也包括关联权重和池化层(pooling layer)。这一结构使得卷积神经网路能够利用输入数据的二维结构。与其他深度学习结构相比,卷积神经网路在图像和语音识别方面能够给出更好的结果。这一模型也可以使用反向传播算法进行训练。相比较其他深度、前馈神经网路,卷积神经网路需要考量的参数更少,使之成为一种颇具吸引力的深度学习结构。 卷积网络是一种专门用于处理具有已知的、网格状拓扑的数据的神经网络。例如时间序列数据,它可以被认为是以一定时间间隔采样的一维网格,又如图像数据,其可以被认为是二维像素网格。

交叉熵技术
Cross-entropy

交叉熵(Cross Entropy)是Loss函数的一种(也称为损失函数或代价函数),用于描述模型预测值与真实值的差距大小

超参数技术
Hyperparameter

在机器学习中,超参数是在学习过程开始之前设置其值的参数。 相反,其他参数的值是通过训练得出的。 不同的模型训练算法需要不同的超参数,一些简单的算法(如普通最小二乘回归)不需要。 给定这些超参数,训练算法从数据中学习参数。相同种类的机器学习模型可能需要不同的超参数来适应不同的数据模式,并且必须对其进行调整以便模型能够最优地解决机器学习问题。 在实际应用中一般需要对超参数进行优化,以找到一个超参数元组(tuple),由这些超参数元组形成一个最优化模型,该模型可以将在给定的独立数据上预定义的损失函数最小化。

映射技术
Mapping

映射指的是具有某种特殊结构的函数,或泛指类函数思想的范畴论中的态射。 逻辑和图论中也有一些不太常规的用法。其数学定义为:两个非空集合A与B间存在着对应关系f,而且对于A中的每一个元素x,B中总有有唯一的一个元素y与它对应,就这种对应为从A到B的映射,记作f:A→B。其中,y称为元素x在映射f下的象,记作:y=f(x)。x称为y关于映射f的原象*。*集合A中所有元素的象的集合称为映射f的值域,记作f(A)。同样的,在机器学习中,映射就是输入与输出之间的对应关系。

损失函数技术
Loss function

在数学优化,统计学,计量经济学,决策理论,机器学习和计算神经科学等领域,损失函数或成本函数是将一或多个变量的一个事件或值映射为可以直观地表示某种与之相关“成本”的实数的函数。

粒子滤波技术
particle filter(ing)

粒子滤波器(particle filter)是一种使用蒙地卡罗方法(Monte Carlo method)的递回滤波器,透过一组具有权重的随机样本(称为粒子)来表示随机事件的后验机率,从含有噪声或不完整的观测序列,估计出动态系统的状态,粒子滤波器可以运用在任何状态空间的模型上。

目标函数技术
Objective function

目标函数f(x)就是用设计变量来表示的所追求的目标形式,所以目标函数就是设计变量的函数,是一个标量。从工程意义讲,目标函数是系统的性能标准,比如,一个结构的最轻重量、最低造价、最合理形式;一件产品的最短生产时间、最小能量消耗;一个实验的最佳配方等等,建立目标函数的过程就是寻找设计变量与目标的关系的过程,目标函数和设计变量的关系可用曲线、曲面或超曲面表示。

参数技术
parameter

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

剪枝技术
Pruning

剪枝顾名思义,就是删去一些不重要的节点,来减小计算或搜索的复杂度。剪枝在很多算法中都有很好的应用,如:决策树,神经网络,搜索算法,数据库的设计等。在决策树和神经网络中,剪枝可以有效缓解过拟合问题并减小计算复杂度;在搜索算法中,可以减小搜索范围,提高搜索效率。

随机梯度下降技术
Stochastic gradient descent

梯度下降(Gradient Descent)是遵循成本函数的梯度来最小化一个函数的过程。这个过程涉及到对成本形式以及其衍生形式的认知,使得我们可以从已知的给定点朝既定方向移动。比如向下朝最小值移动。 在机器学习中,我们可以利用随机梯度下降的方法来最小化训练模型中的误差,即每次迭代时完成一次评估和更新。 这种优化算法的工作原理是模型每看到一个训练实例,就对其作出预测,并重复迭代该过程到一定的次数。这个流程可以用于找出能导致训练数据最小误差的模型的系数。

深度学习技术
Deep learning

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法。观测值(例如一幅图像)可以使用多种方式来表示,如每个像素强度值的向量,或者更抽象地表示成一系列边、特定形状的区域等。而使用某些特定的表示方法更容易从实例中学习任务(例如,人脸识别或面部表情识别)。 近年来监督式深度学习方法(以反馈算法训练CNN、LSTM等)获得了空前的成功,而基于半监督或非监督式的方法(如DBM、DBN、stacked autoencoder)虽然在深度学习兴起阶段起到了重要的启蒙作用,但仍处在研究阶段并已获得不错的进展。在未来,非监督式学习将是深度学习的重要研究方向,因为人和动物的学习大多是非监督式的,我们通过观察来发现世界的构造,而不是被提前告知所有物体的名字。 至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

张量技术
Tensor

张量是一个可用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数,这些线性关系的基本例子有内积、外积、线性映射以及笛卡儿积。其坐标在 维空间内,有 个分量的一种量,其中每个分量都是坐标的函数,而在坐标变换时,这些分量也依照某些规则作线性变换。称为该张量的秩或阶(与矩阵的秩和阶均无关系)。 在数学里,张量是一种几何实体,或者说广义上的“数量”。张量概念包括标量、矢量和线性算子。张量可以用坐标系统来表达,记作标量的数组,但它是定义为“不依赖于参照系的选择的”。张量在物理和工程学中很重要。例如在扩散张量成像中,表达器官对于水的在各个方向的微分透性的张量可以用来产生大脑的扫描图。工程上最重要的例子可能就是应力张量和应变张量了,它们都是二阶张量,对于一般线性材料他们之间的关系由一个四阶弹性张量来决定。

TensorFlow技术
TensorFlow

TensorFlow是一个开源软件库,用于各种感知和语言理解任务的机器学习。目前被50个团队用于研究和生产许多Google商业产品,如语音识别、Gmail、Google 相册和搜索,其中许多产品曾使用过其前任软件DistBelief。

机器之心
机器之心

机器之心是国内领先的前沿科技媒体和产业服务平台,关注人工智能、机器人和神经认知科学,坚持为从业者提供高质量内容和多项产业服务。

推荐文章
重磅论文:解析深度卷积神经网络的14种设计模式重磅论文:解析深度卷积神经网络的14种设计模式
机器之心机器之心
1
2016 ICLR回顾:塑造人工智能未来的深度学习2016 ICLR回顾:塑造人工智能未来的深度学习
PSI内容合伙人PSI内容合伙人
如何开启深度学习之旅?这三大类125篇论文为你导航(附资源下载)如何开启深度学习之旅?这三大类125篇论文为你导航(附资源下载)
黄小天黄小天
返回顶部