数据压缩,算法的综述
模型轻量化方法综述

模型轻量化方法综述随着深度学习的不断发展,大规模深度神经网络在各个领域的应用变得越来越普遍。
但是,由于深度神经网络的参数量庞大,导致计算成本高、存储成本高,甚至还会在嵌入式设备等资源受限的场景中限制其应用。
因此,轻量化模型的研究变得越来越重要。
本文将综述当前主流的模型轻量化方法,并按照以下列表进行分类:## 去冗余1. 参数量减少:参数量较少的模型在训练和推理时均具有更快的速度和更低的计算成本。
解决方法包括结构剪枝、低秩分解、知识蒸馏等。
2. 运算量减少:通过减少复杂度较高的运算过程,从而实现模型轻量化。
解决方法包括深度可分离卷积、深度可分离分组卷积、宽度可分离卷积等。
3. 数据冗余压缩:通过数据压缩算法来减小网络的体积,并且可以在保证网络精度的情况下,大幅度减轻计算量。
解决方法包括离线量化、在线量化、低比特位宽网络等。
## 蒸馏1. 蒸馏方法:通过将一个大模型的知识迁移到一个小模型上,来达到模型轻量化的效果。
解决方法包括基于模型的蒸馏、任务导向的蒸馏、特征蒸馏等。
2. 蒸馏框架:提供了一些框架和工具,以便开发者能够轻松实现模型蒸馏,并且使蒸馏过程更加高效便捷。
解决方法包括TensorRT、NNAPI、Paddle Lite等。
## 聚合1. 同质化聚合:通过在不同设备或不同环境下,训练不同的模型,然后将这些模型第一时间聚合起来,来得到一个在多种情况下都表现良好的轻量化模型。
解决方法包括FedAvg、FedProx、FedOpt等。
2. 非同质化聚合:利用异构计算设备的计算资源,将不同的模型划分到不同的设备上,然后在中央服务器上进行聚合以获得更好的性能。
解决方法包括EdgeCluster、DGL和cluster-GCN等。
综上所述,轻量化模型的研究对于实现计算机视觉、自然语言处理和其他深度学习任务等上的快速应用至关重要。
在未来,随着深度学习技术的不断成熟,轻量化模型将会越来越受到青睐。
自动语音识别模型压缩算法综述

