0

0

改变LoRA的初始化方式,北大新方法PiSSA显著提升微调效果

王林

王林

发布时间:2024-04-13 08:07:05

|

1245人浏览过

|

来源于机器之心

转载

随着大模型的参数量日益增长,微调整个模型的开销逐渐变得难以接受。

因此,北京大学的研究团队提出了一种名为 PiSSA 的参數高效微调方法,在主流数据集上都超过了目前广泛使用的 LoRA 的微调效果。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

改变LoRA的初始化方式,北大新方法PiSSA显著提升微调效果

  • 论文: PiSSA: Principal Singular Values and Singular Vectors Adaptation of Large Language Models

  • 论文链接: https://arxiv.org/pdf/2404.02948.pdf

  • 代码链接: https://github.com/GraphPKU/PiSSA

图1显示,PiSSA(图1c)在模型架构上和LoRA [1] 完全一致(图1b),只是初始化Adapter的方式不同。LoRA 使用高斯噪声初始化A,使用0初始化B。而PiSSA 使用主奇异值和奇异向量(Principal Singular values and Singular vectors)来初始化Adapter 来初始化A 和 B。

改变LoRA的初始化方式,北大新方法PiSSA显著提升微调效果

图1展示了从左到右依次为全参数微调、LoRA和PiSSA。蓝色代表冻结的参数,橙色代表可训练参数及其它的初始化方式。相比全参数微调,LoRA和PiSSA都大幅减少可训练参数量。对于相同输入,这三种方法的初始输出完全相等。然而,PiSSA冻结模型的次要部分,直接微调主要部分(前r个奇异值和奇异向量);而LoRA可看作冻结模型的主要部分,去微调noise部分。

在不同的任务上对比 PiSSA、LoRA 的微调效果

研究团队使用 llama 2-7B、Mistral-7B 以及 Gemma-7B 作为基础模型,通过微调提升它们的数学、代码和对话能力。其中包括:在 MetaMathQA 上训练,在 GSM8K 和 MATH 数据集上验证模型的数学能力;在 CodeFeedBack 上训练,在 HumanEval 和 MBPP 数据集上验证模型的代码能力;在 WizardLM-Evol-Instruct 上训练,在 MT-Bench 上验证模型的对话能力。从下表的实验结果可以看出,使用相同规模的可训练参数,PiSSA 的微调效果显著超越了 LoRA,甚至超越了全参数微调。

改变LoRA的初始化方式,北大新方法PiSSA显著提升微调效果

对比 PiSSA、LoRA 在不同的可训练参数量下微调的效果

研究团队在数学任务上对模型的可训练参数量和效果之间的关系进行消融实验。从图 2.1 发现在训练初期,PiSSA 的训练 loss 下降特别快,而 LoRA 存在不下降,甚至略有上升的阶段。此外,PiSSA 的训练 loss 全程低于 LoRA,说明对训练集拟合得更好;从图 2.2、2.3、2.4 可以看出在每种 setting 下,PiSSA 的 loss 始终比 LoRA 低,准确率始终比 LoRA 高,PiSSA 能够使用更少的可训练参数追赶上全参数微调的效果。

改变LoRA的初始化方式,北大新方法PiSSA显著提升微调效果

图 2.1) 当秩为 1 时 PiSSA、LoRA 在训练过程中的 loss。每幅图的右上角是前 100 步迭代放大的曲线。其中 PiSSA 用橙色线表示,LoRA 用蓝色线表示,全参数微调用绿线展示了最终的 loss 作为参考。秩为 [2,4,8,16,32,64,128] 时的现象与此一致,详见文章附录。

改变LoRA的初始化方式,北大新方法PiSSA显著提升微调效果

                                  图 2.2)使用秩为 [1,2,4,8,16,32,64,128] 的 PiSSA 和 LoRA 的最终 training loss。

改变LoRA的初始化方式,北大新方法PiSSA显著提升微调效果

                                   图 2.3)使用秩为 [1,2,4,8,16,32,64,128] 的 PiSSA 和 LoRA 微调的模型在 GSM8K 上的准确率。

改变LoRA的初始化方式,北大新方法PiSSA显著提升微调效果

                                       图 2.4)使用秩为 [1,2,4,8,16,32,64,128] 的 PiSSA 和 LoRA 微调的模型在 MATH 上的准确率。

PiSSA 方法详解

