APP下载

基于梯度的深度网络剪枝算法

2020-06-07王忠锋徐志远宋纯贺张宏宇蔡颖凯

计算机应用 2020年5期
关键词:剪枝权值梯度

王忠锋 ,徐志远 ,4*,宋纯贺 ,张宏宇 ,蔡颖凯

(1.机器人学国家重点实验室(中国科学院沈阳自动化研究所),沈阳110016;2.网络化控制系统重点实验室(中国科学院沈阳自动化研究所),沈阳110016;3.中国科学院机器人与智能制造创新研究院,沈阳110169; 4.中国科学院大学,北京100049;5.国网辽宁省电力有限公司,沈阳110016)

(∗通信作者电子邮箱2414065292@qq.com)

0 引言

近年来,深度神经网络已经成为人工智能行业主流的计算模型[1-2]。在图像识别、语音识别和自然语言处理等诸多领域表现出相当优越的性能[3-4]。目前比较流行的高效网络结构有 Res-NET[5]、GoogLeNet[6]、VGG-Net[7]等。但是随着网络性能的提升,网络层数也由最初的几层、十几层到现在的一百多层。在深度神经网络中有很多卷积层,卷积层的计算占据了整个网络的绝大部分计算量,卷积层越多,计算量就越大。例如VGG-Net-16网络结构中卷积层有13层,卷积层占据了大约90%~95%的计算量;全连接(Full Connection,FC)层虽然占据了95%的参数量,但是计算量确只占5%~10%。随着网络层数的加深其计算量和存储资源的占用也越来越大,需要使用高性能的GPU(Graphics Processing Unit)或者GPU集群实现神经网络的计算。嵌入式设备计算能力、存储容量有限,这就限制了深度网络在嵌入式设备中的应用,所以有很多研究人员投入到深度神经网络的压缩与加速工作中,目的是在保持网络性能的同时,减少网络的计算量和模型的存储使其能够部署在嵌入设备中。

关于深度神经网络的压缩与加速目前有很多方法,如矩阵分解[8-10]、低精度权值[11-13]、知识蒸馏[14-15]和剪枝[16-17],其中,绝大部分的方法是基于权值矩阵本身来操作,即权值越小贡献越小,通过尽可能地剔除数值小的权值来达到剔除冗余权值参数的目的。但是利用权值本身的大小为依据来判断权值的重要性缺乏理论依据,正如文献[18]所描述,有的权值虽然小,但是它却很重要。文献[18]提到了一种基于梯度的剪枝算法,梯度是计算损失函数对权值的偏导数,反映了损失对权值的敏感程度,这恰恰可以当作评判权值重要性的理论依据,所以本文设计的GDP(Gradient-based Deep network Pruning)算法也是基于梯度的剪枝算法。

在以往的剪枝算法中,以权值大小为重要性依据的剪枝算法,很容易剪掉重要的权值。以人脸识别为例,在人脸的诸多特征中,眼睛的细微变化如颜色、大小、形状,对于人脸识别的结果有很大影响。对应到深度网络中的权值,即使权值本身很小,但是它的细微变化对结果也将产生很大的影响,这类权值是不应该被剪掉的。而GDP算法以梯度作为剪枝的依据,就避免了这个问题,该算法剪掉的权值都是在一定程度上对分类结果影响不大的权值。

1 相关工作

在边缘侧设备中上部署人工智能算法是一个很有前景的工作[19-20],吸引了很多学者投入到深度学习的模型压缩工作中。由于复杂深度学习模型的计算量很高,而一般边缘侧设备通常难以满足复杂模型对于计算资源的需求,因此如何在保证计算精度的情况下对复杂深度学习模型的计算量进行压缩,成为在边缘侧上部署人工智能算法的一个核心问题。

1.1 基于矩阵分解的深度神经网络压缩与加速

基于矩阵分解的方法把卷积层中参数看作一个4D矩阵,将这个4D矩阵的计算分解成数个矩阵的乘积来近似计算原始的4D矩阵计算结果。分解后的矩阵拥有更小的计算量,可以有效加速深度网络。

