模型压缩方法:量化(Quantization)、剪枝(Pruning)、蒸馏(Knowledge Distillation, KD)、二值化(Binary Quantization)

这篇博客会记录我通过各渠道学习到的模型压缩方法。后续会通过小项目实战的方式进一步理解模型压缩方法的具体实现。

模型压缩技术意在保持大型模型能力的同时,降低其计算与存储开销,以解决参数规模庞大、硬件资源需求高等问题。其核心目标是在尽可能减少模型性能损失的前提下,大幅降低存储占用和计算复杂度(减少浮点运算次数 Flops),从而提升推理速度。此外,模型压缩还涉及优化网络结构,使其更高效地适配 GPU、NPU 等硬件,加快计算过程,提高资源利用率,并降低能耗。

主要的几种模型压缩技术概述如下:

方法原理适用任务优势缺点
量化

用低比特表示权重

(如 FP16, INT8)

CNN, NLP加速推理, 降低存储可能降低精度
剪枝移除不重要的权重/神经元CNN, Transformer保持精度, 计算量减少可能需要重新训练
知识蒸馏让小模型学习大模型的能力CNN, NLP适合部署, 训练高效训练复杂度高
二值化把权重变为 0/1轻量级 AI极端压缩, 推理快精度损失大
低秩分解用矩阵分解减少计算量NLP, CNN降低计算量, 保持精度适合大模型
可分离卷积分解卷积核计算CNN轻量级, 适合端侧 AI仅适用于 CNN
副网络剪枝通过副网络预测剪枝策略任何模型剪枝效果更精准计算复杂

NAS

(网络架构搜索)

自动寻找最优神经网络结构任何 AI 任务发现最优架构计算量大
矩阵稀疏化让权重变为 0,提高计算效率Transformer, CNN适合超大规模模型硬件支持有限

此篇博文会进一步展开模型压缩的几个重要方法:量化、剪枝、蒸馏和二值化。

一、量化(Quantization)

1. 核心思想

降低模型参数的数值精度(如从32-bit浮点数转换为8-bit整数),以降低存储需求和计算复杂度,从而加速推理并减少能耗。

在深度学习模型中,权重和计算通常采用 32 位浮点数(FP32)存储和处理。然而,浮点运算的计算开销大、存储需求高,尤其是在边缘设备、移动设备、嵌入式系统等资源受限的环境中,使用高精度浮点计算并不高效。

2. 量化的主要优势

研究表明,8 位量化能够在几乎不损失模型精度的情况下,将存储需求减少4 倍,推理速度提升 2-3 倍。例如,Vanhoucke 等人在论文 “Improving the Speed of Neural Networks on CPUs” 中指出,在 CPU 上运行 8-bit 量化神经网络时,计算效率显著提升。

  • 减少存储占用:从 FP32 → INT8(减少 4 倍)、INT4(减少 8 倍)、甚至 1-bit(减少 32 倍)。

  • 加速推理计算:低精度整数运算比浮点运算更快,适合 GPU、NPU 等专用硬件加速。
  • 降低功耗:计算资源减少,能耗降低,提升移动端、嵌入式设备的续航能力。
  • 适配硬件并行计算:量化模型可以更好地适配 GPU/NPU 计算单元,提高吞吐量,充分发挥硬件的并行计算能力。
3. 量化的主要方法
3.1 训练后量化(PTQ)

PTQ 是最简单的量化方法,适用于已经训练完成的模型,直接对权重进行量化。它直接将 32-bit 浮点权重量化为 8-bit、4-bit 或 2-bit 以减少存储和计算开销。

主要特点

  • 操作简单:不需要重新训练模型,仅需后处理转换即可。
  • 计算资源消耗低:适用于计算资源受限的设备(如手机、IoT 设备)。
  • 可能存在精度损失:由于量化时未考虑训练中的动态变化,部分模型的推理精度可能会下降。

实际应用

  • TensorFlow Lite提供 PTQ 工具,可将 FP32 转换为 INT8。
  • ONNX Runtime支持多种后训练量化方法,包括动态量化、静态量化等。

