关于大型语言模型的结构修剪
本文介绍了一种名为 **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 快速恢复模型性能。这种方法在减少模型大小和计算需求的同时,保留了模型的多任务能力和语言生成能力。
相关文章:
关于大型语言模型的结构修剪
本文介绍了一种名为 **LLM-Pruner** 的方法,用于对大型语言模型(LLMs)进行结构化剪枝,以减少模型大小和计算需求,同时保留其多任务解决和语言生成能力。LLM-Pruner 通过依赖检测和重要性估计实现高效剪枝,并…...
PostgreSQL 生产环境升级指南:pg_upgrade 快速完成版本升级!
前言 PostgreSQL 的版本号由主要版本号和次要版本号组成。例如,在 10.1 中,10 是主要版本,1 是次要版本。关于更多版本的规划,请参考 PostgreSQL 版本路线图。 版本号规则: PostgreSQL 10 及以后:版本号…...

Ubuntu2204下使用NVIDIA GeForce RTX 4090进行DeepSeek-R1-Distill-Llama-8B模型微调
Ubuntu2204下使用NVIDIA GeForce RTX 4090进行DeepSeek-R1-Distill-Llama-8B模型微调 环境准备创建Python微调环境准备数据集准备模型文件 模型微调模型预测原始模型预测微调模型预测 使用unsloth,可以方便地对大模型进行微调。以微调DeepSeek-R1-Distill-Llama-8B为…...
JAVA面试常见题_基础部分_mybatis面试题
1、什么是 MyBatis? 答:MyBatis 是一个可以自定义 SQL、存储过程和高级映射的持久层框架。 2、讲下 MyBatis 的缓存答 :MyBatis 的缓存分为一级缓存和二级缓存,一级缓存放在 session 里面,默认就有,二级缓存放在它的命名空间里,默认是不打…...
RISC-V汇编学习(一)—— 基础认识
最近这三年的工作时间大部分的工作,都是基于riscv的cpu和接口ip开发适配驱动,时不时的就要debug测试代码,面对很多都是汇编,所以也是整理下积累的一点点笔记,系列博客将总结下riscv相关的内容,一是给有需要…...
【Delphi】如何解决使用webView2时主界面置顶,而导致网页选择文件对话框被覆盖问题
一、问题描述: 在Delphi 中使用WebView2控件,如果预先把主界面置顶(Self.FormStyle : fsStayOnTop;),此时,如果在Web页面中有使用(<input type"file" id"fileInput" acc…...

基于POI的Excel下拉框自动搜索,包括数据验证的单列删除
目录 目标 例子 1.搜索下拉框页 2.数据源页 3.效果 代码以及注意事项 1.代码 2.注意事项 1.基于Excel的话,相当于加入了一个【数据验证】 2.代码中的一些方法说明 目标 期望在Excel利用代码创建具备自动搜索功能的下拉框 例子 1.搜索下拉框页 2.数据源…...

基金 word-->pdf图片模糊的解决方法
1. 首先需要Adobe或福昕等pdf阅读器。 2. word中 [文件]--[打印],其中打印机选择pdf阅读器,例如此处我选择福昕阅读器。 3. 选择 [打印机属性]--[编辑]--[图像],将所有的采样、压缩均设置为 关闭。点击[另存为],保存为 基金报告…...

React底层原理详解
React中Element&Fiber对象、WorkInProgress双缓存、Reconcile&Render&Commit、第一次挂载过程详解 在面试中介绍React底层原理时,需遵循逻辑清晰、层次分明、重点突出的原则,结合技术深度与实际应用场景。以下是结构化回答模板:…...

Word 插入图片会到文字底下解决方案
一、现象描述 正常情况下,我们插入图片都是这样的。 但有时突然会这样,插入的图片陷于文字底部。 二、网上解决方案 网上有教程说,修改图片布局选项,从嵌入型改成上下型环绕。改完之后确实有用,但是需要手动拖动图片…...
基于DeepSeek 的图生文最新算法 VLM-R1
目录 一、算法介绍 二 算法部署 三 模型下载 四 算法测试 五 可视化脚本 一、算法介绍 VLM-R1:稳定且可通用的 R1 风格大型视觉语言模型 自从 Deepseek-R1 推出以来,出现了许多专注于复制和改进它的作品。在这个项目中,我们提出了 VLM-R1,一种稳定且可通用的 R1 风格…...
Composer如何通过GitHub Personal Access Token安装私有包:完整教程
使用Composer安全管理您的PHP私有依赖包 一、前言 在PHP开发中,我们经常需要将内部工具包托管为私有仓库。传统的账号密码验证方式存在安全隐患,而GitHub Personal Access Token(PAT)提供了一种更安全的鉴权方案。本文将通过4个…...
postgresql postgis扩展相关
项目 下载地址 http://rpmfind.net/linux/rpm2html/search.php?queryprotobuf(x86-64) Postgis Index of /postgis/source/ proj4 Index of /proj/ geos Index of /geos/ libxml2 ftp://xmlsoft.org/libxml2/ Index of /sources Json-c Releases json-c/json-c G…...

基于Python Django的人脸识别上课考勤系统(附源码,部署)
博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…...

神经网络之RNN和LSTM(基于pytorch-api)
1.RNN 1.1简介 RNN用于处理序列数据。在传统的神经网络模型中,是从输入层到隐含层再到输出层,层与层之间是全连接的,每层之间的节点是无连接的。但是这种普通的神经网络对于很多问题却无能无力。例如,你要预测句子的下一个单词是…...

leetcode第39题组合总和
原题出于leetcode第39题https://leetcode.cn/problems/combination-sum/description/题目如下: 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以…...

【UI设计——视频播放界面分享】
视频播放界面设计分享 在本次设计分享中,带来一个视频播放界面的设计作品。 此界面采用了简洁直观的布局。顶部是导航栏,包含主页、播放、搜索框等常见功能,方便用户快速找到所需操作。搜索框旁输入 “萌宠成长记”,体现了对特定内…...

动态规划刷题
文章目录 动态规划三步问题题目解析代码 动态规划 1. 状态表示:dp[i],表示dp表中i下标位置的值 2. 状态转移方程:以i位置位置的状态,最近的一步来划分问题,比如可以将状态拆分成前状态来表示现状态,dp[i] …...

stm32week5
stm32学习 二.外设 14.串口发送数据包 数据包的定义: HEX数据包(以0xFF为包头,0xFE为包尾,实际上可自定义): 固定包长,含包头包尾可变包长,含包头包尾 对于数据中不会出现包头包尾的数据可以用可变包长…...

fastapi中的patch请求
目录 示例测试使用 curl 访问:使用 requests 访问:预期返回: 浏览器访问 示例 下面是一个使用 app.patch("") 的 FastAPI 示例,该示例实现了一个简单的用户信息更新 API。我们使用 pydantic 定义数据模型,并…...

JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...

苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...

Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机
这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机,因为在使用过程中发现 Airsim 对外部监控相机的描述模糊,而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置,最后在源码示例中找到了,所以感…...

云原生安全实战:API网关Kong的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关(API Gateway) API网关是微服务架构中的核心组件,负责统一管理所有API的流量入口。它像一座…...