第62卷 第1期吉林大学学报(理学版)V o l .62 N o .12024年1月J o u r n a l o f J i l i nU n i v e r s i t y (S c i e n c eE d i t i o n )J a n 2024研究综述d o i :10.13413/j .c n k i .jd x b l x b .2023058自动语音识别模型压缩算法综述时小虎1,袁宇平2,吕贵林3,常志勇4,邹元君5(1.吉林大学计算机科学与技术学院,长春130012;2.吉林大学大数据和网络管理中心,长春130012;3.中国第一汽车集团有限公司研发总院智能网联开发院,长春130011;4.吉林大学生物与农业工程学院,长春130022;5.长春中医药大学医药信息学院,长春130117)摘要:随着深度学习技术的发展,自动语音识别任务模型的参数数量越来越庞大,使得模型的计算开销㊁存储需求和功耗花费逐渐增加,难以在资源受限设备上部署.因此对基于深度学习的自动语音识别模型进行压缩,在降低模型大小的同时尽量保持原有性能具有重要价值.针对上述问题,全面综述了近年来该领域的主要工作,将其归纳为知识蒸馏㊁模型量化㊁低秩分解㊁网络剪枝㊁参数共享以及组合模型几类方法,并进行了系统综述,为模型在资源受限设备的部署提供可选的解决方案.关键词:语音识别;模型压缩;知识蒸馏;模型量化;低秩分解;网络剪枝;参数共享中图分类号:T P 391 文献标志码:A 文章编号:1671-5489(2024)01-0122-10C o m p r e s s i o nA l g o r i t h m s f o rA u t o m a t i c S pe e c h R e c o g n i t i o n M o d e l s :AS u r v e yS H IX i a o h u 1,Y U A N Y u p i n g 2,L ㊆U G u i l i n 3,C H A N GZ h i y o n g 4,Z O U Y u a n ju n 5(1.C o l l e g e o f C o m p u t e rS c i e n c e a n dT e c h n o l o g y ,J i l i nU n i v e r s i t y ,C h a n gc h u n 130012,C h i n a ;2.M a n a g e m e n t C e n t e r o f B i g D a t aa nd Ne t w o r k ,J i l i nU n i v e r s i t y ,C h a n g c h u n 130012,C h i n a ;3.I n t e l l i g e n tN e t w o r kD e v e l o p m e n t I n s t i t u t e ,R &DI n s t i t u t e of C h i n aF A W G r o u p C o .,L t d ,C h a n gc h u n 130011,C h i n a ;4.C o l l e g e o f B i o l o g i c a l a n dA g r i c u l t u r a lE n g i n e e r i n g ,J i l i nU n i v e r s i t y ,C h a n gc h u n 130022,C h i n a ;5.S c h o o l o f M ed i c a l I n f o r m a t i o n ,C h a n g c h u nU n i ve r s i t y of C h i n e s eM e d i c i n e ,C h a ng ch u n 130117,C hi n a )收稿日期:2023-02-23.第一作者简介:时小虎(1974 ),男,汉族,博士,教授,博士生导师,从事机器学习的研究,E -m a i l :s h i x h @j l u .e d u .c n .通信作者简介:邹元君(1975 ),男,汉族,博士,教授,从事医药信息化的研究,E -m a i l :z o u y j @c c u c m.e d u .c n .基金项目:国家自然科学基金(批准号:62272192)㊁吉林省科技发展计划项目(批准号:20210201080G X )㊁吉林省发改委项目(批准号:2021C 044-1)和吉林省教育厅科研基金(批准号:J J K H 20200871K J ).A b s t r a c t :W i t h t h e d e v e l o p m e n t o f d e e p l e a r n i n g t e c h n o l o g y,t h en u m b e r o f p a r a m e t e r s i na u t o m a t i c s p e e c hr e c o g n i t i o nt a s k m o d e l s w a s b e c o m i n g i n c r e a s i n g l y l a r g e ,w h i c h g r a d u a l l y i n c r e a s e dt h e c o m p u t i n g o v e r h e a d ,s t o r a g e r e q u i r e m e n t s a n d p o w e r c o n s u m p t i o no f t h em o d e l s ,a n d i tw a s d i f f i c u l t t od e p l o y o n r e s o u r c e -c o n s t r a i n e dd e v i c e s .T h e r e f o r e ,i tw a s o f g r e a t v a l u e t o c o m p r e s s t h e a u t o m a t i c s p e e c h r e c o g n i t i o nm o d e l s b a s e d o n d e e p l e a r n i n g t o r e d u c e t h e s i z e o f t h em o d e sw h i l em a i n t a i n i n gt h e o r i g i n a l p e r f o r m a n c e a sm u c h a s p o s s i b l e .A i m i n g a t t h e a b o v e p r o b l e m s ,a c o m p r e h e n s i v e s u r v e y w a s c o n d u c t e do n t h em a i nw o r k s i n t h i s f i e l d i n r e c e n t ye a r s ,w h i c hw a s s u mm a r i z e d a s s e v e r a lm e t h o d s ,i n c l u d i n g k n o w l e d g ed i s t i l l a t i o n ,m o d e l q u a n t i z a t i o n ,l o w -r a n k d e c o m p o s i t i o n ,n e t w o r k p r u n i n g ,p a r a m e t e r s h a r i n g a n d c o m b i n a t i o nm o d e l s ,a n dc o n d u c t e da s ys t e m a t i c r e v i e wt o p r o v i d e a l t e r n a t i v e s o l u t i o n s f o r t h ed e p l o y m e n t o fm o d e l s o n r e s o u r c e -c o n s t r a i n e dd e v i c e s .K e yw o r d s :s p e e c h r e c o g n i t i o n ;m o d e lc o m p r e s s i o n ;k n o w l e d g e d i s t i l l a t i o n ;m o d e l q u a n t i z a t i o n ;l o w -r a n kd e c o m p o s i t i o n ;n e t w o r k p r u n i n g ;p a r a m e t e r s h a r i n g 近年来,随着人机智能交互的快速发展,自动语音识别(a u t o m a t i c s p e e c h r e c o gn i t i o n ,A S R )作为智能交互应用的一种关键技术,已经在各种应用场景下凸显重要作用,如在语音搜索㊁语音助手㊁会议记录㊁智能服务㊁机器人等方面均应用广泛.随着深度学习的发展,基于深度学习的方法表现出了比传统的如高斯混合模型㊁隐M a r k o v 模型等方法更优越的性能.但基于深度学习的语音识别网络,特别是端到端模型,通常有具有数百万甚至高达数十亿的参数,占用大量内存,在运行时也需要较大的计算资源,仅适用于部署在专业服务器上.例如,Q u a r t z N e t 模型包含1.89ˑ107的参数[1],C o n f o r m e rT r a n s d u c e r 语音识别模型包含1.188ˑ108的参数[2],基于T r a n s f o r m e r 的声学模型包含2.70ˑ108以上的参数[3].随着移动㊁家居㊁车载等智能设备的广泛使用,产生了巨大的资源受限设备智能交互需求.而语音作为人们日常交流最自然的方式,在智能交互中扮演着重要角色.通常语音识别模型在设备端的部署无需与服务器进行数据传输,将模型部署在本地设备上具有更好的实时性㊁安全性和隐私保护能力.但由于资源受限设备的存储空间有限,同时计算能力较弱,无法将庞大的深度学习语音识别模型在资源受限的环境中实际部署.如何在尽量保持性能的同时,减小模型的大小㊁降低运行延迟成为自动语音识别的重要课题.本文对近年来关于自动语音识别模型的压缩算法进行总结和综述,将其归纳为知识蒸馏㊁模型量化㊁网络剪枝㊁矩阵分解㊁参数共享以及组合模型几类方法,并进行了系统综述,为模型在不同条件和场景下的部署提供可选的解决方案.1 基于知识蒸馏的方法知识蒸馏,主要通过模仿高延迟㊁高精度的大型神经网络行为,训练得到低延迟的轻量神经网络.其中,高延迟㊁高精度的大型网络称为教师模型,低延迟的轻量网络称为学生模型.在知识蒸馏过程中,教师模型的知识迁移到学生模型,从而提高学生模型的性能,以获得低延迟㊁低内存㊁高性能的学生模型.一般的知识蒸馏过程如图1所示.首先,训练一个教师模型,根据输入特征输出软标签的概率分布;然后,学生模型通过软标签模仿教师模型的行为.软标签不仅包含了正确的类别分布,也反应了类似类别之间的关系,通常比独热编码的真实标签包含更丰富的信息.真实标签的使用通常对训练有益,因此可以将根据真实标签训练的语音识别损失与知识蒸馏损失相结合,共同进行学生模型的优化.传统的混合A S R 系统需要首先进行帧的对齐,然后再进行识别,而目前的主流方法已经发展到端到端模型,不再需要进行帧对齐,而是直接将输入语音转换为对应文本.端到端模型主要可分为连接时序分类方法(c o n n e c t i o n i s tt e m po r a lc l a s s i f i c a t i o n ,C T C )[4]㊁循环神经网络转换器(r e c u r r e n t n e u r a l n e t w o r kt r a n s d u c e r ,R N N -T )[5]㊁基于注意力的编码器-解码器(a t t e n t i o n -b a s e de n c o d e r -d e c o d e r ,A E D )[6]3类.因此按照被压缩的原始A S R 系统划分,基于知识蒸馏技术的压缩模型主要分为传统的混合A S R 压缩模型和端到端压缩模型,后者又包括C T C 压缩模型㊁R N N -T 压缩模型和A E D 压缩模型,主要方法如图2所示.下面将依次介绍这几类方法,最后介绍多个教师的知识蒸馏方法.传统的混合A S R 系统包括基于高斯混合和隐M a r k o v 的混合模型(G a u s s i a n m i x e dm o d e l -h i d d e n M a r k o vm o d e l ,GMM -HMM )[7],基于深度神经网络和隐M a r k o v 的混合模型(d e e p n e u r a l n e t w o r k s -h i d d e n M a r k o vm o d e l ,D N N -HMM )[8]等.已有学者应用知识蒸馏技术对传统的A S R 系统进行了模型压缩.如L i 等[9]首先尝试应用教师-学生学习方法对D N N -HMM 混合系统实现了语音识别蒸馏.D N N -HMM 混合系统的训练需要每个输入声学帧的输出标签,即进行帧对齐,所以帧级知识蒸馏是教师用来指导学生模型非常自然的方式.因此,文献[9]和文献[10]都是通过最大限度地减少教师和学生的帧级输出分布之间的K u l l b a c k -L e i b l e r (K L )散度进行帧级知识蒸馏.在训练中,只需优化学生321 第1期 时小虎,等:自动语音识别模型压缩算法综述图1 知识蒸馏的一般过程F i g .1G e n e r a l p r o c e s s o f k n o w l e d ge d i s t i l l a t i on 图2 基于知识蒸馏的方法F i g .2 M e t h o d s b a s e do nk n o w l e d ge d i s t i l l a t i o n 模型的参数,最小化K L 散度即等价于最小化交叉熵.但帧级训练未考虑语音数据的顺序性质,因此A S R 模型的序列训练会比帧级训练产生更好的性能[11].针对D N N -HMM 混合模型,W o n g 等[12]通过最小化最大互信息(m a x i m u m m u t u a l i n f o r m a t i o n ,MM I)损失与学生和教师假设级后验概率之间的K L 散度的加权平均值,并将假设后验分解为语言模型和声学模型,以调整混合A S R 架构中后验分布的动态范围,更好地进行序列训练,实现了序列级的知识蒸馏.C T C 损失函数的目标是最大化正确标签的后验概率,不执行严格的时间对齐.C T C 模型的后验概率分布是尖锐的,多数帧发出高概率的空白标签,只有少数发出非空白目标标签概率较高的帧可以有效地训练学生模型,因此将帧级知识蒸馏应用于基于C T C 的A S R 系统会降低性能[13].此外,由于C T C 无帧对齐的特点,因此即使对相同样本,出现尖峰的时间也不相同,使帧级知识蒸馏在优化时难以收敛[14].T a k a s h i m a 等[14]提出使用教师模型的N -b e s t 假设在C T C 框架中进行序列级知识蒸馏,将N -b e s t 假设的C T C 损失进行加权求和作为训练学生模型的蒸馏损失.这种方法能有效提升学生模型的性能,但需要对每个N -b e s t 假设计算C T C 损失,训练成本较高.文献[15]提出了基于格的序列级知识蒸馏方法,相比基于N -b e s t 的方法能抑制训练时间的增加.针对C T C 峰值时间的分歧,K u r a t a 等[16]通过在教师模型双向长短期记忆网络(b i -d i r e c t i o n a l l o n g s h o r t -t e r m m e m o r y ,B i L S T M )的帧窗口中,选择匹配学生模型单向长短期记忆网络(u n i -d i r e c t i o n a l l o n g s h o r t -t e r m m e m o r y ,U n i L S T M )当前帧的分布,放松帧对齐的严格假设.但基于B i L S T M C T C 模型中的峰值通常早于U n i L S T M C T C的情况,不具有普适性.因此,K u r a t a 等[17]进一步提出了引导C T C 训练,能明确地引导学生模型的峰值时间与教师模型对齐,在输出符号集合相同的情况下,可用于不同的架构.T i a n 等[18]设计了一种空白帧消除机制解决K L 散度应用于C T C 后验分布的困难,引入两阶段知识蒸馏过程,第一阶段利用余弦相似性执行特征级知识蒸馏,第二阶段利用提出的一致声学表示学习方法和空白帧消除机制执行S o f t m a x 级知识蒸馏.Y o o n 等[19]深入探索了异构教师和学生之间的知识蒸馏,首先使用表示级知识蒸馏初始化学生模型参数,利用帧加权选择教师模型关注的帧;然后用S o f t m a x 级知识蒸馏传输S o f t m a x 预测.文献[19]研究表明,在C T C 框架下蒸馏帧级后验概率分布,使用L 2损失比传统的K L 散度更合适,原因在于两个分布之间的L 2距离总是有界的,所以可提高蒸馏损失的数值稳定性.进一步,Y o o n 等[20]又在学生网络中添加多个中间C T C 层,采用文献[19]提出的S o f t m a x 级蒸馏将教师的知识迁移到中间的C T C 层.在R N N -T 模型中,由于其损失由编码器生成的特征和输出符号的所有可能对齐求和获得的负对数条件概率给出,所以需要更精妙地设计蒸馏损失才能实现这类模型的知识蒸馏.P a n c h a p a g e s a n 等[21]提出了一种基于格的蒸馏损失,该损失由教师和学生条件概率在整个R N N -T 输出概率格上的K L 散度之和给出.为提升效率,损失被计算为粗粒度条件概率之间的K L 散度之和,粗粒度条件概率指仅跟踪 y(在特定输出步骤的正确标签)㊁ 空白 标签(用于在时间方向上改变对齐)和其余标签的条件概率,将维度从输出词典大小粗粒度到三维.Z h a o 等[22]提出了一种基于对数课程模块替换的知识蒸馏方法,应用模块替换压缩教师模型,将包含较多层的教师模型替换为包含较少层的学生模型.该方法可以使学生和教师在梯度级别进行互动,能更有效地传播知识.此外,由于它只使用R N N -T损失作为训练损失,没有额外的蒸馏损失,所以不需要调整多个损失项之间的权重.V i gn e s h 等[23]探421 吉林大学学报(理学版) 第62卷索教师和学生编码器的共同学习以对R N N -T 语音识别模型进行压缩,共享共同解码器的同时协同训练,并指出其优于预先训练的静态教师.T r a n s d u c e r 的编码器输出具有很高的熵,并包含有关声学上相似的词片混淆的丰富信息,当与低熵解码器输出相结合以产生联合网络输出时,这种丰富的信息被抑制.因此引入辅助损失,以从教师T r a n s d u c e r 的编码器中提取编码器信息.R a t h o d 等[24]提出了对C o n f o r m e rT r a n s d u c e r 的多级渐近式压缩方法,将前一阶段获得的学生模型作为当前阶段的教师模型,为该阶段蒸馏出一个新的学生模型,重复上述过程直到达到理想尺寸.由于A E D 语音识别模型的解码相对更简单,所以知识蒸馏方法较容易推广到A E D 模型.W u 等[25]通过将m i x u p 数据增强方法与S o f t m a x 级知识蒸馏相结合,对S p e e c h -T r a n s f o r m e r 语音识别模型进行压缩,从数据角度优化蒸馏,使学生模型在更真实的数据分布上训练.M u n i m 等[26]研究了对于A E D 模型的序列级蒸馏,通过b e a ms e a r c h 为每个样本生成多个假设,然后将教师生成的假设作为伪标签在同一数据集上训练学生模型.L Ü等[27]认为目前流行的知识蒸馏方法只蒸馏了教师模型中有限数量的块,未能充分利用教师模型的信息,因此提出了一种基于特征的多层次蒸馏方法,以学习教师模型所有块总结出的特征表示.此外,还将任务驱动的损失函数集成到解码器的中间块中以提高学生模型的性能.多个不同的A S R 系统通常会产生给定音频样本的不同转录,对多个教师模型进行集成可以包含更多的补充信息,给学生模型提供多样的可学习分布,常具有更好的性能.C h e b o t a r 等[28]通过平均单独训练的神经网络模型的上下文相关状态后验概率构建高精度的教师模型,然后使用标准交叉熵训练学生模型.G a o 等[29]遵循交叉熵损失和C T C 损失与错误率没有直接关系的事实,考虑序列级错误率定义了3种蒸馏策略,将错误率指标集成到教师选择中,直接面向语音识别的相关评价指标蒸馏和优化学生模型.Y a n g 等[30]提出将集成教师模型的精髓知识传播到学生模型,只保留教师模型的前k 个输出,并且以多任务的方式使用教师模型产生的软标签和真实标签训练学生模型.2 基于模型量化的方法将模型权重和激活量化为低精度,能达到压缩神经网络㊁减少内存占用㊁降低计算成本的目的.量化方案按阶段不同可划分为后训练量化(p o s t -t r a i n i n gq u a n t i z a t i o n ,P T Q )和量化感知训练(q u a n t i z a t i o n -a w a r e t r a i n i n g ,Q A T )两种.后训练量化将已经训练好的浮点模型转换成低精度模型,在不重新训练网络的前提下获取网络的量化参数,通常会导致模型性能下降,其量化过程如图3(A )图3 模型量化流程F i g .3 F l o wc h a r t o fm o d e l qu a n t i z a t i o n 所示.量化感知训练在量化的过程中,对网络进行训练,从而使网络参数能更好地适应量化带来的影响,减轻性能损失,其量化过程如图3(B )所示.量化感知训练会向全精度模型中插入伪量化节点,伪量化节点先对权重或激活进行量化得到真实值对应的整数值,然后反量化回浮点表示,模拟量化产生的误差,使模型在训练时适应量化操作.在伪量化过程中产生的量化权重/激活,无法进行梯度计算,一般通过直通估计器(s t r a i g h t t h r o u gh e s t i m a t o r ,S T E )将梯度传回伪量化前的权重/激活上.无论是后训练量化,还是量化感知训练,其主要目的是为了确定缩放因子和零点两个参数,以用于对全精度(32-b i t)模型的量化.线性量化一般可表示为q =ro u n d r S +æèçöø÷Z ,(1)其中:r 表示32-b i t 浮点值;q 表示量化值;S 为缩放因子,表示浮点数和整数之间的比例关系;Z 表示521 第1期 时小虎,等:自动语音识别模型压缩算法综述零点,即F P 32浮点数r =0对应的量化值;r o u n d 为四舍五入取整操作.反量化公式为^r =S (q -Z ),(2)其中S 和Z 的计算方法为S =r m a x -r m i nq m a x -q m in ,(3)Z =r o u n d q m ax -r m a x æèçöø÷S ,(4)r m a x 和r m i n 分别为r 的最大值和最小值,q m ax 和q m i n 分别为q 的最大值和最小值.如上所述,基于模型量化的语音识别模型压缩方法也分为后训练量化方法和量化感知训练方法.后训练量化一般使用部分真实数据作为校准数据集对全精度模型进行前向传播,获得网络各层权重和激活的数据分布特性(如最大㊁最小值),用于后续量化参数的计算.M c G r a w 等[31]将模型参数量化为8-b i t 整型表示,采用均匀线性量化器,假设给定范围内的值均匀分布.首先找到原始参数的最小值和最大值,然后使用一个简单的映射公式确定一个比例因子,当乘以参数时,该比例因子在较小的精度尺度上均匀地扩展值,从而获得原始参数的量化版本.H e 等[32]使用一种更简单的量化方法,不再有明确的零点偏移,因此可假设值分布在浮点零的周围,避免了在执行较低精度的运算(如乘法)前必须应用零点偏移,从而加快了执行速度.不同于一般的后训练量化方法,K i m 等[33]提出了一种仅整数z e r o -s h o t 量化方法,先生成合成数据再进行校准,将合成数据输入到目标模型中以确定激活的截断范围,即使无法访问训练和/或验证数据,也能达到较好的性能.后训练量化无需微调模型,相对更简便;而量化感知训练通过微调网络学习得到量化参数,通常能保证量化损失精度更小,因此量化感知训练成为量化研究的主流.下面介绍采用量化感知训练对语音识别模型进行压缩的方法.针对伪量化方法在量化下计算权重梯度较难,从而忽略了反向传播过程中梯度计算的量化损失问题,N g u ye n 等[34]提出了一种基于绝对余弦正则化的新的量化感知训练方法,在模型权重上施加一个与量化模型相似的分布,将权重值驱动到量化水平.针对伪量化在训练时和推理时会产生数值差异的缺点(在训练时执行浮点运算,推理时执行整数运算),D i n g 等[35]用原生量化感知训练得到了4-b i t 的C o n f o r m e rA S R 模型,原生量化感知训练使用整数运算执行量化操作(如矩阵乘法),使训练和推理时的准确性没有任何区别.F a s o l i 等[36]研究表明,对基于L S T M 的大规模语音识别模型进行4-b i t 量化常会伴随严重的性能下降,为此提出了一种新的量化器边界感知裁剪(b o u n da w a r e c l i p p i n g ,B A C ),可根据d r o p o u t 设置对称边界,选择性地将不同的量化策略应用于不同的层.Z h e n 等[37]针对现有的量化感知训练方法需要预先确定和固定量化质心的缺点,提出了一种无正则化㊁模型无关的通用量化方案,能在训练期间确定合适的量化质心.上述研究都将模型量化为4-b i t 或8-b i t ,X i a n g 等[38]提出了二进制的深度神经网络(D N N )模型用于语音识别,并实现了高效的二进制矩阵乘法,使得量化结果能在真实的硬件平台上实现加速效果.图4 矩阵分解F i g .4 M a t r i xd e c o m po s i t i o n 3 基于低秩分解的方法通过近似分解矩阵或张量也是神经网络压缩的一种重要方法.主要思想是将原来大的权重矩阵或张量分解为多个小的权重矩阵或张量,用低秩矩阵或张量近似原有的权重矩阵或张量.如图4所示,将m ˑn 大小的权重矩阵A ,分解为m ˑr 大小的权重矩阵B 和r ˑn 大小的权重矩阵C 的乘积.一般要求r 远小于m 和n ,因此参数量由m ˑn 大幅度缩减到r ˑ(m +n ).一些学者采用低秩分解的方法进行了A S R 模型的压缩.如S a i n a t h 等[39]认为由于网络经过大量输出目标的训练以实现良好性能,因此网络参数大多数位于最终的权重层,所以对D N N 网络最后的621 吉林大学学报(理学版) 第62卷权重层使用低秩矩阵分解,将大小为m ˑn ㊁秩为r 的矩阵A 分解为A =B ˑC ,其中B 是大小为m ˑr的满秩矩阵,C 是大小为r ˑn 的满秩矩阵.M o r i 等[40]在端到端A S R 框架中对门控循环单元的权重矩阵进行T e n s o r -T r a i n 分解,能用多个低秩张量表示循环神经网络(R N N )层内的密集权重矩阵.按照T e n s o r -T r a i n 格式,如果对每个k ɪ{1,2, ,d }和k 维索引j k ɪ{1,2, ,n k },存在一个矩阵G k [j k ],则k 维张量W 中的每个元素可表示为W (j 1,j 2, ,j d -1,j d )=G 1[j 1]㊃G 2[j 2]㊃ ㊃G d -1[j d -1]㊃G d [j d ].(5)H e 等[41]采用了与上述文献类似的方法对D N N 语音识别模型进行压缩.X u e 等[42]在D N N 模型的权重矩阵上应用奇异值分解,对于一个m ˑn 的权重矩阵P ,对其应用奇异值分解,可得到P m ˑn =U m ˑn Σn ˑn V T n ˑn ,其中Σ是一个对角矩阵,P 的奇异值在对角线上以递增顺序排列.由于P 是一个稀疏矩阵,其奇异值大多数很小,所以可以只保留部分大奇异值,构成更小的对角矩阵,获得更大的压缩.4 基于网络剪枝的方法网络剪枝是对深度学习模型进行修剪的一种常见技术,其通过衡量权重的贡献确定保留或舍弃权重.剪枝方法可分为非结构化和结构化两类:非结构化剪枝去除单个权重;结构化剪枝按结构单元(如神经元节点㊁卷积核㊁通道等)对权重进行修剪.图5为网络剪枝的示意图,其中图5(C )以神经元节点剪枝为例对结构化剪枝进行了描述,相当于删除权重矩阵的整行或整列.剪枝由3个步骤组成:第一步是从预训练的完整神经网络进行初始化;第二步根据一定标准对某些权重连接进行删除,将网络逐步稀疏化;第三步微调得到的稀疏网络,一般将修剪过的权重及其梯度设置为零.交替执行第二步和第三步,直到达到预定的稀疏水平.基于网络剪枝的语音识别模型压缩方法也分为非结构化和结构化两类.图5 网络剪枝示意图F i g .5 S c h e m a t i c d i a g r a mo f n e t w o r k p r u n i n g非结构化剪枝也称为稀疏剪枝,因为其会导致稀疏的矩阵.Y u 等[43]利用非结构化剪枝对上下文相关的D N N -HMM 语音识别模型进行压缩,将执行减少D N N 连接数量的任务作为软正则化和凸约束优化问题的目标,并进一步提出了新的数据结构利用随机稀疏模式节省存储且加快解码.W u 等[44]提出了动态稀疏神经网络,无需单独训练就能获得不同稀疏度级别的模型,以满足不同规格的硬件和不同延迟的要求,该方法使用基于梯度的剪枝修剪权重,以权重ˑ梯度的L 1范数作为修剪标准.非结构化剪枝通常会产生具有竞争力的性能,但由于其不规则的稀疏性通常只有在特定的硬件上才能产生加速效果,而结构化剪枝的部署相对更容易.H e 等[45]提出了一种节点剪枝方法对D N N 语音识别模型进行压缩,提出了几种节点重要性函数对D N N 的隐层节点按分数排序,删除那些不重要节点的同时,将其对应的输入和输出连接同时删除.O c h i a i 等[46]利用G r o u p La s s o 正则化对D N N -HMM 语音识别系统中的D N N 隐层节点进行选择,测试了两种类型的G r o u p La s s o 正则化,一种用于输入权重向量,另一种用于输出权重向量.T a k e d a 等[47]集成了权重和节点活动的熵,提出了衡量节点重要性的分数函数,以用于不重要节点的选择,每个节点的权重熵考虑节点的权重数量及其模式,每个节点活动的熵用于查找输出完全不变的节点.L i u 等[48]通过剪枝学习一个双模式的语音识别模型,即剪枝㊁稀疏的流式模型和未剪枝㊁密集的非流式模型.在训练过程中两个模型共同学习,除作用在流式模型721 第1期 时小虎,等:自动语音识别模型压缩算法综述821吉林大学学报(理学版)第62卷上的剪枝掩码,两种模式共享参数,使用G r o u p L a s s o正则化进行结构化剪枝分组变量的选择.5基于参数共享的方法除上述常用的压缩方法,还有利用参数共享压缩语音识别模型的研究,其主要思路是使多个结构相同的网络层共享参数,从而达到降低模型参数的作用.其方法框架如图6所示,编码器由n个结构完全相同的编码器层构成,所有编码器层共享参数,因此编码器的参数量从nˑQ压缩到Q,Q为每个编码器层的参数量.T r a n s f o r m e r模型的编码器和解码器各自堆叠了多个块,更深的堆叠结构可获得更好的识别结果,但它会显著增加模型大小,也会增加解码延迟.L i等[49]在堆叠结构中共享参数,而不是在每层引入新的参数,以压缩T r a n s f o r m e r语音识别模型的参数,先创建第一个编码器块和解码器块的参数,其他块重用第一个块的参数.共享参数方法不会减少计算量,只减少了参数量,但缓存交换的减少也可以加快训练和解码过程.为减轻参数数量减少导致的性能下降,该方法中还引入了语音属性以增强训练数据.图6编码器参数共享F i g.6E n c o d e r p a r a m e t e r s h a r i n g6组合模型上述各方法从不同方面压缩模型:知识蒸馏通过改变模型结构压缩模型;模型量化通过将权重由全精度转换为低精度表示缩小模型大小,对激活量化能提高计算效率,达到进一步的加速;分解方法通过对权重分解压缩模型;网络剪枝通过丢弃不必要的权重压缩模型;参数共享通过重用参数压缩模型.这些方法都起到了缩小内存占用㊁降低计算成本㊁减少推理延迟的作用.一些研究人员尝试组合以上几种不同类型的方法,以获得更好的效果.如L i等[50]通过联合知识蒸馏和剪枝两种技术对D N N 模型进行压缩,通过优化交叉熵损失进行知识蒸馏,在剪枝过程中对所有参数进行排序,然后修剪低于全局阈值的权重.Y u a n等[51]结合剪枝和量化方法压缩语音识别模型,与大多数逐步将权重矩阵置零的方法不同,剪枝过程中保持修剪权重的值,通过掩码控制剪枝的元素,修剪的权重元素可在稍后的训练阶段恢复;这项工作探索了两种量化方案:混合量化和整数量化,两种方案都以后训练量化的形式出现.G a o等[52]利用跨层权重共享㊁非结构化剪枝和后训练量化压缩模型,通过对称量化将权重和激活映射到8位整数.L e t a i f a等[53]探索剪枝和量化方法的组合压缩T r a n s f o r m e r模型,分3个步骤完成:首先设置剪枝率,然后剪枝模型,最后量化模型.综上所述,深度学习由于具有强大的表示能力在语音识别方面取得了显著成果,增加模型容量和使用大数据集被证明是提高性能的有效方式.随着物联网的迅速发展,在资源受限设备上部署基于深度学习的语音识别系统有越来越多的需求,在许多场景都需要借助语音识别进行便捷㊁智能的交互,如智能家电㊁智能客服等.而面对设备内存㊁计算能力和功耗的资源受限,需要对模型进行压缩才能实现部署.本文对现有的自动语音识别模型压缩方法进行了全面的综述,根据所使用的压缩技术将其分为知识蒸馏㊁模型量化㊁矩阵分解㊁网络剪枝㊁参数共享和组合模型几种类型,并对不同类型方法进行了系统综述,可为语音识别模型的许多实际应用场景中如何在资源受限设备上实现压缩和部署提供有益的指导.。
关于模型压缩和量化技术的综述和比较研究

