自然语言处理:第三十四章Lora VS FineTuning

文章链接: [2405.09673] LoRA Learns Less and Forgets Less (arxiv.org)



这是一篇来自哥伦比亚大学和databricks对Lora 和FineTuning 更深一步的研究。有关于Lora可以参考我之前的文章: 自然语言处理: 第十二章LoRA解读_lora自然英语处理-CSDN博客 有关于fine_tuning 可以参考自然语言处理: 第七章GPT的搭建_gpt decoder only-CSDN博客 。 在本文中,Low-Rank Adaptation (LoRA)的参数高效微调方法,该方法特别适用于大型语言模型(LLMs)。LoRA通过仅训练选定权重矩阵的低秩扰动来节省内存,从而在编程和数学等目标领域上进行了LoRA和全面微调的性能比较。我们发现,尽管在大多数设置中,LoRA的性能略低于全面微调,但LoRA展现出了一种理想的正则化形式:它在目标领域之外的任务上更好地维持了基础模型的性能。此外,LoRA提供了比常见的正则化技术(如权重衰减和丢弃法)更强的正则化效果,并有助于维持更多样化的生成。最后,我们提出了使用LoRA进行微调的最佳实践。




背景

随着深度学习技术的飞速发展,大型语言模型(LLMs)已成为自然语言处理(NLP)领域的重要工具。然而,这些模型通常包含数十亿甚至数万亿的参数,使得它们的训练和微调变得非常昂贵和耗时。全面微调整个模型不仅需要大量的计算资源,还可能导致模型在原始任务上的性能下降,即所谓的“灾难性遗忘”。

为了解决这个问题,研究人员提出了一系列参数高效的微调方法,这些方法旨在通过训练模型的一小部分参数来减少计算成本,同时保持或提升模型的性能。其中,Low-Rank Adaptation(LoRA)是一种备受关注的方法,它通过训练选定权重矩阵的低秩扰动来实现高效的微调。


在这里插入图片描述

但是全量微调和Lora这张PEFT技术到底对模型性能有何影响呢? 如上图,横轴是LLM之前的能力,纵轴是衡量微调之后的能力,紫色的是Lora,黑色的是全量微调。作者分别在llama2-7b和llama2-13b上做了对比实验,可以发现紫色的始终性能达不到黑色的范围,但是对于原始的能力保持方面,Lora却维持的更好。





LoRA算法

LoRA的核心思想是在微调过程中,仅对预训练模型中的一部分参数进行训练,而不是整个模型。具体来说,LoRA通过分解选定权重矩阵的增量(即微调前后的权重差异)为一个低秩矩阵和一个原始矩阵的乘积来实现这一点。通过这种方式,LoRA可以在保持原始模型大部分参数不变的同时,仅训练低秩矩阵的参数,从而显著减少所需的内存和计算资源。

在LoRA中,我们通常选择模型中的某些关键层(如Transformer模型的注意力层和前馈神经网络层)进行微调。对于每个选定的层,我们将其权重矩阵的增量分解为一个低秩矩阵A和一个原始矩阵B的乘积,即ΔW = AB。在微调过程中,我们仅训练低秩矩阵A的参数,而保持原始矩阵B的参数不变。通过这种方式,我们可以将微调过程中的参数数量从数十亿减少到数千或数万,从而显著减少所需的计算资源。



结果

在这里插入图片描述

为了评估LoRA的性能,我们在编程和数学两个目标领域上进行了LoRA和全面微调的对比实验。我们考虑了两种数据设置:指令微调(约10万条prompt-query)和继续预训练(约100亿个tokens)。实验结果表明,在大多数设置中,虽然LoRA的性能略低于全面微调,但LoRA在目标领域之外的任务上更好地维持了基础模型的性能。这表明LoRA具有一种理想的正则化效果,可以在保持模型泛化能力的同时,提高在特定任务上的性能。(并且从上面也可以看到预训练的tokens数量对性能的影响)

在这里插入图片描述

此外,我们还发现,与常见的正则化技术(如权重衰减和丢弃法)相比,LoRA提供了更强的正则化效果。这可能是因为LoRA通过限制权重更新的秩来减少模型的复杂性,从而降低了过拟合的风险。此外,我们还观察到,使用LoRA进行微调可以产生更多样化的生成,这可能是因为LoRA允许模型在保持原始表示能力的同时,学习新的表示形式。

在这里插入图片描述

