稀疏权重基础:什么是权重稀疏性、结构化与非结构化稀疏、稀疏度度量方法

TinyML 模型部署到微控制器(MCU)时,最核心的瓶颈往往不是算力,而是存储带宽与内存容量。权重稀疏性正是针对这一瓶颈的关键突破口。简单来说,权重稀疏性指的是神经网络权重矩阵中数值为零(或接近零)的元素的占比。当我们将这些冗余权重剔除或压缩后,模型文件体积可以显著缩小,推理时的乘加运算量也能大幅降低。然而,稀疏性并非“零越多越好”——零的分布方式直接决定了硬件能否真正受益。本节将系统梳理稀疏性的本质、两种主要形态(结构化与非结构化),以及如何科学度量稀疏度,为后续的存储格式设计奠定基础。

稀疏权重知识框架:形态、度量与硬件适配 权重稀疏性 非结构化稀疏 零值随机分布,无固定模式 压缩率高,但硬件加速难 需索引/位图记录位置 结构化稀疏 零值按块/通道/核排列 硬件友好,支持跳过计算 压缩率相对较低 稀疏度度量 • 全局稀疏度 = 零值总数 / 总权重数 • 结构化稀疏度 = 被剪枝块数 / 总块数 • 有效稀疏度 = 实际可跳过运算比例 硬件适配决策 • MCU 无专用稀疏加速 → 结构化优先 • 有 DMA 与查找表 → 非结构化可行 • 存储格式需匹配硬件读取粒度

上图展示了稀疏权重的核心知识框架。左侧为非结构化稀疏,右侧为结构化稀疏,底部则对应稀疏度度量方法与硬件适配决策。理解这三者的关系,是设计稀疏存储格式的前提。

2.1 权重稀疏性的本质与来源

权重稀疏性并非天然存在,而是通过训练后剪枝(Post-training Pruning)、训练中稀疏化(Sparse Training)或正则化惩罚(如 L1 正则)等手段人为引入的。其本质在于:神经网络中存在大量冗余连接,这些连接的权重绝对值很小,对最终预测结果的贡献微乎其微。移除它们不会显著影响模型精度,却能带来存储和计算上的双重收益。

从信息论角度看,稀疏性是一种可压缩性的体现。一个稠密矩阵包含大量重复或近似为零的信息,而稀疏表示则用更少的非零元素加位置索引来近似描述原矩阵。在 TinyML 场景中,这种压缩直接转化为 Flash 占用减少和 SRAM 访问压力降低。

核心要点:稀疏性的价值不在于“零的个数”,而在于“零的分布是否便于硬件跳过”。一个 90% 稀疏但零值完全随机的矩阵,在普通 MCU 上可能比 70% 稀疏但按 4×4 块剪枝的矩阵运行更慢,因为前者需要逐元素判断是否为零,而后者可以直接跳过整个块的计算。

2.2 非结构化稀疏:高压缩率与硬件代价

非结构化稀疏(Unstructured Sparsity)是指权重矩阵中零值的位置完全随机,没有任何规律可循。这种稀疏方式通常由基于幅度的剪枝(Magnitude Pruning)产生——将绝对值小于阈值的权重直接置零。其最大优势是压缩率上限高,理论上可以去除 90%~95% 的权重而不明显损失精度。

然而,非结构化稀疏对硬件极不友好。CPU 或 MCU 在计算时无法预知哪些权重为零,必须通过额外的索引结构(如 COO 格式的坐标列表、CSR 格式的行偏移+列索引)来定位非零元素。每次乘加运算前都需要查表,导致控制开销剧增。在 Cortex-M 级别的处理器上,这种开销往往抵消了减少乘法运算带来的收益。

存储格式压缩率硬件加速难度适用场景
COO(坐标列表)高高(需逐元素查索引)离线分析、GPU 稀疏库
CSR(压缩稀疏行)高中(行内连续读取)CPU 推理、部分 DSP
位图掩码中低(按位判断)MCU 上的小规模稀疏

在实际 TinyML 项目中,非结构化稀疏通常需要配合权重重排(Weight Permutation)或负载均衡策略,将非零元素集中到某些通道或行中,以便利用 SIMD 指令或 DMA 批量传输。否则,存储格式的索引开销可能超过压缩节省的空间。

2.3 结构化稀疏:硬件友好的剪枝模式

结构化稀疏(Structured Sparsity)通过约束零值的位置,使其形成规则的几何形状,例如整行、整列、整个通道(Channel)或固定大小的块(如 2×2、4×4)。这种稀疏方式虽然压缩率略低于非结构化,但硬件可以直接跳过整个块的计算,无需逐元素判断。

常见的结构化稀疏模式包括:

  • 通道稀疏(Channel Pruning):直接删除整个输出通道的权重,对应特征图的一个切片。实现最简单,但精度损失较大。
  • 向量稀疏(Vector Pruning):按行或列剪枝,适用于全连接层或 1×1 卷积。
  • 块稀疏(Block Pruning):按固定大小的矩形块剪枝,如 2×4 或 4×4。在卷积核中较为常用,兼顾压缩率与硬件效率。