关于模型压缩和量化技术的综述和比较研究概述:随着人工智能技术的快速发展和应用的广泛普及,深度学习模型的规模和复杂度也越来越大,导致模型的存储和计算资源需求也越来越高。
为了解决这一问题,模型压缩和量化技术应运而生。
这些技术旨在通过减少模型的规模、参数和计算需求来提高应用系统的效率和速度,同时降低计算资源的成本。
本文将深入探讨模型压缩和量化技术的基本概念、常见方法和技术进展,并进行综述和比较研究。
一、模型压缩技术:1. 剪枝技术:剪枝技术通过减少模型中的冗余参数和连接来减少模型的规模和计算需求。
常见的剪枝方法包括结构剪枝、稀疏剪枝和通道剪枝等。
结构剪枝基于模型的结构信息来选择剪枝目标,稀疏剪枝通过设置参数的阈值将小于阈值的参数剪枝掉,通道剪枝则是通过对卷积层通道进行选择性剪枝。
2. 量化技术:量化技术通过减少模型中的参数位数来降低存储和计算需求。
常见的量化方法包括二值量化、多级量化和混合精度量化等。
二值量化将参数量化为-1和1两个值,大大降低了存储需求和计算复杂度;多级量化允许将参数量化为更多的离散值,从而在降低存储和计算需求的同时保持较高的模型性能;混合精度量化则将不同层或不同参数组件量化为不同的精度。
二、模型压缩和量化技术的比较研究:1. 性能比较:模型压缩和量化技术的核心目标是降低存储和计算需求的同时尽量保持模型的性能。
在性能比较方面,研究者通常采用准确率、Top-1和Top-5错误率以及模型速度和延迟等指标来评估不同技术的性能。
在实验比较中,可以选取一些主流的深度学习模型,如ResNet、VGG和MobileNet等,在不同数据集上进行测试,以全面评估模型的性能。
2. 存储和计算需求比较:模型压缩和量化技术的另一个重要指标是存储和计算需求。
研究者通常使用模型大小、参数量、网络层数、FLOPs(floating-point operations per second)和MACs(multiply-accumulate operations)等指标来评估不同技术的存储和计算需求。
数据压缩技术技术发展的现状及趋势