Lora 相比于全量微调对学习率更加敏感。

在这里插入图片描述

最后,我们分析了全面微调和LoRA在微调过程中学习的扰动矩阵的秩。我们发现,全面微调学习的扰动矩阵的秩通常是LoRA配置的10到100倍。这可能解释了为什么在某些情况下,全面微调的性能优于LoRA。然而,这也表明,通过优化LoRA的配置和训练方法,我们有可能进一步提高其性能。




总结

在本文中,我们介绍了Low-Rank Adaptation(LoRA)作为一种高效的大语言模型微调方法。通过仅训练选定权重矩阵的低秩扰动,LoRA可以显著减少所需的计算资源,同时保持或提升模型的性能。我们的实验结果表明,虽然LoRA在某些情况下的性能略低于全面微调,但它在目标领域之外的任务上更好地维持了基础模型的性能,并提供了更强的正则化效果。此外,我们还发现,全面微调学习的扰动矩阵的秩远高于LoRA配置,这为我们进一步优化LoRA的性能提供了方向。

基于这些发现,我们提出了以下建议:首先,在选择是否使用LoRA进行微调时,应根据具体任务和数据集的特点进行权衡。对于需要高度专业化的任务或数据集较小的场景,LoRA可能是一个更好的选择。其次,为了进一步提高LoRA的性能,可以尝试优化其配置和训练方法,例如调整低秩矩阵的秩、选择更合适的层进行微调等。最后,我们也希望未来的研究能够进一步探索LoRA的潜力,并将其应用于更多领域和场景中。

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

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

相关文章

开源项目学习(6)---- CMake 可执行文件生成

