模型剪枝算法综述

2022-09-24 02:42魏建国刘贯伟
计算机与现代化 2022年9期
关键词:每层剪枝权重

李 屹,魏建国,刘贯伟

(1.恒银金融科技股份有限公司,天津 300308; 2.天津大学智能与计算学部,天津 300350)

0 引 言

自2012年Alexnet在图像识别领域性能大幅度超越传统方法以来,深度学习领域迅速发展,已经成为机器学习中最主流的分支之一。近年来,随着各种新的深度卷积神经网络架构的不断提出,深度学习使得很多计算机视觉任务的性能不断提升,达到了一个前所未有的高度。但深度卷积神经网络的缺点在于计算量与存储量过大。性能越好的模型往往更深更宽,计算量与存储量也随之增大。复杂的模型固然具有更好的性能,但是高额的存储空间、计算资源消耗是其有效的应用在各硬件平台上的重要障碍。尤其是一些算力较弱的设备,如手机、平板电脑、无人驾驶汽车、智能家居等,如果将模型直接部署在上述设备中则功耗、时延都会成为问题。为了解决这些问题,近些年来研究人员从不同的方向进行了尝试。从硬件角度,各种针对于神经网络计算的芯片被设计出来。从算法角度,许多业界研究人员研究模型压缩方法以最大限度的减小模型对于计算空间和时间的消耗,例如,文献[1]中研究人员将剪枝、模型量化与霍夫曼编码结合将AlexNet模型参数压缩至原模型的2.8%,将VGG-16参数压缩至原模型的2.0%。

1 问题描述

本文主要介绍针对于模型剪枝方面的算法。模型压缩算法主要分为剪枝、量化、低秩分解与知识蒸馏4个方面。剪枝的过程如图1所示。在文献[2]中提出在深度神经网络中权重参数存在显著冗余,仅仅使用一小部分权重就可以预测出其余的权重。因此,网络中的大多数权重并不需要学习。训练网络中小部分权重参数就可能达到和原网络相近甚至超越原网络的性能。基于以上的假设,学者从不同角度研究了如何对网络模型进行剪枝。

图1 剪枝过程示意图

2 剪枝算法的发展与研究现状

模型剪枝方面的研究最早始于上世纪90年代初期,文献[3]提出Optimal Brain Damage的方法对神经网络中权重进行裁剪,即利用损失函数对权重的二阶导数对权重进行重要性判断。之后文献[4]提出Optimal Brain Surgeon方法对Optimal Brain Damage方法进行了改进。由于当时神经网络与深度学习并未成为主流领域,模型剪枝算法并未被广泛研究。在12年之后深度学习领域迅速发展,大而深的模型往往在各种任务上取得更好的效果,因此近年来关于模型剪枝方面的研究也迅速增加。Han等人[1,5]可称为近年来关于此领域的开创性研究者。之后关于模型剪枝算法的研究先聚焦于如何衡量权重的重要性、如何确定剪枝的稀疏度以及剪枝的流程。接着有学者提出结构化剪枝中关于权重重要性的评判不影响剪枝结果[6-8],剪枝的稀疏度成为唯一重要因素。自动化确定剪枝稀疏度的研究成为新的热点[9-16]。之后研究人员尝试将剪枝算法与其他模型压缩算法相结合而获得更大的模型压缩率[17-19]。又有学者将剪枝算法应用于除物体分类外的任务之中[20-21]。本文将对上述方面的代表性算法进行总结与描述。

主流的剪枝流程主要包括衡量神经元的重要性和去除不重要的神经元2个步骤,对网络进行微调后返回第1步进行下一轮剪枝。终止标准为剪枝后模型的准确度与原始网络准确度差值高于一定阈值或是剪枝后所得模型减小的运算量达到一定数值。对于现有剪枝算法的研究主要归纳为以下3个方面:1)确定关于剪枝的粒度,即剪权重、剪通道、剪卷积核;2)关于剪枝的方法,包括如何评价神经元的重要性以及如何确定神经网络每层的裁减比例;3)关于剪枝的时机,即剪枝与训练交替进行或是剪枝与训练同时进行。另一方面研究是关于模型剪枝的理论基础,即通过剪枝是否可以寻找到不损失精度的小模型。同时,研究人员试图将剪枝算法与其他模型算法联合使用。在学习任务上,多数研究人员将算法在物体分类数据集上进行评测。近期还有关于剪枝算法在语义分割或多任务方面的研究与评测。

