Advertisement

深度学习模型压缩方法综述

阅读量:

深度学习由于其计算复杂度及参数冗余特性,在特定场景或设备环境中难以实现有效的模型部署。为此,我们需要采用模型压缩以及系统优化加速等技术手段来克服这些技术障碍,并在此基础上展开详细讨论与实践探索。

1,模型压缩技术概述

我们都知道,在一定深度下(即网络结构越复杂),随着模型参数数量的增加(即相应地增加了更多的权重系数),相应的模型也会变得更加复杂(但经过训练后的效果往往能够得到显著提升)。然而,在实际应用中,我们常常需要面对的问题是大而不精的大型AI模型带来的计算和存储上的负担。为了应对这一挑战,在AI领域中提出了各种各样的model compression algorithm(这些算法的目标是将一个规模宏大且复杂的大型AI model转化为一个更加简洁efficient的pruned version)。

模型压缩成为必要手段,其根本原因在于受限于嵌入式设备对计算资源和存储空间的需求限制,只有经过优化压缩才能实现有效的部署. 模型压缩问题的定义可以从三个维度进行阐述:

在这里插入图片描述

1.1 模型压缩方法分类

基于其对网络架构造成的破坏程度,《解析卷积神经网络》一书中将模型压缩技术划分为"前端压缩"与"后端压缩"两种类型:

前向量化是一种无需修改原有的架构即可实现模型优化的技术方法,在这一过程中主要包含知识蒸馏这一环节,并结合轻量化设计和结构性剪枝操作完成整体优化目标;而后向优化则是一种综合性的模型精简策略,在这一过程中涵盖降维处理方式的同时还包括自由度较大的去权值处理手段,并通过权重数值缩减技术与二进制神经元构建方案共同实现对模型体积的有效缩减。

总结:前端压缩对原有网络结构基本上不会产生任何影响(主要只是在原模型架构上缩减了网络层数或降低了滤波器数量),而后端压缩则会带来根本性的巨大变化(不仅改变了网络架构本身),从而导致现有深度学习框架以及可能相关的硬件设备无法兼容这一调整后的网络结构。这种转变所引发的成本负担非常沉重。

1.2,模型压缩方法举例

行业内的主流模型压缩技术主要包括以下几种:基于知识蒸馏的知识蒸馏技术(Knowledge Distillation, KD),即通过构建辅助网络来学习原始网络的关键特征;采用轻量化架构的设计理念(也被称为紧凑型网络设计);结合剪枝优化的方法;以及利用量化处理提升效率的技术。
针对不同场景的应用,

在这里插入图片描述

2,知识蒸馏

知识蒸馏(knowledge distillation),本质上是迁移学习(transfer learning)中的一种方法。具体而言,在这一过程中,我们通过训练一个大模型(teacher模型)与一个小模型(student模型),从规模庞大且复杂的教师模型中提取的知识被有目的地迁移至精简的小模型中。这种技术使得学生能够在不显著降低性能的情况下实现对教师的高度模仿,并最终实现对教师的高度模仿以及复杂函数映射的学习。这种方法不仅能够使学生保留其快速计算速度的同时保持高度性能,在一定程度上实现了小规模学习器的大规模学习能力的提升目标

知识蒸馏的核心在于构建有效的监督特征。该领域的开创性研究-Distilling the Knowledge in a Neural Network[2]通过Soft Target提供的类间相似性来指导小模型的优化过程(基于软标签的知识蒸馏方法)。随后的研究则主要依赖于大模型中间层产生的特征图或注意力机制(如Features KD方法),并将其作为辅助学习目标用于提升小模型性能。该领域的开创性研究-Distilling the Knowledge in a Neural Network-被认为是 soft-label 知识蒸馏方法的基础性工作,并在此之后又出现了基于 Features 的知识蒸馏方法。

在经典的蒸馏实验中,在经过充分准备后我们首先训练了一个 teacher 网络,并将其输出结果q 设为 student 网络的目标值。通过这一过程使得学生网络最终生成的结果p能够与教师网络的输出结果q尽可能接近。从而得到学生网络的损失函数L=CE(y,p) + a·CE(q,p)其中 y 表示真实标签的一热编码表示形式 q 是教师网络的输出结果而 p 则是学生网络自身的预测结果