Wen等[21]提出了一种强制正则(force regularization)的方法,利用该方法可以在训练的过程中让低秩空间中滤波器(filters)变得更加紧密,在低秩表达时更加近似原始矩阵的输出;Yu等[22]提出一种新的低秩空间的近似方法,在重构误差的过程中将参数矩阵设置为稀疏矩阵与低秩矩阵的和,可以更加接近原始网络的输出。但是基于矩阵分解的方法只能逐层分解,分解后的网络结构丢失原始网络的全局信息。

1.2 基于参数量化的深度神经网络压缩与加速

参数量化就是减少表示每个权值所需的比特数来压缩原始网络,文献[23]提出了一种二值网络,利用sign函数将网络中权值转成只有+1和-1两类,可以极大地减少参数存储空间。文献[24]在此基础上,不仅二值化了权值矩阵,还将层与层之间输入也进行了二值化处理,在CIFAR-10数据集上有着10.17%的错误率。参数量化的方法使得神经网络普遍训练时间较长,因为在反向传播的过程中仍然要使用原始参数,而且在较大数据集上如ImageNet表现并不好。文献[25]提出了三值化权重网络,与二值网络类似只是将权值量化为三类:+1、-1、0。

1.3 基于知识蒸馏的深度神经网络压缩与加速

知识蒸馏的基本思想是将训练好的复杂网络模型学到的知识蒸馏到另一个简单的小型神经网络。

Hinton等[26]首次提出知识蒸馏的方法,将教师网络(复杂、推理性能优越)的输出进行含有温度参数T的Softmax软变换生成软目标引入到学生网络(精简、低复杂度)的损失函数中指导训练,实现知识蒸馏和迁移;Romero等[27]提出了基于知识蒸馏的FitNet,通过把学生网络的权值对教师网络的权值进行模拟,把一个宽且深的网络蒸馏成一个窄且更深的网络,更深的网络能表现出更优越的网络性能;文献[28]描述了一种用于“蒸馏”蒙特卡罗近似值到后验预测的方法,训练一个学生网络近似教师网络的蒙特卡洛后验概率分布,该方法最大特点是教师网络可以实时指导学生训练,但是蒸馏的方法是基于Softmax损失函数的,对于没有Softmax的网络结构,蒸馏方法就不再适用。

1.4 基于剪枝的深度神经网络压缩与加速

参数剪枝就是对训练好的网络进行冗余参数的剔除,进而提高模型的计算速度和减少模型的存储空间。不仅如此,通过剪枝操作,还能防止网络模型过拟合,进而提升网络性能。

Han等[29]提出了一种剪枝网络的方法,在训练深度网络的过程中,通过加入惩罚因子学习每个权值的重要性,在剔除不重要的权值后再对网络进行微调,实验结果表明,AlexNet网络可以压缩近10倍;Sun等[30]利用权值之间相关性进行剪枝,计算当前层的一个神经元与前一层的所有神经元的相关性,把相关性低的权值剔除,实验结果表明,该方法与随机剪枝结果相近;Han等[31]在剪枝的基础上又对网络参数进行聚类量化和哈夫曼编码,极大地压缩了网络模型。

本文的GDP算法是一种剪枝算法,不同以往的剪枝策略,该算法是以梯度作为评判权值重要性的依据,并利用本文设计的一种自适应阈值的策略,找到合适的阈值T,剔除小于阈值T的梯度值所对应的权值来进行深度网络的压缩与加速。

2 深度网络中权值与梯度的参数分析

以手写数字数据集为例对深度网络模型的权值与梯度分布进行分析。手写数字数据集是神经网络中的经典数据集,共包含10种类别:0~9的10个数字种类。每一张图片都包含两部分信息:第一部分是数字图片的像素信息,图片大小为28×28;另一部分是图片的标签,即图片表示的数字是0~9中的哪一个。数据集总共包含60000张训练样本和10000张测试样本。

2.1 AlexNet权值与梯度参数分析

AlexNet[32]网 络 共 有 5 层 卷 积 层 conv1、conv2、conv3、conv4、conv5,三层全连接层FC6、FC7、FC8。在经过训练了10 000次后在集合上的正确率达到了99.05%。网络结构如表1所示。

表1 AlexNet结构Tab.1 Structure of AlexNet

