大模型微调论文阅读 LoRA:LOW-RANK ADAPTION OF LARGE LANGUAGE MODELS 大型语言模型的低秩自适应

论文link:https://arxiv.org/pdf/2106.09685
code:https://github.com/microsoft/LoRA
LoRA:Low-Rank Adaptation of Large Language Models
Abstract
  自然语言处理的一个重要范例是对通用领域数据进行大规模预训练,并适应特定任务或领域。随着我们对更大的模型进行预训练,完全微调(重新训练所有模型参数)变得不太可行。以 GPT-3 175B 为例 - 部署经过微调的模型的独立实例(每个实例具有 175B 个参数)的成本过高。我们提出了低秩自适应(LoRA),它冻结了预训练的模型权重,并将可训练的秩分解矩阵注入 Transformer 架构的每一层,大大减少了下游任务的可训练参数数量。与使用 Adam 微调的 GPT-3 175B 相比,LoRA 可以将可训练参数的数量减少 10,000 倍,并将 GPU 内存需求减少 3 倍。尽管 LoRA 的可训练参数更少、训练吞吐量更高,并且与适配器不同,没有额外的推理延迟,但其在 RoBERTa、DeBERTa、GPT-2 和 GPT-3 上的模型质量表现与微调相当或更好。我们还对语言模型自适应中的秩缺陷进行了实证研究,这揭示了 LoRA 的有效性。我们发布了一个软件包,以促进 LoRA 与 PyTorch 模型的集成,并在 https://github.com/microsoft/LoRA 上提供了我们对 RoBERTa、DeBERTa 和 GPT-2 的实现和模型检查点。

1 INTRODUCTION

自然语言处理中的许多应用都依赖于将一个大规模、预训练的语言模型适配到多个下游应用。这种适配通常通过微调来完成,微调会更新预训练模型的所有参数。微调的主要缺点是新模型包含的参数与原始模型一样多。由于每隔几个月就要训练一次更大的模型,这从 GPT-2(Radford 等人,b)或 RoBERTa large(Liu 等人,2019)的单纯“不便”变成了 GPT-3(Brown 等人,2020)的关键部署挑战,该模型拥有 1750 亿个可训练参数。1 许多人试图通过仅调整一些参数或为新任务学习外部模块来缓解这种情况。这样,除了每个任务的预训练模型之外,我们只需要存储和加载少量特定于任务的参数,从而大大提高部署时的运行效率。然而,现有技术通常会通过扩展模型深度或减少模型的可用序列长度(Li & Liang,2021;Lester 等人,2021;Hambardzumyan 等人,2020;Liu 等人,2021)(第 3 节)来引入推理延迟(Houlsby 等人,2019;Rebuffi 等人,2017)。更重要的是,这些方法往往无法匹配微调基线,导致效率和模型质量之间的权衡。 我们从 Li 等人(2018a);Aghajanyan 等人(2020)那里获得灵感,他们表明学习到的过度参数化模型实际上存在于较低的内在维度上。我们假设模型适应过程中权重的变化也具有较低的“内在秩”,从而导致我们提出的低秩适应(LoRA)方法。 LoRA 允许我们通过优化适应过程中密集层变化的秩分解矩阵来间接训练神经网络中的某些密集层,同时保持预训练的权重不变,如图 1 所示。以 GPT-3 175B 为例,我们表明,即使满秩(即 d)高达 12,288,非常低的秩(即图 1 中的 r 可以是一或二)也足够了,这使得 LoRA 既具有存储效率,又具有计算效率。

在这里插入图片描述
LoRA 具有几个关键优势。
• 预先训练的模型可以共享,并用于为不同任务构建许多小型 LoRA 模块。我们可以通过替换图 1 中的矩阵 A 和 B 来冻结共享模型并有效地切换任务,从而显著降低存储要求和任务切换开销。
• 使用自适应优化器时,LoRA 使训练效率更高,并将硬件进入门槛降低多达 3 倍,因为我们不需要计算梯度或维护大多数参数的优化器状态。相反,我们只优化注入的、小得多的低秩矩阵。
• 我们的简单线性设计允许我们在部署时将可训练矩阵与冻结权重合并,与完全微调的模型相比,通过构造不会引入推理延迟。
• LoRA 与许多先前的方法正交,可以与其中许多方法结合使用,例如前缀调整。我们在附录 E 中提供了一个示例。

2. PROBLEM STATEMENT

第二部分“问题陈述”讨论了大型预训练语言模型适应下游任务的问题。
传统的全面微调方法存在缺点:对每个任务学习的参数规模与原始模型相同,导致存储和部署挑战,尤其是对于像GPT-3这样拥有1750亿参数的大型模型。
在这里插入图片描述
在这里插入图片描述