2.1 剪枝的粒度

卷积神经网络通常包括卷积层与全连接层,卷积运算在整个神经网络运算中占有最大比例的计算量,因此关于剪枝的研究多数针对网络中的卷积层部分。图2(a)~图2(c)分别为卷积核中某一通道在空间方向的投影、卷积层中单个卷积核,网络中某一卷积层。网络某一层卷积层的维度为N×C×H×W,其中H与W分别表示卷积核在空间上高和宽。C表示卷积核的通道数,即输入特征的通道数。N为卷积核的个数,即经过卷积操作后输出特征的通道数。上述空间维度表示方法在图2(黑色部分代表此部分权重设置为0)和图3中均有使用。

(a) 剪单个权重

(b) 剪通道

(c) 剪卷积核图2 不同粒度的剪枝

图3 某卷积层中任一卷积核

根据被裁剪权重空间尺度的大小,剪枝可以分为不同粒度的剪枝。最细粒度的剪枝为剪去卷积核某个单一权重,如图2(a)所示。粗粒度剪枝为对卷积核中形状规则的区域进行整体裁剪,例如剪去某些通道,剪掉整个卷积核,如图2(b)和图2(c)所示。文献[22]中提出了stripe-wise剪枝概念,即剪掉卷积核中某一条带。如图3所示为网络中某卷积层中任一卷积核,其中黑色部分为剪掉的卷积核中的权重,不同通道同一位置权重被置为0。卷积核中不同通道的同一空间位置权重被裁减掉。

图2和图3中所示剪枝方式的作用都是为在保留模型精度的同时压缩模型的运算与存储,可以在网络中任一卷积层进行操作。图2(a)中所示剪枝方式更容易保留模型精度,但是剪枝后生成的卷积核是稀疏的,中间有很多元素为0的矩阵,由于缺少底层硬件和矩阵算法的支持,不利于运算的加速。因此近些年的研究多集中于结构化剪枝,如剪通道、剪卷积核或是剪层。文献[23]中详细概括了剪枝粒度范围,并验证了相对于细粒度剪枝,粗粒度剪枝可以实现相同的模型剪枝稀疏度并不使模型精度降低。并且由于粗粒度剪枝可生成结构化模型,在相同剪枝程度下,粗粒度剪枝相对于细粒度剪枝可以节省大约2倍的存储空间。

2.2 剪枝对象重要性的评估

剪枝的方法主要包括如何评价神经元的重要性以及网络中每层裁减比例的确定。对于评价神经元的重要性,学者提出了一系列的方法。文献[24]中提出可以基于卷积核权重的绝对值和大小来评价卷积核的重要性,即:

(1)

(2)

式(1)中kl为单个通道的权重和,式(2)中si为单个卷积核的权重和。文献[24]中通过sensitivity analysis在神经网络每层确定裁减比例从而确定裁减阈值,将权重绝对值和小于阈值的卷积核裁减掉,同时认为权重范数越小越不重要。而文献[25]中则提出利用网络每层卷积核的几何中位数(Geometric Median)信息进行剪枝。几何中位数为距离每层卷积核权重范数的距离和最小的值,文中认为范数值越接近几何中位数的卷积核重要程度越低,从而应被裁剪掉,而并非基于越小越不重要的原则。网络每层如果训练出来的权重不稀疏不利于裁减,通常的方法是在训练过程中加入L1 regularizer解决该问题。文献[26]中提出了group regularizer概念,即:

(3)

式(3)中E(W)为总损失函数,Rg(Wl)为对于每组(通道,卷积核)权重的惩罚项,λg为相应的惩罚因子,通过引入此项使训练出的权重结构化稀疏,从而有利于结构化剪枝。此外,由于BN层通常与卷积层相连,文献[27]中提出通过从BN层输出的信息进行重要性判断,如式(4):

(4)

式(4)中通过在BN层中加入对于通道的scaling因子γ并利用惩罚项g(γ)得到稀疏化因子,惩罚项此处选为L1惩罚。确定裁剪比例后scaling factor值小的对应的通道将被裁剪掉。另外,也有学者提出对激活层的输出进行重要性评估。文献[28]中提出了Average Percentage of Zeros(APoZ)的概念,如式(5):

(5)

