当前位置: 首页 > news >正文

LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS 论文阅读

一、TL;DR

  1. 为什么要这么做?预训练模型越来越大,比如GPT-3 175B训练独立变得越来越不可行
  2. 方法:冻结预训练模型的权重,在Transformer架构的每一层中注入可训练的低秩分解矩阵
  3. 效果:训练参数量减少10000x,GPU显存减少3x,且不像adapter引入额外的推理延迟

二、方法

2.1 整体介绍

LoRA允许我们通过优化dense layers在微调过程中变化的秩分解矩阵,间接地训练神经网络,同时保持预训练权重冻结,

如图1所示。以GPT-3 175B为例,我们表明即使完整秩(即d)高达12,288,一个非常低的秩(即图1中的r可以是一或二)也足够了,这使得LoRA在存储和计算方面都非常高效。

LoRA具有4个关键优势:

  • 多lora部署模型:部署不同的图1中的矩阵A和B高效地切换任务,显著减少存储需求和任务切换开销。

  • 训练门槛低:LoRA\将显存需求减少了3x,因为不需要为大多数参数计算梯度或维护优化器状态。只需要优化注入的、小得多的低秩矩阵。

  • 无推理延迟成本:简单的线性设计允许在部署时将lora参数和预训练权重合并,与完全微调的模型相比,LoRA不会引入任何推理延迟。

  • 方案灵活可叠加:LoRA可与(prefix-tuning)等方法叠加使用

2.2 问题描述

首先定义一下大型预训练模型如何训练下游任务的问题。

全量微调一个自回归语言模型,模型从预训练权重Φ0​ 开始初始化,并通过反复沿着梯度更新,最大化条件语言模型概率

全参的缺点

对每个下游任务,都需要学习一组不同的参数增量∆Φ,其维度|∆Φ|等于预训练模型的参数维度|Φ₀|。因此,如果预训练模型规模庞大(例如GPT-3,其|Φ₀|约为1750亿),存储和部署众多独立的微调模型实例可能会非常困难,甚至根本不可行

lora的优点

是一种更具参数效率的方法,其中针对特定任务的参数增量∆Φ = ∆Φ(Θ)进一步由一组小得多的参数Θ编码,且|Θ|远小于|Φ₀|。因此,寻找∆Φ的任务就变成了对Θ进行优化

使用一种低秩表示来编码∆Φ,更为高效。举例在GPT-3 175B训练时,可训练参数的数量|Θ|可以小至|Φ₀|的0.01%。

讲人话:

原来是全参训练更新参数,现在是相较预训练模型增量的那部分变化用lora的低秩组成的矩阵来代替,从而达到同样的效果

2.3 现在的解决方案(翻译原文)

添加adapter或优化输入层激活的某些形式,局限性是会引入延迟(细节略,直接翻译见下文):

适配器层会引入推理延迟
适配器有多种变体。我们关注Houlsby等人(2019)最初的设计,该设计在每个Transformer块中包含两个适配器层,以及Lin等人(2020)最近提出的设计,后者每个块中只有一个适配器层,但额外增加了一个LayerNorm(Ba等人,2016)。尽管可以通过剪枝层或利用多任务设置来减少整体延迟(Rücklé等人,2020;Pfeiffer等人,2021),但没有直接的方法可以绕过适配器层中的额外计算。这似乎不是问题,因为适配器层被设计为只有少量参数(有时不到原始模型的1%),通过设置较小的瓶颈维度来限制它们增加的浮点运算量(FLOPs)。然而,大型神经网络依赖硬件并行化来保持低延迟,而适配器层必须按顺序处理。这在在线推理场景中(通常批量大小仅为1)会产生差异。在没有模型并行化的通用场景中,例如在单个GPU上运行GPT-2(Radford等人,b)中等模型时,即使瓶颈维度非常小,使用适配器时也会明显增加延迟(见表1)。

当需要对模型进行分片时(如Shoeybi等人,2020;Lepikhin等人,2020),这个问题会变得更糟,因为额外的深度需要更多的同步GPU操作,如AllReduce和Broadcast,除非我们将适配器参数冗余存储多次。

直接优化提示词是困难的
另一个方向,以前缀调整(Li和Liang,2021)为例,面临着不同的挑战。我们观察到前缀调整难以优化,并且其性能会随着可训练参数的变化而非单调变化,这证实了原始论文中的类似观察。更根本的是,为适应保留一部分序列长度,必然会减少可用于处理下游任务的序列长度,我们怀疑这使得提示词调整的性能不如其他方法。关于任务性能的研究将在第5节中进行讨论。

