深度学习模型的压缩和加速基于什么背景提出的呢?
大家好!我是【AI细菌】。我喜欢人工智能、分享和开源!本专栏是我学习的总结和记录。如果你也对深度学习、机器视觉、算法、Python、C++感兴趣,可以关注我的新闻,一起学习进步吧~
三、压缩效果对比四、未来研究方向前言
随着深度学习的发展和高性能GPU处理能力的增强,神经网络结构越来越复杂,模型参数的数量越来越多,这使得深度学习的部署在移动嵌入式设备上越来越困难。面对巨大的困难和挑战。因此,如何在不影响深度学习模型性能的情况下对模型进行压缩和加速成为研究热点。
本文主要关注以下三个方面:
一、模型压缩和加速
我们先来看看深度学习模型的压缩和加速的定义:
深度学习模型的压缩和加速是指利用神经网络参数的冗余度和网络结构的冗余度来简化模型,在不影响任务完成程度的情况下,得到一个参数少而多的模型流线型结构模型。压缩后的模型需要更少的计算资源和内存,比原始模型可以满足更广泛的应用需求。
深度学习模型的压缩和加速提出的背景是什么?
随着深度学习模型性能的提高,计算变得越来越复杂,计算开销和内存需求逐渐增加。如下图所示,8层AlexNet需要0.61亿网络参数和7.29亿浮点计算,大约需要233MB内存。 VGG-16的后续网络参数达到1.38亿,浮点计算次数1.56亿,大约需要553MB内存。为了克服深度网络的梯度消失问题,何毓明提出了ResNet网络,在ILSVRC比赛中首次实现top-5分类误差小于5%,浅层ResNet-50网络参数达到0.25亿,浮点计算次数高达3.9亿,内存成本约102MB。
庞大的网络参数意味着更大的内存存储,而浮点计算次数的增加意味着训练成本和计算时间的增加,极大地限制了资源受限设备的使用,例如智能手机、智能手机等。在环等上部署。
二、压缩和加速方法概述
从压缩参数和压缩结构来看,压缩方式可以分为以下7类,如下表所示:
2.1个参数剪枝
参数剪枝是指在预先训练好的大规模模型的基础上,设计网络参数的评价标准,并以此为基础,删除“冗余”参数。根据剪枝的粒度,参数剪枝可分为非结构化剪枝和结构化剪枝。
(1)非结构化修剪
如下图所示,卷积层和全连接层的输入输出之间存在密集连接。设计神经元间连接重要性的评价标准,删除冗余连接实现模型压缩。目的。
根据神经元间连接重要性的不同设计评价标准,常见的有以下几种形式:
(2)结构化剪枝
组级剪枝是指对每一层的过滤器设置相同的稀疏模式(即删除图中每个立方体相同位置的小方块),将其变成结构相同的稀疏矩阵如下图:
Filter-level pruning也可以看成是channel-level pruning。如上图所示,删除这一层的一些filter(也就是删除图中的整个cube),相当于删除了一些feature map和filter的下一层原本需要与这个进行卷积的部分特征图的一部分。
过滤器的评价标准可以分为以下4种:(1)基于过滤器范数大小(2)自定义过滤器评分因子(3)最小化重构误差(4)其他方法
2.2参数量化
参数量化是指使用较低的位宽来表示典型的 32 位浮点网络参数。网络参数包括权重、激活值、梯度和误差等bit、2-bit和1-bit等),不同的位宽可以根据经验或一定的策略自由组合。
参数量化的优点是:
还有一些限制:
网络参数位宽的减小会丢失一部分信息量,这会导致推理精度的下降。虽然通过微调可以恢复部分精度,但也增加了时间成本;当量化到特殊位宽时,很多现有的训练方法和硬件平台都不再适用,需要设计专门的系统架构,不太灵活。
2.3 低秩分解
低秩分解是指通过合并维度和施加低秩约束来稀疏卷积核矩阵。由于权重向量大部分分布在低秩子空间中,因此可以使用少量的基向量重构卷积核矩阵,以达到减少存储空间的目的。
神经网络的filter可以看成一个四维张量:宽w,高h,通道数c,卷积核数n,因为c和n对整体网络结构影响很大,因此基于卷积核(w,h)的矩阵信息冗余特性及其低秩特性,可以通过低秩分解方法进行网络压缩。
低秩分解方法对大型卷积核和中小型网络具有良好的压缩和加速效果。过去的研究已经比较成熟,但近两年没有普及。原因是:除了矩阵分解操作成本高,逐层分解不利于全局参数压缩,需要大量的重新训练才能达到收敛。使用分解的方法,很难实现网络压缩和加速。
2.4个参数共享
参数共享是指使用结构化矩阵或聚类的方法来映射网络参数,减少参数的数量。参数共享的原理类似于参数剪枝的原理。它利用了大量冗余参数的特点,目的是为了减少参数的数量。但是,与参数剪枝直接剪除不重要的参数不同,参数共享设计了一种映射形式,将所有参数映射到少量数据,减少存储空间需求。
由于全连接层的参数数量较多,且参数存储占据了整个网络模型的大部分,参数共享可以更好的起到去除全连接层冗余的作用;也因为它的操作简单,它适用于其他方法。但是它的缺点是不容易泛化,如何应用它来去除卷积层的冗余仍然是一个挑战。同时,对于结构化矩阵的常见映射形式,权重矩阵很难找到合适的结构化矩阵。 ,其理论基础不充分。
2.5 紧凑型网络
以上四种使用参数冗余来减少参数数量或降低参数准确率的方法可以简化网络结构,但往往需要庞大的预训练模型,并在其上进行参数压缩,其中大部分方法具有准确性丢包问题需要微调以提高网络性能。
设计更紧凑的新网络结构是网络压缩和加速的新兴概念。它构建过滤器、网络层甚至具有特殊结构的网络加速度教案模板,并从头开始训练以获得适合部署到移动平台等资源有限设备的网络性能。不再需要像参数压缩方法那样专门存储预训练模型,也不需要通过微调来提高性能,降低了时间成本,具有存储小、计算量少、良好的网络性能。
但它的缺点是:由于结构特殊,难以与其他压缩加速方法结合,泛化性差,不适合作为预训练模型帮助其他模型训练。
(1)卷积核级
以下是一些典型网络的示例:
(2)层级
黄等人。提出了用于训练具有残差连接的类 ResNet 网络的随机深度。对于每个小批量,随机删除一个块子集,并使用恒等函数绕过它们。董等人。多层配备了一个低成本的协同层(LCCL),它预测哪些点在 ReLU 之后会变成 0,并且在测试时忽略了这些位置的计算。李等人。将网络层分为权重层(如卷积层和全连接层)和非权重层(如池化层、ReLU层等),提出了一种将非权重层和权重层合并的方法去掉独立的非权重层后,运行时间明显减少。
(3)网络结构层面
金等人。提出了SplitNet,它自动学习将网络层划分为多个组,以获得一个树结构网络,每个子网共享底层权重。戈登等人。 [提出Morphnet加速度教案模板,通过循环收缩和扩展阶段来优化网络:在收缩阶段,通过稀疏正则化项将效率低的神经元从网络中去除;在扩展阶段,使用宽度乘数来统一扩展所有层的大小,因此神经元越重要的层就有更多的计算资源。金等人。提出了嵌套稀疏网络NestedNet,每一层由多层网络组成,高层网络和低层网络以网络中网络(NIN)的方式共享参数:低层网络学习常识,高级网络 分层网络学习特定任务的知识。
2.6 知识提炼
知识蒸馏最早是由 Buciluǎ 等人提出的。它用于训练具有虚拟数据标签的强分类器的压缩模型,并复制原始分类器的输出。与其他只使用需要压缩的目标网络的压缩和加速方法不同,知识蒸馏方法需要两种类型的网络:教师模型和学生模型。
预训练的教师模型通常是性能良好的大型神经网络模型。如下图所示,教师模型的softmax层输出作为软目标,学生模型的softmax层输出作为硬目标。将其发送到总损失计算中,指导学生模型的训练,将教师模型的知识转移到学生模型中,使学生模型达到与教师模型相同的性能。学生模型更紧凑、更高效,起到了模型压缩的作用。
知识蒸馏方法可以使深层网络变浅,大大降低了计算成本,但也有其局限性。由于softmax层的输出作为知识,一般用于有softmax损失函数的分类任务。在其他任务中泛化不好;而目前蒸馏后的压缩比和模型性能还有很大的提升空间。
2.7 种混合方式
以上的压缩和加速方式单独使用都可以达到不错的效果,但是都有各自的局限性。组合可以使它们相得益彰。研究人员结合使用不同的压缩和加速方法或针对不同的网络层选择不同的压缩和加速方法,设计了一个集成的压缩和加速框架,可以获得更好的压缩比和加速效果。参数剪枝、参数量化、低秩分解和参数共享经常结合使用,极大的降低了模型的内存和存储需求,便于模型部署到计算资源有限的移动平台。
知识蒸馏可以与紧凑网络结合使用,为学生模型选择紧凑的网络结构,可以在保证压缩比的同时提高学生模型的性能。混合方法可以结合各种压缩和加速方法的优点进一步加强,将是未来深度学习模型压缩和加速领域的一个重要研究方向。
如下图所示,Han et al.提出了Deep compression,结合了参数剪枝、参数量化和Huffman编码,达到了很好的压缩效果。
三、压缩效果对比
(1) 下表展示了 5 种压缩技术的一些代表性方法:参数剪枝、紧凑网络、参数共享、知识蒸馏和混合方法,在 LeNet-5 上使用 MNIST 数据集进行压缩来自效果,可以看出其他方法的压缩效果都不错,只是Ref带来了很大的精度损失。从精度上看,自适应快餐变换的效果更好。在达到压缩效果的同时,也提高了从参数压缩的角度来看,混合方法实现了较大的压缩比,但精度略有下降。
(2)小表展示了四种压缩技术的一些代表性方法,即参数剪枝、紧凑网络、参数共享和混合方法,使用CIFAR-10数据集在VGG- 16、可以看出这四类方法的压缩效果差别很大,整体来看结构化剪枝效果更好,同时具有网络压缩和加速的效果,准确率甚至得到了改进。权重随机编码方法可以实现高达159x的参数压缩比,但精度略低。
四、未来研究方向
截至目前,深度学习模型压缩与加速技术尚未成熟,实际部署和产品化水平仍有很大提升空间。以下是几个值得关注和讨论的研究方向:
由于水平有限,博客难免会出现一些错误。如有错误,请指教!
低智商