3.现有方法的不足

现有方法的2个不足:

首先,添加适配器层(adapters)的策略虽然参数少,但会在推理阶段引入延迟(参考下表 Table 1),特别是在大规模和对延迟敏感的生产环境中。
在这里插入图片描述
其次,直接优化输入层激活的方法(prefix)在训练参数方面存在非单调变化,且通过预留部分序列长度用于适应,降低了处理下游任务的序列长度。
这些方法通常无法达到微调基准,存在效率和模型质量之间的权衡。论文通过这些分析指出,尽管现有方法在参数和计算效率方面做出了努力,但在大规模模型的适应中仍面临诸多挑战,包括增加推理延迟和降低模型性能等问题。

4 研究方法

在论文的第四部分“我们的方法”,作者介绍了LoRA(低秩适应)的设计和应用。

4.1节 低秩参数化更新矩阵 、

讨论了如何通过低秩分解更新预训练模型的权重矩阵。这种方法通过在预训练权重矩阵上加入低秩矩阵B和A,从而实现对模型的微调,同时保持预训练权重冻结。这种设计在训练时只需优化低秩矩阵,大大减少了可训练参数的数量。
在这里插入图片描述
在这里插入图片描述
基于此,LoRA 可以成功地外推至全参微调:

Adapters 和 prefix 都无法维持原有架构;
而 LoRA 只是增加了 delta W,可以维持原有架构。
论文中的说明:LoRA(低秩适应)走得更远,不要求在适应期间累积梯度更新到权重矩阵必须是满秩的。这意味着,当我们将LoRA应用于所有权重矩阵并训练所有偏差时,我们大致上通过将LoRA的秩r设置为预训练权重矩阵的秩,恢复了完全微调的表达能力。换句话说,随着我们增加可训练参数的数量,训练LoRA大致上收敛于训练原始模型,而基于适配器的方法收敛于一个多层感知机(MLP),基于前缀的方法则收敛于一个不能处理长输入序列的模型。
4.2节“将LoRA应用于Transformer”中,作者具体说明了如何将LoRA应用于Transformer架构中。特别地,只对自注意力模块中的权重矩阵Wq和Wv进行适应,而保持MLP模块不变。这种方法不仅降低了内存和存储需求,还允许在部署时快速切换不同的下游任务,同时保持高效的训练和无额外推理延迟。

LoRA 的优势:最显著的好处来自于内存和存储使用量的减少。对于使用Adam训练的大型Transformer,如果r ≈ dmodel,我们可以将VRAM使用量减少多达2/3,因为我们不需要为冻结的参数存储优化器状态。在GPT-3 175B上,我们将训练期间的VRAM消耗从1.2TB减少到350GB。当r = 4并且只有查询和值投影矩阵被调整时,检查点大小大约减少了10,000倍(从350GB减少到35MB)。这使我们能够使用显著更少的GPU进行训练,并避免I/O瓶颈。另一个好处是,我们可以在部署时以更低的成本在任务之间切换,只需更换LoRA权重而不是所有参数。这允许创建许多定制模型,可以在存储预训练权重的机器上即时切换。我们还观察到在GPT-3 175B上训练时比完全微调快了25%,因为我们不需要为绝大多数参数计算梯度。

LoRA 的局限:例如,如果选择将A和B并入W以消除额外的推理延迟,则将不同任务的输入分批到单个前向传递中并不直接。虽然在延迟不是关键的情况下,可以选择不合并 A 和 B,并动态选择一批样本中要使用的LoRA模块。(有些训练方法中,我们需要自己手动把训练好的权加到原模型)

5.研究结果

第五部分《我们的方法》详细介绍了LoRA(低秩适应)的具体实现和优势。主要内容包括:

5.1 低秩参数化更新矩阵:介绍了LoRA如何通过低秩矩阵实现对预训练模型的微调,以减少训练参数和计算资源的需求。
在这里插入图片描述
LoRA 的表现说明:大模型确实是低秩的,训练中的很多噪音可以通过降维去掉。

5.2 在Transformer中应用LoRA:讨论了LoRA如何适用于Transformer架构,特别是对自注意力模块的权重矩阵进行低秩适应。
5.3 理解低秩更新:分析了LoRA中低秩矩阵的特性,说明了为什么这种方法能有效减少所需的参数数量。
5.4 哪些权重矩阵应该应用LoRA:探讨了在Transformer架构中应用LoRA的最佳实践,包括选择哪些权重矩阵进行调整。
在这里插入图片描述
5.5 LoRA的最优秩r是多少:讨论了如何选择LoRA中低秩矩阵的最佳秩,以平衡模型性能和效率。**加粗样式
**
Figure 2 关键解读:

  • Prefix 很省内存,但是性能最差
  • LoRA 也很省内存,但表现最佳
    整体上,这一部分详细阐述了LoRA的理论基础、实施细节及其在不同应用场景下的适用性和效能。
    6 相关研究
    第六部分“相关工作”总结了几个与LoRA相关的研究领域:

1) Transformer语言模型:自Transformer架构提出以来,基于它的语言模型在NLP中取得了显著成绩。

2) 提示工程与微调:GPT-3展示了通过少量训练样本进行行为适应的能力,但这依赖于输入提示的精确构造。

3) 参数高效适应:许多研究提出了在现有神经网络层之间插入适配器层,LoRA使用类似的低秩约束来更新权重。

4) 深度学习中的低秩结构:在机器学习问题中,许多问题具有内在的低秩结构,且训练后的深度学习网络往往展示出低秩属性。

LoRA的提出得到了这些文献的支持。
7 理解低秩更新 UNDERSTANDING THE LOW-RANK UPDATES
第七部分“理解低秩更新”中,文章探讨了LoRA(低秩适应)更新过程的原理和效果。

论文分析了在Transformer模型中应用LoRA的效果,说明了低秩更新如何在保持预训练模型权重不变的同时,有效地适应下游任务。

此外,本部分还探讨了在不同的Transformer权重矩阵中应用LoRA的效果,并讨论了LoRA中低秩矩阵的最优秩。

通过实验,文章展示了LoRA在减少可训练参数数量的同时,能够在各种任务上达到与完全微调相当甚至更好的性能。
8 研究结论和展望 CONCLUSION AND FUTURE WORK
微调巨大的语言模型,在硬件需求和为不同任务托管独立实例的存储/切换成本方面成本高昂。我们提出了LoRA,这是一种高效的适应策略,既不引入推理延迟,也不减少输入序列长度,同时保持高模型质量。

重要的是,它允许在作为服务部署时快速切换任务,因为它共享了大部分模型参数。虽然我们主要关注Transformer语言模型,但提出的原则通常适用于任何带有密集层的神经网络。

未来的研究方向有很多。

  1. LoRA可以与其他高效适应方法结合,可能提供正交改进。
  2. 微调或LoRA背后的机制尚不清楚 - 预训练期间学到的特征如何转化为在下游任务上表现良好?我们相信,与全面微调相比,LoRA使回答这个问题更容易。
  3. 我们大多依赖启发式方法来选择应用LoRA的权重矩阵。有没有更原则性的方法呢?
  4. 最后,∆W的秩不足表明W也可能是秩不足的,这也可以为未来的研究提供灵感。

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

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

相关文章

Ubuntu24.04配置DINO-Tracker

一、引言 记录 Ubuntu 配置的第一个代码过程 二、更改conda虚拟环境的默认安装路径 鉴于不久前由于磁盘空间不足引发的重装系统的惨痛经历,在新系统装好后当然要先更改虚拟环境的默认安装路径。 输入指令: conda info可能因为我原本就没有把 Anacod…

Python 深度学习框架之Keras库详解

文章目录 Python 深度学习框架之Keras库详解一、引言二、Keras的特点和优势1、用户友好2、多网络支持3、跨平台运行 三、Keras的安装和环境配置1、软硬件环境2、Python虚拟环境 四、使用示例1、MNIST手写数字识别 五、总结 Python 深度学习框架之Keras库详解 一、引言 Keras是…

电机参数辨识算法(3)——基于三角波电流注入的SPMSM全参数辨识策略

1.引言 电机参数辨识对提高电机控制性能具有重要意义。在之前的参数辨识专题中,介绍了基于无差拍预测电流控制的高频正弦电流注入参数辨识。高频正弦电流注入的话需要你控制器的带宽比较高,因此这种方法不适用于传统PI控制的电流环,还是得用…

Vulnhub靶场 Matrix-Breakout: 2 Morpheus 练习

目录 0x00 准备0x01 主机信息收集0x02 站点信息收集0x03 漏洞查找与利用1. 文件上传2. 提权 0x04 总结 0x00 准备 下载连接:https://download.vulnhub.com/matrix-breakout/matrix-breakout-2-morpheus.ova 介绍: This is the second in the Matrix-Br…

HTML5动漫主题网站——天空之城 10页 html+css+设计报告成品项目模版

📂文章目录 一、📔网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站演示 五、⚙️网站代码 🧱HTML结构代码 💒CSS样式代码 六、🔧完整源码下载 七、📣更多 一、&#…

SpringMVC:入门案例

从此开始,我们步入SpringMVC的学习。 SpringMVC是一种基于Java实现MVC模型的轻量级Web框架 先来看一下web程序是如何工作的: 因为是异步调用,所以后端不需要返回view视图,将其去除前端如果通过异步调用的方式进行交互&#xff0…