然而,在直接采用 teacher 网络的 softmax 输出结果q时 ,存在一定的问题。这是因为一个经过良好训练的网络通常表现出对正确类别的高度信心和对错误类别的低信心。例如,在 MNIST 数据集中 ,输入数字 2 时 ,该网络对数字 2 的预测概率显著高于其他相近类别(如数字 3 和 7)的概率值。然而,在某些情况下(如输入与所有类别都相差较大),该方法可能会出现较大偏差 。这样一来 ,teacher 网络难以有效地将数据相似性(如数字 2 和 3、7 非常接近)的信息传递给 student 网络 。为了弥补这一缺陷 ,论文提出了 softmax-T(软标签计算公式),公式如下所示:

在这里插入图片描述

在本研究中,我们设定q_istudent网络学习的目标(即soft标签)。相应的变量z_i则代表教师模型在softmax层之前产生的logit输出。当我们将参数设置为1时,则上述公式等同于softmax函数的应用。其对应的结果即为各类别的概率估计。值得注意的是,在参数趋向于0的情况下,则最大的数值将最接近1而其他数值则趋近于0的行为与one-hot编码策略具有相似的效果

所以,可以知道 student 模型最终的损失函数由两部分组成:

  • 第一项是小模型预测结果与大模型"软标签"之间的交叉熵(cross entropy);
    • 第二项是预测结果与普通类别标签之间的交叉熵。

这两个损失函数的重要程度可通过一定的权重进行调整,在实际应用场景中。不同取值对结果的影响也各有差异。通常情况下,在较大规模的应用场景下能够获得较高的准确度;而其中 T(蒸馏温度参数)是知识蒸馏模型训练过程中的一个可调节超参数。具体来说,在论文中给出的定义是这样的——T 是一个可调节的超参数;当 T 值增大时(论文中的描述),概率分布会变得更为柔软。这样做的好处在于使曲线趋于平滑;这相当于在迁移学习过程中加入了扰动机制,并非简单的数据转移;而是通过这种手段使得学生网络在整个信息提取过程中更加高效和具有更强的泛化能力;这是一种防止过拟合的有效策略。

知识蒸馏算法整体的框架图如图下所示。

在这里插入图片描述

3 轻量级模型架构

轻量级网络的核心在于通过保证精度的前提下,在体积与速度两个维度上实现对传统神经网络的轻量化改造。在手动设计轻量级网络的研究领域中尚无一套系统性的通用准则可循, 而仅能依据一些指导原则以及针对不同芯片架构的具体实践案例展开探索, 建议研究人员可以从经典论文中汲取灵感与优化思路, 并自行在各个硬件平台上构建模型并进行性能评估实验以验证效果。
其代表性的研究工作包括:MobileNet系列、ShuffleNet系列、RepVGG、CSPNet以及VoVNet等知名算法框架, 更多深入的研究内容可参考 GitHub Columns - 轻量化研究[ GitHub Columns - 轻量化研究 ]。

3.1 如何设计高效CNN架构

一些结论

  • (1) 分析模型的推理性能需要结合具体的推理平台(如英伟达 GPU、移动端 ARM CPU、端侧 NPU 芯片等);目前可知影响 CNN 模型推理性能的主要因素包括:算子计算量 FLOPs(参数量 Params)、卷积块的内存访问代价(访存带宽)以及网络并行度等。在相同硬件平台和相同网络架构的前提下,FLOPs 加速比与推理时间加速比呈正相关关系。
  • (2) 对于轻量级网络设计而言,建议优先采用直接反映运行效率的具体指标(如速度 speed),而非间接指标(如 FLOPs)。
  • (3) FLOPs 低并不等同于 latency 低;特别是在具有加速功能的硬件(如 GPU、DSP 和 TPU)上这一结论并不成立;因此在分析时需结合具体硬件架构进行详细评估。
  • (4) 不同网络架构的 CNN 模型即使 FLOPs 相同但其 MAC(乘加操作次数)也可能差异显著。
  • (5) 在流水线型 CPU 和移动设备上更为友好的是深度wise卷积操作;而在并行计算能力强的 GPU 和具有加速功能的专用硬件(如 NPU 芯片)上则效果不佳。这是因为深度wise 卷积操作主要采用了大量低 FLOPs 但高数据读写量的操作;由于这些操作使得 GPU 的算力瓶颈往往出现在数据访问带宽上;从而导致 GPU 在运算过程中浪费了大量时间用于显存数据读写操作;最终导致 GPU 的算力未能得到充分 utilize。

