03 Optimal Brain Surgeon 详解:Hessian 剪枝为什么有效?

一、论文基本信息

论文名称: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

论文链接:https://proceedings.neurips.cc/paper_files/paper/1992/file/303ed4c69846ab36c2904d3ba8573050-Paper.pdf

相关扩展版本: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 扩展到结构化剪枝,需要对一组参数进行联合删除和补偿,问题会更加复杂。


相关推荐
硕风和炜2 小时前
【LeetCode: 1301. 最大得分的路径数目 + DP】
java·算法·leetcode·动态规划·dp·记忆化搜索
用户99045017780092 小时前
做了一个AI诊断,参考倪海厦中医理论,科学养生
算法
努力中的编程者2 小时前
STL-vector的模拟实现
开发语言·c++·算法·stl·vector
weixin_400005603 小时前
RL-frenet-trajectory-planning-in-CARLA
人工智能·深度学习·算法·机器学习·自动驾驶
Keven_113 小时前
AcWing算法提高课思路速查:动态规划
算法·动态规划
剑挑星河月3 小时前
94.二叉树的中序遍历
java·算法·leetcode
拳里剑气3 小时前
C++算法:队列与BFS
c++·算法·bfs·宽度优先·队列
Ivanqhz3 小时前
注意力机制
线性代数·算法·矩阵·哈希算法·dnn
大鱼>3 小时前
超参数调优进阶:Optuna/Bayesian/Early Stopping
人工智能·学习·机器学习·聚类