即激活函数输出中0值的百分比。APoZ越大说明相对应神经元越不重要。因此可通过APoZ值将不重要的神经元剪掉。文献[29]提出使用特征图的秩进行剪枝,即特征图的秩越大说明特征图所含信息量越大,即越重要。文中利用少量输入图像计算网络每层特征图的秩,排序后将低秩特征图所对应的卷积核裁减掉。文献[30]提出利用特征图的熵值作为剪枝评判标准,即:

(6)

式(6)中Hj代表特征图中通道j的熵值,b代表将经过全局池化的通道取值分为b个区间,pi代表通道j的值在第i个区间的概率。熵值越小说明此通道所含信息量越少,因此相应的卷积核应被裁剪。

以上方法均是利用神经网络本层信息的相关度量作为剪枝评判标准,假设相关度量值越小(或越大)则相关参数越不重要。除去以上一类评价方法外,另外也有研究提出通过计算参数对于损失函数变化的灵敏度作为剪枝标准[4],即:

(7)

文献[4]提出的方法需要计算损失函数对参数的二阶导数,即海森矩阵(式7)来计算灵敏度。然而由于海森矩阵或其近似计算复杂所以长时间未被人采用。文献[31]提出利用损失函数对于激活函数输出的一阶导数的绝对值作为剪枝标准,从而避免了计算海森矩阵。文献[32]提出将二阶导数的计算限制在单层神经网络内,从而减少了计算量。文献[33]中提出通道重要性因子概念。首先在每个通道前乘一个系数后计算损失函数,之后计算损失函数对于此系数的一阶导数的绝对值作为通道的重要性因子。将重要性因子较低的通道所对应的卷积核裁剪。

此外,研究人员提出将通过剪枝后特征输出的误差信息来进行模型剪枝,即通过最小化剪枝前后特征的误差确定哪些参数需要剪枝。此类方法利用神经网络下一层的特征信息对本层进行剪枝。文献[34]使用贪心法将对网络下一层特征影响小的卷积核剪掉,然后利用最小二乘法重新计算剪枝后的权重,即:

(8)

W=(XTX)-1XTy

(9)

式(8)中i代表样本序号,下标j代表本层卷积核的序号,S代表本层经过裁剪的卷积核的集合。xi,j代表本层特征,yi代表未经过卷积核裁剪算得的下一层的特征。通过选择本层卷积核的子集S从而最小化下一层的特征误差。将不重要卷积核裁剪后利用最小二乘法再次计算本层权重值。式(9)即为所计算权重。

文献[35]提出利用Lasso regression的方法进行本层通道选择,进而将本层不重要的通道裁剪掉,再重新计算参数权重。式(10)中c为通道总数,β为长度为c的向量,对通道进行筛选。βi取值为0或1。Xi代表输入特征中通道i的特征,Wi代表本层卷积核中通道i的参数。Y代表本层输出特征。通过交替优化式(10)中的β与W从而得到裁剪结果。

(10)

β0≤c′, ∀iWi,F=1

(11)

然而,另有学者提出对参数重要性的计算在剪枝过程中不重要。文献[6]通过对于结构化剪枝的研究发现,训练随机初始化的经过剪枝的模型所得结果可达到相同甚至要好于在剪枝后的模型做微调所得结果。因此作者提出对于结构化剪枝,学习大型模型的重要权重参数对于修剪后的小模型并不是必要的,决定最终模型性能的是剪枝后的模型结构而并非从大模型继承而来的重要权重。因此结构化模型剪枝的过程类似于网络结构搜索。文献[7]通过随机剪枝的方式将25%~50%的卷积核裁减取得了与基于参数重要性进行剪枝的算法相似的结果。作者认为参数的重要性对于剪枝结果并不重要,神经网络的可塑性使随机剪枝亦能达到相似效果。并使用VGG-16、ResNet-50等网络架构在图片分类与目标检测数据集对所提假设进行验证。文献[8]提出剪枝模型结构不需要通过预训练后的权重得到,通过随机初始化权重的剪枝也能得到相似结果,从而可以提升剪枝效率,文中同时提出一种利用通道重要性因子进行剪枝的方法。

2.3 剪枝的稀疏度