三 本文的方法

3.1 LORA原理

假设在适应过程中,权重的更新具有较低的“内在秩”。对于一个预训练的权重矩阵 W0​∈Rd×k,我们通过低秩分解来约束其更新:W0​+ΔW=W0​+BA,其中 B∈Rd×r,A∈Rr×k,且秩 r≪min(d,k)。

在训练过程中,W0​ 是固定的,不会接收梯度更新,而 A 和 B 包含可训练参数。注意,W0​ 和 ΔW=BA 都与相同的输入相乘,并且它们的输出向量是逐坐标相加的。修改后的前向传播结果为:

我们在图1中展示了这种重新参数化。

具体来说:

  1. 随机高斯初始化 A,并将 B 初始化为零,在训练开始时,ΔW=BA 为零。然后我们将 ΔWx 缩放 rα​,其中 α 是一个与 r 相关的常数。当使用Adam优化时,调整 α 大致等同于调整学习率,只要我们适当地缩放初始化即可。因此,我们只需将 α 设置为我们尝试的第一个 r,而无需对其进行调整。这种缩放有助于减少在变化 r 时重新调整超参数的需求(Yang & Hu, 2021)。

上述原理可以支持多lora进行部署,即共用一套预训练模型,但是不同下游的A和B矩阵进行merge计算并部署

3.2 将LoRA应用于Transformer

在Transformer架构中,自注意力模块中有四个权重矩阵(Wq​,Wk​,Wv​,Wo​),在gpt3.5的模型训练中,发现同时调整Wq和Wv效果是比较好的,因此更应该倾向于用低秩微调不同的参数

3.3 experiments

核心结论:lora比其他的参数微调方法都要稳定和效果好

核心结论:r设置多少和更新哪几个权重比较好?明显是r=2/4且更新多个权重比较好

核心结论:top奇异向量的作用最大,其他的奇异可能会引入更多的噪声。这证明了更新参数矩阵ΔW存在极小的‘内在秩’(这个图我没看懂,下周在更新怎么理解这个图)

四、官方code

微软的官方lora-code:

上面同时初始化了矩阵A和B,但是都是直接全0初始化的,然后执行下面对矩阵A进行初始化:

权重的merge:

前向推理过程:(注意,尺度参数默认是秩的的倒数1/r)

注意,在官方开源的代码里面,CNN也是可以进行lora的,从简单原理上来说,CNN的shape是(input_dim, kernel_size, kernel_size, output_dim),transformer的权重shape是(input_dim, output_dim),CNN的操作会复杂一些(就是将4维的矩阵reshap到2维进行lora,然后,用这2个矩阵的乘积和输入相乘,再累加到原来的4维weights*input里面):

相关文章:

  • uniapp移动端图片比较器组件,仿英伟达官网rtx光追图片比较器功能
  • ⚡️Jolt -- 通过JSON配置来处理复杂数据转换的工具
  • [Java实战]Spring Boot服务CPU 100%问题排查:从定位到解决
  • JS - 重点JS方法温故而知新
  • ROS2 系统架构
  • Linux调度器 --- 负载均衡的存在的问题
  • AI 助力医学统计:复杂临床数据处理的 “救星”
  • 【Oracle】19c数据库控制文件多路径配置
  • Docker 容器指标搜集工具cAdvisor
  • 一款基于Python的从常规文档里提取图片的简单工具开发方案
  • 用 Python 进行比特币数据分析:从入门到实战
  • k8s 配置两个deployment主机级别互斥部署
  • 硬件驱动——51单片机:寄存器、LED、动态数码管
  • Google Cloud Run 如何实现无服务器(Serverless)部署?
  • 受控组件非受控组件
  • 论文阅读:Deep Hybrid Camera Deblurring for Smartphone Cameras
  • 【工作记录】pytest使用总结
  • 深度学习中的并行策略:数据并行、流水并行与张量并行
  • DR-CAN 卡尔曼滤波笔记
  • Python库安装报错解决思路以及机器学习环境配置详细方案
  • 《中华人民共和国经济史(1949—1978年)》教材出版发行
  • 贯彻落实《生态环境保护督察工作条例》,充分发挥生态环境保护督察利剑作用
  • 上海小学生暑(寒)托班会增设开办期数、延长办班时间吗?团市委回应
  • 光速晋级!2025年多哈世乒赛孙颖莎4比0战胜对手
  • 舞者王佳俊谈“与AI共舞”:像多了一个舞伴,要考虑它的“感受”
  • 我使馆就中国公民和企业遭不公正待遇向菲方持续提出严正交涉