数据压缩技术技术发展的现状及趋势目前,数据压缩技术在许多领域得到广泛应用,包括图像压缩、音频压缩、视频压缩等。
其中,图像压缩是最常见的应用之一、目前常用的图像压缩算法有无损压缩算法和有损压缩算法。
无损压缩算法使得数据能够完全还原,而有损压缩算法则通过牺牲一部分数据质量来实现更高的压缩率。
在无损压缩算法中,广泛应用的算法有LZW算法(Lempel-Ziv-Welch算法)和Huffman编码算法。
在有损压缩算法中,JPEG和PNG是较为常用的格式。
此外,还有诸如WebP和JPEG 2000等新的压缩格式在发展中。
音频和视频压缩算法主要包括无损压缩算法和有损压缩算法。
无损压缩算法主要用于存储和传输音频文件,因为音频数据对质量的要求较高。
有损压缩算法则可以在保证较高音质的前提下实现更高的压缩率。
常用的音频压缩算法有FLAC和ALAC。
视频压缩算法由于数据量庞大,可以使用有损压缩算法来大幅度减少文件大小。
目前,常用的视频压缩算法有H.264和H.2651.高效的压缩算法:随着计算机性能的提升,压缩算法的复杂度也可以相应提高,从而实现更高的压缩率。
例如,近年来兴起的深度学习技术被应用于图像、音频和视频压缩算法中,通过神经网络模型的训练,可以提取更多的数据特征,从而实现更高效的压缩。
2.实时压缩:随着大数据和实时数据处理的需求不断增加,实时压缩成为一种重要趋势。
实时压缩需要具备较高的压缩和解压缩速度,以满足对数据实时性的需求。
针对此需求,一些基于硬件的压缩解压缩技术不断发展,如专用芯片的利用、硬件加速和流水线处理等。
3.跨平台和跨设备的压缩解压缩:随着移动设备和云计算技术的飞速发展,数据需要在各种不同平台和设备间进行传输和共享。
因此,跨平台和跨设备的压缩解压缩成为一种趋势。
例如,压缩算法的开放性和通用性变得越来越重要,以便在不同设备和平台上实现数据的无缝传输和共享。
4.低能耗和绿色压缩:数据中心和云计算等计算机设施消耗大量的能源,压缩技术在这方面也发挥了重要的作用。
几何模型的压缩算法综述