模型剪枝的另一个重要方面是关于模型裁减后稀疏度的研究,即神经网络每层应该裁减的比例大小。在文献[24]中作者将神经网络每层独立剪枝后在验证集上对剪枝后的网络进行评估,发现不同层对于剪枝的敏感度不一致,因此,网络每层应该有不同的剪枝率。确定网络每层剪枝率或剪枝阈值主要可以通过预先设定或通过在训练中学习。文献[24]中通过敏感度分析确定每层剪枝率,之后使用确定剪枝率进行剪枝,而敏感度方法忽略了层之间的相关性且计算量较大。另一类方法是在网络训练过程中获得每层剪枝率或剪枝阈值。文献[9]中提出剪枝函数使网络在训练过程中可以同时优化权重与剪枝阈值,即:

vα(x;t)=ReLU(x-t)+t·σ(α(x-t))-ReLU(-x-t)-t·σ(α(-x-t))

(12)

σ(x)=(1+e-x)-1

(13)

ReLU(x)=max(0,x)

(14)

式(12)中vα(x;t)为剪枝函数,剪枝函数vα(x;t)对于权重参数x与剪枝阈值t分别一阶可微,从而使每层剪枝阈值与网络权重可以在网络反向传播时被同时更新,在训练结束时可以得到每层最优剪枝阈值即剪枝率。文献[10]通过引入辅助变量将优化过程分解为学习与压缩2步进行,即:

(15)

(16)

式(15)中L代表损失函数,w代表权重参数,θ为含有约束的辅助变量。式(15)为优化过程中的学习步骤,此步骤优化w而固定θ。式(16)为压缩步骤,通过优化θ从而最终获得权重在每层的压缩率。此方法需要预先设定网络的全局压缩率做为优化过程中的约束条件,训练结束后即可得到每层压缩率,即:

C′=(c′1,c′2,…,c′L)

(17)

c′i∈{0.1ci,0.2ci,…,0.9ci,ci}

(18)

文献[11]中提出了一种搜寻每层最优通道数的剪枝算法。首先随机初始化一系列经过剪枝的网络结构,式(17)中C′代表剪枝后的网络结构,即剪枝后每层剩余通道数,式(18)中c′i为每层剩余通道数,文中将其设定为原通道数10%~100%之间的离散值,间隔为0.1ci,从而大大降低搜索的运算量。之后利用人工蜂群(ABC)[36]算法对初始化的网络结构进行变换,通过比较新旧网络结构在测试集上的结果从而通过逐次迭代找出最优化的剪枝结构。

文献[12]利用元学习思想进行通道剪枝。文中将每层保留通道数作为输入训练剪枝网络。剪枝网络作为元网络,可以根据输入网络结构生成权重。通过将不同随机生成的网络结构输入剪枝网络生成网络权重后在验证集上测试可以找出最优的剪枝结构。文中的元网络为含有2个全连接层的神经网络。相关过程如图4所示。文献[37]提出可微分的超网络进行模型剪枝。超网络的输入为当前层和上一层的隐向量,隐向量长度为其对应层的输出通道数。超网络的输出为网络当前层的权重。通过训练超网络参数和隐向量可得到稀疏的隐向量。由于隐向量长度与输出通道数相对应,隐向量中趋于0的元素所对应的通道将被裁剪掉。由于对于隐向量施加稀疏性惩罚,隐向量需通过近端梯度法更新。此方法可归类为元学习方法,但可通过梯度法求解,从而提升搜索效率,即:

图4 元学习网络示意图

(t,n,c,h,w,stride,k,FLOPs[t],reduced,rest,αt-1)

(19)

文献[13]中利用强化学习的思想进行自动模型剪枝。首先将网络某层信息编码为状态。文中利用11个特征对每层网络状态进行描述,式(19)中n×c×k×k为卷积核的维度,c×h×w为输入特征的维度,stride为卷积核的步长,t为网络层的序号,FLOPs[t]为每层的FLOPs,at-1为上一层的剪枝率,reduced为上一层剪枝后减少的FLOPs数,rest为剩余层的FLOPs。将状态输入动作函数后得到本层的剪枝率,将本层剪枝后移到下一层,将所有层剪枝完毕后计算Reward函数值。该文使用DDPG算法计算剪枝策略函数。文献[14]利用对生成对抗网络的训练完成模型剪枝。判别模型用来区分被剪枝与未被剪枝的网络,而生成模型对网络进行剪枝,其输出为经过剪枝的网络。经过对判别模型与生成模型的交替优化即可完成网络剪枝。文献[16]中将模型剪枝建模为马尔可夫过程,即将在每层中保留的通道数作为状态,而剪枝过程即为在不同状态之间的转移,即:

(20)

式(20)中pk代表状态转移概率,即为每层中前k-1个通道在剪枝中保留时保留第k个通道的概率。Cout为每层中总通道数。而αk则为网络架构参数,对于损失函数可微,在每次优化过程中被更新。文中将此方法与文献[12-13]中所述方法结果进行对比,发现对于利用不同方法得到的相同FLOPs的模型,此方法在ImageNet数据集上可以取得更高精确度。文献[15]中使用式(21)中函数f(bi,β1,β2)计算某层中通道i被保留的概率,即:

(21)

式(21)中,α为每层通道被保留的比例,而损失函数对α可微,从而α可在反向传播中更新。bi则为通道i的重要性因子。β2取值随训练轮数增加而增加。该文中同时将不同网络层进行分组,并对于每组使用同一通道保留比例。实验将此方法与文献[13,17,33,38]中算法对比,发现对于某些特定深度的ResNet网络在经过此方法压缩后,模型可以取得更高的FLOPs压缩率,并在ImageNet、CIFAR-10数据集上保持相似精确度。不同于大多数剪枝方法,文献[39]利用卷积核的协方差矩阵的信息对卷积神经网络进行剪枝。剪枝方法的损失函数即为剪枝前后卷积核的协方差矩阵之差的范数。由于卷积神经网络每层中卷积核的平均值趋于0,此方法可利用Frequent Direction方法[40]求得剪枝后卷积核。对于卷积神经网络,此方法只需利用训练后模型的权重信息即可完成剪枝而不需要利用训练数据进行反复微调。实验显示此方法得到了与其他方法相似的精确度。

2.4 剪枝时机

剪枝的另一个重要方面是剪枝时机。传统方法是采用训练权重,利用对于权重重要性方法进行剪枝,剪枝后再次对模型微调直到模型精确度损失超过一定阈值后停止剪枝过程。文献[5]即采用这种方式,该方法剪枝流程如图5所示。此类方法需要在剪枝步骤与模型微调步骤之间反复迭代直到达到终止标准。另一种方法是在得到预训练权重后,在模型微调的过程中进行剪枝,模型微调结束即完成剪枝。文献[41]提出将剪枝步骤与模型再训练步骤同步交替进行而非先后进行,即每进行一次权重更新即进行一次剪枝,从而使整个剪枝过程所需权重迭代次数大大减小,提高了任务效率。此方法的关键步骤如式(22)~式(24):

图5 剪枝流程示意图

(22)

(23)

(24)

式(22)中k代表网络某一层,Wk为权重矩阵,Tk矩阵元素由0或1构成,代表权重矩阵某一元素是否被剪枝。式(23)中hk为权重矩阵Wk的重要性函数,ak、bk为每层权重阈值。在每次迭代中重要与不重要的权重同时更新从而可以恢复不合适的裁剪,而剪枝标准Tk则按一定概率来判断是否更新。当达到最大迭代次数后终止并得到最终的剪枝模型。文献[38]提出了软剪枝概念,在每训练完一轮后利用卷积核的范数评价每层卷积核的重要性后将不重要卷积核权重置为0,但置0卷积核仍在下一轮训练反向传播中进行更新。在训练收敛时通过每层稀疏度与重要性评价标准得到最终剪枝模型。文献[42]确定每层的最终剪枝率。将初始剪枝率设置为0,每训练一定轮数后进行一次剪枝,剪枝率通过初始剪枝率与最终剪枝率的插值函数计算,即随训练时间增加而增加,最终达到设定剪枝率。并将算法在视觉任务与语言任务上进行测试。文献[43]提出利用激活函数的输出计算出对于通道的系数因子。在模型微调中系数因子逐渐收敛到0~1的值。在模型微调完成时将系数为0的对应通道(卷积核)进行剪枝。此方法也是将模型微调与剪枝同步进行。

2.5 模型剪枝的理论假设