一些建议

通常情况下,在大多数设备上采用 channel 数量设置为 16 的整数倍能够显著提升运算效率。例如海思公司的351X系列芯片,在输入通道数量设置为4的整数倍、输出通道数量则配置为16的整数倍时,“时间加速比与浮点运算加速比基本相当”。这种配置有助于提升神经网络优化框架(NNIE)的硬件计算效率。

在通道数较低的场景(例如网络的初期层),相较于带加速功能的硬件平台采用标准卷积操作所带来的效率提升明显。(来源 MobileDets 论文[6])

该研究提出了一系列关于深度学习网络架构优化的关键见解。其中包含以下四点重要指导原则:第一点指出相同规模的通道数量能够最有效地减少乘法运算量(MAC);第二点强调过多分组会导致乘法运算量上升;第三点指出结构分散可能会影响计算并行性;第四点则提示A卷积核逐元素操作可能导致性能下降。

改写说明

从解决梯度信息冗余问题入手,提高模型推理效率。比如 CSPNet[9] 网络。

为应对DenseNet网络中存在密集连接所带来的高内存访问成本以及相应的能耗问题而采取的措施中,其中VoVNet[10]网络采用了一种基于One-Shot Aggregation(一次聚合)的一次性聚合模块。

3.2,轻量级模型部署总结

在深入研究和学习包括但不限于以下几个方面的经典轻量级网络架构设计、多任务学习与高效特征提取以及计算资源优化与模型轻量化技术在内的相关论文基础之上(...),进行了系统性的归纳总结。

该段文字涉及低功耗设备的手端移动CPU硬件设计,在算法选择上综合考虑了MobileNetV1(基于深度可分离卷积架构且具有轻量计算复杂度)以及具有轻量计算复杂度和轻量乘法加法计数的ShuffleNetV2(其中基于通道打乱的操作可能受限于推理框架)

该系统采用专用ASIC硬件设备-npu芯片(包括地平线X3/X4等型号、海思公司提供的3519系列芯片以及安霸CV22等主流产品),针对分类与目标检测等问题进行优化处理;其中对于cspnet网络(降低了梯度信息的冗余),采用了基于RepOptimizer算法设计的repvgg2架构(即采用VGG型直连结构实现部署便捷性)。

英伟达 GPU 硬件-T4 芯片采用 repvgg 网络架构设计(基于 VGG 的卷积架构设计),其高并行性显著提升了 GPU 的计算效能;而单路架构则有效节省了显存/内存资源。其中一项关键问题是:PTQ 量化精度在 INT8 下显著下降。

MobileNet block(基于深度可分离卷积的设计)在具备加速功能的专用硬件(NPU芯片)上运行时表现出较低的效率。

这个结论在 CSPNet[11] 和 MobileDets[12] 论文中都有提到。

该芯片厂商仅通过特定调整提升了深度可分离卷积 block 的计算性能。例如地平线机器人 x3 芯片实现了对深度可分离卷积 block 的特定优化。

以下表格展示了MobileNetv2与ResNet50在多个主流NPU芯片平台上进行的系统性性能测试分析结果

在这里插入图片描述

深度可分式卷积结构与传统卷 convolution架构在多款NPU处理器上进行了系统性评估后得出的结论表明

这些经验是在阅读轻量化网络相关论文后归纳得出的一系列心得,在实践中还需亲自进行测试验证

4.模型剪枝

模型剪枝(model pruning)也叫模型稀疏化(model sparsity)。

在深度学习模型中普遍存在着过多的冗余参数,在去除权重矩阵中相对"不重要"的权值(即设为零)后可显著降低计算资源消耗并提升实时性能效果,并将这种技术称为模型剪枝

在这里插入图片描述

研究论文 Han等.探讨高效神经网络中的权值与连接学习 NIPS2015.[13]

上图是典型的三段式剪枝算法 pipeline,主要是 3 个步骤:

在上述三个环节之间形成循环迭代的过程。在每一轮中首先采用常规的模型训练方法对系统进行基础学习;随后对当前获得的模型结构进行优化(即实施剪枝处理);接着基于上一步骤得到的结果信息对网络参数展开重新优化;如此往复直至系统的性能指标达到设定的目标值时,则终止整个训练流程。

