4. 模型压缩基础

TinyML 的核心矛盾在于:模型精度通常随参数量和计算量增长而提升,但 MCU 的 Flash、SRAM、算力与功耗预算极其有限。模型压缩不是单一技巧,而是一组从“参数数量、数值位宽、知识表示、矩阵秩”四个维度削减模型成本的方法。理解它们的原理与适用边界,才能在给定硬件约束下选择正确的组合策略。

模型压缩的四个基本维度:
剪枝——减少“有多少参数在参与计算”;
量化——降低“每个参数占多少位”;
知识蒸馏——用大模型的知识指导小模型训练;
低秩分解——用更少的基向量近似原权重矩阵。

一、剪枝:去掉冗余连接

剪枝基于一个观察:深度网络中大量权重接近零,对输出贡献很小。剪枝通过移除这些权重或整个通道,降低参数量和计算量。常见做法是先训练一个较大模型,再按权重绝对值、通道范数或梯度敏感度排序,逐步剪除低重要性部分,最后微调恢复精度。

剪枝分为非结构化剪枝与结构化剪枝。非结构化剪枝把单个权重置零,压缩率高,但产生稀疏矩阵,通用 MCU 没有稀疏加速指令,实际推理速度未必提升,反而可能因索引开销变慢。结构化剪枝直接删除整个卷积核、通道或层,得到规整的小模型,能真实减少计算量,是 TinyML 更实用的选择。

# 结构化剪枝示意(按通道L2范数排序)
for layer in model.conv_layers:
    scores = l2_norm(layer.weight, dim=[1,2,3])
    keep = topk_indices(scores, ratio=0.7)
    layer.weight = layer.weight[keep]
    next_layer.weight = next_layer.weight[:, keep]

剪枝的适用性:适合参数量大、冗余度高的模型;对已经很小、每层都关键的模型收益有限。剪枝后必须重新评估精度与延迟,不能只看参数量下降。

二、量化:降低数值位宽

量化把 FP32 权重和激活映射到 INT8、INT4 甚至二值。它同时压缩模型体积、减少内存带宽、并让 MCU 使用整数乘加指令,通常带来数倍加速。TinyML 最常用的是训练后量化(PTQ)和量化感知训练(QAT)。

PTQ 只需校准数据统计激活范围,流程简单;QAT 在训练中插入伪量化节点,让模型适应量化误差,精度更稳。量化公式可表示为:

q = round(x / scale) + zero_point
x_approx = (q - zero_point) * scale

其中 scale 和 zero_point 由校准集的最小最大值或移动平均确定。INT8 通常精度损失小于 1%,INT4 需要更精细的逐通道量化与 QAT。量化对 TinyML 的适用性最高,几乎是默认选项,但要注意激活动态范围大的层(如 Softmax 前)容易掉点。

三、知识蒸馏:让小模型学会大模型的“软标签”

知识蒸馏不直接压缩已有模型,而是训练一个小型学生模型去模仿大型教师模型的输出分布。教师输出的软标签包含类别间相似性信息,比硬标签提供更丰富的监督信号。损失函数通常由蒸馏损失和真实标签损失加权组成:

loss = alpha * CE(student_logits, hard_label)
     + (1 - alpha) * T^2 * KL(student_soft, teacher_soft)

温度 T 用于平滑教师分布,alpha 控制两者权重。蒸馏的适用性在于:当目标任务数据充足、允许重新训练时,它能显著提升小模型精度;但它不减少已有模型的体积,必须与剪枝、量化配合使用。对 MCU 部署而言,蒸馏是“训练阶段”的压缩手段,推理阶段无额外开销。

四、低秩分解:用矩阵分解近似权重

低秩分解假设权重矩阵存在低秩结构,可用两个小矩阵相乘近似。例如全连接层 W(m×n)分解为 U(m×r)和 V(r×n),r 远小于 m、n。卷积层可分解为深度可分离卷积或张量分解。参数量从 m×n 降到 r(m+n),当 r 较小时压缩明显。

低秩分解适合权重矩阵维度大、秩低的层,如全连接分类头。对已经使用深度可分离卷积的轻量模型,进一步低秩分解收益有限,且分解后可能引入额外算子,需评估实际延迟。

五、四种方法的对比与TinyML适用性

方法压缩对象典型压缩率是否需重训练TinyML适用性
结构化剪枝通道/卷积核2~4×需要微调高,直接减少计算量
非结构化剪枝单个权重5~10×需要微调低,稀疏无加速
INT8量化数值位宽4×PTQ可免,QAT需极高,默认选项
INT4量化数值位宽8×通常需QAT中高,需验证精度
知识蒸馏知识表示不直接压缩需要高,提升小模型精度
低秩分解矩阵秩2~5×需要微调中,适合大矩阵层

六、组合策略与常见误区

实际 TinyML 项目很少只用一种方法。典型流水线是:先训练教师模型,用知识蒸馏训练小模型,再做结构化剪枝,最后 INT8 量化并部署。顺序很重要:先剪枝后量化通常比先量化后剪枝更稳,因为量化后的离散权重难以再判断重要性。

常见误区:
1. 只看参数量下降,不看实际推理延迟;
2. 对已经很小的模型强行高比例剪枝,导致精度崩塌;
3. 忽略量化校准集分布,导致部署后精度骤降;
4. 把知识蒸馏当成压缩手段,却未配合剪枝量化;
5. 低秩分解后引入额外算子,反而增加推理时间。

复盘时建议建立“压缩-精度-延迟-内存”四维记录表,每做一步压缩都重新测量。只有同时满足精度阈值与硬件预算的方案,才是可部署的方案。

模型压缩四维方法与TinyML部署流水线 剪枝 减少参与计算的参数 结构化剪枝优先 压缩率 2~4× 量化 降低数值位宽 INT8 / INT4 压缩率 4~8× 知识蒸馏 教师软标签指导 训练阶段压缩 提升小模型精度 低秩分解 矩阵低秩近似 W ≈ U·V 压缩率 2~5× 典型TinyML压缩流水线 训练教师模型 FP32 大模型 蒸馏小模型 软标签训练 结构化剪枝 通道裁剪+微调 INT8量化 PTQ / QAT MCU部署 TFLite Micro TinyML硬件约束与评估维度 Flash 占用 SRAM 峰值 推理延迟 精度损失 每步压缩后重新测量,四维同时达标才可部署