全连接层占据着绝大部分参数,卷积层只占全部参数的7%。在进行剪枝之前首先对每一层的梯度进行分析如图1~4所示(因为第一层卷积层和最后一层全连接层参数少且其参数会直接影响网络模型的判断结果,故conv1和FC8不列入本文分析及剪枝的部分)。

图1 ALexNet卷积层权值分布直方图Fig.1 Weight distribution histogram of AlexNet convolutional layers

图2 AlexNet卷积层梯度分布直方图Fig.2 Gradient distribution histogram of AlexNet convolutional layers

图1~4展示出了网络模型中权值与梯度的两个特点:第一,梯度的值比其对应的权值要小很多;第二,每个网络的层的大部分梯度值都在0附近并且对于全连接层这个特点比卷积层更加突出;恰恰是这第二个特点证明了基于梯度的剪枝算法是完全可行的。

图3 AlexNet全连接层权值分布直方图Fig.3 Weight distribution histogram of AlexNet full connection layers

图4 AlexNet全连接层梯度分布直方图Fig.4 Gradient distribution histogram of AlexNet full connection layers

2.2 VGG-Net权值与梯度参数分析

MINIST数据集对于VGG-Net,数据量太小且数据过于简单,因此VGG-Net的参数分析是在CIFAR-10数据集上进行的。CIFAR-10数据集由10个类的60 000个32×32彩色图像组成,每个类有6 000个图像,5 000个训练图像和1 000个测试图像。在训练之前对数据进行了数据增强操作:每次从训练集抽出128个图像随机进行切割、翻转、亮度调节以及标准化处理作为一个batch,目的是增强样本的多样性、防止过拟合。

VGG-Net的原始标准模型是对ImageNet数据集分类,但是最近的研究把VGG-Net模型结构稍作改动用在CIFAR-10数据集上,并取得了很好的结果,其结构包括了13个卷积层和2个全连接层。本文使用了两个VGG-Net模型——VGGNet和 VGG-BN-Net。

VGG-Net模型时根据原始标准模型进行同比参数压缩如表2所示,同时还在全连接层加入Dropout层[33]防止过拟合。

另一个VGG-BN-Net模型结构如文献[34]中所描述的结构,网络结构如表3所示,以VGG-Net的标准模型为基础,在每一层卷积层和第1层全连接层后面加BN(Batch-Normalization)层[34]和Dropout层[33]。与之前AlexNet网络分析的一样,VGG-Net模型的参数最多的部分仍然在全连接层,但是计算量最大部分是卷积层第三层和第四层,并且考虑到靠前的网络层比较重要,所以应当从后往前压缩本文,压缩了FC14、conv5-3、conv5-2、conv4-3、conv4-2、conv4-1 共 6 层网络。

表2 VGG-Net结构Tab.2 Structure of VGG-Net

表3 VGG-BN-Net结构Tab.3 Structureof VGG-BN-Net

对这两种VGG-Net模型做参数分析如图5~6所示。

图5 加入BN层前VGG-Net梯度分布图Fig.5 Gradient distribution histogram of VGG-Net beforeadding BNlayer

从图中可以发现在加入BN层之前,参数梯度的分布有着两极化的趋势,在梯度为0附近分布大量的参数,在梯度大一点的在两边分布着相当少的参数,恰恰可以利用这种梯度分布特点,把在0附近的梯度所对应的权值筛选出来,因梯度接近于0,所以这部分权值正是那些冗余的、不重要的权值。在后面实验中证明剔除这部分冗余的权值后,网络性能不但没有下降反而会提升很多;加入BN层后,梯度的分布比之前会均匀一些,参数分布随着梯度的增大而逐渐减小,但是仍然是0附近的参数分布最多。

图6 加入BN层后VGG-Net梯度分布图Fig.6 Gradient distribution histogram of VGG-Net after adding BNlayer

3 GDP算法

GDP是一种基于梯度的剪枝算法。假设第i层的权值矩阵记为W(i)k×k×d×n,k×k×d×n表示它的形状,其算法流程如下:步骤1 利用式(1)计算第i层的梯度矩阵,形状不变。

步骤2 在矩阵G中找到梯度的绝对值的最大值记作gmax。设置m=100,利用式(2)、(3)求出步长step和候选阈值Tm,Tm表示第m个阈值。