缺点

  • 对于某些任务影响较大,如 Transformer、语言模型等,由于 FP32 → INT8 量化后参数范围缩小,可能会影响推理效果。
3.2 量化感知训练(QAT)

QAT 是一种更先进的量化方法,它在模型训练阶段就模拟量化过程,让模型提前适应低精度的表示形式,使得模型在低精度计算环境下仍能保持较高精度。

主要特点

  • 精度保持较好:相比 PTQ,QAT 由于在训练过程中引入了量化模拟,使得模型更容易适应低精度运算。
  • 计算资源消耗高:训练过程中会不断进行浮点数到整数的转换,因此训练成本更高。
  • 更适合 CNN、Transformer 等复杂模型:QAT 适用于对精度要求较高的场景,如图像分类、目标检测等。

实际应用

  • TensorRT(NVIDIA)支持 INT8 QAT,适用于高性能 AI 加速。
  • PyTorch & TensorFlow都提供了 QAT 相关 API。

缺点

  • 训练成本较高:需要重新训练模型,训练过程更为复杂,并增加计算开销。
3.3 量化感知微调(QAF)

QAF 结合了预训练模型的优势和 QAT 量化方法的高效性。它基于预训练模型进行微调,同时引入量化过程,从而在减少计算开销的同时,保持模型的精度。

主要特点

  • 适合迁移学习场景:如 NLP 任务中的 BERT 量化微调。
  • 训练成本介于 PTQ 和 QAT 之间:比 PTQ 需要更多的训练资源,但比 QAT 更轻量。
  • 适用于模型部署优化:对于已经存在的预训练模型,可以通过 QAF 进行微调,以适应特定任务并实现压缩。

实际应用

  • BERT 量化(TinyBERT, DistilBERT)将大规模语言模型进行量化优化,提升推理速度。
  • ResNet 量化微调在 CV 任务中广泛使用,如图像分类、目标检测。

缺点

  • 相对于 QAT,效果可能稍逊:由于 QAF 主要基于微调,可能不如从头进行 QAT 训练的模型鲁棒性强。
量化方法计算资源消耗训练复杂度精度损失适用场景
训练后量化(PTQ)低(无需修改训练)可能较大计算受限设备,离线量化
量化感知训练(QAT)高(需修改训练流程)精度较好需要高精度的推理任务
量化感知微调(QAF)中等中等(基于预训练模型)适中预训练模型的特定任务优化
4. 量化的局限性
  • 精度损失:低比特量化(如 2-bit 或 1-bit)可能导致明显的精度下降,尤其是在 NLP 任务和大规模 CV 任务中。
  • 模型敏感性:不同模型对量化的敏感度并不相同,有些模型量化后性能依旧出色,有些却会大幅下降。某些模型(如 BERT、GPT)对量化较敏感,可能需要特殊优化策略。
  • 训练成本增加:QAT 和 QAF 要修改训练过程,需要额外的计算资源,增加了训练的难度和计算资源需求。
  • 硬件支持问题:虽然 GPU、NPU 逐渐支持低精度计算,但仍然有部分设备对 INT8/INT4/1-bit 量化的支持不完善。

二、剪枝(Pruning)

1. 核心思想

分析神经网络的权重重要性,并移除不重要的部分,即对推理影响较小的权重,使模型结构更加稀疏,从而减少计算量。类似于修剪树木,去除不必要的枝叶,使模型更加高效。

在深度学习模型的训练过程中,神经网络往往会学习到大量冗余信息,这些冗余部分对最终推理的贡献较小。因此,可以去掉影响较小的权重或神经元,使模型变得更加紧凑,从而减少计算量、存储需求,并加速推理。

2. 剪枝的优势

Han 等人在论文 “Learning both Weights and Connections for Efficient Neural Networks” 中提出了一种基于权重重要性的剪枝方法,通过分析权重对模型输出的影响,把影响小的权重“剪掉”。证明了在不明显降低模型精度的前提下,剪枝可以大幅减少模型参数数量

