(2025|ICLR|厦大华为,LoSA,基于表示互信息的动态层级稀疏率,基于重构误差的秩分配)LLM 的动态低秩稀疏自适应

Dynamic Low-Rank Sparse Adaptation for Large Language Models

目录

1. 引言

1.1 关键词

2. 方法

2.1 预备知识

2.2 层级稀疏率确定

2.3 稀疏感知的秩分配

2.4 动态稀疏与适配

3. 实验

3.1 实验设置

3.2 语言建模

3.3 零样本任务

3.4 N:M 稀疏性

3.5 消融实验

3.6 分析

4. 结论


1. 引言

随着大语言模型(Large Language Models, LLMs)的发展,模型规模显著增加,极大提升了在多领域理解和生成内容的能力。然而,模型规模的指数增长也带来了部署和推理困难,主要表现为计算需求和延迟的剧增。针对这些问题,模型压缩方法,如稀疏化(Sparsity)、量化和知识蒸馏被广泛研究,其中稀疏方法在降低模型大小和推理延迟方面表现突出。

现有的稀疏方法,如 SparseGPT 和 Wanda,在高稀疏度情况下性能会严重退化,通常需要额外的微调以恢复性能。低秩适配(Low-Rank Adaptation, LoRA)是一种高效的参数微调方法,但存在两个核心问题:

  • LoRA 无法在微调后融入稀疏的 LLM 权重中,导致推理延迟增加。
  • 均匀稀疏率和静态秩设置未能充分利用不同层之间的差异,限制了稀疏模型性能的恢复。

本文提出了一种 动态低秩稀疏适配方法(Dynamic Low-rank Sparse Adaptation, LoSA),实现了稀疏 LLM 与低秩适配的无缝集成。LoSA 在微调过程中动态调整稀疏率和秩,以提高稀疏 LLM 的性能而不增加推理延迟。具体而言,LoSA 通过 基于表示互信息(Representation Mutual Information, RMI)的动态层级稀疏率 基于重构误差的秩分配策略 实现了稀疏与低秩适配的有效融合。

1.1 关键词

大语言模型(LLMs),稀疏化(Sparsity),低秩适配(LoRA),表示互信息(Representation Mutual Information, RMI),稀疏感知秩分配(Sparsity-Aware Rank Allocation),动态稀疏微调(Dynamic Sparse Fine-tuning)

2. 方法

2.1 预备知识

本文基于 SparseGPT 的思想,将 LLM 的稀疏化视作逐层的重构问题。具体而言,将密集模型每一层的权重与输入特征图进行稀疏化掩码处理,并引入低秩适配模块以减小稀疏引入的重构误差。通过统一优化问题同时确定稀疏掩码、层级稀疏率和层级秩分配。

优化目标是尽量减少稀疏 LLM 的每一层与其对应的密集层之间的输出差异:

其中,i:层,s:稀疏率,r:秩,X:输入,M:掩码,W:权重,BA:低秩矩阵 

图 1:将传统的稀疏 LLM 与 LoRA 相结合与 LoSA 方法进行比较

  • (a) 传统的 LLM 稀疏方法采用均匀的稀疏率,而 LoRA 也使用均匀的秩。此外,LoRA 权重不能合并(merge)到稀疏 LLM 权重中。
  • (b) LoSA 对 LLM 执行动态稀疏低秩自适应,同时将稀疏性应用于 LLM 和低秩自适应。此外,LoSA 根据表示互信息动态确定逐层稀疏率,并根据稀疏 LLM 的重建误差分配低秩自适应的秩。 

2.2 层级稀疏率确定

现有稀疏方法采用均匀稀疏率,忽视了层间重要性的差异。本文基于 RMI 提出了一种快速计算层级重要性的方法。RMI 用于衡量不同层之间的冗余性,进而确定每一层的稀疏率。

  • 公式 2:信息瓶颈(Information Bottleneck,IB),用于压缩冗余
  • 公式 3:扩展的 IB,附加了最小化层间信息冗余。

上式意味着与其他层高度相关的层不太重要。 层 i 的重要性计算为:

层稀疏率 s 计算为:

上述方法难以计算,可利用归一化 Hilbert-Schmidt 独立性准则(Hilbert-Schmidt Independence Criterion,HSIC)实现快速高效计算,仅需通过模型的特征图即可完成,极大降低计算复杂度。

其中,X_i 表示第 i 层的输入,X 表示第 i 层的特征图。

【注:直观理解,类似于余弦相似度,两层特征图相似度越高,这两层的相关度越高】 

2.3 稀疏感知的秩分配

使用低秩自适应可以有效恢复稀疏 LLM 的性能。为合理分配有限的低秩适配参数预算,本文提出了基于层级重构误差的秩分配方法,更高的重构误差意味着该层需要更多的微调参数。秩分配公式为:

其中,L_i 表示第 i 层的重构误差,L_avg 表示所有 n 层重构误差的均值, Ω 表示所有 n 层的平均秩,⌊x⌉ 将 x 四舍五入为最接近的整数。

2.4 动态稀疏与适配

本文进一步提出了一种动态稀疏与适配策略,逐步增加稀疏率,同时动态调整低秩适配模块的秩,以有效整合稀疏和微调。

执行 T 步稀疏性和微调,并使用立方稀疏性调度(cubic sparsity schedule)确定渐进稀疏率,如下所述:

其中 Θ^f 是最终稀疏率,Θ^t 表示第 t 步中 n 层的平均稀疏率。

此外,由于重构误差会随着稀疏率的上升而增加,因此在每个步骤中线性增加平均秩 Ω^t,即 

在计算步骤 t 的平均稀疏率 Θ^t 后,

  • 首先使用第 2.2 节中概述的方法建立分层稀疏率 s^t。
  • 随后,通过应用稀疏掩码 M^t 同时稀疏化 LLM 和低秩自适应的权重,该掩码是使用 SparseGPT或 Wanda 得出的。这种协调的方法确保了 LLM 权重和低秩自适应之间的兼容性,有助于在微调后将低秩自适应集成到 LLM 的稀疏权重中。
  • 一旦建立了稀疏 LLM,就会采用第 2.3 节中描述的秩分配方法确定低秩自适应的分层秩 r^t。
  • 算法的全部细节在算法 1 中概述。

3. 实验

3.1 实验设置

实验模型包括 LLaMA-1、LLaMA-2、LLaMA-3、Vicuna 和 OPT,参数规模覆盖 7B 到 70B。使用 WikiText-2 数据集评估语言建模能力,使用多个零样本任务评估模型泛化能力。微调数据集为从 Alpaca-GPT4 中随机抽取的 10K 样本,优化器为 Paged AdamW,学习率为 2×10⁻⁴,初始秩为 6。

3.2 语言建模

LoSA 方法在 WikiText-2 上显著降低了不同稀疏水平(50%-70%)下稀疏 LLM 的困惑度(Perplexity),表现显著优于 LoRA。如在 70% 稀疏率下,LLaMA-2-7B 使用 LoSA 微调,困惑度较 Wanda 降低 68.73,展现了显著的性能提升。

3.3 零样本任务

LoSA 在 HellaSwag、Winogrande 等七个下游零样本任务上明显提高了稀疏 LLM 的准确性。尤其在 70% 稀疏率下,LoSA 对 LLaMA-2-7B 的平均零样本准确率提升达 16.32%,明显优于 LoRA,证明了其强大的泛化性能。

3.4 N:M 稀疏性

LoSA 同样适用于混合 N:M 稀疏设置(如混合 2:8 稀疏,N 表示非零权重),通过给更重要层更低的 N 值,进一步提升了稀疏模型的性能,实验结果表明 LoSA 显著优于传统方法和 LoRA。 

3.5 消融实验

消融实验验证了层级稀疏率(LSR)、稀疏感知秩分配(SRA)和动态稀疏适配(DSA)三个核心策略的有效性。实验表明,移除任一策略都会导致性能下降,表明三者均对LoSA的性能提升具有贡献,其中动态稀疏适配策略的贡献最大。

步 T 决定了稀疏率增加的速度。T 越大,稀疏率增加越慢,每次删除的参数越少。 

