2. 稀疏化基础

在自动驾驶模型部署中,稀疏化并不是“把权重随便置零”这么简单。它本质上是在参数空间中引入一种约束,让模型用更少的有效连接表达同样的函数映射。理解稀疏表示、正则化形式以及稀疏结构,是后续剪枝、量化与编译优化的共同基础。

一、稀疏表示:从稠密参数到稀疏参数

一个神经网络层可以表示为权重矩阵 W ∈ R^{m×n}。稠密表示意味着几乎所有元素都参与计算;稀疏表示则希望其中大量元素为零或可被跳过。数学上,稀疏表示常写成:

W = W_dense ⊙ M
M_ij ∈ {0, 1}
||M||_0 = k ≪ m×n

其中 M 是掩码,⊙ 是逐元素乘,||M||_0 表示非零元素个数。稀疏表示的核心价值在于:如果硬件或推理引擎能识别零元素并跳过对应乘加,就能降低计算量、内存带宽和能耗。但要注意,稀疏表示本身不等于加速,只有“稀疏表示 + 支持稀疏计算的运行时”才可能带来实际收益。

二、L0、L1、L2正则化:三种不同的“稀疏压力”

为了让训练过程产生稀疏解,通常会在损失函数中加入正则项。不同范数对参数的作用差异很大:

  • L0 正则化:直接惩罚非零参数个数,即 ||W||_0。它最符合“稀疏”的直觉,但不可导、组合优化困难,实际中常用近似方法或硬阈值剪枝替代。
  • L1 正则化:惩罚绝对值之和 ||W||_1。它在零点附近产生尖角,能推动部分参数精确变为零,因此常被用作稀疏诱导。
  • L2 正则化:惩罚平方和 ||W||_2^2。它主要抑制大权重、提升泛化,但不会产生精确零值,因此不是稀疏化工具,而是稳定训练的手段。

关键区别:L0 追求“非零个数最少”,L1 追求“绝对值总和最小并诱导零解”,L2 追求“权重幅度整体变小”。在自动驾驶模型稀疏化中,L1 常用于训练阶段诱导稀疏,L0 常用于剪枝目标定义,L2 则更多作为基础正则化配合使用。

三、稀疏度定义:如何量化“稀疏了多少”

稀疏度是工程中最常用的指标,但不同团队口径可能不同。常见定义如下:

指标 公式 含义 注意事项
元素稀疏度 1 - nnz / total 零元素占比 最直观,但不一定对应加速
结构化稀疏度 1 - 有效块数 / 总块数 通道、块或行被剪掉的比例 更贴近硬件加速
FLOPs 稀疏度 1 - 稀疏FLOPs / 稠密FLOPs 计算量减少比例 需结合运行时支持判断
参数量稀疏度 1 - 非零参数 / 总参数 存储节省比例 与内存布局强相关

例如,一个 256×256 的全连接层共有 65536 个权重,若非零权重为 16384,则元素稀疏度为 75%。但如果零元素随机分布,GPU 仍可能按稠密方式计算,实际加速有限。因此,稀疏度必须和“稀疏模式”一起看。

四、非结构化稀疏与结构化稀疏:区别与联系

非结构化稀疏指任意位置的权重都可以被置零,零元素分布不规则;结构化稀疏则按固定粒度成组置零,例如按通道、按行、按块或按 N:M 模式。两者关系可以用下面的信号链与结构对比图来理解:

稀疏模式对比:非结构化 vs 结构化 同一权重矩阵,不同置零方式导致不同的硬件执行路径 稠密权重矩阵 0.80.20.60.10.9 0.30.70.40.50.2 0.60.10.80.30.7 0.20.90.50.40.6 0.70.40.20.80.1 随机置零 非结构化稀疏 0.800.600.9 00.700.50 0.600.800.7 00.900.40 0.700.200.1 零元素随机分布,需专用稀疏格式/硬件 按块置零 结构化稀疏 0.80.2000 0.30.7000 000.80.30.7 000.50.40.6 000.20.80.1 整块/整通道置零,可直接跳过计算 联系与工程取舍 • 非结构化稀疏:压缩率高、精度损失小,但需要专用稀疏格式与运行时支持。 • 结构化稀疏:硬件友好、易加速,但同等稀疏度下精度损失通常更大。 • 两者可组合:先结构化剪枝获得加速,再叠加非结构化稀疏进一步压缩。

从图中可以看到,非结构化稀疏的零元素像“散点”,结构化稀疏的零元素像“整块空洞”。前者压缩潜力大,但需要 CSR、CSC 或块稀疏格式等专用表示;后者可以直接让某些通道或块不参与计算,更容易在 GPU、NPU 或车载推理芯片上获得实际加速。

五、案例与场景:自动驾驶感知模型中的稀疏化

以 BEV 感知模型中的卷积层为例,假设某层权重为 64×64×3×3。若采用非结构化剪枝,将 80% 权重置零,参数量显著下降,但卷积核内部零散分布,通用卷积库仍按稠密计算,端到端延迟可能只下降 10%~20%。若改为结构化剪枝,直接剪掉 50% 的输出通道,则卷积输出通道数从 64 降到 32,FLOPs 和内存访问同步下降,延迟更容易获得接近线性的收益。

工程建议:在自动驾驶模型稀疏化中,优先明确目标硬件的稀疏支持能力。如果运行时只支持稠密计算,非结构化稀疏主要价值在存储压缩;如果支持结构化跳过或 N:M 稀疏,则应优先设计结构化稀疏方案。

六、常见误区与复盘

  • 误区一:稀疏度越高越好。稀疏度过高会破坏特征表达,导致检测框抖动、漏检或轨迹预测误差增大,必须结合精度指标做敏感度分析。
  • 误区二:L2 正则化能产生稀疏。L2 只会让权重整体变小,不会产生精确零值,不能替代 L1 或剪枝。
  • 误区三:稀疏等于加速。没有稀疏运行时和合适的数据布局,稀疏模型可能因索引开销而更慢。
  • 误区四:只关注权重稀疏,忽略激活稀疏。自动驾驶模型中 ReLU 等激活本身会产生大量零,权重稀疏与激活稀疏结合才更接近真实收益。

复盘时建议同时记录四类指标:元素稀疏度、结构化稀疏度、实际 FLOPs 下降比例和端到端延迟。只有这四者一致改善,才说明稀疏化真正落地,而不是停留在统计数字上。