几何模型的压缩算法综述1 引言随着互联网逐渐成为虚拟现实和可视化系统的主流平台,人们对于三维几何模型的实时交互的要求越来越高,但是实时的基础却是计算机的处理能力要足够强,网络传输速度要足够快,而目前的网络速度还达不到这个要求。
同时,因为几何三维模型与三维场景越来越复杂、描述所需的数据量也变得越来越庞大,需要进行大规模复杂三维几何模型的存储、处理和传输。
若不能有效地压缩三维模型的数据并加快数据的传输,便很容易让使用者失去等待的信心。
因而,对于三维几何模型压缩的研究始终是图形学和虚拟现实领域的一项挑战性的任务[1]。
1995年,Sun Microsystems的Michael Deering在SIGGRAPH上发表了一篇题为GeometryCompression(几何压缩)的论文[2]后,三维几何数据压缩技术开始受到学术界关注,并取得了一些新进展。
研究的热点主要包括[3]:1)研究三维模型的高效、高质量的数据显示;2)研究有效的三维数据共享技术:如传输速度、安全性、冲突解决等技术;3)研究高效的几何压缩方法和编码技术,用于高速传输大量的设计和图形数据。
目前计算机三维图像处理中,主要有两种处理技术,一种是基于网格的三维模型,另外一种是近些年受到广泛重视的点云模型。
在三维几何模型的渐进传输过程中,不论哪种模型都要尽力一个化繁为简、再传输、再由简而繁的过程(见图1)。
而由于这两种模型采用了不同的存储与渲染的方法,所以在进行模型压缩和简化时也要用到不同的压缩技术。
图1几何模型的渐进传输(上一行为网格模型的绘制效果,下一行为点云模型的绘制效果)2 面向网格模型的压缩技术在计算机图形处理中,多边形表面模型(Polygon Surface Model)是使用最为广泛的一种处理方式。
描述三维物体时通常采用多边形网格表示模型。
虽然它具有有简单、灵活等特性,但如果在进行物体逼真描述时,模型数据量也是相当巨大的,其多边形的数目可达几百万甚至几千万,即使是高性能的图形工作站也难以及时处理[4]。
分布式压缩感知理论研究综述及应用

