模型压缩算法国内外研究现状综述

目录

1  DCNN模型量化算法相关研究综述

2  DCNN模型剪枝算法相关研究综述

3  DCNN模型知识蒸馏算法相关研究综述

4  DCNN模型其他压缩算法相关研究综述


目标检测模型在追求更高检测精度值的同时,也直接导致模型结构复杂化,参数量、计算量不断增加,鉴于此,目前已经诞生了多类压缩算法,对这些模型进行压缩处理,总结如图1.1中所示。

图1.1  深度神经网络模型压缩算法分类与算法特点

 结合图1.1可以看到,目前在深度卷积神经网络领域,应用较为广泛的的压缩方法包括模型量化、模型剪枝以及基于知识蒸馏的深度模型压缩,此外还有一些方法包括神经网络架构搜索、低秩分解以及基于轻量结构设计轻量化模型等。下文中将按照图1.1中的顺序分别介绍这些压缩方法近年来的相关研究现状。

1  DCNN模型量化算法相关研究综述

量化,顾名思义,即将信号的连续取值(或大量的离散取值)近似为有限多个(或更少)离散值的过程,对应到深度卷积神经网络模型中,量化则表示将网络模型的激活值与权值从高精度的浮点数转化为低精度的浮点数或者低位宽的定点数,同时保证一定的精度。

早期将量化思想应用到卷积神经网络模型中的是MIT的Han等人[44],该量化方案中通过应用简单的聚类找量化中心点的方法,对网络模型中的权值进行量化。结合图1.2可以看到,上半部分中将左侧矩阵中32-bit的浮点数通过聚类,量化为0、1、2、3四个定点数,最终在该方案中再通过哈夫曼编码的方式完成对量化后权值的压缩存储。

图1.2  Deep Compression中通过聚类完成权值量化与微调示意图[44] 

该方案作为卷积网络量化领域的开山之作,尽管可以减小权值的存储空间,但由于通过聚类找量化中心点的方式往往较难通过硬件加速,且该方案中仅量化了权值,输入特征图仍保留为浮点数形式,因此前向推理过程中仍是通过浮点数的乘累加完成计算。在此基础上,Zhou等人提出了一种渐进式量化的方案[45],通过将权值量化为2-1、2-2等数值,使得在硬件上部署时可通过简单的移位操作完成计算,主要创新即通过渐进式地对权值进行量化,来减小由量化造成的精度损失,但与[44]中一样,该方案中同样只进行了权值的量化,因此不满足本文所述的在边缘终端场景中的应用需求。

除了上述这类早期仅针对网络模型权值进行量化的研究外,还诞生了一类更激进的量化方案,即将模型中的激活值与权值全部量化为两个或三个数值的量化方法。最早提出该类型方案的是Bengio所在团队的BNN(Binarized Neural Networks),即二值神经网络[46][47],该量化方案中直接根据权值或激活值的正负,来选择量化为+1或-1,完成数据的二值化。受此量化方案的启发,近年来诞生了大量的优化后的二值神经网络,主要目的均是为了缓解由二值化导致的较大的精度损失问题[48]。

第一类二值神经网络的优化方案是通过最小化权值与激活值的量化误差来完成,早期的有Rastegari等人提出的BWN(Binary Weight Network)二值权重网络以及XNOR-Net[49],该方案中提出采用二值参数的缩放因子(Scaler)来更精确地近似原浮点数值,具体来说其提出的量化公式为w=αbw ,其中α 即为二值化权值的缩放因子,然后通过最小化量化误差来学习得到最佳的缩放因子与对应的二值参数。该方案相较于BNN中直接采用符号函数来二值化的过程,所造成的精度损失更小。在此基础上,Li等人提出的HORQ方案[50]中将XNOR-Net中的单步逼近方式替换为基于量化残差的递归逼近,进一步地减小了量化带来的误差,如图1.9左上角中展示了HORQ量化方案的处理流程。

 图1.3  多种二值神经网络训练方法示意图[50][54][56][57]

第二类二值神经网络的优化方案是优化神经网络的损失函数。之前的相关工作中往往聚焦于局部浮点数的精确近似,而忽略了参数二值化对模型全局的影响,鉴于此,Hou等人提出了感知损失的二值化方案[51],通过使用拟牛顿算法来最小化与二值化直接相关的总损失值,该方法也证明了这类设计与量化相关的损失函数项的方法是有效的。此外,Mishra等人同样借鉴了该思想,并总结了二值神经网络中在前向二值化与反向传播中存在的问题[52],例如梯度饱和、梯度不匹配等问题等,并在此基础上利用预训练的全精度大模型作为教师网络来指导低精度学生网络的训练。