结构化稀疏的核心价值在于可预测的内存访问模式。当硬件知道某个块被剪枝后,可以直接跳过该块对应的乘加运算,同时存储格式也可以简化为“块掩码 + 非零块数据”,无需记录每个零元素的位置。

工程经验:在 ARM Cortex-M55 或带有自定义 MAC 阵列的 MCU 上,4×4 块稀疏通常是最佳平衡点。小于 4×4 的块(如 2×2)虽然压缩率更高,但跳块判断的频率也更高,控制逻辑占用更多指令周期;大于 4×4 的块则精度损失明显增大。

2.4 稀疏度度量方法:从统计到有效计算

稀疏度度量是评估剪枝效果和选择存储格式的基础。最直观的指标是全局稀疏度(Global Sparsity),定义为:

全局稀疏度 = (总权重数 - 非零权重数) / 总权重数 × 100%

但全局稀疏度并不能反映硬件实际收益。例如,一个 90% 稀疏的矩阵,如果非零元素集中在少数几行,那么这些行仍然是稠密计算,整体加速效果有限。因此,需要引入更精细的度量指标:

  1. 结构化稀疏度:被剪枝的块数占总块数的比例。用于评估硬件可跳过的计算量。
  2. 有效稀疏度:实际减少的乘加运算次数与总运算次数之比。考虑到跳块判断本身也有开销,有效稀疏度通常低于理论稀疏度。
  3. 存储压缩比:原始稠密模型文件大小与稀疏存储后文件大小的比值。这是衡量模型文件管理效率的直接指标。
度量指标计算公式反映的问题
全局稀疏度零值数 / 总权重数整体冗余程度
结构化稀疏度剪枝块数 / 总块数硬件可跳过计算的比例
有效稀疏度1 - (非零块运算量 / 总运算量)实际加速效果
存储压缩比原始大小 / 稀疏文件大小Flash 占用优化程度

在模型文件管理实践中,建议同时记录全局稀疏度和结构化稀疏度。前者用于评估剪枝算法的有效性,后者用于决定存储格式和推理引擎的调度策略。如果结构化稀疏度低于 50%,则非结构化稀疏可能更合适;反之,结构化稀疏能带来更稳定的性能提升。

2.5 案例拆解:8×8 卷积核的稀疏化决策

假设我们有一个 8×8 的卷积核权重矩阵,原始稠密存储需要 64 个浮点数(256 字节)。经过幅度剪枝后,得到以下两种稀疏方案:

方案 A(非结构化稀疏):将绝对值小于 0.1 的权重置零,共 48 个零值,全局稀疏度 75%。非零元素位置完全随机,需使用 COO 格式存储:16 个非零值 + 16 个行索引 + 16 个列索引,共 48 个整数(假设索引为 8 位),总存储约 16×4 + 32×1 = 96 字节。压缩比 2.67:1。但在 MCU 上推理时,每个非零元素都需要先读取索引再读取权重,额外增加约 32 次内存访问。

方案 B(4×4 块稀疏):将整个 4×4 块中绝对值均值小于阈值的块置零。8×8 矩阵共分为 4 个 4×4 块,其中 3 个块被剪枝,结构化稀疏度 75%。存储格式为:1 个非零块(16 个浮点数)+ 4 位块掩码(每位表示一个块是否非零),总存储约 16×4 + 1 = 65 字节。压缩比 3.94:1。推理时只需检查 4 位掩码,跳过 3 个块的计算,仅执行 16 次乘加。

风险提示:方案 B 的压缩比虽然更高,但精度损失可能大于方案 A,因为块剪枝是粗粒度的,可能误删包含重要权重的块。在实际项目中,应先进行非结构化剪枝评估精度上限,再逐步向结构化剪枝过渡,并通过微调(Fine-tuning)恢复精度。

复盘此案例,关键结论是:在资源受限的 MCU 上,结构化稀疏的“有效加速比”往往优于非结构化稀疏,即使其理论压缩率略低。存储格式的选择应基于目标硬件的内存访问粒度和计算单元特性,而非单纯追求零值比例。

2.6 常见误区与总结

在稀疏权重的实际应用中,工程师常陷入以下误区:

  • 误区一:稀疏度越高越好。当稀疏度超过 95% 时,精度往往急剧下降,且索引开销占比过高,压缩收益边际递减。
  • 误区二:忽略零值分布。只报告全局稀疏度,不分析零值是否集中在可跳过的块中,导致存储格式选错。
  • 误区三:盲目使用 CSR 格式。CSR 在 CPU 上高效,但在 MCU 上需要动态分配内存,且行偏移的间接寻址增加了延迟。
  • 误区四:不进行微调。剪枝后直接部署,精度损失超出预期,实际上通过几轮微调可以恢复大部分精度。