3.6 分析

LoSA 微调效率高,参数量仅为 LoRA 的 1 − s%,GPU 内存占用与 LoRA 相近,但由于额外步骤耗时较长,LoSA 微调需要更多时间(约 45 分钟)。但其相比 LoRA 在推理速度和模型精度方面均有明显优势,如 CPU 加速最高达到 2.60 倍。

4. 结论

本文提出了动态低秩稀疏适配方法 LoSA,实现了 LLM 稀疏和低秩适配的统一优化,有效提升了稀疏 LLM 的性能,无额外推理延迟,并通过广泛实验验证了方法的高效性和实用性。


论文地址:https://arxiv.org/abs/2502.14816

项目页面:https://github.com/wzhuang-xmu/LoSA

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/73136.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

p5.js:sound(音乐)可视化,动画显示音频高低变化

本文通过4个案例介绍了使用 p5.js 进行音乐可视化的实践,包括将音频振幅转化为图形、生成波形图。 承上一篇:vite:初学 p5.js demo 画圆圈 cd p5-demo copy .\node_modules\p5\lib\p5.min.js . copy .\node_modules\p5\lib\addons\p5.soun…

linux 进程和计划管理

查看进程 在Linux系统中,有多个命令可以用来查看进程 以下是一些常用的命令: ps命令:用于查看当前系统中的进程状态。 基本用法:ps -ef,该命令会以完整格式显示所有进程的详细信息,包括用户ID、进程ID、父…

DeepSeek 多模态大模型 Janus-Pro 本地部署教程

下载模型仓库 git clone https://github.com/deepseek-ai/Janus.git 国内下载仓库失败时,可以使用以下代理: git clone https://github.moeyy.xyz/https://github.com/deepseek-ai/Janus.git 准备 Conda 3.12 虚拟环境 conda create --name deepseek7B p…

Qt开源控件库(qt-material-widgets)的编译及使用

项目简介 qt-material-widgets是一个基于 Qt 小部件的 Material Design 规范实现。 项目地址 项目地址:qt-material-widgets 本地构建环境 Win11 家庭中文版 VS2019 Qt5.15.2 (MSVC2019) 本地构建流程 克隆后的目录结构如图: 直接使用Qt Crea…

ARM 嵌入式处理器内核与架构深度剖析(2): ARM 处理器架构剖析

目录 一、ARM处理器架构剖析 1.1. 指令集架构(ISA) 1.2. 寄存器集 1.3. 存储模型 1.4. 异常模型 二、架构设计精要 2.1 处理器模式与特权分级 2.2 寄存器银行化技术 2.3 指令集演化 三、微架构核心技术 3.1 流水线创新 3.2 内存子系统 3.3 …

Flutter 按钮组件 TextButton 详解

目录 1. 引言 2. TextButton 的基本用法 3. 主要属性 4. 自定义按钮样式 4.1 修改文本颜色 4.2 添加背景色 4.3 修改按钮形状和边距 4.4 样式定制 5. 高级应用技巧 5.1 图标文本组合 5.2 主题统一配置 5.3 动态交互 6. 性能优化与注意事项 6.1 点击区域优化 6.…

std::ranges::views::split, lazy_split, std::ranges::split_view, lazy_split_view

std::ranges::views::split, std::ranges::split_view C20 中引入的用于分割范围(range)的组件,允许将输入范围按特定分隔符或条件分割成多个子范围。以下是详细说明和示例: 基本概念 1. 功能 分割范围:将输入范围&…

c++ constraints与concepts使用笔记

c constraints与concepts使用笔记 1. 模板参数缺乏约束的问题2. Concepts 基本概念3. Concept 的定义与使用4. requires 表达式详解5. requires 从句 vs requires 表达式完整示例:约束矩阵运算 1. 模板参数缺乏约束的问题 问题分析: 传统模板参数没有语…

Qt | 屏幕截图实现

01 全局截屏控件 1. 鼠标右键弹出菜单。 2. 支持全局截屏。 3. 支持局部截屏。 4. 支持截图区域拖动。 5. 支持图片另存为。 演示 点击按钮即可截图 源码: 通过网盘分享的文件:screenwidget屏幕截图 链接: https://pan.baidu.com/s/1PZfQlUXNIoZKEfEtLNV2jQ?pwd=5jsg 提…

