笔者在写模型量化技术相关文章时,正逢2024诺贝尔颁奖,Hiton、Lecun这些大神萦绕耳边。那我们就借Lecun在1990年发表的《Optimal Brain Damage》,以及1992年的《Second order derivatives for network pruning: Optimal Brain Surgeon》,来理解一下大神们在90年代如何解决模型剪枝问题的。

1.模型剪枝

(1)什么是模型剪枝?

模型剪枝是一种模型优化技术,通过移除神经网络中的冗余连接或神经元,达到降低模型复杂度的目的。

降低模型复杂度,除了通过降低模型计算量提高模型的推理速度,还能在一定程度上提升模型的泛化能力。

(2)模型剪枝的分类

模型剪枝主要分两大类:结构化剪枝和非结构化剪枝。

  • 非结构化剪枝:这种剪枝方式涉及单个权重或神经元的移除,结果是权重矩阵中出现不规则的稀疏模式。

    • 由于这种剪枝方式不遵循特定的规则,因此压缩后的模型可能需要特殊的处理才能被有效地存储和计算。
  • 结构化剪枝:这种剪枝方式会按照一定的规则移除权重,保持模型原有的结构。

    • 这种方法实现成本低,剪枝后的模型更容易被深度学习框架1支持。

(3)模型剪枝的流程

  • STEP1.预训练:首先在大量数据集上预训练一个深度学习模型。
  • STEP2.剪枝:根据一定的剪枝准则(如:权重的绝对值、激活值、梯度信息等),选择并剪除那些对模型性能影响较小的连接或神经元。
  • STEP3.微调:剪枝后,在剩余的数据集上对剪枝后模型进行微调,以恢复或提升模型的性能。
  • STEP4.评估:最后对剪枝后的模型进行评估,以确保其性能满足特定任务的要求。

(4)模型剪枝的收益

  • 减少模型的计算复杂度和存储空间。
  • 改善模型的泛化能力。
  • 移除不必要的参数,使得模型的结构更加清晰,更易于理解和解释,提高模型的可解释性。
  • 适应不同的任务和环境,特别是在资源受限的设备上部署模型时尤为重要

(5)模型剪枝的挑战

  • 模型剪枝时,剪哪里、怎么剪,需要对模型的深度理解和数学能力,如:本文即将解读的OBD、OBS就是给出了两种剪枝方法及数学推导。
  • 剪枝不当可能消耗大量算力后却损失了信息,反而导致模型性能下降。
  • 剪枝后模型还需要进一步调整和优化,以适应不同更广泛的场景。

2.Optimal Brain Damage

(1)OBD的推导过程

首先,我们了解一下OBD解决什么问题:

  • 这篇论文由Lecun发表,Optimal Brain Damage (OBD)是一种神经网络模型剪枝技术。

image-20241018144556744

  • 在论文的开篇,Lecun就提出了问题:模型剪枝就是删除没用的权重,那么如何衡量"这个权重没用?",如何"删除权重,清零吗?”

image-20241018154321755

  • 因此,Lecun提出了Optimal Brain Damage (OBD),通过选择性地删除网络中的权重来减少模型的大小。
  • “选择性”的核心思想是:利用目标函数的二阶导数信息来评估每个权重的重要性,即通过海森矩阵(Hessian matrix)来确定权重的“贡献度”或“saliency”。
    • 权重的贡献度:指删除该权重后对目标函数(通常是损失函数)的影响程度。
  • OBD的目标是找到一个参数集合,使得删除这些参数后目标函数的增加最小,从而在减少网络复杂度的同时尽量保持模型性能。

image-20241018154349795

然后,我们再看看推导过程的关键细节:

  • 目标函数E:比如目标函数E就是损失函数。
  • 泰勒展开:我们对目标函数E进行泰勒展开,就得到"参数向量影响δU对目标函数E的影响公式”。

image-20241018155414749

  • gi是U对E的梯度,hij是U对E的海森矩阵的元素。