模型剪枝算法基于粒度的不同可以划分为细粒度剪枝与粗粒度剪裁的具体方式具体来说

  • 微观化修剪(micro-pruning) :在神经网络中针对连接或节点执行修剪操作,并且是所有修剪方案中最细致的一种。
  • 层级化修剪(layer-wise pruning) :相比于微观化修剪而言,在层级上实施更粗略的修剪策略。
  • 模型层面修剪(model-level pruning) :移除某层卷积核后(即模型层面),这会导致该层在处理输入时完全放弃其对应的计算路径。
  1. Filter-level的滤波器剪枝:也可称为通道剪裁(Channel Pruning),它会对整个卷积核组执行修剪操作。这种操作会导致推理过程中的输出特征通道数量发生变化。关于滤波器剪枝的研究已成为当前研究热点。

按照剪枝是否规则,剪枝算法也可分为:

非结构化剪枝是指前面所述的第一种方法,在实际应用中由于不适合于硬件优化而受到限制,在现有条件下通常需要额外配置特定类型的硬件加速器才能有效实施。其代表性研究包括韩松在2016年发表的相关论文。
其中针对这一类方法的研究提出了改进方案,在实际应用中由于更适合于硬件优化的特点而被广泛采用,并通过网络减薄技术实现了高效的模型压缩效果。

4.1 结构化稀疏与非结构化剪枝比较

与非结构性修剪相比,在实际应用中结构化的修剪往往会伴随着对模型精确度和压缩效率的一定损失。在修剪过程中会对那些数值较大的权重进行裁剪以达到目标效果。相比之下,“无规律”的修剪策略能够更好地适应神经网络模型中大小不一权重值的随机分布特性,在提升深度学习模型性能方面发挥着关键作用。具体而言就是:

    1. 非结构化的稀疏表示形式不仅保持了较高模型压缩率的同时也达到了较高的准确性水平,在通用硬件环境下难以实现高效的加速效果。这主要由于其计算特征呈现非规则性分布的特点,在仅依赖通用硬件进行运算时无法充分发挥潜在性能优势。
      1. 虽然结构化的稀疏表示形式会略微降低模型压缩率或准确度的水平,在通用 hardware 环境下仍能实现高效的加速效果。因此这种形式广泛应用于实际场景中。这是因为权值矩阵呈现出高度的组织性和规律性特征,在这种组织下能够更好地适应 hardware 的加速机制。

3p

在这里插入图片描述

基于以上分析而言,在性能优越性和运算效率高之间找到平衡点将是优化深度神经网络权重稀疏性的关键策略。

当下,在软硬件领域都已开始支持稀疏张量的技术呈现趋势。这表明未来非结构化剪枝的应用前景可能会更加广阔。

5. 模型量化

与剪枝操作相比而言,在实际应用中参数量化则是一种广泛应用于后端的压缩技术。所谓的量化过程其实相当于低精度(Low precision)运算的概念,在实际场景中,默认使用的模型参数存储格式为FP32(即单精度浮点数),而当采用低精度策略时,则会将这些权重参数转换为INT8、FP16等数值形式以进一步优化计算效率和减少内存占用。

模型量化(Model Quantization,也称为网络量化)主要包含两个步骤:首先是对模型中的高精度参数(通常采用 FP32-32位表示)进行转换以获得低精度版本(多采用 INT8-8 位格式),其次是在推理阶段需要将传统的浮点数计算转换为定点运算。其中推理阶段必须依赖于相应的硬件支持。

通过量化技术优化模型参数规模, 从而减少存储空间与计算资源的需求, 并显著提升推理速度; 同时能够更好地兼容移动端及端侧NPU加速架构。进一步总结可知, 优化后的模型体积更小, 运行效率显著提升, 并适用于更多实际应用需求。

最后,在工业界主流的思路就是当前工业界主要采用高精度-FP32参数model来进行model training,在实际应用中,则主要采用低精度-INT8parameter model来进行inference操作。具体而言,在实际应用中,则主要采用low precision-int8parameter model来进行inference operation这一流程通常包括将FP32格式的权重数据转换至int8格式(即通过quantization algorithm完成该转变),并在执行inference inference时全部基于int8运算进行计算

5.1 模型量化的方案

在实践中将浮点模型转为量化模型的方法有以下三种方法