步骤3 根据候选阈值Tm,在梯度矩阵G(i)k×k×d×n中统计梯度值小于Tm的梯度的个数记为Nm(m=1,2,…,100)。

步骤4 计算式(4),RN[m]表示使用阈值Tm剪枝时模型剩余的参数数量。

2.1 两组患儿hs-CRP、β-hCG、PCT检测结果比较 观察组hs-CRP、β-hCG、PCT水平均高于对照组,差异有统计学意义(P<0.05)。见表1。

步骤5 重复m次步骤2~4。

步骤6 计算式(5),ΔRN[m]表示使用阈值Tm+1剪枝时剩余参数数量RN[m+1]与使用阈值Tm剪枝时剩余参数数量RN[m]之间的差。

步骤7 判断式(5):若成立,则保存当前m值并由式(3)获得最终阈值即T=Tm;若不成立,重复步骤6。

步骤8 把小于T的梯度值Gindex所对应的权值Windex置为0就完成了剪枝步骤,最后对修剪过后的参数进行重训练。

GDP剪枝算法流程如图7所示。

一般来说剪枝的原则是保留重要的权值,剔除不重要的权值。Tm如图8所示表示一个矩形框,在矩形区域内是要被筛选出来需要剔除的部分,根据|Gindex|<T这个筛选条件可以推断出这个方框是关于0对称的,并且Tm是由小到大变化的,对应着矩形框应该是由实线矩形框到虚线矩形框的变化。在对m进行遍历的过程记录对每一个候选阈值Tm下,需要保留的参数量RN[m]如图9左所示,表达的是RN[m]随着m增加而减小的曲线,因为m值越大,矩形框的区域就越大,那么保留的参数量就应越少,可以发现在m值很小时,RN[m]的变化很明显,在m值大到一定范围后,RN[m]几乎没变。原因是绝大部分梯度都分布在0附近,换句话说就是在0附近参数数量非常大,矩形框增大一个步长都能引起RN[m]很大的改变,相反在参数数量分布比较少位置,矩形框增大一个步长RN[m]变化不明显。接下来利用式(5)第m+1次的RN[m]值减去第m次的RN[m]值获得一个减少量ΔRN[m]如图9右所示。从图9中找到ΔRN[m]变化相对较小时的值即Value。注意这个Value值需要根据不同的网络结构而人为设定。图9中,当ΔRN[m]达到-1000时,对应着图9中RN[m]曲线开始出现平缓趋势时位置,即AlexNet的Value值选为-1000比较合适。下文VGG-Net、VGG-BN-Net中Value值也用同样的方法获得。若ΔRN[m]>Value成立,则返回此时的m值,目的是利用式(3)计算此时的阈值Tm即得到最终的阈值T=Tm。得到阈值T后按照步骤8进行剪枝,最后进行重训练恢复模型精度。

图7 GDP算法流程Fig.7 Flow chart of GDPalgorithm

图8 Tm压缩区域可视图Fig.8 Visibility map of Tm compression area

图9 RN与ΔRN曲线图Fig.9 Curve graphs of RN andΔRN

4 实验与分析

4.1 在MINIST上的AlexNet剪枝

运用GDP算法对AlexNet进行剪枝,然后将剪枝后的网络重训练5 000次,结果如表4所示,其中压缩率指压缩前的模型内存大小与压缩后的模型大小的比值。

表4 AlexNet剪枝结果Tab.4 AlexNet pruningresults

GDP算法在全连接层有着很好的表现,压缩了近14倍,而正确率仅下降了0.63个百分点。全连接层FC6和FC7分别被压缩了99.9%,98.0%。原网络进行一次前向推断要进行7.1×107个乘法,仅压缩全连接层后进行一次前向推断要进行5.8×107个乘法,计算量仅下降20个百分点。随着剪枝层数的增加网络性能下降得越来越多。当压缩两层全连接层FC6、FC7和卷积层conv5时,正确率下降了2.53个百分点,模型大小压缩了31倍,进行一次前向推断需要计算2.9×107个乘法,计算量下降了60个百分点。由此可见卷积层虽然参数量小,但是计算量特别大,压缩卷积层能获得更大加速效果,压缩全连接层更能减少计算模型对存储空间的占用。

4.2 在CIFAR-10上的VGG-Net剪枝