分布式压缩感知理论研究综述及应用1. 引言1.1 背景介绍分布式压缩感知是一种基于信号处理和信息理论的新型数据采样和重构方法。
在传统压缩感知理论中,信号在单一中心节点进行采样和重构,而分布式压缩感知将这一过程移到了多个分布式节点中。
这一理论的出现是为了解决大规模数据采集和传输中的效率和能耗问题,尤其是在物联网和无线传感器网络等场景中。
由于分布式压缩感知可以实现数据的高效压缩和传输,因此在各种领域都具有重要的应用价值。
在图像处理中,可以通过分布式压缩感知减少图像传输和存储的开销;在视频处理中,可以提高视频传输的效率和质量;在物联网中,可以减少传感器节点之间的通信量,延长网络寿命。
随着分布式压缩感知理论的不断发展和完善,其在各个领域的应用也将会更加广泛和深入。
本文旨在对分布式压缩感知理论进行综述,并探讨其在不同领域的应用现状和未来发展方向。
1.2 研究意义分布式压缩感知是压缩感知理论在分布式系统中的应用,其具有重要的研究意义。
分布式压缩感知可以有效减少传感器节点间的通信开销,在大规模传感器网络中能够节约能量和带宽资源。
通过在传感器节点上进行数据压缩和处理,可以减少数据传输的量,提高传感器网络的数据处理效率。
分布式压缩感知还可以提高数据传输的安全性,减少数据传输过程中被窃取或篡改的风险。
通过在分布式系统中引入压缩感知技术,可以实现对大规模数据的高效处理和分析,为物联网、图像处理和视频处理等领域提供了新的解决方案。
分布式压缩感知在提高传感器网络性能、优化数据传输、增强数据安全性等方面具有重要的研究意义。
1.3 研究目的研究目的是通过对分布式压缩感知理论进行深入研究,探索其在各领域的应用和潜在优势。
我们旨在揭示分布式压缩感知在信号处理中的工作原理和优势,进一步推动其在科学研究和工程实践中的应用。
我们希望通过对分布式压缩感知算法的分析和比较,为相关研究提供参考和指导,促进该领域的进一步发展。
我们还希望研究分布式压缩感知在图像处理、视频处理和物联网等领域的具体应用,探索其在解决实际问题中的有效性和适用性。
XML数据压缩技术综述

