关于大型语言模型的结构修剪
本文介绍了一种名为 **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 定义数据模型,并…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...
LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...
深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found", "n…...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...
【Veristand】Veristand环境安装教程-Linux RT / Windows
首先声明,此教程是针对Simulink编译模型并导入Veristand中编写的,同时需要注意的是老用户编译可能用的是Veristand Model Framework,那个是历史版本,且NI不会再维护,新版本编译支持为VeriStand Model Generation Suppo…...
基于鸿蒙(HarmonyOS5)的打车小程序
1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...