2.angular指令

初级使用可以查看视频 参考手册 注意 像ng-class,ng-value,ng-href等这些,很多都可以直接用class“{{}}” 原生写,为啥还出这些指令,是因为原生的比如刚一进页面就先出现表达式了,浏览器走到这里的时候才去解析,给用户…

CTFshow 【WEB入门】信息搜集 【VIP限免】 web1-web17

CTFshow 【 WEB入门】、【VIP限免】 web1 ----源码泄露 首先第一步,看源代码 web2----前台JS绕过 简单点击查看不了源代码,可以强制查看 比如 Ctrl Shift ICtrl U或者在url前加一个view-source: view-source:http://79999ca1-7403-46da-b25b-7ba9…

java 手搓一个http工具类请求传body

import java.io.*; import java.net.HttpURLConnection; import java.net.URL; import java.nio.charset.StandardCharsets;public class HttpUtil {/*** JSON请求发起*/public static String httpJsonRequest(String requestUrl, String requestJson) {String responseJson &…

Spring boot3-WebClient远程调用非阻塞、响应式HTTP客户端

来吧&#xff0c;会用就行具体理论不讨论 1、首先pom.xml引入webflux依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId> </dependency> 别问为什么因为是响应式....…

写了一个二叉树构造函数和画图函数,方便debug

代码 class TreeNode(object):def __init__(self, val, leftNone, rightNone):self.val valself.left leftself.right rightdef construct_tree(nodes):if not nodes:return Noneroot TreeNode(nodes[0])queue [root]index 1while index < len(nodes):node queue.p…

QT:串口上位机

创建工程 布局UI界面 设置名称 设置数据 设置波特率 波特率默认9600 设置数据位 数据位默认8 设置停止位 设置校验位 调整串口设置、接收设置、发送设置为Group Box 修改配置 QT core gui serialport 代码详解 mianwindow.h 首先在mianwindow.h当中定义一个串口指…

【Pandas】pandas Series asof

Pandas2.2 Series Time Series-related 方法描述Series.asfreq(freq[, method, how, …])用于将时间序列数据转换为指定的频率Series.asof(where[, subset])用于返回时间序列中指定索引位置的最近一个非缺失值 pandas.Series.asof pandas.Series.asof 方法用于返回时间序列…

沉浸式CSS学习路径

好的!我将以魔法学院成长故事为框架,为您设计一套沉浸式CSS学习路径。以下是叙事化学习提纲: 第一卷:像素学徒的觉醒 章节1:被封印的魔法书 发现HTML的"素颜"本质,通过<!DOCTYPE html>解除网页封印用style标签打开CSS魔法书,学会给文字穿上color斗篷和…

使用netlify部署github的vue/react项目或本地的dist,国内也可以正常访问

提供简洁的部署流程和丰富功能&#xff0c;如自定义域名、自动构建和服务器端功能。通过连接到 Git 仓库实现持续部署&#xff0c;每次推送代码都会自动构建和发布&#xff0c;支持无服务器函数&#xff0c;允许在前端项目中实现后端逻辑&#xff0c;提供直观的用户界面来管理和…

复现 MoGe

要复现 MoGe&#xff0c;以下给出一般性的复现训练过程步骤示例&#xff09;的训练过程&#xff0c;你可以参考以下步骤&#xff1a; 环境准备 安装必要的深度学习框架&#xff0c;如 TensorFlow 或 PyTorch&#xff0c;以及相关的库&#xff0c;例如用于数据处理的 NumPy、Pan…

Redis-缓存穿透击穿雪崩

1. 穿透问题 缓存穿透问题就是查询不存在的数据。在缓存穿透中&#xff0c;先查缓存&#xff0c;缓存没有数据&#xff0c;就会请求到数据库上&#xff0c;导致数据库压力剧增。 解决方法&#xff1a; 给不存在的key加上空值&#xff0c;防止每次都会请求到数据库。布隆过滤器…