第三类二值神经网络的优化方案是降低二值神经网络训练过程中反向传播时的梯度误差。可以看到,与普通的全精度神经网络类似,二值网络的训练同样依赖于反向传播过程中梯度的更新,但由于二值化操作中所用的符号函数不可导的属性,所以在反向传播过程中大多采用了直通式估计器[53]STE(Straight Though Estimator)来近似符号函数的梯度值(关于STE的原理与使用将在第二章中详细介绍),但这种梯度近似无疑是不准确的,存在显著的梯度不匹配问题,进而导致二值神经网络的训练效果更差,严重影响推理精度。鉴于此,Liu等人提出的Bi-Real Net中提出了一种自定义的ApproxSign函数来近似传统的符号函数进行反向传播中梯度值的计算[54];Darabi等人提出的BNN+(Binary Neural Networks +)中对符号函数的梯度进行近似[55],并采用一个正则化函数来激励二值周围的可学习权值。此后,Gong等人提出一种可微分的量化方案,称之为可微分软量化(DSQ),通过软量化替换传统的量化操作[56],进而较好的解决了STE中梯度不匹配的问题;Qin等人的IR-Net中通过考虑在量化网络训练过程中不同阶段的需求不一致[57],提出了一种自适应误差衰减估计器,较好地平衡了梯度误差的降低幅度与权值参数的更新能力。其中部分二值神经网络的优化处理流程如图1.3中所示。

尽管二值神经网络已经展现出众多的优点,例如硬件友好特性,包括可大幅减少内存占用,提高能效并大幅加速推理过程等;甚至与全精度的网络相比,部分精心设计的二值神经网络还展现出来更高的鲁棒性[48]。但目前二值神经网络在实际场景中的应用仍然较少,其主要原因就在于目前二值网络现有技术仍面临较为严重的精度损失问题,尤其是在大型数据集上训练面向更复杂任务的大型神经网络,例如本研究中主要关注的目标检测模型的量化,如果采用二值化的方式进行量化压缩,将严重影响目标检测模型的检测精度,因而无法满足我们在边缘终端场景中的应用需求。

鉴于此,本研究中提出的量化方法将主要聚焦于满足实际应用场景中的需求,即不再如上述的二值神经网络中一样追求极致的压缩比例,而是追求较低数据位宽的同时,又能够满足该应用场景下的检测精度需求,因此主要关注的是8-bit、4-bit及以下位宽(后文中该表述均不包含1-bit)的量化。

目前在该领域的量化工作,根据图1.7可以看到,根据是否需要对模型进行重新训练,分为了两类量化方案,即训练后量化PTQ(Post Training Quantization)与量化感知训练QAT(Quantization Aware Training)。更具体地,根据是否需要训练数据以及重新训练可以将量化方案分为四个不同的等级[58],总结如表1.1中所示。

表1.1  深度神经网络模型的4级量化

量化等级

特征描述

Level1

无需训练数据,无需反向传播即可完成的离线量化

Level2

无需反向传播,但需要少量的校验数据,用于校准BN[59]的统计值或统计激活值的分布情况,进而降低离线量化的误差

Level3

需要训练集数据,同时需要进行反向传播,即通过重新训练来模拟量化并尽可能的提升量化后模型的精度值

Level4

需要训练集数据、反向传播,同时还需要调整网络结构以及细致的超参调整,综合提升量化网络的精度

结合表1.1的内容,可以看到第一级与第二级的量化属于训练后量化,第三级与第四级则均属于量化感知训练。在训练后量化领域,Markus等人提出了一种无数据量化方案DFQ(Data Free Quantization)[58],即不需要校准数据集来微调量化参数,同时耦合以权值均衡与偏置纠正来提升网络量化的精度,最终完成对网络权值与激活值的8-bit无数据量化。Banner等人提出了一种4-bit的训练后量化方案ACIQ[60],通过求解最优的截断值来提升精度,此外也同样采用了偏置纠正的方法。Choukroun等人提出的训练后量化方案中采用了更细粒度的权值量化处理[61],即Kernel-wise卷积核级的量化,尽管可以获得更好的量化精度,但是在硬件上部署时由于更多量化参数的存在无疑将导致更频繁的数据访问,而这可能是得不偿失的。Cai等人也提出了一种无数据量化方案ZeroQ[62],但不同于前面的DFQ,该方案中通过生成蒸馏数据,然后利用生成的数据来实现量化,同时基于蒸馏数据,还提出了一种分析层敏感度的方法来实现混合精度量化。Fang等人指出之前的训练后量化在量化位宽极低的情况下精度损失较大,因此提出了一种分段线性量化方案PWLQ[63],通过寻找最优分段断点,仅需少量的校准数据,即可完成训练后量化,但是该方案的实现需要特殊的硬件支持。

Wu等人提出的EasyQuant[64]中通过精细搜索每层量化参数的缩放因子,来提升量化网络的精度,最终在部分网络上实现了接近8-bit量化精度的7-bit量化,其量化处理的流程如图1.4中所示。2020年Nagel等人提出的AdaRound量化方案[65]中从一个新的视角对PTQ方法进行了优化,即通过理论推导证明了之前量化相关研究中采用的舍入策略并非最优的,即传统的四舍五入函数在量化中不是最优的,鉴于此,提出了一种用于训练后量化的舍入函数自适应方法。Li等人提出的BRECQ量化方案[66]中通过应用块重构等优化处理,在4-bit离线量化情况下,实现了接近同等位宽下量化感知训练得到的效果。