剪枝技术的主要优势包括:

  • 减少存储需求:部分实验表明,剪枝后模型的参数量可减少 50% - 80%,大幅降低模型大小。
  • 加速推理:结构化剪枝可以优化计算图,使推理速度提升 2-3 倍,适用于 GPU、NPU 等硬件加速。
  • 降低能耗:剪枝减少了计算量,使得 AI 模型更适用于 移动端、嵌入式设备 等资源受限的环境。
  • 提高泛化能力:剪枝可减少模型的冗余信息,降低过拟合风险,提高模型泛化能力,使模型在 未见数据上表现更好
3. 剪枝的主要方法

剪枝方法主要分为非结构化剪枝和结构化剪枝:

剪枝类型剪枝方式计算资源消耗硬件加速效果适用场景
非结构化剪枝移除单个权重或连接高压缩率的任务
结构化剪枝移除整个神经元、滤波器或层较高优秀需要加速推理的任务
3.1 非结构化剪枝

非结构化剪枝指的是随机移除单个权重或连接,使神经网络的权重矩阵变得稀疏。这种方式可以精准去除对模型影响最小的参数,从而实现高压缩率。

主要特点

  • 压缩率高:可减少 50% 以上 的参数量,同时维持较高精度。
  • 灵活性强:可以逐个分析神经元权重的重要性,并选择性删除。
  • 硬件加速效果较差:由于现代硬件(如 GPU)更适合规整的计算结构,非结构化剪枝后的稀疏矩阵运算可能无法高效加速。

实际应用

  • 神经网络稀疏化(Sparse Neural Networks):适用于研究剪枝后模型的稀疏性对学习能力的影响。
  • 压缩大规模模型:如 Transformer、ResNet,减少存储开销。

缺点

  • 对硬件不友好:大多数深度学习加速硬件(如 Tensor Core)更擅长处理规整密集矩阵计算,非结构化剪枝产生的稀疏结构在硬件上很难高效实现,可能难以提高推理速度。
3.2 结构化剪枝

结构化剪枝是按照一定规则移除整个神经元、滤波器、通道或层,确保剪枝后的模型仍然具有规整的计算结构,以提升推理效率。这种方法产生的稀疏结构更适合硬件加速

主要特点

  • 硬件友好:剪枝后的网络仍然是密集计算结构,适用于 GPU、NPU 等加速器。
  • 推理速度大幅提升:在 CNN 中,剪枝可以减少不必要的卷积计算,提高执行效率。
  • 压缩率适中:相比非结构化剪枝,结构化剪枝的压缩率可能稍低,但它能带来实际的推理加速效果。

主要方法

  • 滤波器剪枝(Filter Pruning):移除 CNN 卷积层中的部分滤波器,减少计算量。
  • 通道剪枝(Channel Pruning):移除 CNN 的某些通道(Channels),减少计算需求。
  • 层剪枝(Layer Pruning):删除整个神经网络层(Layer),使模型更加紧凑。

实际应用

  • CNN 模型优化:如 MobileNet、ResNet,可以剪枝不重要的卷积滤波器,加速推理。
  • Transformer 剪枝:如 BERT 剪枝(去掉冗余注意力头),减少计算复杂度。

缺点

  • 剪枝比例过高可能影响模型性能:需要在压缩率和模型精度之间找到平衡。
  • 部分剪枝方法需要重新训练:如渐进式剪枝(Iterative Pruning)通常需要微调,以恢复剪枝后的性能。
4. 剪枝的缺点

虽然剪枝技术可以大幅优化模型,但仍然存在以下挑战:

  1. 精度损失问题:尤其是剪枝比例较高时,可能导致模型性能下降。
  2. 训练复杂度增加:部分剪枝方法(如渐进式剪枝)需要重新训练或微调,增加训练的复杂度与计算资源需求。
  3. 硬件适配问题:虽然结构化剪枝更适合硬件加速,但不同硬件平台对剪枝后模型的支持程度不同,可能需要额外优化。
  4. 模型剪枝敏感性不同:不同模型对剪枝的敏感度不同,有些模型剪枝后性能依旧稳定,有些则会出现较大波动。部分神经网络(如 CNN)适合剪枝,而 NLP 任务(如 BERT)剪枝后可能影响较大。

