提高深度学习模型效率的三种模型压缩方法 原创
模型压缩是深度学习模型实时部署的关键组成部分,本文探讨了提高深度学习模型效率的不同方法。
近年来,深度学习模型在自然语言处理(NLP)和计算机视觉基准测试中的性能稳步提高。虽然这些收益的一部分来自架构和学习算法的改进,但数据集大小和模型参数的增长是重要的驱动因素。
下图显示了top-1 ImageNet分类精度作为GFLOPS的函数,GFLOPS可以用作模型复杂性的指标。
扩大数据规模和模型复杂性增加似乎是主要趋势,拥有数十亿个甚至万亿个参数的模型并不罕见。虽然这些大型模型具有令人印象深刻的性能,但这些模型的庞大规模使得它不可能用于边缘设备或延迟关键的应用程序。
这正是模型压缩发挥作用的地方。模型压缩的目标是减少模型的参数数量和/或延迟,同时力求将对模型性能的负面影响降至最低。虽然有一些方法,但它们可以分为三大类:
- 剪枝(Pruning)
- 量化(Quantization)
- 知识蒸馏(KD)
虽然还有其他方法(例如低秩张量分解),但本文不涵盖这些方法。以下详细讨论这三种主要技术。
剪枝
通过剪枝,可以从神经网络中移除不太重要的权重(神经元连接)或层,从而使模型变得更小。一个简单的策略是,如果某个神经元连接的权重低于某个阈值,则将其移除。这被称为权重剪枝,它确保移除的是冗余的连接或者是对最终结果影响不大的连接。
同样,可以根据神经元重要性的一些指标来移除神经元本身,例如输出权重的L2范数。这被称为神经元剪枝,通常比权重剪枝更有效。
与节点剪枝相比,权值剪枝会导致稀疏网络,这在GPU等硬件上很难优化。虽然它会减少内存占用和FLOPS,但可能不会降低延迟。剪枝的思想也可以扩展到卷积神经网络(CNN),其中过滤器/内核的相对重要性可以根据其L1/L2范数来确定,并且只能保留重要的过滤器。在实践中,剪枝是一个迭代过程,将在剪枝和微调模型之间交替进行。
使用这种方法,可以在性能下降最小的情况下,将网络参数减少50%以上,如下图所示:
量化
基于量化的模型压缩背后的主要思想是降低模型权重的精度,以减少内存和延迟。通常情况下,深度学习模型在训练期间或训练后将其权重存储为32位浮点数(FP32)。通过量化,这些权重通常被转换为16位(FP16)或8位(INT8)精度,以便在运行时部署。
量化可以分为两类:
训练后量化(PTQ)
这涉及到训练后权重和激活的量化,并通过一个称为校准的过程来实现。该过程的目标是在最小化信息损失的同时,找出从原始到目标精度的映射。为了实现这一点,使用数据集中的一组样本,并在模型上运行推理,跟踪模型中不同激活的动态范围,以确定映射函数。
量化感知训练(QAT)
使用较低精度权重和激活进行训练的主要问题是没有正确定义梯度,因此无法进行反向传播。为了使用QAT解决这个问题,该模型模拟了前向传播过程中的目标精度,但使用后向传播的原始精度来计算梯度。
虽然PTQ易于实施并且无需重新训练模型,但它可能会导致性能下降。另一方面,QAT与PTQ相比通常具有更高的准确性,但其实施起来不那么容易,并且会增加训练代码的复杂性。
从数学的角度来看,给定权重/激活的量化和校准涉及确定两个值:比例因子和零点。假设想要将FP32转换为INT8:
Python
1 # max_int for INT8 would be 255 and min_int 0
2 # max_float, min_float are deteremined in the calibration process
3 scale = (max_float - min_float) / (max_int - min_int)
4
5 # to allow for both positive and negative values to be quantized
6 zero_point = round((0 - min_float) / scale)
7
8 int8_value = round(fp32_value / scale) + zero_point
知识蒸馏(KD)
顾名思义,知识蒸馏(KD)试图将原始模型(在这种情况下称为教师模型)中的知识提炼或转移到一个较小的模型(可以称之为学生模型)中。实现这一目标的方法有多种,但最常见的方法是尝试使教师模型的输出或中间特征表示与学生模型相匹配。有趣的是,使用真实标签和教师模型输出的软标签组合训练的学生模型,其性能优于仅使用真实标签训练的学生模型,有时甚至能达到教师模型的性能。对于这种行为的一种假设是,由于软标签包含比真实标签(硬标签,例如zero-shot)更多的信息,它有助于学生模型更好地泛化。
知识蒸馏是一种更灵活的模型压缩技术,因为生成的模型可以具有与原始模型不同的架构,并且与剪枝或量化相比,具有更大的内存和延迟减少潜力。然而,它也是训练最复杂的技术,因为它涉及训练教师模型,然后设计和训练学生模型。
结论
在实践中,通常将多种压缩技术结合在一起(例如,知识蒸馏之后PTQ或剪枝)来实现所需的压缩和准确性结果。
原文标题:Model Compression: Improving Efficiency of Deep Learning Models,作者:Inderjot Singh Saggu