关于大型语言模型的结构修剪

本文介绍了一种名为 **LLM-Pruner** 的方法,用于对大型语言模型(LLMs)进行结构化剪枝,以减少模型大小和计算需求,同时保留其多任务解决和语言生成能力。LLM-Pruner 通过依赖检测和重要性估计实现高效剪枝,并结合低秩近似(LoRA)快速恢复模型性能。以下是文章的核心公式及其解释:


1. **依赖关系的定义**

文章定义了模型中结构之间的依赖关系,用于确定哪些结构需要同时剪枝。依赖关系的定义如下:

  • **公式 (1)**:

\[

N_j \in \text{Out}(N_i) \land \text{Deg}^-(N_j) = 1 \Rightarrow N_j \text{ 依赖于 } N_i

\]

其中,\(N_i\) 和 \(N_j\) 是模型中的两个神经元,\(\text{Out}(N_i)\) 表示指向 \(N_i\) 的神经元集合,\(\text{Deg}^-(N_j)\) 表示 \(N_j\) 的入度。如果 \(N_j\) 的入度为1且唯一依赖于 \(N_i\),则 \(N_j\) 依赖于 \(N_i\)。

  • **公式 (2)**:

\[

N_i \in \text{In}(N_j) \land \text{Deg}^+(N_i) = 1 \Rightarrow N_i \text{ 依赖于 } N_j

\]

其中,\(\text{In}(N_j)\) 表示从 \(N_j\) 指向的神经元集合,\(\text{Deg}^+(N_i)\) 表示 \(N_i\) 的出度。如果 \(N_i\) 的出度为1且唯一指向 \(N_j\),则 \(N_i\) 依赖于 \(N_j\)。

**作用**:这些公式用于自动检测模型中耦合的结构,确保剪枝时不会破坏模型的依赖关系。


2. **重要性估计**

为了决定哪些结构可以被剪枝,文章提出了基于梯度和近似 Hessian 矩阵的重要性估计方法。

  • **公式 (3)**:向量级重要性估计

\[

I_{W_i} = |\Delta L(D)| = |L_{W_i}(D) - L_{W_i=0}(D)| = \left|\frac{\partial L(D)}{\partial W_i} W_i - \frac{1}{2} W_i^\top H W_i + O(\|W_i\|^3)\right|

\]

其中,\(L\) 是模型的损失函数,\(D\) 是用于估计重要性的数据集,\(H\) 是 Hessian 矩阵。公式中忽略了 Hessian 矩阵的高阶项,因为计算复杂度较高。

  • **公式 (4)**:元素级重要性估计

\[

I_{W_k^i} = |\Delta L(D)| = |L_{W_k^i}(D) - L_{W_k^i=0}(D)| = \left|\frac{\partial L(D)}{\partial W_k^i} W_k^i - \frac{1}{2} W_k^i H_{kk} W_k^i + O(\|W_k^i\|^3)\right|

\]

其中,\(k\) 表示权重矩阵 \(W_i\) 中的第 \(k\) 个元素,\(H_{kk}\) 是 Hessian 矩阵的对角线元素,可以用 Fisher 信息矩阵近似。

  • **公式 (5)**:近似 Hessian 矩阵

\[

I_{W_k^i} \approx |L_{W_k^i}(D) - L_{W_k^i=0}(D)| \approx \left|\frac{\partial L(D)}{\partial W_k^i} W_k^i - \frac{1}{2} \sum_{j=1}^N \left(\frac{\partial L(D_j)}{\partial W_k^i} W_k^i\right)^2 + O(\|W_k^i\|^3)\right|

\]

其中,\(N\) 是数据集 \(D\) 的样本数量。

**作用**:这些公式用于评估每个结构或参数对模型性能的影响,帮助选择剪枝的目标。


3. **组重要性聚合**

文章提出了多种聚合方法来评估整个结构组的重要性:

  • **求和(Summation)**:

\[

I_G = \sum_{i=1}^M I_{W_i} \quad \text{或} \quad I_G = \sum_{i=1}^M \sum_k I_{W_k^i}

\]

  • **求积(Product)**:

\[

I_G = \prod_{i=1}^M I_{W_i} \quad \text{或} \quad I_G = \prod_{i=1}^M \prod_k I_{W_k^i}

\]

  • **取最大值(Max)**:

\[

I_G = \max_{i=1}^M I_{W_i} \quad \text{或} \quad I_G = \max_{i=1}^M \max_k I_{W_k^i}

\]

  • **仅最后执行的结构(Last-Only)**:

\[

I_G = I_{W_l} \quad \text{或} \quad I_G = \sum_k I_{W_k^l}

\]

其中,\(l\) 是组中最后执行的结构。

**作用**:这些聚合方法用于将单个结构或参数的重要性汇总为组的重要性,以便决定哪些组可以被剪枝。


4. **快速恢复阶段**

为了快速恢复剪枝后的模型性能,文章使用了低秩近似(LoRA)方法。具体公式如下:

  • **公式 (6)**:LoRA 更新

\[

\Delta W = PQ \quad \text{其中} \quad P \in \mathbb{R}^{d^- \times d}, \quad Q \in \mathbb{R}^{d \times d^+}

\]

\[

f(x) = (W + \Delta W)X + b = (WX + b) + (PQ)X

\]

其中,\(W\) 是模型的权重矩阵,\(\Delta W\) 是更新值,\(P\) 和 \(Q\) 是低秩矩阵,\(d\) 是低秩维度。

**作用**:LoRA 通过分解权重矩阵的更新值为两个低秩矩阵的乘积,减少了优化参数的数量,从而加速模型的恢复过程。


5. **实验结果**

文章在多个大型语言模型(如 LLaMA、Vicuna 和 ChatGLM)上验证了 LLM-Pruner 的效果。实验结果表明:

  • 在 20% 的剪枝率下,模型保留了 94.97% 的原始性能。

  • 使用 LoRA 恢复后,模型的性能进一步提升,且仅需 3 小时的调优时间。

  • 剪枝后的模型在零样本分类和生成任务中表现出色,且计算效率显著提高。


总结

LLM-Pruner 通过依赖关系检测和重要性估计实现了对大型语言模型的高效结构化剪枝,并结合 LoRA 快速恢复模型性能。这种方法在减少模型大小和计算需求的同时,保留了模型的多任务能力和语言生成能力。

相关推荐
Blossom.11811 分钟前
机器学习在智能供应链中的应用:需求预测与物流优化
人工智能·深度学习·神经网络·机器学习·计算机视觉·机器人·语音识别
Gyoku Mint18 分钟前
深度学习×第4卷:Pytorch实战——她第一次用张量去拟合你的轨迹
人工智能·pytorch·python·深度学习·神经网络·算法·聚类
zzywxc78720 分钟前
AI大模型的技术演进、流程重构、行业影响三个维度的系统性分析
人工智能·重构
点控云21 分钟前
智能私域运营中枢:从客户视角看 SCRM 的体验革新与价值重构
大数据·人工智能·科技·重构·外呼系统·呼叫中心
zhaoyi_he29 分钟前
多模态大模型的技术应用与未来展望:重构AI交互范式的新引擎
人工智能·重构
葫三生1 小时前
如何评价《论三生原理》在科技界的地位?
人工智能·算法·机器学习·数学建模·量子计算
m0_751336392 小时前
突破性进展:超短等离子体脉冲实现单电子量子干涉,为飞行量子比特奠定基础
人工智能·深度学习·量子计算·材料科学·光子器件·光子学·无线电电子
美狐美颜sdk5 小时前
跨平台直播美颜SDK集成实录:Android/iOS如何适配贴纸功能
android·人工智能·ios·架构·音视频·美颜sdk·第三方美颜sdk
DeepSeek-大模型系统教程6 小时前
推荐 7 个本周 yyds 的 GitHub 项目。
人工智能·ai·语言模型·大模型·github·ai大模型·大模型学习
郭庆汝6 小时前
pytorch、torchvision与python版本对应关系
人工智能·pytorch·python