图1.4  EasyQuant量化处理流程图[64] 

尽管近年来训练后量化已经在8-bit及以上位宽的量化中取得了不错的量化效果,但是在较为复杂的目标检测任务上,在4-bit及以下位宽的量化中仍然存在较大的精度损失,因此,目前在工业落地中应用较多的是表1.1中的第三级量化方案,即不修改网络结构的量化感知训练,希望通过模拟量化的重新训练,来尽可能减小由低位宽造成的精度损失。

目前,在量化感知训练领域,最为经典的工作是由Google公司的Jacob等人于2017年提出的Integer-Only量化方案[67],在该方案中首次提出了一个较为完善的量化训练与推理框架,将32-bit浮点数量化为8-bit定点数,同时在分类任务与检测任务上均进行了实验来验证量化效果,后续大多的量化工作均采用了该方案中同样的思路;此外,在Tensorflow[68]以及Pytorch[69]等深度学习框架中也广泛采用了类似的量化方案。此后,Zhang等人提出的LQ-Nets[70]中提出了一种可兼容任意位宽的量化算法,但该量化为非均匀量化方案,一般需要特殊的硬件来支持其运算。Choi等人提出的量化算法PACT[71]中认为常用的激活函数ReLU会导致后一层输入的范围逐渐变大,进而导致激活值量化到低位宽时精度损失更大,因此提出了一种为激活值量化服务的激活函数替换原本的ReLU函数。随后,Li等人在前面量化工作[67]的基础上,提出了一种全量化方案FQN[72],主要是三个Tricks的整合来提升量化网络的精度,即BN层统计参数的冻结、选取一定比例的激活值以及细化权值的量化粒度为通道级,最终在目标检测任务上实现了较好的量化效果。

尽管这些量化算法相较于前面的PTQ类量化已经大幅减小了在低位宽上的精度损失,但是上述的几个量化方案都有一个共同点,即所有量化参数在训练过程中的更新都是通过统计输入的激活值与权值的变化来完成,并没有真正做到根据模型的损失值来更新量化参数,因此,这类量化方案还是次优的。鉴于此,Esser等人提出的方案LSQ[73],即解决了上述痛点,使得所有激活值与权值对应的量化参数都是真正可学习的参数,再次实现了量化模型精度的提升。随后,在该工作的基础上,Bhalgat等人提出的LSQ+[74]、Jain等人提出的量化方案[75]以及Zhao等人提出的LLSQ[76]均进一步实现了量化效果的提升,例如LSQ+中即在LSQ对称量化的基础上进一步实现了激活值的非对称量化。随后在2021年,Choi等人再次提出一种用于非负激活值量化的方案Log-scale[77],是一种非均匀量化方法,Chen等人则是在[67]的基础上提出了一种专用于目标检测任务量化的方案AQD[78],尽管取得了较好的效果,但该方案中涉及到模型BN层结构的调整,不具备通用性。

为了进一步提升量化后模型的精度,一些研究中在量化的基础上叠加了一些别的优化方案,例如,Polino等人[79]以及Kim等人[80]所提的模型压缩方案中均在量化过程中耦合了知识蒸馏方法。此外,还有研究中通过混合量化来提升模型精度,即对模型的不同层之间,或者激活值与权值之间应用不同的数据位宽来量化,例如对不同层采用不同量化位宽的,就需要先量化出不同层之间的敏感度差别,以此来决定哪些敏感层使用高位宽,哪些不敏感层使用低位宽,这方面做的较好的有Dong等人[81][82]以及Yao等人的相关工作[83]。

最后,与本研究中息息相关的量化研究即在目标检测任务上进行量化的部分工作,除了前文所述的[72]、[77]以及[78]中在目标检测网络上开展实验外,Wei等人也通过耦合量化与知识蒸馏来训练得到一个极小的用于目标检测任务的卷积神经网络[84],此外,Chin等人[85]针对激活值偏移问题,提出了一种自适应量化方法,并在目标检测网络上开展了实验,但与前者一样,这两个方案中均仅对卷积层进行了量化处理。

2  DCNN模型剪枝算法相关研究综述

如前所述,神经网络模型的量化通过更换数据类型来改变运算方式与所需的存储,但并不会减少模型的参数量与计算量,因此还需要一种压缩方法能够直接减少DCNN的参数量与计算量。模型剪枝应运而生,最早是由Lecun等人在1989年提出的OBD方法[86]中指出模型中存在大量冗余的参数,可以通过筛选并去除这部分参数来减少参数与计算量,最终形成了最早的模型剪枝方法。模型剪枝,顾名思义,即将神经网络模型中的部分元素从模型中剪除掉,以此来达到压缩模型、减少计算量的目的。通过不同的角度,可以划分出多种剪枝类型,其中最常见的即从剪枝粒度进行划分,可分为非结构

  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Joejwu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值