VGG-Net的标准模型是对ImageNet数据集进行分类,输入图片大小是128×128,而CIFAR-10的图片是32×32,为了避免参数过多带来过拟合,把VGG-Net结构设置如表2所示。训练50 000次,测试集正确率84%,Value值设置为-1000,表5记录了GDP算法剪枝VGG-Net模型的conv4-2、conv4-3、conv5-2、conv5-3、FC14、FC15层后的结果,无论是卷积层还是全连接层,GDP算法都能剔除98%以上的参数,并仍旧能保持网络性能明显提升,在重训练20 000次后,正确率最高为90.6%,计算量减少55.3个百分点。图10表示剪枝后重训练20 000次,实线是剪枝后的测试集正确率,虚线是剪枝前的测试集正确率。在剪枝前测试集已经基本稳定在83%左右的正确率,很难再提升,但是经过剪枝后正确率有了明显提升。因为保留下来的权值都是重要的权值,即梯度大对loss影响大的权值,所以每训练一次更新权值,网络的性能随之变化幅度稍微大一些,但是也基本都高于剪枝前的网络性能,原因是剪掉了冗余的接近于0的梯度的权值能有效防止过拟合。那些梯度接近0的权值就像是一个多项式函数f(x)=C1x1+C2x2+…+C3xn中非常靠后的指数比较大的项,这些项越多函数对于训练数据拟合得越好,但导致其泛化性大大降低,在测试集正确率不高。而本文GDP算法能够剔除这些冗余的梯度,在压缩参数的同时提升网络性能。

表5 VGG-Net剪枝结果 单位:%Tab.5 VGG-Net network pruningresults unit:%

图10 VGG-Net剪枝前后结果对比Fig.10 Comparison of resultsbeforeand after VGG-Net pruning

4.3 在CIFAR-10上的VGG-BN-Net剪枝

VGG-BN-Net结构相较于VGG-Net加入了Batch-Normalization层和Dropout层,目的是缩短训练网络的时间并且提升网络的原始性能。经过训练后VGG-BN-Net能达到91.17%的测试集正确率。根据上文所述获取Value值的方法,选取全连接层的Value值为-10 000,卷积层的Value值为-20 000,剪枝后效果见表6。经过重训练后正确率为91.03%,正确率下降了0.14个百分点,计算量下降了35.3个百分点,参数量仅为之前的29.3%。

表6 VGG-BN-Net剪枝结果Tab.6 VGG-BN-Net pruningresults

表 7将GDP算法与 PFEC(Pruning Filters for Efficient ConvNets)算法[35]、FPGM(Filter Pruning via Geometric Median)算法[36]进行了比较,证明了GDP算法有着更好的剪枝效果。

表7 GDP算法与其他算法对比 单位:百分点Tab.7 Comparison of GDPalgorithm with other algorithms unit:percentage points

5 结语

本文改进了文献[18]中的基于梯度的剪枝算法,设计了一种自适应阈值的策略,解决了阈值选取的问题,使得每个网络层都能找到适合的阈值。该算法在压缩参数、加速计算的同时能减少过拟合的情况的发生,剪枝后的网络性能会有一定程度的提升,但是对于含有BN层的网络结构,本文GDP算法虽然没有提升网络性能,但是仍然能够在剪枝参数的同时基本保持网络模型的精度。一般来说,网络层数越深,性能越好,GDP算法使一个层数少的AlexNet与层数较多VGG-Net在性能相近,但是计算量AlexNet要远远少于VGG-Net。在接下来的工作中,计划将BN层与GDP算法相融合,既发挥该算法提升网络性能优势,又能发挥BN层加快网络收敛的作用。为了使GDP算法用到更深层的网络结构中去,将作进一步研究。

猜你喜欢

剪枝权值梯度
一种融合时间权值和用户行为序列的电影推荐模型
基于应变梯度的微尺度金属塑性行为研究
人到晚年宜“剪枝”
利用KL散度度量通道冗余度的深度神经网络剪枝方法
基于YOLOv4-Tiny模型剪枝算法
一个具梯度项的p-Laplace 方程弱解的存在性
内容、形式与表达——有梯度的语言教学策略研究
航磁梯度数据实测与计算对比研究
剪枝
财务风险跟踪评价方法初探