三、知识蒸馏(Knowledge Distillation, KD)

1. 核心思想

让一个小型的“学生模型”学习一个大型的“教师模型”的行为,使得学生模型能够接近教师模型的性能,同时显著减少计算资源的消耗。

在自然语言处理领域,研究人员经常会把预训练的BERT模型作为预训练模型,把轻量级的LSTM模型作为学生模型。经过蒸馏训练,学生模型能够学到教师模型的语言表示能力,在文本分类、情感分析等任务中取得不错的成绩。

2. 知识蒸馏的基本流程

知识蒸馏就是把大型的复杂模型(教师模型)的知识迁移到小型的简单模型(学生模型)。教师模型的参数多、结构复杂,能够学习到丰富的特征与模式,但是难以部署在资源受限的设备上。而学生模型通过学习教师模型的输出(如软标签、中间特征等),就能够在更小的参数规模下,尽可能的接近教师模型的性能。

知识蒸馏的训练过程通常包括以下几个关键步骤:

  • 训练教师模型:选择一个性能优秀的大型复杂模型(如 ResNet-50, BERT),让它在大规模数据集上进行训练,学习丰富的特征信息。

  • 初始化学生模型:然后选择一个较小的网络(如 MobileNet, TinyBERT)作为学生模型,并且进行初始化。学生模型的结构可以不同于教师模型,但应具备一定的学习能力。

  • 蒸馏训练使用教师模型的输出作为额外的监督信息,让学生模型模仿教师模型的预测。训练过程中,优化学生模型的损失函数,使其尽可能接近教师模型的行为。

  • 损失函数通常会包括两部分,一部分是学生模型的原始损失,比如说交叉熵损失。另一部分是学生模型输出和教师模型输出之间的差异,经常用KL散度衡量。

  • 微调学生模型:在蒸馏完成后,可以对学生模型进行额外微调,进一步提升性能。

其中,温度参数相当于知识蒸馏的“难度调节旋钮”,在高温模式下,可以学习到复杂的关联关系;在低温模式下,答案会接近原始分布,适合简单任务。

当然也可以考虑动态策略,即初期用高温广泛吸收知识,而后期降温再聚焦关键的特征。

3. 知识蒸馏的核心方法

知识蒸馏的方法可以按照不同的知识传递方式进行分类,主要包括:

知识蒸馏方法知识传递方式适用场景计算成本
软标签蒸馏(Soft Label Distillation)让学生模型学习教师模型的概率分布图像分类、NLP 任务
特征匹配蒸馏(Feature-Based Distillation)让学生模型学习教师模型的中间特征目标检测、图像分割中等
自蒸馏(Self-Distillation)让模型的浅层学习深层信息Transformer、CNN 结构优化
3.1 软标签蒸馏(Soft Label Distillation)

核心概念

  • 在分类任务中,教师模型输出的不仅仅是最终类别,还包括每个类别的置信度分布(即“软标签”)。
  • 学生模型通过学习这些软标签,能够理解不同类别之间的相似性,从而提升泛化能力。

举例

  • 图像分类任务:教师模型(ResNet-50)输出 猫: 80%, 狗: 18%, 狼: 2% 的概率分布,而不是直接预测
  • 学生模型(ResNet-18) 通过模仿教师模型的这种“细腻认知”能力,提升分类效果。

关键参数:温度(Temperature)

  • 温度 T 影响教师模型输出的平滑度:
    • 高温(T 大):类别之间的置信度分布更均匀,有助于学生模型学习复杂关联。
    • 低温(T 小):答案接近原始分布,适用于简单任务。
  • 动态温度策略:初期 T 较高,允许学生广泛吸收知识;后期 T 降低,使其更聚焦关键特征。
3.2 特征匹配蒸馏(Feature-Based Distillation)

核心概念

  • 软标签蒸馏只学习最终输出,而特征匹配蒸馏要求学生模型学习教师模型的中间层特征。
  • 这种方法更适用于复杂任务,如目标检测、图像分割,因为这些任务依赖多层特征信息。