随 着互 联 网技 术 的迅 速 发展 , XML 已 经 成 为
压缩 技 术 主 要 是 用来 解决 X ML 的数 据冗 余 问题 , 以 满 足 网络宽 带 和存 储 空 间 的需 求 , 压缩 率 都 高 于传 其
统 的数 据压 缩技 术 , 但是 支持 压缩 文档 的直 接查 询 , 综 述
文 苹 编 号 :0 35 5 ( 0 8 0 0 8 0 1 0 8 0 2 0 ) 70 6 — 3
XML数 据压 缩 技 术 综述
Th u v y 0 e S r e f XM L Da a Co pr s i n Te h qu s t m e s o c ni e
D a a Co p e so c t m r s in Te hno o s p e e t d. l gy i r s n e K EYW ORD S XM L a a c pr s i d t om e son, da a r du t e nda c n y, q r oc s, DT D ue y pr es
【 键 词 】 XM L 数 据 压 缩 ,数 据 冗 余 , 查 询 处 理 ,D 关 TD
中 图 分 类 号 :TP 0 . 316 文 献 标 识 码 :A
AB T S RACT W ih t e r p d d v l p n f t e W e e h o o y t h a i e eo me t o h b t c n l g ,XM L h s b c me d f c o s a d r o t x r s in a d a e o e a t t n a d f r Da a e p e so n e c a g .Ho v r e a s ft e s l— e c i e b l y o h xh n e we e ,b c u e o h e f d s r b d a i t f e XM L ma e i t k sXM L v r o e W h ti r t e i c e s d sz fe t eb s 、 a smo e, h r a e ie a f c s n b t u re n r n f r .Af e re n r d c i n t h e e r h b c g o n fXM L Da aCo o h q e is a d t a s e s t ra b ifi t o u to O t e r s a c a k r u d o t mp e so c n o y,t i p p r r s i n Te h o g hs a e p e e t n a a y i o h r s n s a n l ss ft e XM L c mp e so e h i u s a d t e p r o ma c . h n ft i p p rt e f t r r fXM L o r s in t c n q e n h e f r n e At t e e d o h s a e h u u e wo k o
轨迹大数据_数据处理关键技术研究综述

