跳转至

第5章:神经网络的稀疏化与轻量化 — 复习资料

1. 权重稀疏(Weight Pruning)

1.1 剪枝的基本思想与工作流

权重剪枝的核心策略是通过去除网络中不重要的连接来降低冗余,经典工作流包含三个阶段:

  1. 训练连接(Train Connectivity):正常训练一个稠密神经网络,使其达到收敛。
  2. 剪除连接(Prune Connections):设定阈值,将权重绝对值小于或等于该阈值的参数强制置零:

$\(\hat{w} \leftarrow |w|, \quad \text{if } \hat{w}_i \leq \text{Threshold} \text{ then } w_i \leftarrow 0\)$

  1. 微调权重(Fine-tuning):保持稀疏拓扑结构不变,对剩余非零权重进行重训以恢复精度损失。

1.2 核心规律与 Sweet Spot 现象

根据基准测试研究,剪枝策略表现出以下规律:

  • 大稀疏模型优于小稠密模型:在内存占用相同的情况下,经过剪枝的"大而稀疏"模型精度显著高于直接训练的"小而稠密"模型。
  • 同体积对比优势:稀疏模型在同等非零参数量下,准确率优于原生的同体积非稀疏模型。
  • 甜区(Sweet Spot)的权衡
剪枝粒度 甜区范围 特点
细粒度(非结构化) 80% ~ 90% 精度高,可剪比例大
粗粒度(结构化) 50% ~ 70% 加速效果好,甜区更窄

在甜区范围内模型损失变化极其平缓;一旦超过临界点,准确率急剧下跌。

  • 硬件优化方向:稀疏矩阵存储格式(如 CSR)的硬件支持也是重要的优化点。

1.3 细粒度(非结构化)剪枝 vs. 粗粒度(结构化)剪枝

特征维度 非结构化剪枝(Fine-grained) 结构化剪枝(Coarse-grained)
裁剪机制 直接减除低于阈值的独立权值,非零元素在矩阵中呈不规则随机分布 在特定维度(特征通道、卷积核、神经元)上做整块裁剪
数学形态 不改变参数矩阵形状,演变为含大量零值的稀疏矩阵(高度非规则) 直接删减矩阵维度,生成更小但规则连续的密集矩阵
硬件加速 难以加速:内存访问不规则,需 CSR/CRS 等稀疏格式 + 专用硬件 容易加速:矩阵规则,可直接复用现有卷积/矩阵乘算子
模型精度 精度高、压缩率大:契合权重随机分布 精度和压缩比相对较低:会误伤部分数值较大的权值

深度神经网络的权值稀疏存在模型有效性计算高效性之间的根本权衡。


1.4 结构化剪枝:基于 L1-norm 的 Filter 剪枝

在 CNN 中,通过剪除整个滤波器(Filter)实现结构化加速是最经典的做法。

1.4.1 算法核心机制

设第 \(i\) 层的输入通道数为 \(n_i\),输出通道数为 \(n_{i+1}\)(即该层有 \(n_{i+1}\) 个滤波器),每个滤波器空间大小为 \(k \times k\)

  • 滤波器张量记为 \(\mathcal{F}_{i,j}\)(第 \(i\) 层第 \(j\) 个滤波器)
  • 剪除 \(\mathcal{F}_{i,j}\) → 第 \(i+1\) 层对应特征图(通道)被切除
  • \(i+1\) 层中与被剪特征图相关的卷积核切片(Slice)同步剪除

1.4.2 算法步骤

  1. 重要性计算:对每个滤波器 \(\mathcal{F}_{i,j}\),计算 L1-norm 作为度量指标:

$\(S_j = \sum_{l=1}^{n_i} \sum |K_l|\)$

  1. 排序:按 \(S_j\) 从小到大排序
  2. 裁剪滤波器:剪除 \(m\)\(S_j\) 最小的滤波器及对应特征图
  3. 级联裁剪:在下一卷积层中同步剪除对应输入通道切片
  4. 创建新网络:为第 \(i\) 层和第 \(i+1\) 层创建缩减维度的新权重矩阵,将剩余权重参数复制到新模型

1.5 正则化引导稀疏

若预训练网络参数中近零值较少,可剪除的滤波器数目就会受限。在损失函数中引入正则项,可迫使模型训练出更稀疏的参数分布:

\[L(W) = \frac{1}{N}\sum_{i=1}^{N} L_i\big(f(x_i, W), y_i\big) + \lambda R(W)\]
正则项 定义式 \(R(W)\) 特点
\(L_1\) 正则 \(\sum_{k}\sum_{l} \vert W_{k,l} \vert\) 促使权重向 0 轴极度压缩,产生大量严格为 0 的参数
\(L_2\) 正则 \(\sum_{k}\sum_{l} W_{k,l}^2\) 惩罚过大权重,使参数分布更平滑(权重衰减)
\(L_{1,2}\) 正则 \(\sum_{k}\sum_{l}\big(\beta W_{k,l}^2 + \vert W_{k,l} \vert\big)\) 混合惩罚,兼顾平滑性与绝对稀疏性

2. 激活稀疏(Activation Sparsity)

2.1 ReLU 与激活稀疏

非线性激活单元是对人类神经元输出状态的功能模拟。ReLU(Rectified Linear Unit)的定义带来了天然的动态激活稀疏:

\[\phi(z) = \max(0, z)\]

当输入 \(z < 0\) 时输出严格为 \(0\),这意味着大量神经元在前向传播中不产生有效计算。

2.2 APoZ 指标(Average Percentage of Zeros)

APoZ 用于量化每个神经元经非线性映射后输出的零值平均百分比:

\[APoZ_c^{(i)} = APoZ\big(O_c^{(i)}\big) = \frac{\sum_{k}^{N}\sum_{j}^{M} f\big(O_{c,j}^{(i)}(k) == 0\big)}{N \times M}\]
  • \(O_c^{(i)}\):第 \(i\) 层第 \(c\) 个通道的卷积输出
  • \(N\):验证图像样本个数;\(M\):特征图维度
  • \(f(\cdot)\):条件为真输出 1,否则输出 0

剪枝依据:APoZ 接近 1 的神经元对后续层计算和最终推理贡献极小,可安全移除。

2.3 SBNet(Sparse Blocks Network)

激活稀疏随输入样本动态变化(与静态权重剪枝不同)。SBNet 借助外部信息给特征图施加方形掩码(Mask):

  1. Gather:将包含非零激活的稠密子块(Tiles)挑选出来
  2. Convolution:对挑选出的子块集中进行卷积计算
  3. Scatter:将结果还原到对应空间位置

通过跳过全零区域,实现全网络推理加速。


3. 梯度稀疏(Gradient Sparsity)

3.1 分布式训练的通信瓶颈

在分布式 SGD 中,多节点需实时交换梯度。随着节点数增多,通信开销逐渐超过计算开销,成为系统性能瓶颈。

3.2 梯度稀疏化 SGD 算法

实际训练中梯度表现出高度稀疏冗余(有时高达 99.9% 的梯度交换都是冗余的)。算法流程:

  1. 幅度阈值选择:每次迭代中,取梯度的 Top-\(s\%\) 绝对值作为阈值 \(thr\)
  2. 生成稀疏掩码:仅保留 \(\vert G_t^k \vert > thr\) 的梯度分量用于发送
  3. 本地残差累积(Local Gradient Accumulation):未超过阈值的微弱梯度在本地累积,累积足够大后再在后续迭代中发送,确保训练收敛

4. 模型量化(Quantization)

4.1 量化与剪枝的核心区别

模型剪枝 模型量化
操作对象 删除/修剪冗余权重 减少权重表示的比特数
参数数量 直接减少 不变
矩阵形状 可能改变(结构化剪枝) 不变

4.2 线性量化原理

将实数域浮点范围 \([Min, Max]\) 均匀映射到整数域 \([0, 255]\)(UINT8 定点表示)。

4.3 三值网络(Ternary Networks)

将权重量化到仅三个值 \(\{-1, 0, +1\}\),进一步极致压缩模型体积。相比 INT8 的 8-bit 表示,三值网络每个权重仅需约 2-bit。


5. 轻量化网络设计

5.1 深度可分离卷积(Depthwise Separable Convolution)

将标准卷积分解为深度卷积(Depthwise Conv) + \(1 \times 1\) 逐点卷积(Pointwise Conv) 两步串行操作。


5.2 分组卷积(Group Convolution)与 Channel Shuffle

分组卷积:在通道维度上将特征图均匀切分为 \(g\) 个互不重叠的组,每组独立进行标准卷积,参数量和计算量直降为原来的 \(1/g\)

Channel Shuffle:分组卷积各组间信息不相通,降低了特征提取能力。ShuffleNet 引入 Channel Shuffle 操作——将各组输出通道打散后按固定规则交叉重组,增加跨组信息连接多样性,在维持极低计算复杂度的前提下恢复模型准确率。