最近在看这篇文章,翻译出来略作整理,本人能力有限,翻译不足之处还请谅解
摘要
近年来,在图像分类、目标检测、目标分析和人脸校正等诸多领域,卷积神经网络(CNNs)都取得了巨大的成功。通过百万级甚至十亿级的参数,CNN模型在处理数量巨大的训练数据时显示出强大的能力。然而,由于模型存储方面的巨大代价,这些模型严重不足,这也限制了此类模型在一些内存有限的平台上的应用,如手机、嵌入式设备等。在本文中,我们的目标是在不损失分辨率的前提下尽可能地压缩CNN模型。主要想法是对输出重构误差进行明确地建模,然后最小化误差找到一个令人满意的率失真,该误差是原始数据与压缩的CNN之间的误差。于是,我们提出了全局重构误差算法(简称GER),首次以分层的方式改进了基于奇异值分解的低秩逼近算法,此算法对全连接层进行了粗糙的压缩。接下来,这种分层初始化的压缩值通过后向传播的方法从全局的角度进行优化。本文提出的GER算法针对两个广泛采用的卷积神经网络AlexNet和VGGNet-19,在ILSVRC2012图像分类数据集上进行了评估。与目前效果最好的其他几个CNN压缩算法相比,本文提出的算法在以上两个网络上均取得了最好的率失真。1.引言
近年来,卷积神经网络在计算机视觉领域已经展现了引人注目的成绩。例如,图像分类[A. Krizhevsky and Hinton, 2012; Y. Lecun and Haffner, 1998; Simonyan and Zisserman, 2014; C. Szegedy and Rabinovich, 2015; Zeiler and Fergus, 2014; Y. Jia and Darrell, 2014; K. He and Sun, 2015],目标检测[R. Girshick and Malik, 2014; K. He and Sun, 2014],以及图像重建[Y. Gong and Lazebnik, 2014]. 虽然神经网络的研究在学术界已经有着很长一段历史[Fukushima,1980],CNNs的巨大成功还是主要取决于当下先进的计算资源。例如,训练一个像AlexNet[A. Krizhevsky and Hinton, 2012]或VGGNet[Simonyan and Zisserman, 2014] 一样的判别式CNN模型,一般都需要上亿个参数,然后通过大量的带标签或者没有标签的数据利用近似优化算法(如随机梯度下降算法)进行微调,这主要是在GPU或分布式环境[J. Deng and Li, 2009]下进行的。类似的,CNNs的多种营养杯引入到学术界,像AlexNet [A. Krizhevsky and Hinton, 2012], VGGNet[Simonyan and Zisserman, 2014], GoogleNet [C. Szegedy and Rabinovich, 2015]等。即使是在像ImageNet ILSVRC[J. Deng and Li, 2009]类似的挑战任务中,所提交的性能最好的结果,其CNNs的存储代价也是很大的,也是要求很大数量的参数(大约10^8),[A. Krizhevsky and Hinton, 2012;Zeiler and Fergus, 2014; P. Sermanet and LeCun, 2013]。举个例子,一个8层的AlexNet网络包含600,000个节点,需要240MB的存储空间,然而一个19层的VGGNet则包含1.5M个节点,需要548MB的内存。在这种环境下,现存在CNNs不能直接应用在要求紧凑内存的手机或嵌入式设备上。与此相反的,有研究表示拥有百万级别参数的CNNs易于出现严重的过参数化[M. Denil and Freitas, 2013]。因此,在训练一个判别式CNN时并不是所有的参数和结构都是必须的,另一方面,在[Ba and Caruana, 2014]的研究中表明,浅层的或者简化的CNNs所产生的效果与拥有百万级别参数的深度CNNs根本没法相比。因此,一个自然的想法是在不降低分类精确度的情况下发现并且抛弃深度CNNs中多余的参数。
CNNs的压缩最近已经吸引了一部分研究者的注意,这些研究者又可以进一步分为3类:参数共享、参数修剪和矩阵分解。关于参数分享,Gong等人[Y. Gong and Bourdev, 2014]通过在参数上进行矢量量化来减少参数空间的冗余。Chen等人[W. Chen and Chen, 2015]提出了HashenNet模型,该模型使用一个低消耗的hash函数将相连接的两层的权重聚集到一个hash buckets中达到共享参数的目的。Cheng等人 [Y. Chengand Chang, 2015]提出在全连接层使用循环行列式预测代替原来的线性卷积预测,这减少了存储消耗并且可以利用快速傅里叶变换(FFT)来加速计算。关于参数修剪,Srinivas和Babu [Srinivas and Babu, 2015]探索减少了减少神经元的个数,并且提出了一种“数据自由”的修剪算法来移除多余的神经元。Han等人[S. Han and Dally, 2015]旨在减少整个网络参数和操作的总数。以上两种修剪算法从参数数量和计算量两方面进行了很大的削减。关于矩阵分解,Denil等人[M. Denil and Freitas, 2013]采用低秩分解方法以逐层的方式来压缩全连接层的权重。Novikov等人[A. Novikov and Vetrov, 2015]将稠密的全连接层权重矩阵转化为Tensor Train形式,以便于很大程度上减少参数的数目,同时保留层的表达能力。
然而,目前最好的方法[M. Denil and Freitas, 2013; Y. Gong and Bourdev, 2014; Srinivas and Babu,2015]仍旧依赖于分层的参数压缩,这无法提供一个明确的模型来衡量分类精度整体的损失。换句话说,这些工作可以看成对CNNs的分层、内隐、局部的压缩。从“内隐”压缩的角度,现有的工作都是只考虑通过最小化欧氏距离
本文中,我们提出了一个新的“确定的”、“全局的”压缩CNNs框架,结构如图1所示:
我们核心的创新点在于引入了全局误差重构算法,该算法可以对原始输入的输出与压缩CNNs的输出之间的重构误差进行建模。以这种方式,隐含层和交互层之间的权重参数也被联合压缩。同时,我们没有对原始数据与层间近似参数的重构误差进行最小化,GER直接建立一个目标函数来恢复CNNs的输出,也包括全连接层的非线性激活函数的影响。
在实际应用中,我们通过基于SVD的低秩分解来对全连接层的权重进行初始化压缩,从可跟踪的角度这样能够放宽约束条件。接下来,像分层及粗压缩会通过后向传播最小化全局误差来进一步在层间联合优化,该优化方法使用随机梯度下降算法很好地解决了非凸优化问题。
本文提出的算法采用AlexNet和VGGNet-19两个被广泛采用的CNNs在ILSVRC2012图像分类库上进行评估。试验证明与其他目前最好的CNN压缩方法[M. Denil and Freitas,
2013; Y. Gong and Bourdev, 2014; X. Zhang and Sun, 2015].相比,本文提出的GER压缩方案在率失真方面表现最好。本文的主要贡献主要在一下三方面:
l 引入明确的目标函数来直接最小化网络压缩前后的重构误差,而现存的其他方法都没有直接最小化原始数据和压缩参数的差值。
l 在网络压缩的过程中我们对隐含层之间的链接进行全局建模,能够解决分层计算存在压缩误差的问题。
l 引入一种有效的优化方法解决相应的非凸优化问题,第一次使用基于SVD的低秩分解放宽约束条件,使用随机梯度下降学习最优化参数。.
2.基于低秩分解的CNN初始化压缩
2.1预备知识
我们定义一个特征矩阵作为输入来压缩一个全连接CNN,这里d是特征向量的维数,n是特征向量的个数(在初始的CNN网络AlexNet中可以是上一个卷基层的输出),压缩的全连接CNN前向传播的第l层可以表示为:
此处 是权重矩阵的元素,向量
代表传输函数f(`)前后的激活单元。一般地,f(.)是非线性变换,例如,线性校正单元(ReLU)、sigmoid、tanh等。
2.2 线性响应的分层低秩近似
首先考虑l层和l+1 层之间初始权重的低秩近似。为了找到一个近似的低秩子空间,我们最小化神经元响应的重构误差:
此处,,对于同一个输入信号X,两个线性变换的误差可以改写为
通过SVD求解公式3, ,其中
、
是对应于U和V前k个奇异向量的子矩阵,
的对角元素是相应的S的k个最大奇异值,通过在W上运行SVD,S是一个对角矩阵。接下来,我们得到
的分解值
,此处,
,
。
2.3 拓展至非线性响应
对于CNN中更常出现的非线性传输,近似矩阵的结果不等于原来的值。因此,在设计参数矩阵W的低秩近似时,非线性传输应该被考虑在内。以ReLU为例,ReLU定义为f(.)=max(.,0),为了最小化ReLU响应的重构误差,我们有:
此处,第一项 是第l层的非近似输入(l-1层的输出),第二项