模型轻量化三大核心技术之:量化与剪枝
在边缘设备(手机、IoT 传感器、车载终端)算力与存储有限的场景中,深度学习模型需通过 “轻量化” 实现落地。量化、剪枝与蒸馏是当前工业界最核心的三种技术,分别从 “数据精度”、“模型结构”、“知识传递” 三个维度,在保证精度的前提下,实现模型体积缩减与计算效率提升。
一、模型量化:从 “数据精度” 入手,边缘部署的必选项
模型量化的核心是将模型中高精度的数据格式转换为低精度格式(如:32 位浮点数 FP32 → 8 位整数 INT8),通过 “精准映射” 减少数据存储量与计算量,同时将精度损失控制在可接受范围。
目前工业界 90% 以上的边缘 AI 模型(如手机人脸识别、车载目标检测)均依赖量化技术,其中 INT8 量化因 “4 倍体积压缩、2 ~ 4 倍速度提升、1 ~ 3% 精度损失” 的均衡优势,成为最主流的方案。
1. 量化分类
(1)按量化精度分
不同精度格式对应不同的压缩效果、硬件支持场景,需匹配具体业务需求:
精度格式 | 核心特点 | 压缩比(vs FP32)以及精度损失 | 硬件支持 | 典型场景 |
---|---|---|---|---|
FP16 / BF16 | 保留浮点格式,无整数截断误差,精度接近 FP32 | 2 倍(< 0.5%) | GPU/NPU(如昇腾 910、英伟达 A10) | 精度敏感场景(医疗影像分割、大语言模型 LLM) |
INT8 | 整数格式,动态范围有限,需校准控制误差 | 4 倍(1 ~ 3%) | 全硬件支持(CPU/MCU/GPU) | 边缘通用场景(手机人脸解锁、车载目标检测) |
INT4 | 动态范围极小,需专门训练优化抗误差能力 | 8 倍(3 ~ 8%) | 中高端 NPU(骁龙 8 Gen3、麒麟 9000S) | 存储受限场景(智能手表健康监测、IoT 传感器分类) |
二值 / 三值量化 | 压缩比极高,但精度损失大,仅保留 0 和 ±1 | 32 / 16 倍 (8 ~ 20%) | 专用 ASIC(谷歌 TPU v1、边缘定制芯片) | 简单任务(语音唤醒、手写数字 MNIST 分类) |
(2)按量化阶段分:平衡部署效率与精度上限
- 训练后量化(PTQ)
- 核心逻辑:在模型训练完成后,通过 “数据校准”(用 100 - 1000 张代表性数据分析权重 / 激活值的动态范围),将原本的 FP32 / FP16 权重映射到低精度整数(INT8 / INT4)的数值区间,同时尽可能保留模型关键信息。
- 精度表现:精度上限有限(INT4 量化损失可能超 5%)
- 适用场景:快速验证、对精度要求不高的场景。
- 量化感知训练(QAT)
- 核心逻辑:在模型训练过程中,通过插入“伪量化节点”模拟低精度计算误差,引导模型参数学习出抗量化干扰的分布,最终将高精度权重转换为低精度格式时能最大程度保留关键信息。最终输出的是 “更适合量化的高精度模型”。
- 精度表现:精度损失极小(INT8 < 1%,INT4 < 3%)
- 适用场景:医疗质检、车载安全等精度敏感场景。
伪量化节点是 QAT 中模拟低精度量化行为的“虚拟组件”,它在模型训练的前向计算中,会像真实量化一样对高精度参数进行“舍入、截断”处理(比如把 3.68 临时转为 INT8 范围的 4,把 -2.31 转为 -2),模拟低精度格式带来的误差,再将处理后的值转回高精度参与后续计算和反向传播,让模型在训练中“提前适应”量化带来的精度损失,最终学到更耐量化干扰的参数分布。
补充:PTQ 的校准方法对比
PTQ 的关键是 “通过少量数据确定量化范围”,不同校准方法影响精度与效率:
校准方法 | 核心逻辑 | 精度表现 | 计算成本 |
---|---|---|---|
最大最小值校准 | 取校准数据的 “最大 / 最小值” 作为量化范围 | 较低(易受异常值影响) | 极低(几分钟完成) |
KL 散度校准 | 最小化量化前后数据分布的 KL 散度 | 较高(精度损失降 50%) | 较高(1-2 小时完成) |
2. 量化的两种实现方式:对称与非对称
量化的核心是 “让低精度格式覆盖模型数据的有效范围”,根据数据分布特点,分为两种实现思路:
- 对称量化:低精度数据的 “正负范围” 与模型数据对称。硬件计算时无需处理零点,效率更高,适用于卷积层、全连接层等 “正负数据分布均衡” 的层(参数有正有负,数量接近)
例如:INT8 的范围是 [-128, 127],则将模型数据映射到 [ -S × 127, S × 127 ](S 为缩放因子,如 0.02),无需额外存储 “零点” 信息。
- 非对称量化:针对模型数据 “仅分布在单一区间”(如全正 / 全负)的场景,通过自定义 “零点”(非 0 值)调整量化范围,避免低精度格式的 “无效区间” 浪费,比对称量化减少 20 ~ 50% 的精度损失,适用于 ReLU 层、BatchNorm 层(ReLU 输出全为非负,BatchNorm 层数据也常集中在单一区间)。
例如:ReLU 层数据范围是 [0,10],则将无符号 INT8(0-255)映射到 [0,10],让 INT8 的 “0” 对应模型数据的 “0”(零点为 0)。
3. 量化的常见难题与解决方案
问题 1:模型不同层对量化的敏感度差异大(如 BatchNorm、Softmax 为敏感层,卷积层为非敏感层),敏感层量化后精度易暴跌;
解决方案:敏感层用高精度(如 FP16),非敏感层用低精度(如 INT8);
案例:车载 YOLOv8 部署 —— 卷积层(非敏感)用 INT8 提速 3 倍,注意力层 / 检测层(敏感)用 FP16 保精度,最终体积压缩 3.2 倍,速度提升 2.8 倍,mAP 仅降 0.5%,满足实时检测(≥30 帧 / 秒)。
问题 2:静态量化(PTQ / QAT)的前提条件是输入数据范围固定,但实际场景中范围会变(如 LLM 处理长文本时激活值范围扩大),静态量化固定的量化参数无法适配新范围,超出部分会被 “截断”,导致精度下降;
解决方案:在模型推理阶段,针对每一批次输入数据,实时统计其实际动态范围(最大值、最小值),据此重新计算并动态调整量化参数(缩放因子 S、零点 Z),再进行低精度量化计算,从而适配输入范围的波动以避免精度下降。
二、模型剪枝:从 “结构冗余” 入手,移除无用组件
模型剪枝的核心是识别并移除模型中 “贡献度极低的冗余结构”(如接近 0 的权重、重复的特征通道、冗余的网络层),在不依赖硬件低精度支持的前提下,实现模型 “瘦身”。
例如:传统 ResNet-50 中 40 ~ 60% 的参数接近 0,剪枝后可压缩 2 ~ 3 倍体积、提升 1.5 ~ 2 倍速度,且精度损失极小,适合医疗影像、工业质检等精度敏感场景。
剪枝的核心分类:按 “粒度” 选择部署方案
剪枝 “粒度” 指 “被移除结构的最小单位”,粒度越小压缩比越高,但对硬件依赖越强;粒度越大部署越便捷,但压缩比有限:
(1)非结构化剪枝:逐参数的极致压缩
- 最小单位:单个参数(如卷积核中的元素);
- 核心逻辑:通过 “权重绝对值”、“梯度贡献” 等指标计算参数重要性,删除低重要性参数,实现 70 ~ 95% 的稀疏度;
- 流程:训练基线模型 → 计算参数重要性 → 删除低评分参数 → 微调恢复精度;
优点:压缩比极高(ResNet-50 剪枝 90% 后体积仅 9.7MB);
局限:需硬件支持稀疏计算(如 NVIDIA Tensor Core),否则通用 CPU/GPU 推理反而变慢。
(2)结构化剪枝:部署友好的工业主流
- 最小单位:完整模块(特征通道、卷积核、网络层),剪枝后模型仍为密集结构;
- 分类与实践:
剪枝类型 | 剪枝单位 | 核心原理 | 典型案例(ResNet-50) |
---|---|---|---|
通道剪枝 | 卷积层特征通道 | 计算通道 L1 范数(范数越小贡献度越低),删除低范数通道 | 剪 30% 通道,参数量降 35%, 精度损失 < 0.5% |
卷积核剪枝 | 完整卷积核 (如 3 × 3) | 计算卷积核输出方差(方差小则特征单一),删除低方差卷积核 | 剪 40% 卷积核,计算量降 45%, 精度损失 < 1% |
层剪枝 | 整个网络层(如残差块) | 移除层后若精度下降 < 0.5%,则保留剪枝结果 | 删 10 个残差块,速度升 15%, 精度损失 < 0.3% |
- 功能退化:剪枝后模型关键特征提取能力下降。需通过两大优化策略规避,同时减少精度损失:
- 同步匹配通道,避免功能断裂:通道剪枝并非仅删除当前层的冗余输出通道,还需同步删除后续关联层的对应输入通道。若仅删前不删后,后续层会出现 “无效输入位”,导致特征传递断裂,直接引发模型功能退化。
- 采用渐进式剪枝,降低精度冲击:每次仅剪去 10 ~ 20% 的冗余通道(通过指标筛选,如权重绝对值小于阈值的通道),剪枝后立即用训练数据微调模型,让剩余通道重新适配特征提取任务;重复该循环直至达到目标剪枝比例。这种方式能让模型逐步适应通道减少的变化,避免因 “突然移除大量通道” 导致的精度骤降。
混合剪枝:先做结构化剪枝(粗剪,如删 30% 通道),保证模型结构密集、易部署;再做非结构化剪枝(细剪,如删 40% 低重要性参数),进一步提升压缩比;