Ⅰ 深度学习模型压缩算法综述
深度学习模型的压缩与加速是当前研究的焦点,旨在解决大规模模型在资源有限设备上的部署难题。本文基于两篇综述文章,对剪枝与量化、低秩因子分解、迁移/压缩卷积滤波器和蒸馏学习这四类主要方法进行了总结。
首先,剪枝与量化通过删除冗余参数和降低精度要求来减小模型规模。量化与二值化将权重由浮点数减少至1或2位,但对大型CNN的精度影响较大。网络剪枝则涉及删除不重要连接,如全连接层和卷积层的权重,Han et al.的三步法是常见的方法,但需多次迭代和微调以补偿精度损失。
低秩因子分解利用矩阵分解技术,如SVD和Tucker分解,将大矩阵缩小,减少内存占用。然而,实现过程复杂,且局部分解限制了全局参数压缩的潜力。
迁移/压缩卷积滤波器通过卷积滤波器的变换,如Shang et al.和Zhai et al.的研究,实现对滤波器的压缩,简化模型结构。然而,这种方法在特定网络架构上的适用性和稳定性仍有待提高。
最后,蒸馏学习通过训练小模型(学生模型)来利用大模型(教师模型)的知识,如FitNets和Lan et al.的ONE方法,降低了计算成本。但这也存在对特定任务限制和性能竞争性较弱的问题。
尽管这些方法都有其优点,但模型压缩和加速仍面临诸多挑战,如对特定任务的适应性、计算成本的平衡以及理论上的指导等。后续研究将继续探索更高效、更灵活的压缩策略,以满足资源受限设备的需求。
Ⅱ 深度学习模型压缩方法综述
深度学习模型压缩技术旨在将庞大的复杂模型转化为轻量级模型,以适应嵌入式设备的有限资源。本文将从模型压缩技术概述、主要方法及实例分析进行综合阐述。
模型压缩问题定义在于,通过减小模型的参数量和计算复杂度,同时保持其性能不显著下降,以适应设备计算资源的限制。模型压缩技术分为“前端压缩”和“后端压缩”,前者几乎不改变网络结构,仅减少网络层数或滤波器个数,后者则对网络结构进行大幅度改变,可能导致原有深度学习库或硬件不兼容,维护成本较高。
知识蒸馏是将复杂模型的特征和知识传递给小型模型的技术,使小型模型具备复杂模型的性能,同时保持快速计算速度。其关键在于设计监督特征,如Soft Target(软标签)提供类间相似性,或使用大模型的中间层特征图或attention map作为指导信息。
轻量化模型架构设计强调在保留性能的同时优化模型结构,但缺乏广泛通用准则,需结合经典论文和硬件平台特性进行实际部署。设计高效CNN架构需考虑深度可分离卷积block的计算效率,以及在不同NPU芯片平台上的性能测试结果。
模型剪枝技术旨在剔除权重矩阵中相对“不重要”的权值,降低计算资源消耗和提高实时性。剪枝算法通过迭代过程逐步优化模型,直至达到目标精度。根据粒度不同,剪枝算法可粗分为四种类型。
模型量化将神经网络的浮点算法转换为定点,旨在减少计算资源需求。量化过程分为将模型从FP32转换为INT8的算术过程和使用INT8进行推理两部分。量化方法主要有三种,依据量化阶段不同分为两种类型。加快推理速度的量化方法包括低精度量化、权重和激活量化等。
总结,模型压缩方法包括知识蒸馏、轻量化模型架构设计、模型剪枝和模型量化。知识蒸馏通过传递复杂模型的知识给小型模型,轻量化模型架构关注高效设计,模型剪枝减少冗余参数,模型量化将浮点模型转换为定点模型,共同目标是提升模型在嵌入式设备上的部署效率与性能。
Ⅲ 什么是模型压缩、模型剪枝、模型蒸馏、模型稀疏化
模型压缩(Model Compression)旨在减小机器学习模型的大小、复杂度和计算量,以便在资源受限的设备上部署和运行,提高模型的推理速度和效率。常见技术包括模型剪枝、模型蒸馏、模型稀疏化等。
模型剪枝(Model Pruning)是模型压缩技术之一,通过去除模型中不必要的神经元、连接、层等,减小模型复杂度和参数数量。剪枝可以分为训练时实时剪枝和训练后离线剪枝。剪枝技术可以将大型模型压缩至适合在资源受限设备上运行的大小,扩展了机器学习应用的可能性。
模型蒸馏(Model Distillation)是一种知识转移技术,将大型深度神经网络的复杂知识“蒸馏”至小型模型中。通过训练小型模型使其学习大型模型的预测结果,小型模型可以在资源受限设备上实现高效推理,同时具有与大型模型相近的性能和泛化能力。模型蒸馏技术包括加权蒸馏、多步蒸馏、自适应蒸馏等变体。
模型稀疏化(Model Sparsity)优化深度神经网络,通过减少或去除不必要的参数或层,获得更轻量化的模型,提高推理速度和泛化能力。模型稀疏化方法包括参数裁剪等技术。稀疏化可以降低模型复杂度,但可能影响性能,需根据实际应用进行权衡。
模型压缩、模型剪枝、模型蒸馏、模型稀疏化等技术,通过减小模型大小、复杂度和计算量,扩展了机器学习模型在资源受限场景的应用范围,提升了模型的推理速度和泛化能力。
Ⅳ 详解4种模型压缩技术、模型蒸馏算法
本文将深入解析深度学习中的四种模型压缩技术和模型蒸馏算法,包括Patient-KD、DistilBERT、DynaBERT和TinyBERT。
在模型压缩的需求中,深度神经网络虽然具有强大的表达能力,但其训练成本和模型大小增加,对部署在资源有限的端侧设备如手机和IoT设备构成挑战。为减小模型体积、提高速度和能耗,我们通常采用参数量减少、网络结构优化等手段。然而,直接设计小模型难度大,模型压缩技术如蒸馏和量化则能在经典模型基础上提升性能。
以蒸馏和量化为例,通过MobileNetV3_large模型,我们观察到使用蒸馏后的模型精度显著提升,而结合蒸馏和量化更进一步优化了精度和推理速度。模型压缩的基本方法包括知识蒸馏、权重共享和低秩分解等。
Patient-KD是为缓解BERT模型在资源需求上的挑战而提出的,通过让学生模型从教师网络的多个中间层而非仅最后一层学习,改善了泛化能力。实验结果表明,Patient-KD在GLUE测试集上表现出色,尤其在某些任务上接近或超过BERT-Base。
DistilBERT通过知识蒸馏,将大型BERT模型的知识迁移到轻量级模型中,显著减小了参数量和计算成本,同时保持了大部分性能。实验结果显示DistilBERT在GLUE数据集上的表现优于BERT,且速度提高。
DynaBERT提出了一种自适应宽度和深度的动态模型,可以根据任务需求动态调整网络结构,提供了更大的灵活性。实验结果显示,DynaBERT模型在大小、速度和性能上都具有优势。
TinyBERT针对BERT进行了知识蒸馏,尤其是Transformer层、嵌入层和预测层的蒸馏,显著缩小了模型,提高了推理速度。在GLUE基准上,TinyBERT展示了显著的性能提升。
Ⅳ 深度学习模型压缩方法:知识蒸馏
知识蒸馏是深度学习模型压缩方法中的一种,通过教师模型指导学生模型训练,让学生模型学习到教师模型的知识,以达到或媲美教师模型的泛化能力。其原理在于,使用一个提前训练好的复杂模型(教师模型)在相同的数据下,将教师网络对该样本的预测值作为学生模型的预测目标,以此让学生模型学习到教师模型的泛化能力。知识蒸馏的过程涉及知识的多种分类,包括输出特征知识、中间特征知识、关系特征知识和结构特征知识,分别对应不同的学习目标。蒸馏机制包括离线蒸馏、在线蒸馏和自蒸馏三种方式,各有优缺点。师生网络结构是知识转移的一般载体,深度和宽度的复杂性要求知识从较深和较宽的神经网络转移到较浅和较细的神经网络。蒸馏算法有对抗蒸馏、多教师蒸馏、交叉模式蒸馏、基于图形的蒸馏、无数据蒸馏、量化蒸馏等,各有特点。蒸馏流程包括四个步骤:知识的获取、知识的提炼、高温蒸馏和损失函数的计算。
Ⅵ 知识蒸馏 | 模型压缩利器_良心总结
最近利用知识蒸馏的方法,对业务中的性能有了可观的提升,因此在这里总结一波。本文主要从宏观的角度分析一下各个蒸馏算法的蒸馏方式,具体细节可以根据兴趣阅读论文~ 知识蒸馏是一种模型压缩常见方法,用于模型压缩指的是在teacher-student框架中,将复杂、学习能力强的网络学到的特征表示“知识蒸馏”出来,传递给参数量小、学习能力弱的网络。从而我们会得到一个速度快,能力强的网络,因此这是一个概念上的模型压缩方案。从另一个角度来说,蒸馏可以使得student学习到teacher中更加软化的知识,这里面包含了类别间的信息,这是传统one-hot label中所没有的。由于蒸馏中软化标签的本质,因此蒸馏也可以被认为是一种正则化的策略。总结来说,知识蒸馏除了能够学习到大模型的特征表征能力,也能学习到one-hot label中不存在的类别间信息。现有的知识蒸馏方法主要侧重于两点: 从teacher的什么位置学习 和 用什么方式学习 。以下的总结图概述了本文要介绍的蒸馏方法。
目录结构:
(1)KL:知识蒸馏:蒸馏开山之作
https://arxiv.org/pdf/1503.02531.pdf
如上图所示,本文中直接利用KL散度来衡量教师模型和学生模型的输出分布,通过最小化KL散度的方式,使得学生模型的输出分布能够尽可能的逼近教师模型,从而实现知识蒸馏的目的。KL散度是一种衡量两个概率分布之间的差异的数学概念,有不懂的同学请出门左拐网络一下,右拐也行Google一下。
(2)FT:相关性因子加权学习法
https://arxiv.org/pdf/1802.04977.pdf
(3)PKT:概率分布学习法
https://arxiv.org/pdf/1803.10837.pdf
上述两篇文章的作者认为学生一般都是不聪明的,为了让学生能够更好的理解教师模型,FT算法这篇文章提出了一种新的知识转移方式,如图所示,利用卷积运算对教师模型的输出进行编码,并解码(翻译)给学生。而位于学生模块部分也添加一个卷积操作,用来学习翻译后的教师知识。实验证明这种方式要比直接学习效果好。PKT算法这篇文章提出了另一种新的知识转移方式,如图所示,该文章让学生模型学习教师模型的概率分布,使得整体的学习更加容易,更鲁棒。作者提出了一种通过匹配数据在特征空间中的概率分布进行知识蒸馏,PKT算法的另一个优势是该方法可以直接转移不同架构和维度层之间的知识。
(4)RKD:关系型学习法
https://arxiv.org/pdf/1904.05068.pdf
(5)CC:多输入联系型学习法
https://arxiv.org/pdf/1904.01802.pdf
所谓的单打独斗就是一个样本进行自我学习,单打独斗的蒸馏方法使得学生模型只能学习教师模型的输出表现,无法真正学习到教师模型的结构信息。而这两篇文章的作者都提出了多个样本之间进行合作学习的蒸馏学习方法,使得学生模型能够更好的学习到教师模型的结构信息。RKD关系型学习算法的核心是以多个教师模型的输出为结构单元,取代传统蒸馏学习中以单个教师模型输出学习的方式,利用多输出组合成结构单元,更能体现出教师模型的结构化特征,使得学生模型得到更好的指导。CC多输入联系型学习法在上述RKD算法的基础上,为了更好的扩大类间差异,更好的缩小类间距离,CC算法提出了两种采样方法:包括均衡类别采样法和均衡超类别采样法。所谓的均衡类别采样法,即假设每个batch大小为48,则这48个样本分布来自于6个类别,每个类别8个样本,使得整体的学习样本不像RKD算法那样是随机的。
(1)Fitnet:阶段性知识蒸馏
https://arxiv.org/pdf/1412.6550.pdf
FItnet这篇文章首次提出了从教室模型的中间层去进行蒸馏学习,而不仅仅关注教室模型的输出。因为通过中间层的引导,使得学生模型进行了提前学习,使得最终的蒸馏学习效果变得更好。
(2)VID:互信息学习法
https://arxiv.org/pdf/1904.05835.pdf
(3)SP:相似性矩阵学习
https://arxiv.org/pdf/1907.09682.pdf
(4)AT:注意力学习法
https://arxiv.org/pdf/1612.03928.pdf
为了更好的表征神经网络中间层的特征,如上图所示,本文列举了三种不同形式的用于更好抽象的表征中间层特征的新的蒸馏形式。其中VID互信息学习法,将中间层知识蒸馏的最优性能定义为最大化教师和学生网络之间的互信息。那么为什么通过最大化互信息可以使得蒸馏学习变得有效呢?首先作者对互信息做了定义:互信息为[教师模型的熵值] - [已知学生模型的条件下的教师模型熵值]。而我们又有如下常识:当学生模型已知,能够使得教师模型的熵很小,这说明学生模型以及获得了能够恢复教师模型所需要的“压缩”知识,间接说明了此时学生模型已经学习的很好了。而这种情况下也就是说明上述公式中的熵很小,从而使得互信息会很大。作者从这个角度解释了为什么可以通过最大化互信息的方式来进行蒸馏学习。而在SP相似性矩阵学习法中,作者提出了一种新的知识蒸馏形式,该方法是作者观察到相似语义的输入往往会使得神经网络输出相似的激活模式这一现象启发得到的。该知识蒸馏方法被称为保持相似性知识蒸馏(SPKD),该方法使得教师网络中相似(不同)激活的输入样本对,能够在学生网络中产生相同(不同)的激活,从而指导学生网络的学习。而在AT注意力学习法中,作者认为注意力在人类视觉体验中起着至关重要的作用。以图像分类为例,注意力地图展示了学习完成后的网络模型更关注于图像的哪个区域,是网络模型学习成果的体现。本文通过迫使学生模型模仿强大的教师模型的注意力特征图,来显著提高学生模型的性能。为此,本文提出了基于激活注意力地图的蒸馏法。
(5)NST:基于滤波器的知识蒸馏
https://arxiv.org/pdf/1707.01219.pdf
(6)FSP:授之以鱼不如授之以渔
http://openaccess.thecvf.com/content_cvpr_2017/papers/Yim_A_Gift_From_CVPR_2017_paper.pdf
和之前对中间层特征进行直接学习的方式不同,本文提出了一个偏哲学的论点:授之以鱼不如授之以渔。具体来说就是,如上图所示,本文将教师模型网络层与层之间的映射关系作为学生网络学习的目标,而不是像之前提到的直接对教师模型的中间结果进行学习。通过让学生学习这种获得特征的方法,而不是直接学习特征本身,文章的结果显示,这种方式确实有助于提高学生模型的鲁棒性。
(1)AB:激活边界学习
https://arxiv.org/abs/1811.03233.pdf
(2)利用对抗样本进行激活边界学习
https://arxiv.org/abs/1805.05532.pdf
在分类任务中,小模型真正的缺陷更多的在于对边界样本(难例样本)的分类困难。而这真是我们在分类任务中最关心的问题。而教师模型处理边界的能力一定是要优于学生模型的。因此尝试用学生模型学习教师模型的边界分布,这将是蒸馏学习的新思路。本部分列举了两种不同的边界学习方法。AB激活边界学习法,通过最大化边界误差的方式,来引导学生模型学习更强的边界约束能力。利用对抗样本进行边界激活学习的方法,首先定义一个基类并通过基类找到各个类别中的对抗边界,最终通过对抗边界样本进行蒸馏学习。
(1)be your own teacherr
https://arxiv.org/pdf/1905.08094.pdf
(2)强制拉近类内距离:regularzing class-wise
https://arxiv.org/pdf/2003.13964.pdf
(3)类内的鲁棒性学习:Data-Distortion Guided
https://www.researchgate.net/publication/335476911_Data-Distortion_Guided_Self-Distillation_for_Deep_Neural_Networks
由于我们不一定可以在所有任务中都顺利的获取教师模型,有的大模型由于数据的缺失,很难被正常的训练出来。基于这种情况,很多研究者提出了自我学习的策略。简单来说该策略就是自己作为自己的老师,进行自我优化。本部分列举了三种自学习的方式。be your own teacher这篇文章将网络较深部分的知识压缩到较浅部分,也就是说该蒸馏策略的教师模型和学生模型来自与同一个模型,这大大降低了蒸馏学习的复杂度,并且通过增加额外的训练检测模型,在不增加前向推理时间的前提下提升了自我学习的能力。举例来说,如上图中以resnet50为例,在每个block之后都接出一个bottleneck作为隐藏层的监督输出模块,并接出一个全连接层作为每个子模块的子分类器。每个子分类器都作为一个小的学生模型,其对应的教师模型为主分类层的输出,最终实现自我蒸馏的学习。另外两篇文章的思路主要从同一个类内的样本出发进行自我学习。其中强制拉近类内距离这篇文章,在训练的过程中,首先我们会从数据迭代器中提取batch1大小的数据,同时选出和当前batch1中类别相同的样本形成batch2,并将两个batch的样本组合起来进行联合训练。具体来说就是每一此计算loss时,从batch1和batch2中各挑选出一个同类样本,在loss计算中尽可能的是的这两个同类样本的输出分布一致,这种方式是一种广义上的自我学习的策略,且这种训练方式能够强制减小类内的差异,且可以利用这种方式减小某些过度自信的异常值的预测。其中增强类内鲁棒性这篇文章,也是从对同一个类别的样本进行联合学习,具体操作如下:对输入batch中每个图片利用不同的数据增强方式增强层两份输入,这两份输入的标签为同一个类别,将两份输入特征concat之后通过卷积层提取全局特征,并将得到的特征向量进行对应的切分,在训练过程中通过最小化切分后特征向量间的差异,从而增强同一个类内的多样性提升鲁棒性,该过程也可以被认为是自己和自己学习。
(1)DML:互相学习
https://arxiv.org/pdf/1706.00384.pdf
(2)知识嫁接
https://arxiv.org/pdf/2001.05868.pdf
与自学习类似的是互相学习策略中不存在教师模型,与自学习不同的是互相学习的方式通用是多个模型之间的学习,而自学习仅仅只有一个模型。其中DML:互相学习这篇文章就是一种典型的互相学习的方式,DML是在训练过程中,几个需要反向传播的待训学生网络协同学习,互相传递知识。每个互相学习的网络都有一个标准的分类Loss和互学习Loss,其中互学习Loss是一个KL散度。 具体而言,两个网络的softmax输出为p1,p2.则互学习的意义在于,对于Net1(Net2亦然),对了提高其泛化能力,使用Net2的p2作为一种后验概率,然后最小化p1,p2的KL散度。而知识蒸馏这篇文章更像是一种广义上的互相学习方法,该文章的主要是思想是并行地训练多个网络,对所有网络的参数进行重要性排序,并另一个并行网络中的更有效的权重替换到当前网络的不重要权重的位置,在训练过程中通过这种重要性权重的互相替换实现互相学习。
(1)GAN对抗学习
https://arxiv.org/pdf/1709.00513.pdf
(2)无监督对抗学习
https://arxiv.org/pdf/1904.01186.pdf
本部分主要列举了两种利用GAN网络进行蒸馏的文章。GAN对抗学习这篇文章就是典型的利用生成对抗网络的例子,具体来说,学生网络作为生成器,生成对应的输出结果,而教师网络用来表征GT信息,而鉴别器主要被用来鉴别学生网络的输出和教师网络的输出,最终学习的目的就是是的学生网络能够欺骗鉴别器,是的鉴别起无法区分出学生网络和教师网络的输出。最终实现学生网络学习到了教师网络的输出特征和分布。而无监督对抗学习这篇文章的出发点有点不一样,由于一些实践问题(如隐私、法律等问题),给定深度网络的训练数据往往不可用,除了一些接口之外,给定网络的架构也是未知的。基于此,本文提出了一种利用生成对抗网络训练高效深度神经网络的新框架。讲预先训练好的教师网络看作一个固定的鉴别器,利用该鉴别器产生的训练样本可以得到最大的鉴别结果。然后,利用生成的数据和教师网络,同时训练出模型尺寸较小、计算复杂度较低的高效网络。