另外,也有学者针对模型剪枝提出重要假设,比如文献[44]提出了Lottery Ticket Hypothesis,即1个随机初始化的密集的神经网络包含1个子网络,此子网络的权重如果使用原始网络同样权重分布方式进行初始化,单独训练此子网络经过至多同样的迭代次数可以达到与原始网络同样的测试精度。此子网络即为“Winning Ticket”。同时也提出如果子网络使用不同于原始网络权重分布的方式进行初始化,经过训练则达不到原网络的精度。文献[6,45-46]中对此有进一步讨论。文献[6]则提出了文献[44]中的假设具有局限性,并通过实验结果提出对于结构化剪枝,是否使用与原始网络同样的权重分布初始化子网络对训练结果没有影响,即随机初始化的子网络经过训练也可以达到相同效果。在非结构化剪枝上使用小学习率(0.01)可以观察到文献[44]中所述现象。文献[46]进一步假设1个随机初始化的足够过参数化的神经网络包含1个子网络,与经过训练的同样参数的网络相比,此子网络无须训练即可实现相同的准确度。此假设可被认为是更强的Lottery Ticket Hypothesis。文献[47]通过将子神经网络分类为weight-subnetwork(通过移除权重获得的子网络)与neuron-subnetwork(通过移除神经元获得的子网络),并分别验证了此2种情况满足文献[46]中所提出的更强的Lottery Ticket Hypothesis。文献[48]则通过对全连接层和卷积层的分析,从理论上验证了对于任何权重按某一分布独立初始化的原始网络,无论使用基于权重重要性的剪枝模式还是随机剪枝模式,存在对应剪枝网络在精确度上的损失小于一给定值。同时定量得出给定每层剪枝率与误差值,剪枝网络在精度上损失小于此误差值的概率。

2.6 与其他压缩算法的联系及联合使用

研究人员将剪枝方法与其他模型压缩方法联合研究。文献[17]分析了剪枝与低秩分解的联系,2种方法从不同方式近似权重张量并保持模型精确度。文中引入稀疏引导矩阵,通过将稀疏引导矩阵的特定列或行置为0而实现剪枝或低秩分解,从而将2种方法整合到同一框架之下。文献[18]中提出将网络结构搜索、剪枝、量化联合进行优化,与这3个步骤分别优化相比,作者认为联合优化更容易寻找到全局最优。作者将网络结构信息、剪枝策略与量化方法编码后送入accuracy predictor预测所得模型的精确度进而使用进化算法进行模型的迭代,从而找出最优网络结构。与上述3步分别进行优化的算法相比,文中算法运算量大大降低,所得模型在ImageNet数据集上取得了更高的准确度。文中使用3层前馈神经网络做为accuracy predictor预测所得模型在测试集上的精确度从而避免直接计算模型精确度所带来的大规模计算开销。文献[19]提出将剪枝与量化与模型微调同步进行。在训练中将剪枝与量化所得到的权重用于前向传播计算所预测值,而在反向传播中更新未经过剪枝量化的权重。方法中的剪枝率与量化比特位为超参数,文中利用贝叶斯优化计算。文献[49]提出一种端到端的剪枝加量化的联合优化算法。剪枝部分损失函数使用VIBNet[50]方法,即为每一个通道引入服从高斯分布的重要性因子,而高斯分布可通过优化VIB损失获得。之后利用所得高斯分布决定哪些通道将被裁剪。此方法的损失函数对所需优化的参数可微,从而使参数可以在反向传播中更新。作者使用ResNet18与MobileNetV2网络在ImageNet数据集上将提出方法与剪枝与量化分别优化的2步算法进行结果对比,发现可以得到相似的模型精确度和大幅提高的模型压缩率。

2.7 对于其他任务的剪枝研究

上述算法大多研究剪枝模型在物体分类任务上的效果,而对算法在目标检测、语义分割等任务上的表现鲜有研究。文献[20]对包含目标检测、语义分割与脏污检测的多任务神经网络进行剪枝优化并在自动驾驶数据集上进行测试。在达到一定程度压缩率后,发现剪枝模型对目标检测与语义分割任务的结果影响较小,而对脏污检测任务结果影响较大。文献[21]提出引入上下文感知引导模块(CAGM)引导基于通道的稀疏化从而对网络进行通道剪枝,即在文献[27]的算法中加入以上下文引导向量为先验的惩罚项。所得模型在语义分割任务上结果较文献[27]中的算法有所提升。

2.8 剪枝算法性能的评估