轨迹大数据:数据处理关键技术研究综述轨迹大数据:数据处理关键技术研究综述摘要:随着移动设备和定位技术的普及,轨迹数据大幅增长,涉及各个领域,如交通运输、旅游、物流等。
这些轨迹数据包含着大量宝贵的信息,但也面临着数据分析和处理的挑战。
本文综述了轨迹大数据处理的关键技术,包括数据清洗、轨迹压缩、轨迹聚类、轨迹挖掘等。
1. 引言随着移动设备和定位技术的普及,人们在日常生活中记录和生成的轨迹数据数量呈指数级增长。
轨迹数据是指移动对象在时空维度上的轨迹坐标点序列集合,如GPS记录的车辆轨迹、用户行为轨迹等。
这些数据中蕴含着丰富的信息,可以用于交通规划、用户行为分析等各个领域。
然而,轨迹数据的处理和分析面临着诸多技术挑战,包括数据的清洗和去噪、轨迹的压缩和存储、轨迹的聚类和分类等。
本文将对轨迹大数据处理的关键技术进行综述,为相关研究和应用提供参考。
2. 数据清洗与去噪轨迹数据的质量直接影响着后续分析的准确性和可靠性。
数据清洗主要包括去除重复数据、去除异常点、填充缺失值等步骤。
重复数据的存在可能是由于设备问题或数据采集错误导致,需要通过对时间和位置信息进行判定来去除。
异常点可以通过统计或可视化的方式进行检测,常用的方法有局部离群点因子(LOF)和孤立森林(Isolation Forest)。
当轨迹数据存在缺失值时,可以采用线性插值、KNN填充等方法进行填充。
3. 轨迹压缩与存储由于轨迹数据的产生方式和存储形式,数据量较大,对存储和传输资源带来了压力。
因此,轨迹压缩成为了必要的环节。
轨迹压缩的目标是在保持数据可还原性的前提下,尽量减少数据量。
常用的轨迹压缩算法有Douglas-Peucker算法、Sedgewick算法等。
这些算法通过删除冗余点或使用曲线拟合的方式来实现轨迹数据的压缩。
4. 轨迹聚类与分类轨迹聚类是将相似的轨迹分到同一个类别中的过程,这有助于发现轨迹数据的规律和模式。
常用的轨迹聚类算法有基于密度的DBSCAN算法、基于划分的K-means算法等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据压缩算法的综述S1******* 许申益摘要:数据压缩技术在数据通讯和数据存储应用中都有十分显著的益处。
随着数据传输技术和计算机网络通讯技术的普及应用,以及在计算机应用中,应用软件的规模和处理的数据量的急剧增加,尤其是多媒体技术在计算机通讯领域中的出现,使数据压缩技术的研究越来越引起人们的注意。
本文综述了在数据压缩算法上一些已经取得的成果,其中包括算术编码、字典式压缩方法以及Huffman码及其改进。
关键字:数据压缩;数据存储;计算机通讯;多媒体技术1.引言数据压缩技术在数据通讯和数据存储应用中都有十分显著的益处。
在数据的存储和表示中常常存在一定的冗余度,一些研究者提出了不同的理论模型和编码技术降低了数据的冗余度。
Huffman 提出了一种基于统计模型的压缩方法,Ziv Jacob 提出了一种基于字典模型的压缩方法。
随着数据传输技术和计算机网络通讯技术的普及应用,以及在计算机应用中,应用软件的规模和处理的数据量的急剧增加,尤其是多媒体技术在计算机和通讯两个领域中的出现,使数据压缩技术的研究越来越引起人们的注意。
本文综述了在数据压缩算法上的一些已经取得的成果。
本文主要介绍了香农范诺编码以及哈弗曼算法的基本思想,运用其算法的基本思想设计了一个文件压缩器,用Java 语言内置的优先队列、对象序列化等功能实现了文件压缩器的压缩和解压功能。
2数据压缩算法的分类一般可以将数据压缩算法划分为静态的和动态的两类。
动态方法又是又叫做适应性(adaptive)方法,相应的,静态方法又叫做非适应性方法(non-adaptive)。
静态方法是压缩数据之前,对要压缩的数据经过预扫描,确定出信源数据的每个符号在编码后对应的码字(codeword)。
这样,信息集对码字集的映像在数据开始之前就已经固定下来了。
面动态方法则是在编码过程中,随着信源信息的输入,根据输入流的变化,不断动态地修改编码压缩。
这样就省去了为统计信源中的符号概率需要做的第一遍预扫描。
也不必向编码端传送编码所用的数据模式。
因而动态的数据压缩方法比静态的方法要优越得多。
3.数据压缩技术的理论基础文件压缩的基本思想是对字符设计长度不等的编码方案,对出现次数多的字符用尽可能短的编码表示,这样文件的总长度就会降低,实现文件压缩。
比如有字符串“ABACADA”,4个字符需要两个比特编码,假设A、B、C、D的编码分别是00、01、10 和11,则整个字符串可表示成00010010001100,总长度14个比特。
如果A、B、C、D的编码分别是0、10、110 和111,则字符串总长度为12 比特。
设计长短不等的编码方案时,必须满足一个字符的编码不能是另一个字符编码的前缀,以保证解码成字符的转换过程中不发生歧义,这种编码称为前缀编码。
4.数据压缩算法4.1 Huffman编码及其演变哈弗曼算法提出了一种编码方法,使得文本总长度最短。
其基本思想是利用字符的频率作为权重,以字符作为叶结点构造一颗最优二叉树(也称为哈弗曼树),使得带权路径长度WPL = W1L1 + … + WnLn 最小,其中Wi 表示第 i 个字符结点的权重,Li 表示第 i 个字符结点的路径长度。
哈弗曼算法流程如下:(1)每个字符创建一棵二叉树构成一个树集合F= {T1,T2,…Tn},其中二叉树Ti 的根结点为权重wi,左右子树为空。
(2)在树集 F 中选取两颗根结点权值最小的树作为左右子树构成一颗新的二叉树,根结点为左右子树根结点的权重之和。
(3)在树集 F 中删除这两颗树,把新得到的二叉树加入到 F 中。
(4)重复步骤 2 和 3,直到 F 中只有一棵树为止。
例如字符串“ABACADA”4 个字符A、B、C、D 的频率分别为4、1、1、1。
以字符频率为权重构造最优树。
利用最优二叉树,A、B、C、D 的编码分别是0、10、110 和111。
这种以字符频率为权重,构造一颗最优二叉树,使得带权路径长度最小的前缀编码方案称为哈弗曼编码。
哈弗曼算法保证了高频字符用短编码,低频字符用长编码,到达整体编码长度最短,从而实现文件压缩的目的。
哈弗曼编码方法:先按出现的概率大小排队,把两个最小的概率相加,作为新的概率和剩余的概率重新排队,再把最小的两个概率相加,再重新排队,直到最后变成1。
每次相加时都将“0”和“1”赋与相加的两个概率,读出时由该符号开始一直走到最后的”0”或者“1”,将路线上所遇到的“0”和“1”按最低位到最高位的顺序排好,就是该符号的霍夫曼编码。
低位高位用霍夫曼编码所得的平均码长为:Σ(码长×出现概率)上例为:0.2×2+0.19×2+0.18×3+0.17×3+0.15×3+0.1×4+0.01×4=2.72 bit 可以算出本例的信源熵为2.61bit,二者已经是很接近了。
4.2 香农-范诺编码方法:将符号从最大可能到最少可能排序,将排列好的信源符号分化为两大组,使两组的概率和近于相同,并各赋予一个二元码符号“0”和“1”。
只要组内有两个或两个以上符号,就以同样的方法重复以上分组,以此确定这些符号的连续编码数字。
依次下去,直至每一组只剩下一个信源符号为止。
香农-范诺编码算法步骤:(1)按照符号出现的概率减少的顺序将待编码的符号排成序列。
(2)将符号分成两组,使这两组符号概率和相等或几乎相等。
(3)将第一组赋值为0,第二组赋值为1。
(4)对每一组,重复步骤2的操作,直至每一组只剩下一个信源符号为止。
5.文件压缩器的设计与实现文件数据在机器内部以二进制形式存在,机器对二进制比特以字节为单位进行处理。
从机器处理层面上来说,对文件数据的压缩就是对字节码形式的数据进行压缩。
文件压缩器的一个设计思想就是对高频字节码用短编码,低频字节码用长编码,把文件的字节码变换成哈弗曼码,使文件长度变短(以哈弗曼方法为例)。
文件压缩器主要的功能是压缩和解压,分别设计压缩类和解压类实现压缩和解压功能。
还有辅助功能的类,如结点类设计、叶结点类设计,用来构建哈弗曼树。
为了方便压缩后的数据保存及解压,需要设计一个压缩结果类,用来保存压缩结果和哈弗曼码表,在解压过程中必须用压缩过程的哈弗曼码表才能做逆变换,把压缩数据还原成原来的数据。
5.1 结点类设计Node 类表示哈弗曼树的分支结点,类中成员变量包括结点类型、权重、左子结点和右子结点等记录结点的基本信息数据。
Node 类表述如下:public class Node{public static int NODE = 0;//结点public static int LEAF = 1; //叶结点public Node lChild; //左结点public Node rChild; //右结点public int weight; //权重public int nodeStyle; //结点类型public Node (int weight, Node lChild, Node rChild):}Leaf 类是Node 类的派生类,表示树的叶子结点,成员变量包括字节码及字节码的哈弗曼编码。
Leaf 类表述如下:public class Leaf extends Node{public byte byteCode;//字节码public String huffCode;//哈弗曼码public Leaf (byte byteCode,int weight);}5.2 压缩结果类设计CompressedResult 类,用来保存压缩后的数据,保存原文件名供解压之后用,此外还要保存哈弗曼码表,在解压过程从哈弗曼码转换到字节码,必须使用压缩过程中的哈弗曼码表。
CompressedResult 类描述如下:public class CompressedResult implements Serializable{public String [] hufCodes;//哈弗曼码表public byte [] comedData;//压缩数据public String originalfileName;//原文件名}在具体实现过程中,采用了Java 语言的对象序列化功能,使得保存压缩文件和加载压缩文件的过程变得简单,简化了实现过程。
5.3 压缩类设计Compress 类该类完成文件加载、统计字节频率、构建哈弗曼树、生成哈弗曼码和文件压缩等功能。
Compress 类描述如下:public class Compress{private int [] weights;//字节码频率private String [] huffCodes;//字节码的哈弗曼码表private byte [] inputData; //文件数据private String srcPath; //源文件路径private File destPath;//目标文件路径//压缩结果private CompressedResult comedResult;//哈弗曼树private PriorityQueue<Node> huffTree;public Compress () ;//初始化变量//压缩函数public void compressing (String srcPath) ;private void saveFile (File f ) ; //保存压缩文件//目标路径private File getDefaultDestPath (String srcPath) ;//加载源文件private void loadFile (String srcPath) ;private void calculateWeight () ;//统计字符频率private void builtHufftree () ;//构建哈弗曼树//生成哈弗曼编码private void HuffmanCoding (Node root,String huffcode) ;//生成压缩文件private void generateCompressedData () ;//字符串转换成数值private byte string2Digit (String strCode) ;//优先队列的比较器,按权重比较结点大小private class ComparatorByWeight implements Comparator<Node>; }函数builtHufftree () 完成哈弗曼的构建,算法采用第2节中算法。
具体实现中哈弗曼树用Java 语言内置的优先队列PriorityQueue 类实现,队列中元素按权重自动排序,需要提供一个按权重比较大小的比较器,实现代码如下:huffTree = new PriorityQueue <Node> ( 256,new ComparatorBy-Weight ()); 函数HuffmanCoding (Node root, String huffcode) 完成对字节码的哈弗曼编码,生成字节码映射到哈弗曼码表huffCodes,其中字节码是huffCodes 的索引。