举例

  • 在目标检测任务(如 Faster R-CNN)中,教师模型可能提取到边缘特征、颜色分布等高阶信息,学生模型需要学习这些信息,以确保检测精度不下降。
3.3 自蒸馏(Self-Distillation)

核心概念

  • 传统的知识蒸馏需要两个模型(教师 & 学生),但自蒸馏可以在同一个模型内进行。
  • 让模型的深层监督浅层,使得整个网络的不同部分协同优化。

适用场景

  • 自蒸馏在 Transformer、CNN 结构优化中广泛应用,如 MobileBERT、T2T-ViT。
4. 知识蒸馏的优势

知识蒸馏的主要优势包括:

  • 模型压缩显著:学生模型的参数量可减少到教师模型的十分之一,甚至更少,推理速度能提高数倍。
  • 提升泛化能力:教师模型的软标签包含丰富的类别区分信息,学生模型学习后能更好地应对新数据,泛化能力更强。
  • 广泛适用性:在图像分类、目标检测、NLP 任务等领域均有应用。
5. 知识蒸馏的挑战

知识蒸馏存在以下挑战:

  1. 教师模型质量决定学生模型性能:学生模型的性能很大程度上依赖教师模型的质量,如果教师模型的表现不佳,学生模型难以学到高质量知识。
  2. 训练过程较复杂:蒸馏需要额外的监督信息,要同时考虑教师模型和学生模型的训练过程,计算成本较高。
  3. 学生模型的精度仍略低于教师模型:特别是在复杂任务(如大规模语言模型)中,蒸馏后的模型仍可能有一定精度损失,学生模型的精度会略低于教师模型。
  4. 模型选择影响蒸馏效果:如何选择合适的教师模型与学生模型也是一个挑战。不同的教师-学生模型组合可能影响蒸馏效果,蒸馏效果可能相差很大,需要实验验证最优组合。

四、二值化(Binary Quantization)

1. 核心思想

二值化(Binary Quantization) 是一种极端的量化技术,它将模型中的权重和激活值限制为仅有两个可能的值(如 -1+1,或 01),仅用1个比特就能表示,从而大幅减少存储需求,并使得推理过程中许多计算可以用高效的位运算(bitwise operations) 代替浮点运算,从而提高计算效率。

  • 传统的 FP32 需要 32-bit 存储,而二值化只需 1-bit,因此模型大小可缩小 32 倍。

  • 二值化网络的计算过程简单很多。由于权重与激活值只有两个可能的值,所以乘法运算可以用简单的加法与位移操作替代,大幅提升计算效率。

  • 由于所有计算仅涉及 0/1 或 -1/+1,卷积运算可转化为XNOR(同或运算)和位操作,而这些操作在硬件上的执行效率非常高。
  • -1 * -1 = +1 等价于 1 XNOR 1 = 1
  • -1 * +1 = -1 等价于 1 XNOR 0 = 0

  • 而且二值计算可减少访存开销,提高能效,适用于低功耗设备(如嵌入式系统、物联网设备)。
2.  二值化方法举例
方法主要特点适用任务压缩率计算效率提升
BinaryConnect仅二值化权重,激活仍为浮点数轻量级图像分类中等
XNOR-Net权重和激活值均二值化物联网、低功耗 AI极高极高
Bi-Real Net在 XNOR-Net 上增加残差连接,提高性能复杂 CV 任务
2.1 BinaryConnect

核心概念

Courbariaux 等人提出的 BinaryConnect 方法(论文:BinaryConnect: Training Deep Neural Networks with Binary Weights during Propagations)。仅对权重进行二值化,激活值仍然保持浮点数,以减少精度损失。不仅能够大幅减少模型的存储空间和计算复杂度,在一些简单的图像分类任务中还能保持较高的精度。

适用场景

在简单的图像分类任务(如 MNIST)中仍能保持较高精度,同时减少模型存储需求。

2.2 XNOR-Net

核心概念