image-20241018155355488

  • 但即使是泰勒展开了,公式(1)依然有很大的计算量,Lecun做了三个近似简化:
    • 数学意义上对角线近似简化上述公式的第3项,业务意义上就是证明了删除权重a导致的损失函数的Loss增大和删除权重b导致的Loss增大是独立的。
    • 数学意义上通过极值点简化上述公式的第1项,业务意义上就是证明了如果神经网络已经训练收敛了,U对E就达到了局部最小值,即U对E的梯度等于0。
    • 数学意义上假设E是二次函数简化上述公式的第4项。
    • 综合上述3个简化,公式(1)简化为公式(3)

image-20241018160514805

(2)OBD的执行流程

有了上述公式,OBD的执行流程如下:

  • STEP1.选择1个神经网络结构
  • STEP2.训练这个神经网络
  • STEP3.计算每个权重的二阶导hkk
  • STEP4.计算每个参数对目标函数的影响sk
  • STEP5.删除最低影响的参数
  • STEP6.回到STEP2

image-20241018160651088

3.Optimal Brain Surgeon

(1)OBS的推导过程

首先,我们也了解一下OBS解决什么问题:

  • 这篇论文是对OBD的优化,Optimal Brain Surgeon(OBS)也是一种神经网络模型剪枝技术。
  • Optimal Brain Damage(OBD)衡量了某个权重对贡献度并删除贡献度最低的权重,但一旦删除了某个错误的权重,反而会导致在错误的剪枝方向上越走越远。
  • OBS的目标就是允许比其他方法剪枝更多的权重,在测试数据上产生更好的泛化。其核心思想就是从训练数据和网络的结构信息中计算逆Hessian矩阵H的逆。

image-20241018161259795

  • OBS本质是考虑的"局部最优”,即训练得到局部最小误差。那么我们将相对权重扰动的Loss函数进行泰勒展开:

image-20241018161832293

  • 其中,H是Loss对权重的海森矩阵,依然对公式(1)进行近似简化,忽略公式(1)的第1项和第3项。
  • 那么,删除权重wq的操作可以表示为公式(2),其中eq是权重空间w中相对于wq的单位向量。

image-20241018162056961

  • 那么,OBS的目标就是求解公式(3)的最优化问题:

image-20241018162249685

  • 转换为拉格朗日乘法:

image-20241018162354240

  • 求解出δw,即剪切wq的同时,调整了其它权重,并保证Loss变动最小。

image-20241018162518230

(2)OBS为什么优于OBD?

论文基于上述推导,解释了为什么OBS优于OBD:

  • 基于OBD,
    • 从w*处的局部最小值开始,基于贡献度误删除了权重2(假设:上帝知道权重2不应该被删掉)。
    • 通过再次训练,权重1将增加,权重1将在错误的方向上越走越远,直到达到平衡,但此时不是局部最优。
  • 基于OBS,
    • 从w*处的局部最小值开始,删除权重2的同时,权重1也会被修正。
    • 通过再次训练,由于局部最优的约束,会尽快达到稳态。

image-20241018163243850

4.总结

为了解读QLoRA的原理,我们扩展阅读了模型剪枝技术,并解读了经典的两篇论文OBD和OBS:

  • 模型剪枝:通过移除神经网络中的冗余连接或神经元,达到降低模型复杂度的目的。
  • 关键问题:删什么权重,怎么删除?
  • OBD:Optimal Brain Damage (OBD),利用目标函数的二阶导数信息来评估每个权重的重要性,即通过海森矩阵(Hessian matrix)来确定权重的“贡献度”或“saliency”。
  • OBS:Optimal Brain Surgeon(OBS),利用相对权重扰动的Loss函数进行泰勒展开,剪切wq的同时,调整了其它权重,并保证Loss变动最小。

论文链接1:https://arxiv.org/pdf/2303.10512

论文链接2:https://proceedings.neurips.cc/paper/1992/hash/303ed4c69846ab36c2904d3ba8573050-Abstract.html