赖叶静 郝珊锋 黄定江
摘要:深度神经网络(Deep Neural Network,DNN)模型通过巨大的内存消耗和高计算量来实现强大的性能,难以部署在有限资源的硬件平台上,通过模型压缩来降低内存成本和加速计算已成为热点问题,近年来已有大量的这方面的研究工作,主要介绍了4种具有代表性的深度神经网络压缩方法,即网络剪枝、量化、知识蒸馏和紧凑神经网络设计:着重介绍了近年来具有代表性的压缩模型方法及其特点;最后,总结了模型压缩的相关评价标准和研究前景。
关键词:深度神经网络压缩:网络剪枝;量化:知识蒸馏;紧凑神经网络
中图分类号:TP391 文献标志码:A DOI:10.3969/j,issn,1000-5641.202091001
0引言
近年来,深度神经网络(DNN)在许多领域取得了巨大的成功,包括但不限于目标识别和检测、语音识别、自然语言处理,这些成功依赖于更多的参数、更大更深的模型,例如,在VGG-16(VisualGeometry Group-16)网络上训练ImageNet数据集得到的模型大小超过500 MB,参数数量高达138 357 544个,自2012年AlexNet出现并拿下当年ImageNet竞赛的冠军后,深度神经网络在计算机视觉领域大放异彩,随后出现的卷积神经网络模型数量大幅度增加,比如VGG、ResNet、DenseNet等,这些深度网络模型在许多领域的实验中表现良好,但在实际应用中仍然受到时间和空间的限制,即使使用图形处理单元(Graphics Processing Unit,GPU)或张量处理单元(Tensor Processing Unit,TPU)进行加速,这些宽而深的网络模型仍然不能满足在许多应用场景中的实时需求,与此同时,手机和边缘设备等资源受限设备的数量每年都在增加,体积大、计算成本高的模型会消耗大量的计算资源,不适用于手机等移动设备,因此,在不影响深度网络模型准确度的前提下,模型压缩是一个重要的研究问题。
实现模型压缩的方法有很多,本文将这些方法分为4类:网络剪枝、量化、知识蒸馏和紧凑神经网络设计,网络剪枝主要通过设计一个标准去判断参数的重要程度,再根据重要性去除冗余参数,量化减少表示每个权值和激活值所需的比特数,如二值化(1-bit)、int8量化(8-bit)等,知识蒸馏主要利用大型网络的知识,并将其知识转化到紧凑小型的学生模型中,紧凑神经网络通过设计一个特殊结构的卷积核或紧凑卷积的计算单元,来降低模型的存储和计算复杂度,表1简要总结了4类神经网络压缩方法的优缺点和适用场景。
在模型压缩和加速领域,涌现出了许多优秀的综述论文:文献[7-8]对模型压缩研究的进展做了详尽的调查分析,主要介绍了前几年传统的优秀算法,但错过了近年来许多重要并且有代表性的工作;文献[9-10】将模型压缩分为6个方向,并介绍了近年来提出的算法,与之前的综述文献不同,本文将模型压缩分为4大类别,对过去几年相关的研究进展与具有代表性的方法进行了了调查,并给出该领域内评价准则的具体计算方法,在先进压缩算法上综合比较了图像分类和目标检测两个任务的性能,
本文后续结构:第1章分别介绍4种模型压缩方法,并着重介绍近年来涌现出的模型压缩方法及其特点;第2章介绍模型压缩的相关评价标准,并对当下具有代表性的压缩方法进行性能评估;第3章对全文进行总结并展望未来的研究热点。
1模型压缩算法
模型压缩有许多优秀的算法,并在各个领域有着广泛的应用,如Wang等提出的PeleeNet,通过设计高效的卷积方式并与移动设备硬件的运行库结合,能够对移动设备上的目标检测、图像分类等任务进行实时预测,使用PeleeNet在iphone8上实现目标检测任务,可达到23.6 FPS(Frames PerSecond,每秒传输帧数),且准确率较高,下面介绍4种具有代表性的深度网络压缩方法,并比较分析它们的优点与不足。
1.1网络剪枝
深度网络模型中存在许多冗余和信息量较少的权值,网络剪枝通过去除训练好的模型中冗余的参数,从而减小模型的体积,并加快模型的计算速度,压缩模型的存储空间,另外,剪枝也可以降低网络的复杂度,解决过拟合的问题。
根据剪枝粒度级别的不同,网络剪枝可分为4种剪枝粒度,如图1所示,在最粗粒度的级别中,可以移去一个层(layer),被修剪的层如图1a)中的阴影所示,第二个修剪粒度是特征图/滤波器(feature map/filter),其中,特征图是网络输出,滤波器是网络中的参数,在剪枝的过程中,剪去一个特征图等价于上一层的一个滤波器可以得到一个更薄的网络,图1b)中阴影部分表示被移除的滤波器,下一个修剪粒度是核(kernel),即修剪滤波器中的一个通道,如图1c)所示,最细粒度的是修剪核内的一个权重(weight),如图1d)所示,核中阴影部分的零即是被修剪的权重参数,此剪枝粒度可以产生更稀疏的权重矩阵,这4种剪枝粒度可进一步分为结构化剪枝和非结构化剪枝两类,层间剪枝、特征图剪枝和核剪枝是结构化剪枝,核内权重修剪(核内剪枝)是非结构化修剪。
早期的网络剪枝方法多是非结构化剪枝,LeCun等和Hassibi等分别在1990年和1993年提出了最优化脑损失(0ptimal Brain Damage,OBD)和最优化脑手术(optimal Brain Surgeon,OBS)方法,后者是前者的改进,其基本思想是使用损失函数相对于权重的Hessian矩阵来度量网络中核内权重的重要性,从而删除不重要权重,这两个算法能在一定范围内提升准确度,但时间代价较高,因此,不能在大型网络上应用,Zhang等提出了一种基于交替方向乘子法(Alternating Direction Methodof Multipliers,ADMM)的权值剪枝系统:首先将深度神经网络的权值剪枝问题转化为具有指定稀疏性要求的组合约束的非凸优化问题;然后利用ADMM将非凸优化问题分解为两个迭代求解的子问题,一个用随机梯度下降法求解,另一个用解析法求解,该系统使得AlexNet和LeNet在ImageNet和MNIST数据集上的权重参数获得了大幅度的压缩,以上非結构化剪枝往往使得层内的权重矩阵变成稀疏矩阵,但并没有减少计算量,而且对稀疏矩阵的加速计算需要特定的软件库或者硬件来支持,针对此问题,Ma等提出了PCONV方法,一种粗粒度结构中的细粒度剪枝模式,包含模式化剪枝和连通性剪枝,模式化剪枝可以获得filter不同的稀疏性,连通性剪枝进一步对filter做核剪枝,获得filter之间的稀疏性,此外,利用PCONV剪枝特性设计专门的编译器,在具有代表性的大规模DNN上实现了高压缩和较高的推理速度,除了设计特别的剪枝结构、设计专有的编译器,结构化剪枝也可以克服非结构化剪枝的缺点。
结构化剪枝的主要的思想是将不重要的信道或者滤波器去除,并最小化重构误差,He等基于LASSOfLeast Absolute Shrinkage and Selection Operator)回归的方法进行信道选择,再通过线性最小二乘法重构网络输出,Chin等提出了学习卷积网络不同层filter的全局排序,该排序用于获得一组具有不同精度/延迟的卷积网络架构;对于跨层的filter排序,通过学习分层的参数仿射变换替代以往的范数准则来评判filter的重要性,Molchanov等使用一阶和二阶泰勒展开式来近似filter的贡献,并逐层去除贡献低的filter,这个方法可以应用于任何类型的层,如残差网络的shortcut层,
Luo等提出的ThiNet框架,filter是否被剪去取决于下一层,而不是当前层;在对第i层的filter进行剪枝时,学习如何选择i+1层通道数的某个子集输入原网络,并且逼近原来的输出结果,此时第i层的filter也可以去除,在对某一层进行剪枝后,通过最小化重建误差进行微调,但这个方法忽略了信道的鉴别能力,因此Zhuang等提出了一种用于深度神经网络压缩的鉴别力感知通道修剪策略(Discrimination-aware Channel Pruning,DCP),将信道剪枝问题作为稀疏性优化问题,同时考虑重构误差和信道鉴别能力,对于深层模型,由于传播路径长,其浅层往往具有很小的鉴别能力,为了提高中间层的鉴别能力,DCP把深层网络分为p+1个阶段,并在这p+1阶段中引入额外的鉴别力感知损失函数Ls,p(w),考虑到鉴别力损失和重建损失,该策略关于信道选择的联合损失函数为。
结构化剪枝常常使用范数评价指标来评价某个filter是否重要,用范数评价filter时隐含了两个条件:一是范数的方差要大;二是最小范数接近零,使用符合这两个条件的范数作为评价filter的准则,最后的重建误差往往会比较低,但实际中,filter范数分布无法同时满足这两个条件,所以可以通过判断两个filter的相似性来判断filter是否冗余,但判断其相似性是比较困难的,所以,He等12引利用几何中值fGeometric Median,GM)来判断两个filter间的相似性,几何中值是在欧氏空间中点的中心估计,靠近该中心点的filter可以用远离该中心点的filter来近似表示,即可以剪去接近几何中值的filter,而Lin等人发现即使输入图像的批大小(Barch Size)不同,但单个filter生成的多个特征图的平均秩总是相等,高秩的特征图往往包含更多的信息,所以可以剪去产生低秩特征图的filter,这两个方法与范数无关,不需满足范数评价指标的条件,但在CIFAR-10和ImageNet数据集上使用不同的网络进行剪枝,都可以在几乎不损失准确度的情况下获得更高的压缩率。
剪枝就是去除原网络中不重要的权重,从另一个角度来看,被剪枝后的网络结构就是原网络的一个子结构,这跟神经网络搜索(Neural Architecture Search,NAS)很相似,所以剪枝也可以说是神经网络搜索的一个特例,它可以使得搜索空间变得更小,目前许多剪枝方法越来越偏向于神经网络搜索,剪枝方法和量化方法通常可以结合使用。
1.2量化
网络量化通过减少表示每个权值所需的比特数来压缩原始网络,通过这种方式,网络中权值和激活值都被量化,并且浮点乘法累加操作(Multiplly Accumulate,MAC)可以被低比特的乘法累加操作代替,在二值化網络和三值化网络的情况下甚至不需要乘法,因此,使用低比特量化神经网络可以降低存储和计算复杂度,同时,低比特量化也有利于面向神经网络芯片硬件的加速,每降低一比特通常更容易简化硬件的设计,也可以设计出更精细的芯片,量化通过最小化量化误差找到最优量化器,相应公式为。
其中,x表示全精度参数,qx(x)表示量化后的低比特参数,J(qx(x))表示全精度参数与二进制参数之间的量化误差。
量化方法可分为权重共享和低比特表示,具有代表性的权重共享方法通过聚类来现,Han等对每一层的权重矩阵使用K-Means聚类算法,并使用每个簇的质心来表示权重矩阵中的值,因为相同簇的权值共享一个质心,所以只需要存储质心的索引,并通过查找表获得该索引对应的值,最后通过梯度进行微调就可减少精度损失,如图3所示,另一种经典的权重共享方法是使用散列函数进行量化,Chen等使用哈希技巧将网络连接权值随机分组到散列桶中,每个散列桶中的网络连接共享相同的权值参数,这些方法都属于传统的标量量化方法,Stock等基于乘积量化(Product Quantization,PQ)提出了比特下降的向量量化方法,区别于以前的向量量化方法,该方法注重激活值的重要性,而不是权重的重要性,其原理是通过最小化域内输入的重建误差,然后把未压缩的神经网络作为教师网络,把压缩后的网络作为学生网络,在量化时只需要一组未标记的数据,再使用字节对齐的码书来存储压缩后的权重,通过这种方法可以在CPU上进行有效的推理。
大量基于低比特量化的方法是基于二值化网络的改进工作,二值化方法使用1 bit对数据进行量化,量化后的数据取值只有两个可能的值:0(1)或+1.2016年,Courbariaux等提出BinaryConnect后,权重值和激活值分别二值化就成为一种有效的深度神经网络压缩方法,通过二值化,可以将繁重的矩阵乘法运算替换为轻量级的异或运算和位计数运算,二值化的离散性和有限的表示能力,导致正向和逆向传播中都存在严重的信息损失,在正向传播中,当权重值和激活值限制在两个值时,模型的多样性会大大下降,导致了精度大幅度下降,Qin等提出信息保留网络(InformationRetention Network,IR-Net)来保留前向激活和后向梯度的信息,IR-Net分为两个过程:首先通过均衡和标准化正向传播的权重;同时最小化参数的量化误差和最大化量化参数的信息熵,在没有对激活值添加额外操作的同时,减少了权重和激活的信息损失,二值化常常使用符号函数作为量化函数,对符号函数进行反向传播会造成巨大的信息损失,所以在反向传播中需要进行梯度近似,为了保留反向传播中损失函数的信息,IR-Net通过逐步逼近反向传播中的符号函数来最小化梯度的信息损失,由该方法在CIFAR-10和ImageNet数据集上使用多个深度神经网络进行的实验可知,其比普通二值化方法获得的精度更高。
除了二值化网络,三值化和int8量化方法也是常见的低比特量化方法,Wang等提出了有效的两步量化法(TWO-Step Quantization,TSQ)框架,将网络量化问题分解为两个步骤:第一,使用稀疏法对激活值进行量化,只对重要的正值进行量化,将其他不重要的值设为零;第二,假设经过第一步量化激活值获得的编码是最优的,则可以将最优化问题表述为具有低位约束的非线性最小二乘回归问题,并用迭代求解量化权重,Mellempud等提出了利用参数动态范围内的局部相关性来最小化量化对整体精度的影响的细粒度三元化方法,Zhu等基于误差敏感的学习率调节和方向自适应的梯度截断方法解决了量化后的精度损失,表2给出了近年来在CIFAR10和ImageNet数据集上量化方法的性能对比,其中,w代表权重使用的比特位数,A代表激活值使用的比特位数,aCCToml代表预测概率最高的类别与真实类别相符的准确率,aCCToD-5代表预测概率排名前五的类别中包含真实类别的准确率。
当使用低比特表示参数时,量化神经网络的精度与全精度神经网络相比下降了很多,这是由于网络量化阶段引入的噪声使得梯度下降法难以收敛,当使用非常低的位表示来量化权值和激活时,问题可能会更加严重,在对深度网络模型(如ResNet)进行较大的压缩和加速时,若使用同时量化权值和激活值的网络(如XNOR-Net),分类精度损失严重,此外,结构化矩阵的限制可能会导致模型的偏差和精度的损失,因此,量化方法一般是与其他方法结合使用。
1.3知识蒸馏
在知识蒸馏中,使用宽而深的网络训练得到的模型一般称为教师模型(Teacher Model),比如VGG-16等;使用轻量化的网络训练得到的模型一般称为学生模型(student Model),比如MobileNet等,知识蒸馏的基本思想是将大型教师模型的软知识提炼到较小的学生模型中,2015年,Hitton等首次提出了知识蒸馏的压缩框架,该框架主要使用教师网络的软输出对学生网络进行指导和惩罚,其中软输出可以提供更大的信息熵,提供更多原网络的信息,为此,教师网络的软输出被用作一个标签来训练和压缩学生网络,知识蒸馏过程如图4所示,使用带温度T的softmax函数qi来生成每个类别的预测概率,公式为
知识蒸馏的目标是将原网络中具有代表性的知识转移到另一个更小的神经网络中,通常是以最小化概率输出之间的KL(Kullback-Leibler)散度为目标建立教师网络和学生网络,但Tian等提出这一KL目标忽略了教师网络的重要知识结构,并提出了对比学习方法,对比学习的关键思想是学习“正”对在某些度量空间中接近的表示,并将“负”对之间的表示分离开,实验表明,该方法在各种知识转移任务(包括单模型压缩、集成蒸馏和跨模态转移)上的性能都优于知识蒸馏和其他最优的蒸馏方法,有时甚至超过教师网络与知识蒸馏的结合。
近年来,许多学者在知识蒸馏领域展开工作,以设计出更好的学生模型,学生模型不仅模仿老师的行为,还可以学习教师网络以外的知识,从而超越教师模型,Furlanello等提出的重生神经网络(Born-Again Neural Networks,BAN),使得最后获得的学生模型可以超越教師模型,与原来的方法不同,这种方法的目的不再是压缩模型,而是将知识从教师模型转移到具有相同能力的学生模型,如DenseNet作为教师模型、ResNet作为学生模型,在经过BAN蒸馏后的ResNet,其测试错误率比原来的教师模型DenseNet更低,在教师模型收敛之后,初始化一个新的学生模型,然后,在满足设置正确的预测标签和匹配教师模型输出分布的双重要求的同时,对学生模型进行训练,Gao等提出的残差知识蒸馏方法,引进了助理fAssistant)的概念,即助理通过学习教师和学生之间的残差来帮助学生获取更多的知识。
基于知识蒸馏的方法可以压缩更深更大的模型,并有助于显著降低计算成本,而知识蒸馏大多数都是应用于具有softmaX损失函数的分类任务,近年来,许多研究使用知识蒸馏的方法对目标检测、语义分割任务进行压缩,He等提出了一种有效的语义分割知识蒸馏方法,在不引入额外参数或计算的情况下,大幅度提高了学生模型的能力,并以更少的计算开销获得了更好的结果,此方法可以分为两个阶段:第一阶段通过自编码器将知识压缩成紧凑的形式,目的是将教师网络中的知识转为更具代表性信息的压缩空间;第二阶段为了从教师网络中获取长期依赖关系,提出了亲和蒸馏模型(Afflfinity Distillation Module),主要添加一个卷积层(称为特征适配器)来解决教师模型和学生模型各自feature map不匹配的问题,知识蒸馏可以用于许多领域,比如自然语言处理、半监督学习等,教师网络的软输出可以对学生网络进行微调以获得更好的精度。
1.4紧凑神经网络设计
随着人们对神经网络原理的理解和在实践中的验证,神经网络模型的发展正朝更小卷积核、覆盖更多特征信息、减少冗余的方向发展,与压缩已经训练好的模型相比,设计紧凑的神经网络是另一种方法,紧凑网络设计主要针对卷积网络设计一种更高效、计算复杂度更低的方法,在不损失网络性能的情况下减少每秒浮点运算次数,并降低模型体积,基于此思想,设计高效的CNN结构可以从不同的卷积核和卷积方式进行设计,比如,在设计卷积核时,将全连接层换成全局平均池化层用小卷积核(1×1.3×3)替换大卷积核(5×5),在设计卷积方式时,使用分组卷积、深度可分离卷积、反卷积等方式替换原来的标准卷积方式,从而加快了网络计算速度,减少了计算量。
Iandola等提出的SqueezeNet、Google团队提出的MobileNetVl-V3系列、Face++团队提出的ShuffleNetVl-V2系列都是近年来出现的并具有代表性的紧凑神经网络,其共同点是大量地使用了1×1小滤波器。
SqueezeNet由多个Fire Module、卷积层(conv)、采样层(Pooling)和全连接层(Fully Connectedlayers,FC)组成,Fire Module的squeeze层用1×1的小滤波器替换原来的3×3滤波器,expand层组合使用1×1滤波器和3×3滤波器,减少了原始网络的大滤波器(3×3),从而减少了网络的参数量,该模型在可以达到AlexNet分类精度的同时,可将模型参数大小降至原来的1/50倍。
MobileNetVl提出深度分离卷积来代替原来的标准卷积计算,MobileNetVl将卷积运算分为depth-wise和point-wise,如图5所示,在depth-wise中,每个滤波器只考虑一个通道,滤波器的数目等于输入通道的数目,其中滤波器是一个3×3矩阵,point-wise运算与常规卷积运算非常相似,但使用的是1×1的小滤波器,经过这两个运算后,滤波器的参数将大大降低,MobileNetV2同样采用了MVl的depth-wise和point-wise,并设计了Inverted Residuals来获取更多的特征信息,以减少推理时间,由于在低维空间中增加非线性会破坏其特征,MV2在每一个块fblock)中去除了Relu层,引入LinearBottlenecks,MobileNetV3则通过神经结构搜索获得子网络,并在MV2的block中添加了SENet增强模块,使得网络提取特征的能力大大增强,从而获得了更高的准确性。
ShuffleNetVl使用组卷积(Group Convolution)来降低模型参数大小,并使用通道混排(channelShuffle)增强各个特征图的连接,ShuffleNetV2提出了4条指导性原则:①输入输出通道数相等会最小化内存访问成本;②组卷积数目过多将增加内存访问的次数;③在多路结构中,网络碎片化降低了并行化程度;④元素级操作fElement-Wise Operators)不可忽略,基于以上4条原则对ShuffleNetVl进行改进,提升了准确度和模型运行速度。
华为诺亚方舟团队的Han等提出了GhostNet模块,对于每一个输入,首先生成一组内部特征图,然后基于这组内部的特征图,使用一系列成本低廉的线性变换来生成许多Ghost特征图,最后该Ghost特征图和内部特征图的个数之和等于原始特征图个数之和,并利用这些模块,构建了GhostbottleneckfG-bneck)和GhostNet,其中Ghost bottleneck类似于ResNet中的残差块,GhostNet则使用MobileNetV3作为基本体系架构,并将MobileNetV3中的bottlenet换成G-bneck,在ImageNet分类中,GhostNet可以获得比MNV3更高的精确度,Chen等人提出的Octave Convolution,基于自然图像可以分为高频和低频两部分的思想(经过傅里叶变换后对应的高低频),将卷积层输出的特征图分为高低频两部分,将低频的特征图存储在更小的张量中,减少空间冗余,表3给出了近年来紧凑神经网络方法在ImageNet数据集上实验的性能对比,其中,Param代表网络中的参数量大小,FLOPs(FloatingPoint of Operations)为浮点运算数。
紧凑神经网络采用紧凑的卷积核或改变卷积方式,大大减少了模型中的参数,降低了模型的大小,在轻量的语义分割、目标检测和分类模型上都有应用,但由于其特殊的卷积核,难以和其他模型压缩方法一起使用。
1.5其他深度神经网络压缩算法
训练好的模型卷积核存在低秩特性,所以低秩分解也可用在模型压缩中,主要通过矩阵或张量分解模型中的参数,如SVD(singular Value Decomposition)分解、Tucker分解和CP(canonical Polyadic)分解等,Jaderberg等使用低秩扩展来加速卷积神经网络,主要观点是利用存在于不同通道和滤波器之间的冗余,对已训练好的网络进行加速,并提出了两种优化方案,可以很容易地应用于现有的CPU和GPU卷积框架:第一,将某一个通道进行秩1分解,并学习M个滤波器基組后通过线性组合来近似原来的滤波器;第二,每个卷积层被分解为两个常规卷积层的序列,但在空间域内带有矩形滤波器,所得近似结果需要的计算操作要少得多,在场景文本字符识别CNN训练中可以观察到,分类精度仅下降1%,但加速率却可以达到4.5×1。
另外,各种压缩方法也可以结合起来一起用,Han等13引提出的三阶段方法,结合了剪枝和量化两个方法:首先修剪值较小的连接,获得一个稀疏化网络;再对剪枝后的网络使用聚类的方法进行量化,实现权值共享;经过前两个步骤后重新训练网络以调整剩余的连接和量化质心,最后使用哈弗曼编码对网络再进一步压缩,该压缩方法在VGG-16上压缩率高达49×,而准确率却没有降低,Polino等结合量化和知识蒸馏对模型进行压缩,在量化的过程中加入知识蒸馏损失进行训练,并使用量化后的权重计算梯度更新模型,但在量化神经网络中,对原始权重进行量化的过程是离散的,因此梯度几乎处处为0.这意味着不能使用量化函数进行反向传播,基于此问题,Polino等还提出了可微量化方法,通过随机梯度下降优化量化点的位置,该方法使得量化的浅层次学生模型可以达到与全精度教师模型相似的水平,同时可获得高压缩率并加速推理过程,Cai等提出了面向边缘应用的压缩方法,根据网络中各层权重的分布对权重进行裁剪,并针对嵌入式设备的特性对权重和激活值采用定点量化的方法进行量化,在降低计算量和存储成本的同时几乎达到了无损压缩。
2评价准则
衡量模型压缩和加速质量的标准是压缩率、加速率和浮点运算数(FLOPs),假设p是原始模型M中参数的内存成本,u*是压缩模型M*的内存成本,则模型的压缩率Ф为
另外模型压缩方法用在分类、目标检测和语义分割任务上时,根据数据集的不同会定义不同的评价准则,如在分类任务中,小数据集CIFAR和MINST使用Top-1分类错误率,而大数据集ImageNet常使用Top-I和Top-5分类错误率,在目标检测或语义分割任务中,常使用平均精度(Average Precision,AP)来做评估,一般来说,压缩后的方法与原模型的分类错误率相似,但参数减少、加速率增加、浮点运算操作数降低。
表4给出了近年来在数据集ImageNet上进行图像分类的压缩方法性能对比,其中参数量(Param)为float32类型(4字节),从表4可以看出,对AlexNet和VGG-16这些大型神经网络进行压缩,几乎没有精度损失,甚至还会超过原来的精度,对ResNet-50这类原始参数本来就较小的网络进行压缩,精度损失也不大。
表5给出了近年来在Microsoft COCO数据集上进行目标检测任务的压缩方法对比,其中AP(AveragePrecision)代表平均精度,AP0.5代表交并比(Intersection over Union,IoU)阈值为0.5时的AP值,AP0 75代表在IoU阈值为0.75时的AP值,在对目标检测模型进行压缩时,可以在骨干网络(Backbone)使用以上介绍的4种主流方法进行压缩或者设计更小型的网络结构,从表5可以看出,EfficientDet-B0在Microsoft COCO 2017數据集上表现出了优异的性能,并且参数量和FLOPs都降低了。
3总结和展望
本文主要对主流的基于深度神经网络压缩的方法进行了介绍:首先分析了需要模型压缩的原因;其次,介绍了4种具有代表性的深度神经网络压缩方法,即网络剪枝、量化、知识蒸馏和紧凑网络设计,并着重对近年来压缩模型方法的性能进行了分析;最后给出了模型压缩的评估准则,接下来对模型压缩未来的发展和面临的挑战进行展望。
深度网络压缩的基本目的是从网络中提取有用的信息,并降低模型大小和参数量,从目前的研究结果来看,深度神经网络压缩仍处于发展阶段,压缩方法本身的性能还有待提高,以下是一些值得研究和探索的方向。
(1)高效评估方法和剪枝率的选择:剪枝技术评估卷积核或核内权重参数的重要性仍然是比较简单的方法,尽管近年来提出了许多评估方法,但普遍计算复杂、难度大,因此,如何定义更高效的方法来确定卷积核或其他参数的重要性,是未来值得探索的方向,另外,每一层的卷积参数分布是不同的,对每层的剪枝率的选择也是未来可探索的方向。
(2)设计新的网络结构:模型量化后会改变数据的原始分布,在大型数据集和深度神经网络中模型性能损失大大增加,主要原因在于现在的网络结构不一定全都适合于量化操作,量化后保留的信息与全精度所保留的信息不一定相同,所以如何针对量化设计特定的网络结构也是值得研究的方向。
(3)多场景模型压缩:目前的模型压缩方法主要针对深度神经网络,而深度神经网络压缩模型大多采用CNN,主要针对图像分类场景,常见的神经网络场景还有递归神经网络fRecurrent NeuralNetwork,RNN)、长期短期记忆网络(Long Short-Term Memory,LSTM)、强化学习、目标检测和生成式对抗网络fGenerative Adversarial Networks,GAN)等,这些应用场景需要的精度往往很高,现有的压缩方法难以进行高效的压缩,所以在未来一段时间内,有必要研究多场景下的模型如何进行压缩。
(4)端设备部署:边缘设备和各种小型平台(如自动驾驶汽车)的硬件和资源限制仍然是阻碍深度神经网络模型落地的主要原因,随着模型压缩方法的流行,对于分类任务的模型压缩方法已经得到了很大的发展,但对于常见的目标检测、语义分割等任务的研究还很少,所以如何在资源受限的边缘设备中部署各种大模型,使得应用真正落地,仍然是一个大挑战。
(5)与自动机器学习(Automated Machine Learning,AutoML)结合:如在剪枝中,使用AutoML自动化地选择修剪率,在量化中,AutoML根据量化前参数重要性大小来动态选择量化的比特数。