模型剪枝算法应在不损失模型精度或较小的损失模型精度的情况下尽可能压缩模型的参数量和浮点运算次数。压缩率越大则剪枝方法性能越优。另外剪枝方法的效率也是一种评价因素,在获得相同压缩率的情况下使用越少的运算次数的方法效率越高。如文献[41]称所提出方法压缩Alexnet网络在ILSVRC-2012数据集上所需训练轮数仅为文献[5]中方法的15%左右。文献[11]将所述算法与其他几种算法在训练轮数上进行了比较。但多数剪枝算法在实验中没有关于训练轮数或训练运算次数的信息,且不同方法每轮训练运算量并不一致,本文认为压缩率仍是现有大多数算法进行横向比较的首要因素。对于不同模型剪枝算法首先应基于剪枝算法对于同一种网络模型在相同任务上的表现进行评判。本文从论文所述算法的实验结果中找到不同剪枝算法对于ResNet-50网络在ILSVRC-2012数据集上的结果以及VGG-16网络在CIFAR-10数据集上的结果,分别如表1和表2所示。所选择网络结构与任务为文献之中实验部分出现次数较高的网络与任务。不同模型剪枝方法名称为相关文献中所述。本文将文献实验结果中所述对于精度损失影响最小的算法列入表1和表2中。在ResNet-50网络和ILSVRC-2012数据集上所选择方法的精确度损失大多在2%以内。在VGG-16网络和CIFAR-10数据集上所选择方法的精确度损失大多在1%之内。模型参数压缩率与浮点运算次数压缩率分别为压缩后的模型相比于原模型在参数上与浮点运算次数上降低的比率。在精度损失相同或相近的情况下,压缩率越大则说明剪枝模型性能越优。

表1 不同算法在ResNet-50网络和ILSVRC-2012数据集上的表现 单位:%

表2 不同算法在VGG-16网络和CIFAR-10数据集上的表现 单位:%

3 未来展望

模型剪枝作为重要的模型压缩手段,近年来新方法层出不穷。发展新的模型剪枝算法从而更高效地寻找好的剪枝模型结构一直都是此领域的关键与热点。同时,以下方面可能成为未来的研究方向。在有关于模型剪枝的基础理论层面,网络整体压缩率或是网络每层的压缩率与模型精度损失之间的定量关系值得深入研究。另外,剪枝与其他模型压缩方法的联系与结合使用可以成为下一研究热点。如文献[16,18]中利用联合优化算法相较单步分别优化使模型压缩率提升。多数剪枝算法是针对于二维卷积神经网络的,而对于三维卷积网络的剪枝研究较少。在文献[51]中首次提出对于三维卷积核,即是含空间-时间维的卷积核进行通道剪枝的方法。对于三维卷积网络的剪枝方法及在数据集上的表现值得进一步探索。在应用层面,多数模型剪枝算法是针对于物体分类任务进行测试的,而在其他任务上的表现结果较少。因此,研究人员可以对于现有剪枝算法在其他学习任务上的表现,如在多任务学习上的表现,进行测试与比较,并进行改进。最后,随着新方法的不断发展,对于不同的方法需要发展较为通用的高质量的评估标准进行横向比较。好的评价标准对此领域的发展可以起到促进作用。

4 结束语

神经网络模型剪枝是对于冗余的模型权重进行裁剪从而降低模型存储并提升模型速度。随着人工智能技术在社会各个领域应用越来越广泛以及对模型的速度与存储方面的性能要求越来越高,模型剪枝技术在相关场景中的应用会越来越广泛。好的模型剪枝算法成为了深度神经网络模型能够成功应用的关键因素之一。

本文主要对于神经网络模型的发展与研究现状进行了简要的概述。通过将神经网络模型剪枝算法归纳为对于剪枝对象的重要性评判,如何确定神经网络各层剪枝率,如何确定剪枝时机、剪枝的理论基础等几个方面。并对各个方向具有代表性算法的关键思想进行了描述。寻找适用于不同学习任务的模型剪枝算法仍是未来重要的研究方向。

猜你喜欢
每层剪枝权重
人到晚年宜“剪枝”
权重望寡:如何化解低地位领导的补偿性辱虐管理行为?*
攀登脚手架
基于YOLOv4-Tiny模型剪枝算法
智取钻石
权重常思“浮名轻”
基于激活-熵的分层迭代剪枝策略的CNN模型压缩
选准条件正确解答
为党督政勤履职 代民行权重担当
权重涨个股跌 持有白马蓝筹