由 Rastegari 等人提出的 XNOR-Net(论文:XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks)。同时二值化权重和激活值,使计算可以完全转换为 XNOR 和位计数(bit-count)操作,大幅提升推理速度。

适用场景

适用于资源受限的设备(如物联网设备、低功耗 AI)。在 ImageNet 分类任务上,XNOR-Net 仅使用标准 CNN 1/58 的计算量,但仍能保持 56% 的 Top-1 精度。

2.3 Bi-Real Net

核心概念

XNOR-Net 的基础上引入残差连接(Residual Connections)。解决二值化模型精度下降的问题,提升在复杂任务中的表现。

适用场景

适用于深度神经网络(如 ResNet-18, ResNet-34)优化,以提高精度。

3. 二值化优势
  • 极高的模型压缩率

    • FP32 → 1-bit,模型存储需求减少 32 倍。
    • 适用于边缘计算、移动端、嵌入式设备等存储受限环境。
  • 大幅提升计算效率

    • 二值卷积可完全转换为 XNOR 和 bit-count 运算,相比浮点运算加速 10 倍以上。
    • 而且二值化网络很适合硬件优化,比如使用专用的二值化硬件加速器。
  • 低功耗计算

    • 由于计算量减少,二值化适用于低功耗 AI 应用,如智能家居、传感器、物联网。
4. 二值化缺陷
  • 精度损失较大

    • 由于数值表示能力受限,二值化模型的精度远低于标准 FP32 模型。
    • 特别是在复杂任务(如 NLP、目标检测)中,二值化导致较大性能损失。
  • 训练难度增加

    • 二值化的权重 不可导,需要特殊的直通估计器(Straight-Through Estimator, STE) 处理梯度计算,否则无法进行有效的反向传播。
  • 模型敏感性不同

    • CNN 在某些任务(如图像分类)中对二值化较为耐受,但 NLP 任务(如 Transformer 模型)二值化后通常损失较大。

五、总结

在深度学习模型的优化过程中,存储需求、计算复杂度和推理速度是影响实际部署的重要因素。模型压缩技术 通过减少参数量和计算量,使得神经网络能够在资源受限的设备上高效运行。

本文介绍的压缩方法包括量化(Quantization)、剪枝(Pruning)、知识蒸馏(Knowledge Distillation, KD)、二值化(Binary Quantization),对比如下。

方法存储压缩比计算加速适用场景影响精度
量化(8-bit, 4-bit)4× ~ 8×适中适用于大多数深度学习模型轻微
剪枝(Pruning)2× ~ 10×适中适用于 CNN, RNN轻微至中等
知识蒸馏(KD)2× ~ 5×适中适用于 NLP, 计算机视觉轻微
二值化(BinaryNet)32×极高超低功耗设备, ASIC, FPGA较大

在实际应用中,需要根据不同的场景需求,综合考虑计算资源、存储需求和精度要求选择合适的模型压缩技术。

  • 资源受限场景(如嵌入式设备、IoT 设备)

    • 首选方法:二值化(BinaryNet)、量化(Quantization)。
    • 原因:二值化可极大减少存储需求并加速计算,适用于精度要求不高的任务;量化则能通过调整量化精度在压缩效果与模型性能之间找到平衡。
  • 计算效率优先(如边缘计算、实时推理)

    • 首选方法:量化(Quantization)、结构化剪枝(Structured Pruning)。
    • 原因:量化(如 INT8 量化)可显著减少计算复杂度,同时维持较高精度;结构化剪枝能够优化计算图,提高推理速度。
  • 高精度要求(如云端推理、智能搜索)

    • 首选方法:知识蒸馏(Knowledge Distillation)。
    • 原因:蒸馏让小模型学习大模型的能力,在不显著降低精度的前提下压缩模型,适用于 NLP 任务(如 TinyBERT)。
  • 混合优化方案(如 AI 手机应用、工业检测)

    • 推荐方法:量化 + 剪枝、蒸馏 + 量化。
    • 原因:剪枝减少冗余计算,量化加速推理,而蒸馏能保持模型精度,结合使用能发挥更佳效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值