重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这篇文章将为大家详细讲解有关SpringBoot整合MybatisPlus中模型压缩与加速的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
成都创新互联公司专注于三河网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供三河营销型网站建设,三河网站制作、三河网页设计、三河网站官网定制、成都小程序开发服务,打造三河网络公司原创品牌,更为您提供三河网站排名全网营销落地服务。
我们先来看一下深度学习模型的压缩和加速的定义:
深度学习模型的压缩和加速是指利用神经网络参数的冗余性和网络结构的冗余性精简模型,在不影响任务完成度的情况下,得到参数量更少、结构更精简的模型.被压缩后的模型计算资源需求和内存需求更小,相比原始模型能够满足更加广泛的应用需求。
深度学习模型的压缩和加速基于什么背景提出的呢?
深度学习模型性能提高的同时,计算也越来越复杂,计算开销和内存需求逐渐增加。如下图所示,8 层的 AlexNet需要0.61 亿个网络参数和 7.29 亿次浮点型计算,花费约 233MB 内存.随后的 VGG-16的网络参数达到 1.38 亿,浮点型计算次数为 1.56 亿,需要约 553MB 内存.为了克服深层网络的梯度消失问题,何恺明提出了 ResNet网络,首次在ILSVRC 比赛中实现了低于 5%的 top-5 分类错误,偏浅的 ResNet-50 网络参数就达到 0.25 亿,浮点型计算次数高达 3.9 亿,内存花费约102MB.
庞大的网络参数意味着更大的内存存储,而增长的浮点型计算次数意味着训练成本和计算时间的增长,这极大地限制了在资源受限设备,例如智能手机、智能手环等上的部署。
从压缩参数和压缩结构两个角度可以将压缩方法分成以下 7 类,如下表所示:
参数剪枝是指在预训练好的大型模型的基础上,设计对网络参数的评价准则,以此为根据删除“冗余”参数.根据剪枝粒度粗细,参数剪枝可分为非结构化剪枝和结构化剪枝。
非结构化剪枝的粒度比较细,可以无限制地去掉网络中期望比例的任何“冗余”参数,但这样会带来裁剪后网络结构不规整、难以有效加速的问题.
结构化剪枝的粒度比较粗,剪枝的最小单位是 filter 内参数的组合,通过对 filter 或者 feature map 设置评价因子,甚至可以删除整个 filter 或者某几个 channel,使网络“变窄”,从而可以直接在现有软/硬件上获得有效加速,但可能会带来预测精度(accuracy)的下降,需要通过对模型微调(fine-tuning)以恢复性能.
(1) 非结构化剪枝
如下图所示,卷积层和全连接层的输入与输出之间都存在稠密的连接,对神经元之间的连接重要性设计评价准则,删除冗余连接,可达到模型压缩的目的.
根据神经元之间的连接重要性的设计评价准则的不同,有以下几种常见的形式:
根据神经元连接权值的范数值大小,删除范数值小于指定阈值的连接,可重新训练恢复性能
用突触强度来表示神经元之间连接的重要性。利用生物学上的神经突触概念,定义突触强度为 Batch Normalization(BN)层放缩因子 γ \gamma γ 和 filter 的 Frobinus 范数的乘积
在模型初始化阶段,通过对训练集多次采样判断连接的重要性,生成剪枝模板再进行训练,无需迭代进行剪枝-微调的过程
(2) 结构化剪枝
group 级别剪枝是指对每一层的 filter 设置相同的稀疏模式(即图中每个立方体都删去相同位置的小方块),变成结构相同的稀疏矩阵。如下图所示:
filter 级别剪枝也可以看作 channel 级别剪枝.如上图所示,删去该层的某些 filter(即图中删去整个立方体),相当于删去其产生的部分 feature map 和原本需要与这部分 feature map 进行卷积运算的下一层部分 filter。
对 filter 的评价准则可分为以下4种:(1)基于 filter 范数大小 (2)自定义 filter 评分因子 (3)最小化重建误差 (4)其他方法
参数量化是指用较低位宽表示典型的 32 位浮点网络参数,网络参数包括权重、激活值、梯度和误差等等,可以使用统一的位宽(如 16-bit、8-bit、2-bit 和 1-bit 等),也可以根据经验或一定策略自由组合不同的位宽。
参数量化的优点是:
能够显著减少参数存储空间与内存占用空间,将参数从 32 位浮点型量化到 8 位整型,从而缩小 75% 的存储空间,这对于计算资源有限的边缘设备进行深度学习模型的部署和使用都有很大的帮助。
能够加快运算速度,降低设备能耗,读取 32 位浮点数所需的带宽可以同时读入 4 个 8 位整数,并且整型运算相比浮点型运算更快,自然能够降低设备功耗。
也存在一定的局限性:
网络参数的位宽减少损失了一部分信息量,会造成推理精度的下降,虽然能够通过微调恢复部分精确度,但也带来时间成本的增加;量化到特殊位宽时,很多现有的训练方法和硬件平台不再适用,需要设计专用的系统架构,灵活性不高.
低秩分解是指通过合并维数和施加低秩约束的方式稀疏化卷积核矩阵,由于权值向量大多分布在低秩子空间,所以可以用少数的基向量来重构卷积核矩阵,达到缩小存储空间的目的.
神经网络的 filter 可以看作是四维张量:宽度 w、高度 h、通道数 c、卷积核数 n,由于 c 和 n 对网络结构的整体影响较大,所以基于卷积核(w、h)矩阵信息冗余的特点及其低秩特性,可以利用低秩分解方法进行网络压缩.。
低秩分解方法在大卷积核和中小型网络上有不错的压缩和加速效果,过去的研究已经比较成熟,但近两年已不再流行
.原因在于:除了矩阵分解操作成本高、逐层分解不利于全局参数压缩,需要大量的重新训练才能达到收敛等问题之外,近两年提出的新网络越来越多地采用 1x1 卷积,这种小卷积核不利于低秩分解方法的使用,很难实现网络压缩与加速。
参数共享是指利用结构化矩阵或聚类等方法映射网络参数,减少参数数量.参数共享方法的原理与参数剪枝类似,都是利用参数存在大量冗余的特点,目的都是为了减少参数数量.但与参数剪枝直接裁剪不重要的参数不同,参数共享设计一种映射形式,将全部参数映射到少量数据上,减少对存储空间的需求.
由于全连接层参数数量较多,参数存储占据整个网络模型的大部分,所以参数共享对于去除全连接层冗余性能够发挥较好的效果;也由于其操作简便,适合与其他方法组合使用.但其缺点在于不易泛化,如何应用于去除卷积层的冗余性仍是一个挑战.同时,对于结构化矩阵这一常用映射形式,很难为权值矩阵找到合适的结构化矩阵,并且其理论依据不够充足.
以上 4 种利用参数冗余性减少参数数量或者降低参数精度的方法虽然能够精简网络结构,但往往需要庞大的预训练模型,在此基础上进行参数压缩,并且这些方法大都存在精确度下降的问题,需要微调来提升网络性能。
设计更紧凑的新型网络结构,是一种新兴的网络压缩与加速理念,构造特殊结构的 filter、网络层甚至网络,从头训练,获得适宜部署到移动平台等资源有限设备的网络性能,不再需要像参数压缩类方法那样专门存储预训练模型,也不需要通过微调来提升性能,降低了时间成本,具有存储量小、计算量低和网络性能好的特点.
但其缺点在于:由于其特殊结构很难与其他的压缩与加速方法组合使用,并且泛化性较差,不适合作为预训练模型帮助其他模型训练.
(1) 卷积核级别
下面以一些典型的网络为例:
Squeezenet,使用 1x1 卷积代替 3x3 卷积,为了减少 feature map 的数量,将卷积层转
变成两层:squeeze 层和 expand 层,减少了池化层。
MobileNet,将普通卷积拆分成depth-wise 卷积和 point-wise 卷积,减少了乘法次数
MobileNetV2, 相比 MobileNet在 depth-wise 卷积之前多加了一个 1x1 expand 层以提升通道数,获得了更多的特征
ShuffleNet,为克服 point-wise 卷积的昂贵成本和通道约束,采用了逐点组卷积(point-wise group convolution)和通道混洗(channel shuffle)的方式
ShuffleNetV2相比 ShuffleNet,为了减少内存访问成本,提出了通道分割(channel split)这一概念
Wan 等人[提出了完全可学习的组卷积模块(FLGC),可以嵌入任何深度神经网络进行加速
(2) 层级别
Huang 等人提出了随机深度用于类似 ResNet 含残差连接的网络的训练,对于每个 mini-batch,随机删除block 子集,并用恒等函数绕过它们.Dong 等人为每个卷积层配备一个低成本协同层(LCCL),预测哪些位置的点经过 ReLU 后会变成 0,测试时忽略这些位置的计算.Li等人将网络层分为权重层(如卷积层和全连接层)和非权重层(如池化层、ReLU 层等),提出了将非权重层与权重层进行合并的方法,去除独立的非权重层后,运行时间显著减少.
(3) 网络结构级别
Kim 等人提出了 SplitNet,自动学会将网络层分成多组,获得一个树形结构的网络,每个子网共享底层权重.Gordon 等人[提出了 Morphnet,通过收缩和扩展阶段循环优化网络:在收缩阶段,通过稀疏正则化项识别效率低的神经元从网络中去除;在扩展阶段,使用宽度乘数来统一扩展所有层的大小,所以含重要神经元更多的层拥有更多计算资源.Kim 等人提出了嵌套稀疏网络 NestedNet,每一层由多层次的网络组成,高层次网络与低层次网络以 Network in network (NIN)的方式共享参数:低层次网络学习公共知识,高层次网络学习特定任务的知识.
知识蒸馏最早由 Buciluǎ 等人提出,用以训练带有伪数据标记的强分类器的压缩模型和复制原始分类器的输出.与其他压缩与加速方法只使用需要被压缩的目标网络不同,知识蒸馏法需要两种类型的网络:教师模型和学生模型.
预先训练好的教师模型通常是一个大型的神经网络模型,具有很好的性能.如下图所示,将教师模型的 softmax 层输出作为 soft target 与学生模型的 softmax 层输出作为 hard target 一同送入 total loss 计算,指导学生模型训练,将教师模型的知识迁移到学生模型中,使学生模型达到与教师模型相当的性能.学生模型更加紧凑高效,起到模型压缩的目的.
知识蒸馏法可使深层网络变浅,极大地降低了计算成本,但也存在其局限性.由于使用 softmax 层输出作为知识,所以一般多用于具有 softmax 损失函数的分类任务,在其他任务的泛化性不好;并且就目前来看,其压缩比与蒸馏后的模型性能还存在较大的进步空间.
以上这些压缩与加速方法单独使用时能够获得很好的效果,但也都存在各自的局限性,组合使用可使它们互为补充.研究人员通过组合使用不同的压缩与加速方法或者针对不同网络层选取不同的压缩与加速方法,设计了一体化的压缩与加速框架,能够获得更好的压缩比与加速效果.参数剪枝、参数量化、低秩分解和参数共享经常组合使用,极大地降低了模型的内存需求和存储需求,方便模型部署到计算资源有限的移动平台.
知识蒸馏可以与紧凑网络组合使用,为学生模型选择紧凑的网络结构,在保证压缩比的同时,可提升学生模型的性能.混合方式能够综合各类压缩与加速方法的优势,进一步加强了压缩与加速效果,将会是未来在深度学习模型压缩与加速领域的重要研究方向.
如下图所示,Han 等人提出了 Deep compression,将参数剪枝、参数量化和哈夫曼编码相结合,达到了很好的压缩效果。
(1) 下表展示了参数剪枝、紧凑网络、参数共享、知识蒸馏和混合方式这 5 类压缩技术的一些代表性方法,使用 MNIST 数据集在 LeNet-5 上的压缩效果,可以看出,除了 Ref 带来较大的 accuracy 损失以外,其他方法的压缩效果都不错.从 accuracy 的角度来看,自适应 fastfood 变换的效果更好,在达到压缩效果的同时,还提升了 accuracy;从参数压缩量的角度来看,混合方式在 accuracy 轻微下降的情况下,都实现了较大的压缩比.
(2) 小表展示了参数剪枝、紧凑网络、参数共享和混合方式这 4 类压缩技术的一些代表性方法使用 CIFAR-10数据集在 VGG-16 上的压缩效果,可以看出,这 4 类方法的压缩效果差别比较大.整体来看,结构化剪枝效果更好,同时起到了网络压缩和加速的效果,accuracy 甚至有些提升.权值随机编码方法能够实现高达 159x 的参数压缩比,accuracy 略有下降.
截止到目前,深度学习模型压缩与加速技术尚未发展成熟,在实际部署和产品化水平上还有很大的进步空间.下面介绍几个值得关注与讨论的研究方向:
知识蒸馏作为一种迁移学习的形式,可使小模型尽可能多地学习到大模型的知识,具有方法灵活、不依赖硬件平台的特点,但目前,其压缩比和蒸馏后性能都有待提高.未来知识蒸馏可从以下几个方向展开研究:打破 softmax 函数的限制,结合中间特征层,使用不同形式的知识;在选择学生模型的结构时,可以与其他方法集成;打破任务的限制,例如将图片分类领域的知识迁移到其他领域;
将模型压缩技术与硬件架构设计相结合.目前的压缩与加速方法大多仅从软件层面对模型进行优化,并且不同方法由于使用的硬件平台不同,也很难比较其加速效果的好坏.未来可针对主流的压缩与加速方法专门设计硬件架构,既能在现有基础上加速模型,又方便不同方法的比较;
制定更智能的模型结构选择策略.目前,无论是参数剪枝方法还是设计更紧凑的网络结构,都是基于现有模型作为主干网络,手动选择或使用启发式策略进行结构缩减,缩小了模型搜索空间.未来可以利用强化学习等策略进行自动网络结构搜索,得到更优的网络结构;
关于“SpringBoot整合MybatisPlus中模型压缩与加速的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。