【Windows 11专业版】使用问题集合

博文将不断学习补充 I、设置WIN R打开应用默认使用管理员启动 1、WIN R输入 secpol.msc 进入“本地安全策略”。 2、按照如下路径,找到条目: “安全设置”—“本地策略”—“安全选项”—“用户账户控制:以管理员批准模式运行所有管理员” …

Python学习38天

class Person:def __init__(self, name, age, job):self.name nameself.age ageself.job job# 重写函数返回属性def __str__(self):return f"{self.name}--{self.age}--{self.job}"# 冒泡排序法 def bubble_sort(my_list: list[Person]):"""冒泡排…

安装SQL Server 2022提示需要Microsoft .NET Framework 4.7.2 或更高版本

安装SQL Server 2022提示需要Microsoft .NET Framework 4.7.2 或更高版本。 原因是:当前操作系统版本为Windows Server 2016 Standard版本,其自带的Microsoft .NET Framework 版本为4.6太低,不满足要求。 根据报错的提示,点击链接…

鸿蒙开发:自定义一个任意位置弹出的Dialog

前言 鸿蒙开发中,一直有个问题困扰着自己,想必也困扰着大多数开发者,那就是,系统提供的dialog自定义弹窗,无法实现在任意位置进行弹出,仅限于CustomDialog和Component struct的成员变量,这就导致…

DTC控制,直接转矩控制详解

关于磁链矢量所在扇区及最优开关表的选择的思路分析和matlab/simulink实现 仿真参考袁雷老师的《现代永磁同步电机控制原理及MATLAB仿真》,但是由于书中所附代码和书中第四章中讲的实现不同,因此根据自己看的资料和理解重新整理并实现了一下。 这里采用…

css选择当前元素前面的一个元素

选择text-danger前面的ant-divider: .ant-divider:has( .text-danger) {display: none; }

Qt,如何从零开始入门!

Qt 是一个功能全面的跨平台开发框架,不仅可以用于开发桌面应用,还在嵌入式系统中扮演重要角色。即使没有图形化 IDE(如 Qt Creator),你依然可以使用命令行工具和文本编辑器来快速构建功能强大的应用程序。本文将从手动…

oracle数据库的启动与关闭

一.oracle数据库的启动过程 启动实例(Start the Instance) 启动实例:一个Oracle数据库实例由内存结构和后台进程组成,启动实例时会加载这些内存结构和启动进程。实例是数据库的一个运行时环境,它包含了数据库的控制文…

最新版Chrome浏览器调用ActiveX控件之allWebOffice控件

allWebOffice控件概述 allWebOffice控件能够实现在浏览器窗口中在线操作微软Office及WPS办公文档的应用(阅读、编辑、保存等),支持编辑文档时保留修改痕迹,支持书签位置内容动态填充,支持公文套红,支持文档…

AD软件如何快速切换三维视图,由2D切换至3D,以及如何恢复

在Altium Designer软件中,切换三维视图以及恢复二维视图的操作相对简单。以下是具体的步骤: 切换三维视图 在PCB设计界面中,2D切换3D,快捷键按住数字键盘中的“3”即可切换; 快捷键ctrlf(或者vb快捷键也…

el-table 最简单的方法配置图片预览功能

el-table 最简单的方法配置图片预览功能 效果预览 1、安装插件 npm install v-viewernext viewerjs2、全局引入,配置main.js // main.js import VueViewer from v-viewer; import viewerjs/dist/viewer.css; app.use(VueViewer, {url: data-src, // 指定 data-* …

深度学习框架PyTorch中的Tensor详解

目录 ​编辑 引言 PyTorch Tensor基础 什么是Tensor? Tensor与NumPy ndarray Tensor的特性 多维数组 数据类型 设备兼容性 自动求导 广播机制 视图和副本 使用Tensor 创建Tensor 操作Tensor 移动Tensor 自动求导 结论 引言 在深度学习的浪潮中&a…

【实战】Oracle基础之控制文件内容的5种查询方法

关于Jady: ★工作经验:近20年IT技术服务经验,熟悉业务又深耕技术,为业务加持左能进行IT技术规划,右能处理综合性故障与疑难杂症; ★成长历程:网络运维、主机/存储运维、程序/数据库开发、大数…

【Docker】Docker配置远程访问

配置Docker的远程访问,你需要按照以下步骤进行操作: 1. 在Docker宿主机上配置Docker守护进程监听TCP端口 Docker守护进程默认只监听UNIX套接字,要实现远程访问,需要修改配置以监听TCP端口。 ‌方法一:修改Docker服务…