无需校准的数据:经典的量化方法直接将浮点型参数转换为量化整数,在实现过程中相对简便。然而这可能会导致精度下降显著但近期研究如DFQ方法证明即使不采用校准也能达到良好的性能水平

2.calibration:基于校准数据集方案,在输入少量真实数据后可进行统计分析。多个芯片厂商均支持该功能,包括但不限于 tensorRT、高通、海思等

  1. finetune:在训练过程中采用的方案,在训练阶段对量化误差进行模拟建模,并通过微调权重参数来优化量化效果。能够显著提高模型的精度水平;然而需要对模型训练流程进行相应调整,导致开发周期较长。

按照量化阶段的不同,量化方法分为以下两种:

量化后离线的PTQ;
在线的量化训练方式即QAT。

5.2 量化的分类

目前已知的加快推理速度概率较大的量化方法主要有:

  • 1.二值化(又称one-hot编码),是一种通过简单的位运算同时处理大量数据的方法。与从NVIDIA GPU到x86平台相比,在单比特计算上实现了5至128倍的理论性能提升,并且仅需增加一个额外的量化操作即可享受SIMD加速带来的收益。
    • 2.线性量化是最常用的一种量化方法,并可细分为非对称、对称和Ristretto等多种类型。在实际应用中,在NVIDIA GPU、x86以及部分AI芯片平台上均可实现8bit运算,并能带来显著的效率提升(1至16倍不等)。值得注意的是,在Tensor Core平台上甚至支持4bit运算这一方向具有较大的潜力和发展空间。此外,线性量化所引入的额外量化/反量化运算均为标准向量操作形式,在这种情况下仍可通过SIMD技术实现高效的加速处理。

一种独特的量化方法叫做"对数量化"。两个相同底数的幂指数相乘等于它们的指数之和,并从而降低了计算强度。同时将加法转换为索引运算更为高效。目前,在NVIDIA GPU、x86处理器以及ARM架构的大平台中尚未实现这一加速功能(即对数量化的加速库),但已知海思351X系列芯片已经开始采用这一技术。

6. 压缩方法总结

根据是否遵循规则原则, 剪枝算法主要包含两种类型: 非结构化剪枝与结构化剪枝. 前者能够实现较高的模型压缩率与准确性, 然而在加速方面存在不足; 后者则更适合硬件加速, 但可能导致性能上的一定损失.

在进行一次性的端到端训练时,若希望获得经过压缩和加速后的模型,则可以选择基于轻量化网络设计的模型,并对其执行相应的压缩和加速操作。

7. 参考资料

[1]shufflenetv2 论文: https://link.zhihu.com/?target=https%3A//arxiv.org/pdf/1807.11164.pdf

Extracting and Condensing Expert Knowledge from Deep Learning Models: https://link.zhihu.com/?target=https%3A//arxiv.org/abs/1503.02531

[3] GitHub 专栏 - 轻量化网络:https://github.com/HarleyZhang/cv_note/tree/7-model-compression

[4] FLOPs与模型推理速度: https://zhuanlan.zhihu.com/p/122943688

[5] G-GhostNet: https://arxiv.org/pdf/2201.03297.pdf

[6] MobileDets 论文: https://medium.com/ai-blog-tw/mobiledets-flops不等於latency-考量不同硬體的高效架構-5bfc27d4c2c8

[7] shufflenetv2 论文: https://arxiv.org/pdf/1807.11164.pdf

[8] RepVGG 论文: https://zhuanlan.zhihu.com/p/344324470

[9] CSPNet: https://arxiv.org/pdf/1911.11929.pdf

[10] VoVNet: https://arxiv.org/pdf/1904.09730.pdf

[11] CSPNet: https://arxiv.org/pdf/1911.11929.pdf

[12] MobileDets: https://arxiv.org/pdf/2004.14525.pdf

Han et al. developed a method to construct an approach that effectively learns both parameters of weights and interconnections within neural networks to achieve efficient computation, presented at the NIPS 2015 conference: https://arxiv.org/pdf/1506.02626.pdf

The training of efficient convolutional networks is achieved by network slimming.

[15] 深度学习模型压缩与加速: https://www.cnblogs.com/LXP-Never/p/14833772.html

Compressing Technique: A Method for Reducing the Size of Deep Neural Networks through Weight Pruning, Quantized Training, and Huffman Coding. https://arxiv.org/pdf/1510.00149.pdf

全部评论 (0)

还没有任何评论哟~