1 引言
1.1 常用模型压缩方法
模型剪枝、模型量化、神经网络架构搜索、知识蒸馏
1.1.1 模型剪枝
模型剪枝主要是从深度学习模型中识别并删除不必要的连接、权重甚至整个神经元。
通过消除这些冗余组件,模型可以变得更紧凑、运行更快、内存效率更高,同时剪枝后的模型仍保持较高的准确性。
一般建议剪枝从修剪权重开始,因为这不会像修剪神经元那样改变模型的架构。
修剪权重的本质是将模型中所选单个参数的权重设置为零,该操作使得改变的参数并不影响模型的推理。
1.1.2 模型量化
模型量化是另一种通过减少权重和偏差的精度来使神经网络更小、更快、更高效的技术。
在传统的深度学习模型中,权重和偏差等参数通常使用32位浮点数(单精度)进行存储和处理,这提供了高精度,但需要大量的内存和计算资源。
**量化通过使用较少位数(例如8位或甚至更低)**表示这些值来降低内容和计算资源的使用。
1.1.3 神经网络架构搜索
神经网络架构搜索是一种使用机器学习的方法,可以在不需要大量人力的情况下,自动搜索最优网络架构的技术。
通过给定搜索空间,如给定模型架构,范围,长度,将模型网络设计转换为搜索问题,通过设计搜索策略和自动化的模型评估方法,自动化快速搜索到给定搜索空间中符合目标的神经网络架构。
1.1.4 知识蒸馏
知识蒸馏是一种用于将**知识从大型复杂模型(通常称为教师模型)转移到较小的简化模型(称为学生模型)**的技术。
教师模型包含在大型数据集训练过程中学到的大量信息。
蒸馏旨在将这些知识提炼成更紧凑、更高效的形式,可以轻松部署在资源受限的设备上或计算能力有限的场景中。
1.1.5 总结
方法 | 描述 | 适用对象 | 是否要预训练 | 优点 | 缺点 |
---|---|---|---|---|---|
模型剪枝 | 判断参数、通道、滤波、卷积层的显著性,并剪除不重要的部分。 | 卷积层、全连接层 | 是 | 显著减少参数数量,便于在硬件上实现加速。 结构化剪枝使模型变窄,从而减少存储与提高运算速度。 |
非结构化剪枝会造成网络结构不规整,难以有效加速。 结构化剪枝可能会造成与硬件平台不兼容,灵活性差。 |
模型量化 | 基于权值共享、矩阵近似,减少参数及激活值的存储位数,降低内存开销。 | 卷积层、全连接层 | 是 | 有不错的压缩量和模型性能,训练时间短 可以获得存储量小、计算量低和模型性能好的小型模型。 |
量化后的权重和激活降低了模型的容量和特征图的质量,量化到特殊位置时,容易造成预测精度下降。 另外会向梯度信息中引入噪声,导致基于梯度下降法的训练过程收敛难度增加。 |
神经网络架构搜索 | 通过搜索算法来探索不同的网络结构,以找到最优的模型配置。 | 所有层 | 否 | 能够自动化地发现高性能、资源高效的深度学习模型架构。 | 通常需要大量的计算资源和时间。 且结果可能受限于搜索空间的定义和搜索算法的选择。 |
知识蒸馏 | 将softmax分类器输出作为软知识,作为训练学生模型的先验知识。 | 卷积层、整个模型 | 是 | 训练简单,可以显著减少参数数量 容易与其他压缩方法组合使用实现更大程度压缩。 |
模型训练时间长,需要训练教师和学生模型 特殊结构很难与卷积核和较小方向的模型结合使用,泛化性差。 |
1.2 常见评估指标
准确率(Accuracy)、参数量(Params)、模型大小(Model Size)、乘累加操作(MACs)、浮点运算(FLOPs)、操作数(OPs)、压缩比(Compression Ratio)、推理时间(Inference Time)、吞吐量(Throughput)
1.2.1 准确率(Accuracy)
准确率指对比模型压缩前后在特定任务上的准确度,如分类准确率、检测精度等。
尽管压缩可能会牺牲一定的精度,但目标是在保持可接受精度的前提下进行压缩。
对于LLMs压缩,通常计算在零样本(Zero-shot)数据集上的准确率。
1.2.2 参数量(Params)
参数量(Params)是指模型中可训练参数的总数,通常是指构成深度学习模型的所有权重(weights)和偏置(biases)的总数。
模型大小通常是通过模型的总参数数量来衡量的。
一般来说,具有更多参数的模型通常需要更多的计算资源和内存来进行训练和推理。
1.2.3 模型大小(Model Size)
模型大小(Model Size)是衡量压缩效果最直观的指标,通常以模型文件的存储大小(如MB)来度量。
其计算公式为: 大小 = 参数量 × 带宽 大小=参数量×带宽 大小=