一、论文基本信息
论文名称:Second Order Derivatives for Network Pruning: Optimal Brain Surgeon
常用简称:Optimal Brain Surgeon,OBS
作者:Babak Hassibi, David G. Stork
会议:Advances in Neural Information Processing Systems 5,NIPS 1992
相关扩展版本:Optimal Brain Surgeon and General Network Pruning
作者:Babak Hassibi, David G. Stork, Gregory Wolff
会议:IEEE International Conference on Neural Networks,1993
论文链接:https://www.babak.caltech.edu/pubs/conferences/00298572.pdf
Optimal Brain Surgeon,简称 OBS,是模型剪枝领域中非常经典的二阶剪枝方法。
如果说上一篇文章讲的 Optimal Brain Damage,简称 OBD,是二阶剪枝思想的起点,那么 OBS 就是在 OBD 基础上的一次重要推进。
OBD 的核心思想是:。
也就是使用 Hessian 对角项 (h_{ii}) 和权重大小 (w_i^2) 来估计删除参数 (w_i) 后损失函数的增加量。但是 OBD 做了一个比较强的近似:忽略 Hessian 的非对角项,默认不同参数之间相互独立。
OBS 认为这个假设并不充分。因为神经网络中的参数并不是相互独立的。删除一个参数之后,其他参数可以进行调整,从而补偿被删除参数造成的影响。所以 OBS 关心的问题不只是:删除哪个权重造成的损失最小。而是进一步问:删除一个权重之后,其他权重应该如何调整,才能让损失增加最小?这就是 OBS 相比 OBD 更精细的地方。
二、从 OBD 到 OBS:问题到底出在哪里?
先回顾一下 OBD。
OBD 使用 Taylor 展开近似删除参数后的损失变化:
OBD 为了简化计算,假设 Hessian 是对角矩阵:
于是删除权重 的损失增加近似为:
这个公式很简单,也很有启发性。但是它有一个问题:OBD 删除权重 时,只是简单地令
,没有考虑其他权重可以随之调整。
例如,假设两个参数和
在功能上存在一定替代关系。删除
后,如果适当调整
,模型输出可能几乎不变。但是 OBD 不考虑这种补偿关系。OBS 的改进就在这里:删除一个权重的同时,允许其他权重发生最优调整,使损失增加最小。所以,OBS 不是简单的"剪掉一个权重",而是"以最小损失删除一个权重,并重新分配剩余参数"。
三、OBS 的核心思想
OBS 的核心思想可以概括为一句话:使用完整 Hessian 的逆矩阵来估计删除某个权重后的最小损失增加,并计算其他权重的最优补偿量。OBD 只使用 Hessian 对角项 。OBS 使用的是 Hessian 逆矩阵中的对角项
。
这两个量看起来相似,但含义完全不同。OBD 的 saliency 是:
OBS 的 saliency 是:
这个公式是 OBS 最核心的结果。
它说明,参数 (w_q) 的重要性不仅与自身大小有关,还与 Hessian 逆矩阵中对应位置有关。
如果删除某个参数后,其他参数很容易补偿它,那么 (H\^{-1}_{qq}) 会使得对应的损失增加较小。
如果删除某个参数后,其他参数很难补偿它,那么对应的 saliency 就会更大。
四、OBS 要解决的优化问题
假设我们已经训练好了一个模型,参数为:
现在我们要删除第 (q) 个权重,也就是让:
因此有:
这个约束可以写成向量形式。
令 表示第 (q) 个标准基向量:
其中只有第 (q) 个位置为 1。
删除第 (q) 个权重的约束可以写为:
也就是:
OBS 的目标是:在满足这个约束的情况下,使损失增加最小。
损失增加用二阶近似表示为:
因此,OBS 的优化问题是:
满足约束:
这就是 OBS 的核心数学问题。它的含义非常清楚:删除指定权重 (w_q),同时找到一组最优参数变化 (\delta \mathbf{w}),让损失函数增加最小。
五、用拉格朗日乘子法推导 OBS
为了求解这个带约束优化问题,可以使用拉格朗日乘子法。
构造拉格朗日函数:
其中,(\lambda) 是拉格朗日乘子。
对 (\delta \mathbf{w}) 求导,并令导数为 0:
因此:
两边左乘 :
接下来使用约束条件:
代入 :
得到:
注意:
所以:
得到:
将 代回:
这就是删除第 (q) 个权重后,其他权重的最优补偿更新量。
OBS 的权重补偿公式为:
这个公式非常重要。它说明,OBS 删除一个权重时,并不是只把该权重设置为 0,而是沿着 的方向调整整个参数向量。
六、OBS 的 saliency 公式
现在我们继续推导删除权重 (w_q) 后的最小损失增加。
损失增加为:
将:
代入。经过化简,可以得到:
因此,OBS 对第 (q) 个权重的 saliency 定义为:
最终剪枝规则是:。也就是说,选择
最小的权重进行删除。
七、OBS 公式如何理解?
OBS 的重要性公式为:。这个公式可以从两个角度理解。
1. 权重越小,越容易被删除
公式分子是:。如果权重
本身很小,那么删除它通常造成的扰动较小,saliency 也可能较小。这一点和普通幅值剪枝、OBD 是一致的。
2. 越容易被其他权重补偿,越容易被删除
公式分母是:
如果这个值较大,那么:
会变小,说明删除该权重后的最小损失增加较小。直观理解是:如果 Hessian 逆矩阵显示这个权重方向可以被其他参数有效补偿,那么这个权重就更适合被剪掉。这正是 OBS 比 OBD 更强的地方。
OBD 只问:这个参数自身敏不敏感?
OBS 进一步问:删除这个参数后,整个参数系统能不能补偿它?这就是 Hessian 逆矩阵的意义。
八、OBS 和 OBD 的本质区别
OBD 和 OBS 都使用二阶信息,但它们的处理方式不同。
| 方法 | 重要性公式 | 使用的信息 | 是否考虑参数相关性 | 是否调整其他权重 |
|---|---|---|---|---|
| OBD | Hessian 对角项 | 否 | 否 | |
| OBS | Hessian 逆矩阵 | 是 | 是 |
OBD 的核心近似是:
OBS 则尽量使用完整 Hessian 的逆矩阵:
因此,OBS 能够考虑参数之间的耦合关系。举一个简单例子。
假设两个权重和
功能相似。删除
后,如果适当增加或调整
,模型输出仍然可以保持稳定。
OBD 因为只看 ,可能认为
很重要。
OBS 则可能发现 可以被
补偿,因此认为删除
的实际代价并不高。
这就是 OBS 的优势。
九、为什么 Hessian 剪枝有效?
Hessian 剪枝有效的原因在于,它直接分析损失函数对参数变化的敏感性。剪枝本质上是一种参数扰动。删除权重 ,其实就是对参数向量施加扰动:
。
如果这个扰动导致损失函数显著增加,那么说明该权重重要。
如果这个扰动导致损失函数变化很小,那么说明该权重可以删除。
而 Hessian 描述的是损失曲面的局部曲率。
如果某个方向曲率大,说明损失函数在这个方向上很陡峭,参数稍微变化就会导致损失明显增加。
如果某个方向曲率小,说明损失函数在这个方向上比较平坦,参数变化对损失影响较小。
因此,Hessian 提供了一种比权重大小更接近模型性能变化的判断依据。OBS 更进一步:它不仅看单个方向,还通过 Hessian 逆矩阵考虑多个参数方向之间的相互补偿。所以,Hessian 剪枝有效的本质原因是:
剪枝造成的是参数扰动;
损失变化可以用局部二阶近似估计;
Hessian 描述损失曲面的局部敏感性;
Hessian 逆矩阵可以刻画参数之间的补偿关系。
十、一个二维例子直观理解 OBS
假设模型只有两个参数:
损失函数在当前点附近的二阶近似为:
其中:
如果使用 OBD,它只看 和
,忽略
和
。这等价于认为
和
没有相互影响。但是如果
和
很大,说明两个参数之间存在明显耦合关系。此时,删除
后,调整
可能会明显降低损失增加。OBS 正是通过完整 Hessian 逆矩阵考虑了这种补偿关系。所以,OBS 更像是一个真正的"外科医生":不是简单砍掉一个参数, 而是在切除一个参数后,同时调整周围参数,让整体功能尽量保持稳定。这也是 "Optimal Brain Surgeon" 这个名字的来源。
十一、OBS 为什么比 OBD 更精确?
OBS 比 OBD 更精确,主要有两个原因。
1. OBS 考虑参数之间的相关性
OBD 忽略 Hessian 非对角项:。这意味着 OBD 假设不同参数之间彼此独立。但是 OBS 使用
,间接考虑了完整 Hessian 的结构,因此可以反映参数之间的耦合关系。在神经网络中,参数之间往往不是独立的。很多参数会共同影响同一个输出特征。因此,考虑参数相关性通常能得到更准确的剪枝决策。
2. OBS 删除参数后会调整其他参数
OBD 删除权重后,通常只是:
而 OBS 删除权重后,会进行:
其中:
这个更新可以让其他权重补偿被删除权重的影响。所以 OBS 不只是"判断哪个参数不重要",还给出了"剪掉之后如何修复"的方案。这就是 OBS 理论上优于 OBD 的关键。
十二、OBS 的优点
OBS 的优点主要有以下几点。
1. 理论更加完整
OBS 从带约束优化问题出发,明确建模了"删除某个权重"这一约束,并求解最小损失增加。相比简单经验规则,OBS 有更清晰的理论基础。
2. 考虑参数补偿
OBS 不认为删除权重后其他权重必须固定不变,而是允许其他权重进行最优调整。这更加符合神经网络的实际情况。因为神经网络中存在大量冗余和参数耦合,一个参数被删除后,其他参数确实可能补偿它的功能。
3. 剪枝决策更精确
由于 OBS 使用 Hessian 逆矩阵,它比只使用 Hessian 对角项的 OBD 更能反映参数之间的关系。因此,在小型网络和可计算场景中,OBS 往往能够获得比 OBD 更好的剪枝效果。
4. 对现代压缩方法有重要启发
虽然 OBS 原始算法很难直接用于现代大模型,但它的思想影响了很多后续方法,包括:
二阶剪枝
Fisher 剪枝
Taylor 剪枝
Layer-wise OBS
SparseGPT
GPTQ
Optimal Brain Compression
后训练剪枝与量化方法
这些方法本质上都在尝试解决类似问题:如何利用局部二阶信息估计压缩操作带来的误差,并通过补偿降低误差?
十三、OBS 的局限性
OBS 也有明显局限。
1. 完整 Hessian 计算成本太高
OBS 需要使用 Hessian 逆矩阵。
对于参数量很大的神经网络,完整 Hessian 的存储和求逆成本都无法接受。
这是 OBS 最大的问题。
2. 依赖局部二阶近似
OBS 仍然基于 Taylor 二阶近似。
当一次删除大量参数时,参数扰动可能不再是局部小扰动,二阶近似就可能不准确。
因此,OBS 更适合逐步剪枝,而不是一次性大规模剪枝。
3. 需要模型接近局部最优
OBS 和 OBD 一样,通常假设模型已经训练收敛。在局部极小点附近,一阶梯度近似为 0:
这样二阶项才成为主要因素。如果模型没有收敛,一阶项不能忽略,OBS 的估计可能会变差。
4. 原始方法主要针对非结构化权重剪枝
OBS 原始形式主要针对单个权重剪枝。
但是现代部署更关注结构化剪枝,例如:
通道剪枝
卷积核剪枝
注意力头剪枝
MLP 神经元剪枝
Transformer 层剪枝
Token 剪枝
要将 OBS 扩展到结构化剪枝,需要对一组参数进行联合删除和补偿,问题会更加复杂。