受到 Intrinsic SAID [2]“预训练大模型参数具有低秩性” 的启发,PiSSA 对预训练模型的参数矩阵改变LoRA的初始化方式,北大新方法PiSSA显著提升微调效果进行奇异值分解,其中前 r 个奇异值和奇异向量用来初始化适配器 (adapter) 的两个矩阵改变LoRA的初始化方式,北大新方法PiSSA显著提升微调效果改变LoRA的初始化方式,北大新方法PiSSA显著提升微调效果改变LoRA的初始化方式,北大新方法PiSSA显著提升微调效果;剩余的奇异值和奇异向量用来构造残差矩阵改变LoRA的初始化方式,北大新方法PiSSA显著提升微调效果,使得改变LoRA的初始化方式,北大新方法PiSSA显著提升微调效果。因此,适配器中的参数包含了模型的核心参数,而残差矩阵中的参数是修正参数。通过微调参数量较小的核心适配器 A、B,冻结参数量较大的残差矩阵改变LoRA的初始化方式,北大新方法PiSSA显著提升微调效果,就达成了用很少的参数近似全参数微调的效果。

尽管同样受到 Intrinsic SAID [1] 启发,PiSSA 和 LoRA 背后的原理却截然不同。

LoRA 认为大模型微调前后矩阵的变化 △W 具有很低的本征秩 r,因此通过改变LoRA的初始化方式,北大新方法PiSSA显著提升微调效果改变LoRA的初始化方式,北大新方法PiSSA显著提升微调效果相乘得到的低秩矩阵来模拟模型的变化 △W。初始阶段,LoRA 使用高斯噪声初始化 A,使用 0 初始化 B,因此改变LoRA的初始化方式,北大新方法PiSSA显著提升微调效果,以此保证模型初始能力没有变化,并微调 A 和 B 实现对 W 进行更新。与此相比,PiSSA 不关心 △W,而是认为 W 具有很低的本征秩 r。因此直接对 W 进行奇异值分解,分解成主成分 A、B,以及残差项改变LoRA的初始化方式,北大新方法PiSSA显著提升微调效果,使得改变LoRA的初始化方式,北大新方法PiSSA显著提升微调效果。假设 W 的奇异值分解为改变LoRA的初始化方式,北大新方法PiSSA显著提升微调效果,A、B 使用 SVD 分解后奇异值最大的 r 个奇异值、奇异向量进行初始化:

百度AI搜
百度AI搜

百度全新AI搜索引擎

下载

改变LoRA的初始化方式,北大新方法PiSSA显著提升微调效果

残差矩阵使用其余的奇异值、奇异向量进行初始化:

改变LoRA的初始化方式,北大新方法PiSSA显著提升微调效果

PiSSA 直接对 W 的低秩主成分 A、B 进行微调,冻结次要的修正项。相比 LoRA 用高斯噪声以及 0 初始化适配器参数、冻结核心模型参数,PiSSA 收敛更快、效果更好。

PiSSA 的发音类似 “披萨”(pizza)--- 如果把整个大模型类比为一个完整的披萨,PiSSA 切掉其中一角,而且是馅料最丰富的一角(主奇异值、奇异向量),重新烘焙(在下游任务上微调)成喜欢的口味。

由于 PiSSA 采用了和 LoRA 完全相同的架构,其可以作为 LoRA 的一种可选初始化方式,在 peft 包中很方便的进行修改和调用 (如以下代码所示)。相同的架构也使得 PiSSA 继承了大多数 LoRA 的优点,如:对残差模型使用 4bit 量化 [3],减小训练开销;微调完成后适配器能合并进残差模型,不改变推理过程的模型架构;无需分享完整模型参数,只需要分享参数量很少的 PiSSA 模块,使用者直接加载 PiSSA 模块就能自动进行奇异值分解以及赋值;一个模型可以同时使用多个 PiSSA 模块等等。一些对 LoRA 方法的改进,也能与 PiSSA 进行结合:比如不固定每层的秩,通过学习找到最佳的秩 [4];用 PiSSA 指导的更新 [5],从而突破秩的限制等等。

# 在 peft 包中 LoRA 的初始化方式后面增加了一种 PiSSA 初始化选项:if use_lora:nn.init.normal_(self.lora_A.weight, std=1 /self.r)nn.init.zeros_(self.lora_B.weight) elif use_pissa:Ur, Sr, Vr = svd_lowrank (self.base_layer.weight, self.r, niter=4) # 注意:由于 self.base_layer.weight 的维度是 (out_channel,in_channel, 所以 AB 的顺序相比图示颠倒了一下)self.lora_A.weight = torch.diag (torch.sqrt (Sr)) @ Vh.t ()self.lora_B.weight = Ur @ torch.diag (torch.sqrt (Sr))   self.base_layer.weight = self.base_layer.weight - self.lora_B.weight @ self.lora_A.weight