CMake 基础DEMO 标题 CMake 基础DEMO可执行文件的生成最简单的可执行文件实例使用变量定义生成目标添加宏定义设置可执行文件的路径自动寻找依赖库 打印信息CMake 常见编译选项 可执行文件的生成 最简单的可执行文件实例 cmake_minimum_required(VERSION 3.22) project(tonyd…

图Transformer 推荐系统

文章目录 Graph Transformer for Recommendation摘要引言相关工作方法3.1 Graph Invariant Rationale Learning3.1.1 Graph Collaborative Rationale Discovery3.1.2 Global Topology Information Injection3.1.3 Rationale Discovery with Graph Transformer.3.1.4 Task-Adapt…

【python】OpenCV—Histogram Matching(9.2)

学习来自OpenCV基础(17)基于OpenCV、scikit-image和Python的直方图匹配 文章目录 直方图匹配介绍scikit-image 中的直方图匹配小试牛刀风格迁移 直方图匹配介绍 直方图匹配(Histogram Matching)是一种图像处理技术,旨…

STM32Cube系列教程11:STM32 AES加解密模块性能测试

文章目录 本次测试环境本次测试所使用的系统时钟为48MHz本次测试主要测试对大量数据进行加解密所需的时间,本次为不严谨测试,忽略了程序调用耗时,结果仅供参考。 AES算法与数据加解密加密与解密对称加解密AES算法AES-ECBAES-CBC 填充算法PKCS…

MySQL—多表查询—练习(1)

一、引言 上几篇关于多表查询的基本几个部分全部学习完了。 多表查询的基本类型的查询包括以下: 1、内连接(隐式内连接、显示内连接):... [INNER] JOIN ... ON 条件; ) 2、外连接(左外连接、右外连接&…

LeetCode-day08-881. 救生艇

LeetCode-day08-881. 救生艇 题目描述示例示例1: 思路代码 题目描述 给定数组 people 。people[i]表示第 i 个人的体重 ,船的数量不限,每艘船可以承载的最大重量为 limit。 每艘船最多可同时载两人,但条件是这些人的重量之和最多…

数据库管理-第200期 身边的数据库从业者(20240610)

数据库管理200期 2024-06-10 数据库管理-第200期 身边的数据库从业者(20240610)首席-薛晓刚院长-施嘉伟邦德-王丁丁强哥-徐小强会长-吴洋灿神-熊灿灿所长-严少安探长-张震总结活动预告 数据库管理-第200期 身边的数据库从业者(20240610&#…

NTP网络时间服务器_安徽京准电钟

NTP网络时间服务器_安徽京准电钟 NTP网络时间服务器_安徽京准电钟 概述 NTP网络时间服务器是一款支持NTP和SNTP网络时间同步协议,高精度、大容量、高品质的高科技时钟产品。 NTP网络时间服务器设备采用冗余架构设计,高精度时钟直接来源于北斗、GPS系统中…

HTML LocalStorage

一篇关于HTML本地存储的文章 Window.localStorage 只读的localStorage 属性允许你访问一个Document 源(origin)的对象 Storage;存储的数据将保存在浏览器会话中。 localStorage 类似 sessionStorage,但其区别在于:存储…

大学生如何学习C语言编程?

设计语言》(K&R)和《C Primer Plus》。 安装开发环境:安装一个C语言编译器,如GCC,以及一个集成开发环境(IDE),比如Code::Blocks或Visual Studio。 学习语法:熟悉C语…

redis03 补充 redis驱动模型:事件驱动

1.文件事件 1.1 1.2 注: epoll是linux系统的底层IO多路复用技术 kqueue是mac的底层IO多路复用技术 在 Epoll 中,Epoll 就是事件通知器,可以向 Epoll 注册我们感兴趣的事件。 1.3 1.4

群体优化算法----火山爆发算法介绍以及离散优化Pareto最优解示例

介绍 火山爆发算法(Volcano Eruption Algorithm,VEA)是一种新兴的群智能优化算法,其灵感来源于火山爆发的自然现象。火山爆发算法模拟了火山爆发过程中熔岩流动和喷发的行为,以寻找全局最优解。这种算法利用了火山爆发…

PR如何让音频淡入淡出

PR如何让音频淡入淡出 方法一:效果控件关键帧方法二:音频轨道关键帧 以淡入为例,介绍如何设置淡入的两种方法,推荐使用第二种。淡出效果类似。 方法一:效果控件关键帧 选中音频,点击效果控件 在淡入结束的…

C++ 中有符号数与无符号数的隐式转换与运算陷阱

尽管我们不会故意给无符号对象赋一个负值&#xff0c;却可能写出这样的代码。例如&#xff0c;当一个算术表达式既有无符号数又有int值时&#xff0c;那个int值就会转换成无符号数。把int转换成无符号数的过程和把int直接赋给无符号变量一样&#xff1a; #include <iostrea…

DevExpress学习系列文章

一&#xff1a;DevExpress Installed 二&#xff1a;Application UI 三&#xff1a;Data Management Controls 四&#xff1a;Skins 系列文章相关代码&#xff1a;DevExpressDemo: DevExpress学习过程中的Demo

react项目--博客管理

文章目录 技术栈登录存信息配置tokenhooks使用路由配置各页面技术总结首页发布文章文章详情页 个人主页分类页 本篇文章总结一个开发的react项目—博客系统 技术栈 React、react-redux、react-router 6&#xff0c;Ant Design&#xff0c;es6&#xff0c;sass&#xff0c;webp…

RPA-UiBot6.0数据整理机器人—杂乱数据秒变报表

前言 友友们是否常常因为杂乱的数据而烦恼?数据分类、排序、筛选这些繁琐的任务是否占据了友友们的大部分时间?这篇博客将为友友们带来一个新的解决方案,让我们共同学习如何运用RPA数据整理机器人,实现杂乱数据的快速整理,为你的工作减负增效! 在这里,友友们将了…

成功解决No module named ‘sklearn’(ModuleNotFoundError)

成功解决No module named ‘sklearn’(ModuleNotFoundError) &#x1f308; 欢迎莅临我的个人主页&#x1f448;这里是我深耕Python编程、机器学习和自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;并乐于分享知识与经验的小天地&#xff01;&#x1f387; &#x1f…

AI 边缘计算平台 - 回归开源 BeagleY-AI 简介

BeagleBoard.org 于 3 月 27 号发布了一款单板计算机 BeagleY-AI &#xff0c;这款 SBC 凭借其完全开源的特性&#xff0c;旨在激发并推动开源社区的生态系统繁荣发展。 一、简介&#xff1a; BeagleY-AI 采用德州仪器新推出的 AM67A AI 视觉处理器。这款处理器集成了四个 64…

开源模型应用落地-LangChain高阶-LCEL-表达式语言(五)

一、前言 尽管现在的大语言模型已经非常强大,可以解决许多问题,但在处理复杂情况时,仍然需要进行多个步骤或整合不同的流程才能达到最终的目标。然而,现在可以利用langchain来使得模型的应用变得更加直接和简单。 LCEL是什么? LCEL是一种非常灵活和强大的语言,可以帮助您更…