对比高中低奇异值微调效果实验

为了验证使用不同大小奇异值、奇异向量初始化适配器对模型的影响,研究人员分别使用高、中、低奇异值初始化 LLaMA 2-7B、Mistral-7B-v0.1、Gemma-7B 的适配器,然后在 MetaMathQA 数据集上进行微调,实验结果展示在图 3 中。从图中可以看出,使用主要奇异值初始化的方法训练损失最小,在 GSM8K 和 MATH 验证集上的准确率更高。这一现象验证了微调主要奇异值、奇异向量的有效性。

改变LoRA的初始化方式,北大新方法PiSSA显著提升微调效果

图 3)从左到右依次为训练 loss、在 GSM8K 上的准确率、在 MATH 上的准确率。其中蓝色表示最大奇异值、橙色表示中等奇异值、绿色表示最小奇异值。

快速奇异值分解

PiSSA 继承了 LoRA 的优点,使用起来方便,效果超越 LoRA。代价是在初始化阶段,需要对模型进行奇异值分解。虽然仅需要在初始化时分解一次,但是仍然可能需要几分钟甚至几十分钟的开销。因此,研究人员使用一种快速奇异值分解 [6] 方法替代标准的 SVD 分解,通过下表的实验可以看出,仅需几秒钟的时间,就能逼近标准 SVD 分解的训练集拟合效果。其中 Niter 表示迭代次数,Niter 越大,时间越久但是误差越小。Niter = ∞表示标准 SVD。表格中的平均误差表示快速奇异值分解与标准 SVD 得到的 A、B 之间的平均 L_1 距离。

改变LoRA的初始化方式,北大新方法PiSSA显著提升微调效果

总结与展望

本工作对预训练模型的权重进行奇异值分解,通过将其中最重要的参数用于初始化一个名为 PiSSA 的适配器,微调这个适配器来近似微调完整模型的效果。实验表明,PiSSA 比 LoRA 收敛更快,最终效果更好,唯一的代价仅是需要几秒的 SVD 初始化过程。

那么,您愿意为了更好的训练效果,多花几秒钟时间,一键更改 LoRA 的初始化为 PiSSA 吗?

参考文献

[1] LoRA: Low-Rank Adaptation of Large Language Models

[2] Intrinsic Dimensionality Explains the Effectiveness of Language Model Fine-Tuning

[3] QLoRA: Efficient Finetuning of Quantized LLMs

[4] AdaLoRA: Adaptive Budget Allocation for Parameter-Efficient Fine-Tuning

[5] Delta-LoRA: Fine-Tuning High-Rank Parameters with the Delta of Low-Rank Matrices

[6] Finding structure with randomness: Probabilistic algorithms for constructing approximate matrix decompositions

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
github中文官网入口 github中文版官网网页进入
github中文官网入口 github中文版官网网页进入

github中文官网入口https://docs.github.com/zh/get-started,GitHub 是一种基于云的平台,可在其中存储、共享并与他人一起编写代码。 通过将代码存储在GitHub 上的“存储库”中,你可以: “展示或共享”你的工作。 持续“跟踪和管理”对代码的更改。

4429

2026.01.21

http与https有哪些区别
http与https有哪些区别

http与https的区别:1、协议安全性;2、连接方式;3、证书管理;4、连接状态;5、端口号;6、资源消耗;7、兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2929

2024.08.16

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

70

2026.03.13

Python异步编程与Asyncio高并发应用实践
Python异步编程与Asyncio高并发应用实践

本专题围绕 Python 异步编程模型展开,深入讲解 Asyncio 框架的核心原理与应用实践。内容包括事件循环机制、协程任务调度、异步 IO 处理以及并发任务管理策略。通过构建高并发网络请求与异步数据处理案例,帮助开发者掌握 Python 在高并发场景中的高效开发方法,并提升系统资源利用率与整体运行性能。

109

2026.03.12

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

326

2026.03.11

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

62

2026.03.10

Kotlin Android模块化架构与组件化开发实践
Kotlin Android模块化架构与组件化开发实践

本专题围绕 Kotlin 在 Android 应用开发中的架构实践展开,重点讲解模块化设计与组件化开发的实现思路。内容包括项目模块拆分策略、公共组件封装、依赖管理优化、路由通信机制以及大型项目的工程化管理方法。通过真实项目案例分析,帮助开发者构建结构清晰、易扩展且维护成本低的 Android 应用架构体系,提升团队协作效率与项目迭代速度。

105

2026.03.09

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

108

2026.03.06

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

236

2026.03.05

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1万人学习

进程与SOCKET
进程与SOCKET

共6课时 | 0.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号