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

LoRA翻译

LoRA:大语言模型的低秩适应

Edward Hu1 Yelong Shen1 Phillip Wallis Zeyuan Allen-Zhu

Yuanzhi Li Shean Wang Lu Wang Weizhu Chen Microsoft Corporation {edwardhu, yeshe, phwallis, zeyuana, yuanzhil, swang, luw, wzchen}@microsoft.com yuanzhil@andrew.cmu.edu (版本 2)

脚注 1:贡献相同。

脚注 1:贡献相同。

摘要

自然语言处理的一个重要范式包括在通用领域数据上进行大规模预训练,并针对特定任务或领域进行适应。随着我们预训练的模型越来越大,对所有模型参数进行重新训练的全微调(full fine-tuning)变得不那么可行。以 GPT-3 175B 为例——部署独立的微调模型实例,每个实例具有 1750 亿参数,成本高得令人望而却步。我们提出了低秩适应Low-Rank Adaptation,简称 LoRA),它冻结预训练模型的权重,并将可训练的秩分解矩阵注入到 Transformer 架构的每一层中,从而大大减少了下游任务的可训练参数数量。与使用 Adam 微调的 GPT-3 175B 相比,LoRA 可以将可训练参数数量减少 10,000 倍,GPU 内存需求减少 3 倍。尽管可训练参数更少、训练吞吐量更高,并且与适配器(adapters)不同,没有额外的推理延迟,但 LoRA 在 RoBERTa、DeBERTa、GPT-2 和 GPT-3 上的模型质量与微调相当或更好。我们还对语言模型适应中的秩不足(rank-deficiency)现象进行了实证研究,这揭示了 LoRA 的有效性。我们发布了一个便于将 LoRA 与 PyTorch 模型集成的软件包,并在 https://github.com/microsoft/LoRA 提供了我们在 RoBERTa、DeBERTa 和 GPT-2 上的实现和模型检查点。

1 引言

自然语言处理中的许多应用依赖于将一个大规模、预训练的语言模型适应到多个下游应用。这种适应通常通过微调(fine-tuning)来完成,即更新预训练模型的所有参数。微调的主要缺点是新模型包含与原始模型一样多的参数。随着每隔几个月就有更大的模型被训练出来,这对于 GPT-2 Radford et al. (b) 或 RoBERTa large Liu et al. (2019) 来说仅仅是一个“不便”,而对于拥有 1750 亿可训练参数的 GPT-3 Brown et al. (2020) 则变成了一个严峻的部署挑战。¹

脚注 1:贡献相同。

许多人试图通过仅适应部分参数或为新任务学习外部模块来缓解这个问题。这样,除了预训练模型之外,我们只需要为每个任务存储和加载少量特定于任务的参数,从而在部署时大大提高操作效率。然而,现有技术

图 1:我们的重新参数化。我们只训练 AA 和 BB。

===== 第 2 页 =====

通常通过扩展模型深度(Houlsby et al., 2019; Rebuffi et al., 2017)或减少模型可用的序列长度(Li and Liang, 2021; Lester et al., 2021; Hambardzumyan et al., 2020; Liu et al., 2021)(第 3 节)来引入推理延迟。更重要的是,这些方法往往无法匹配微调的基线,在效率和模型质量之间构成了权衡。

我们从 Li et al. (); Aghajanyan et al. (2020) 的研究中获得灵感,这些研究表明,学习到的过参数化模型实际上存在于一个低内在维度(low intrinsic dimension)上。我们假设模型适应过程中权重的变化也具有低的“内在秩”(intrinsic rank),这导致了我们提出的低秩适应Low-Rank Adaptation,LoRA)方法。LoRA 允许我们通过优化密集层在适应过程中变化的秩分解矩阵来间接地训练神经网络中的某些密集层,同时保持预训练权重冻结,如图 1 所示。以 GPT-3 175B 为例,我们表明即使满秩(即 dd)高达 12,288,一个非常低的秩(即图 1 中的 rr 可以为 1 或 2)就足够了,这使得 LoRA 在存储和计算上都很高效。

LoRA 拥有几个关键优势。

  • 预训练模型可以共享,并用于为不同任务构建许多小的 LoRA 模块。我们可以冻结共享模型,并通过替换图 1 中的矩阵 AA 和 BB 来高效地切换任务,从而显著降低存储需求和任务切换开销。

  • LoRA 使训练更高效,并将使用自适应优化器时的硬件入门门槛降低了最多 3 倍,因为我们不需要为大多数参数计算梯度或维护优化器状态。相反,我们只优化注入的、更小的低秩矩阵。

  • 我们简单的线性设计允许我们在部署时将可训练矩阵与冻结权重合并,与完全微调的模型相比,通过构造不会引入任何推理延迟

  • LoRA 与许多先前的方法是正交的,并且可以与其中许多方法结合使用,例如前缀调优(prefix-tuning)。我们在附录 E 中提供了一个例子。

术语与约定我们频繁引用 Transformer 架构,并使用其维度的常规术语。我们将 Transformer 层的输入和输出维度大小称为 dmodeldmodel​。我们使用 WqWq​、WkWk​、WvWv​ 和 WoWo​ 来指代自注意力模块中的查询/键/值/输出投影矩阵。WW 或 W0W0​ 指预训练的权重矩阵,ΔWΔW 指其在适应过程中累积的梯度更新。我们使用 rr 表示 LoRA 模块的秩。我们遵循 (Vaswani et al., 2017; Brown et al., 2020) 设定的约定,使用 Adam (Loshchilov and Hutter, 2019; Kingma and Ba, 2017) 进行模型优化,并使用 Transformer MLP 前馈维度 dffn=4×dmodeldffn​=4×dmodel​。

2 问题陈述

虽然我们的提议对训练目标是不可知的,但我们专注于语言建模作为我们的动机用例。下面简要描述了语言建模问题,特别是在给定特定任务提示(prompt)的情况下条件概率的最大化。

假设我们有一个参数为 ΦΦ 的预训练自回归语言模型 PΦ(y∣x)PΦ​(y∣x)。例如,PΦ(y∣x)PΦ​(y∣x) 可以是一个基于 Transformer 架构 (Vaswani et al., 2017) 的通用多任务学习器,如 GPT (Radford et al., 2020)。考虑将此预训练模型适应到下游条件文本生成任务,例如摘要、机器阅读理解(MRC)和自然语言转 SQL(NL2SQL)。每个下游任务由一个上下文-目标对(context-target pairs)的训练数据集表示:Z={(xi,yi)}i=1,…,NZ={(xi​,yi​)}i=1,…,N​,其中 xixi​ 和 yiyi​ 都是令牌序列。例如,在 NL2SQL 中,xixi​ 是自然语言查询,yiyi​ 是其对应的 SQL 命令;对于摘要,xixi​ 是文章内容,yiyi​ 是其摘要。

===== 第 3 页 =====

在完全微调期间,模型初始化为预训练权重 Φ0Φ0​,并通过反复遵循梯度更新为 Φ0+ΔΦΦ0​+ΔΦ,以最大化条件语言建模目标:

(这里跳过公式 1)

完全微调的一个主要缺点是,对于每个下游任务,我们学习一套不同的参数 ΔΦΔΦ,其维度 ∣ΔΦ∣∣ΔΦ∣ 等于 ∣Φ0∣∣Φ0​∣。因此,如果预训练模型很大(例如 GPT-3,∣Φ0∣≈1750∣Φ0​∣≈1750 亿),存储和部署许多独立的微调模型实例将具有挑战性,甚至可能不可行。

在本文中,我们采用了一种更参数高效的方法,其中特定于任务的参数增量 ΔΦ=ΔΦ(Θ)ΔΦ=ΔΦ(Θ) 由一个小得多的参数集 ΘΘ 进一步编码,且 ∣Θ∣≪∣Φ0∣∣Θ∣≪∣Φ0​∣。寻找 ΔΦΔΦ 的任务因此变成了对 ΘΘ 进行优化:

(这里跳过公式 2)

在后续章节中,我们提出使用低秩表示来编码 ΔΦΔΦ,这种方法在计算和内存上都是高效的。当预训练模型是 GPT-3 175B 时,可训练参数的数量 ∣Θ∣∣Θ∣ 可以小至 ∣Φ0∣∣Φ0​∣ 的 0.01%0.01%。

3 现有解决方案不够好吗?

我们要解决的问题绝不是新问题。自从迁移学习诞生以来,已有数十项工作试图使模型适应更加参数和计算高效。有关一些知名工作的综述,请参见第 6 节。以语言建模为例,在高效适应方面有两种突出的策略:添加适配器层(adapter layers)(Houlsby et al., 2019; Rebuffi et al., 2017; Pfeiffer et al., 2021; Ruckle et al., 2020) 或优化某种形式的输入层激活(input layer activations)(Li & Liang, 2021; Lester et al., 2021; Hambardzumyan et al., 2020; Liu et al., 2021)。然而,这两种策略都有其局限性,尤其是在大规模且对延迟敏感的生产场景中。

适配器层引入推理延迟适配器有许多变体。我们关注 Houlsby et al. (2019) 的原始设计(每个 Transformer 块有两个适配器层)和 Lin et al. (2020) 的一个较新的设计(每个块只有一个适配器层,但有一个额外的 LayerNorm (Ba et al., 2016))。虽然可以通过剪枝层或利用多任务设置 (Ruckle et al., 2020; Pfeiffer et al., 2021) 来减少总体延迟,但没有直接的方法可以绕过适配器层中的额外计算。这看起来似乎不是问题,因为适配器层通过设置一个小的瓶颈维度(bottleneck dimension)来设计成具有很少的参数(有时 <<1% 的原始模型),这限制了它们可以增加的 FLOPs。然而,大型神经网络依赖硬件并行性来保持低延迟,而适配器层必须顺序处理。这在在线推理设置中(批处理大小通常小至 1)会产生差异。在没有模型并行的通用场景中,例如在单个 GPU 上运行 GPT-2 (Radford et al., b) medium 的推理,我们看到即使使用非常小的瓶颈维度,使用适配器时延迟也会显著增加(表 1)。

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

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

===== 第 4 页 =====

4 我们的方法

我们描述了 LoRA 的简单设计及其实际好处。这里概述的原理适用于深度学习模型中的任何密集层,尽管在我们的实验中,作为动机用例,我们只关注 Transformer 语言模型中的某些权重。

4.1 低秩参数化的更新矩阵

神经网络包含许多执行矩阵乘法的密集层。这些层中的权重矩阵通常是满秩的。在适应特定任务时,Aghajanyan et al. (2020) 表明预训练语言模型具有低的“内在维度”,并且尽管随机投影到较小的子空间,仍然可以高效学习。受此启发,我们假设权重在适应过程中的更新也具有低的“内在秩”。对于一个预训练的权重矩阵 W0∈Rd×kW0​∈Rd×k,我们通过用低秩分解 W0+ΔW=W0+BAW0​+ΔW=W0​+BA 表示其更新来约束它,其中 B∈Rd×r,A∈Rr×kB∈Rd×r,A∈Rr×k,且秩 r≪min⁡(d,k)r≪min(d,k)。在训练期间,W0W0​ 被冻结且不接收梯度更新,而 AA 和 BB 包含可训练参数。注意 W0W0​ 和 ΔW=BAΔW=BA 都与相同的输入相乘,它们各自的输出向量按坐标求和。对于 h=W0xh=W0​x,我们修改后的前向传递产生:

(这里跳过公式 3)

我们在图 1 中说明了我们的重新参数化。我们对 AA 使用随机高斯初始化,对 BB 使用零初始化,因此 ΔW=BAΔW=BA 在训练开始时为零。然后我们将 ΔWxΔWx 缩放 αrrα​,其中 αα 是 rr 中的一个常数。当使用 Adam 进行优化时,如果我们适当地缩放初始化,调整 αα 大致相当于调整学习率。因此,我们简单地将 αα 设置为我们尝试的第一个 rr 并且不调整它。这种缩放有助于减少当我们改变 rr 时需要重新调整超参数的情况 (Yang & Hu, 2021)。

完全微调的推广。一种更通用的微调形式允许训练预训练参数的一个子集。LoRA 更进一步,不要求权重矩阵在适应过程中累积的梯度更新具有满秩。这意味着当将 LoRA 应用于所有权重矩阵并训练所有偏置² 时,通过将 LoRA 秩 rr 设置为预训练权重矩阵的秩,我们大致恢复了完全微调的表现力。换句话说,随着我们增加可训练参数的数量 ³,训练 LoRA 大致收敛到训练原始模型,而基于适配器的方法收敛到一个 MLP,基于前缀的方法收敛到一个不能接受长输入序列的模型。

脚注 2:与权重相比,它们代表的参数数量可以忽略不计。
脚注 3:在适应困难任务时不可避免。

无额外推理延迟。在生产中部署时,我们可以显式计算并存储 W=W0+BAW=W0​+BA,并照常执行推理。注意 W0W0​ 和 BABA 都在 Rd×kRd×k 中。当我们需要切换到另一个下游任务时,我们可以通过减去 BABA 然后添加不同的 B′A′B′A′ 来恢复 W0W0​,这是一个快速操作,内存开销非常小。关键的是,这

表 1:GPT-2 medium 中单次前向传播的推理延迟(以毫秒为单位),超过 100 次试验的平均值。我们使用 NVIDIA Quadro RTX8000。“∣Θ∣∣Θ∣”表示适配器层中可训练参数的数量。AdapterLL 和 AdapterHH 是适配器调优的两种变体,我们在第 5.1 节中描述。在在线、短序列长度场景中,适配器层引入的推理延迟可能很显著。完整研究见附录 B。

===== 第 5 页 =====

保证了与微调模型相比,我们在推理过程中不会引入任何额外的延迟(通过构造)。

4.2 将 LoRA 应用于 Transformer

原则上,我们可以将 LoRA 应用于神经网络中权重矩阵的任何子集,以减少可训练参数的数量。在 Transformer 架构中,自注意力模块中有四个权重矩阵(Wq,Wk,Wv,WoWq​,Wk​,Wv​,Wo​),MLP 模块中有两个。我们将 WqWq​(或 Wk,WvWk​,Wv​)视为一个维度为 dmodel×dmodeldmodel​×dmodel​ 的单一矩阵,即使输出维度通常被切片成注意力头。为了简单和参数效率,我们将研究限制在仅适应注意力权重用于下游任务,并冻结 MLP 模块(因此它们在下游任务中不训练)。我们在第 7.1 节进一步研究了在 Transformer 中适应不同类型注意力权重矩阵的效果。我们将适应 MLP 层、LayerNorm 层和偏置的实证研究留给未来的工作。

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

脚注 4:在部署期间我们仍然需要 350GB 的模型;然而,存储 100 个适应模型只需要 350GB + 35MB * 100 ≈≈ 354GB,而不是 100 * 350GB ≈≈ 35TB。
脚注 5:对于 GPT-3 175B,完全微调的训练吞吐量为每个 V100 GPU 32.5 个令牌/秒;对于模型并行使用相同数量的权重分片,LoRA 的吞吐量为每个 V100 GPU 43.1 个令牌/秒。

LoRA 也有其局限性。例如,如果选择将 AA 和 BB 吸收到 WW 中以消除额外的推理延迟,那么将具有不同 AA 和 BB 的不同任务的输入批量处理到单次前向传递中并不简单。不过,在延迟不关键的场景中,可以不合并权重,并动态选择批次中样本要使用的 LoRA 模块。

5 实证实验

在扩展到 GPT-3 175B (Brown et al., 2020) 之前,我们在 RoBERTa (Liu et al., 2019)、DeBERTa (He et al., 2021) 和 GPT-2 (Radford et al., b) 上评估了 LoRA 的下游任务性能。我们的实验涵盖了从自然语言理解(NLU)到生成(NLG)的广泛任务。具体来说,我们在 RoBERTa 和 DeBERTa 上评估了 GLUE (Wang et al., 2019) 基准测试。我们遵循 Li & Liang (2021) 在 GPT-2 上的设置以进行直接比较,并添加了 WikiSQL (Zhong et al., 2017)(自然语言到 SQL 查询)和 SAMSum (Gliwa et al., 2019)(对话摘要)用于 GPT-3 上的大规模实验。关于我们使用的数据集的更多细节,请参见附录 C。我们所有实验都使用 NVIDIA Tesla V100。

5.1 基线

为了广泛地与其他基线进行比较,我们复制了先前工作中使用的设置,并尽可能重用他们报告的数字。然而,这意味着某些基线可能只出现在特定的实验中。

微调 (FT) 是一种常见的适应方法。在微调期间,模型初始化为预训练的权重和偏置,所有模型参数都经历梯度更新。一个简单的变体是只更新某些层,同时冻结其他层。我们包含了先前工作 (Li & Liang, 2021) 在 GPT-2 上报告的一个这样的基线,该基线仅适应最后两层(FTTopTop)。

===== 第 6 页 =====

仅偏置或 BitFit 是一个基线,其中我们只训练偏置向量,同时冻结其他所有参数。同时,这个基线也被 BitFit (Zaken et al., 2021) 研究过。

前缀嵌入调优 (PreEmbed) 在输入令牌中插入特殊令牌。这些特殊令牌具有可训练的词嵌入,并且通常不在模型的词汇表中。放置这些令牌的位置会对性能产生影响。我们专注于“前缀”(prepending),即将此类令牌放在提示符前面,以及“中缀”(infixing),即附加到提示符后面;两者都在 Li & Liang (2021) 中讨论过。我们使用 lplp​(分别地 lili​)表示前缀(分别地 中缀)令牌的数量。可训练参数的数量是 ∣Θ∣=dmodel×(lp+li)∣Θ∣=dmodel​×(lp​+li​)。

前缀层调优 (PreLayer) 是前缀嵌入调优的扩展。我们不仅学习一些特殊令牌的词嵌入(或等效地,嵌入层后的激活),还学习每个 Transformer 层之后的激活。从前一层计算的激活被简单地替换为可训练的激活。产生的可训练参数数量是 ∣Θ∣=L×dmodel×(lp+li)∣Θ∣=L×dmodel​×(lp​+li​),其中 LL 是 Transformer 层的数量。

适配器调优 如 Houlsby et al. (2019) 所提出的,在自注意力模块(和 MLP 模块)与后续的残差连接之间插入适配器层。一个适配器层中有两个带有偏置的全连接层,中间有一个非线性。我们称这种原始设计为 AdapterHH。最近,Lin et al. (2020) 提出了一种更高效的设计,适配器层仅应用在 MLP 模块之后和一个 LayerNorm 之后。我们称之为 AdapterLL。这与 Pfeiffer et al. (2021) 提出的另一种设计非常相似,我们称之为 AdapterPP。我们还包含了另一个称为 AdapterDrop (Ruckle et al., 2020) 的基线,它丢弃了一些适配器层以提高效率(AdapterDD)。我们尽可能引用先前工作的数字,以最大化我们比较的基线数量;它们在第一列中带有星号 (*) 的行中。在所有情况下,我们有 ∣Θ∣=L^Adpt×(2×dmodel×r+r+dmodel)+2×L^LN×dmodel∣Θ∣=L^Adpt​×(2×dmodel​×r+r+dmodel​)+2×L^LN​×dmodel​,其中 L^AdptL^Adpt​ 是适配器层的数量,L^LNL^LN​ 是可训练 LayerNorm 的数量(例如,在 AdapterLL 中)。

LoRA 将可训练的秩分解矩阵对并行添加到现有的权重矩阵中。如第 4.2 节所述,为简单起见,在大多数实验中,我们仅将 LoRA 应用于 WqWq​ 和 WvWv​。可训练参数的数量由秩 rr 和原始权重的形状决定:∣Θ∣=2×L^LoRA×dmodel×r∣Θ∣=2×L^LoRA​×dmodel​×r,其中 L^LoRAL^LoRA​ 是我们应用 LoRA 的权重矩阵的数量。

表 2:RoBERTabasebase​、RoBERTalargelarge​ 和 DeBERTaXXLXXL​ 在 GLUE 基准测试中使用不同的适应方法。我们报告 MNLI 的总体(匹配和不匹配)准确率、CoLA 的 Matthew 相关系数、STS-B 的 Pearson 相关系数以及其他任务的准确率。所有指标都是越高越好。* 表示先前工作中发布的数字。†† 表示在与 Houlsby et al. (2019) 类似的设置中配置的运行,以进行公平比较。

===== 第 7 页 =====

5.2 RoBERTa base/Large

RoBERTa (Liu et al., 2019) 优化了最初在 BERT (Devlin et al., b) 中提出的预训练方法,并在不引入更多可训练参数的情况下提高了后者的任务性能。虽然近年来 RoBERTa 在 NLP 排行榜(如 GLUE 基准测试 (Wang et al., 2019))上已被更大的模型超越,但就其规模而言,它仍然是一个有竞争力且流行的预训练模型。我们从 HuggingFace Transformers 库 (Wolf et al., 2020) 中获取预训练的 RoBERTa base (125M) 和 RoBERTa large (355M),并在 GLUE 基准测试的任务上评估不同高效适应方法的性能。我们还根据他们的设置复制了 Houlsby et al. (2019) 和 Pfeiffer et al. (2021)。为了确保公平比较,在与适配器比较时,我们对评估 LoRA 的方式进行了两个关键更改。首先,我们对所有任务使用相同的批处理大小,并使用序列长度 128 以匹配适配器基线。其次,对于 MRPC、RTE 和 STS-B,我们将模型初始化为预训练模型,而不是像微调基线那样已经适应了 MNLI 的模型。遵循 Houlsby et al. (2019) 这种更严格设置的运行标有 ††。结果呈现在表 2(前三部分)中。有关所用超参数的详细信息,请参见第 D.1 节。

5.3 DeBERTa XXL

DeBERTa (He et al., 2021) 是 BERT 的一个较新变体,它在更大规模上训练,并且在 GLUE (Wang et al., 2019) 和 SuperGLUE (Wang et al., 2020) 等基准测试上表现非常有竞争力。我们评估 LoRA 是否仍然可以匹配完全微调的 DeBERTa XXL (1.5B) 在 GLUE 上的性能。结果呈现在表 2(底部部分)中。有关所用超参数的详细信息,请参见第 D.2 节。

5.4 GPT-2 medium/Large

已经表明 LoRA 在 NLU 上可以成为完全微调的有竞争力的替代方案,我们希望回答 LoRA 在 NLG 模型(如 GPT-2 medium 和 large (Radford et al., b))上是否仍然占优。为了直接比较,我们尽可能保持我们的设置接近 Li & Liang (2021)。由于空间限制,我们在本节中仅展示我们在 E2E NLG Challenge(表 3)上的结果。有关 WebNLG (Gardent et al., 2017) 和 DART (Nan et al., 2020) 的结果,请参见第 F.1 节。我们在第 D.3 节包含了所使用的超参数列表。

表 3:GPT-2 medium (M) 和 large (L) 在 E2E NLG Challenge 上使用不同的适应方法。所有指标都是越高越好。LoRA 在具有相当或更少可训练参数的情况下优于几个基线。对于我们运行的实验,显示了置信区间。* 表示先前工作中发布的数字。

===== 第 8 页 =====

5.5 扩展到 GPT-3 175B

作为对 LoRA 的最后压力测试,我们扩展到具有 1750 亿参数的 GPT-3。由于训练成本高,我们只报告给定任务在随机种子上的典型标准差,而不是为每个条目提供一个。有关所用超参数的详细信息,请参见第 D.4 节。

如表 4 所示,LoRA 在所有三个数据集上匹配或超过了微调基线。请注意,并非所有方法都随着可训练参数的增加而单调受益,如图 2 所示。我们观察到,当使用超过 256 个特殊令牌进行前缀嵌入调优或超过 32 个特殊令牌进行前缀层调优时,性能显著下降。这证实了 Li and Liang (2021) 中的类似观察结果。虽然对这一现象的彻底调查超出了本工作的范围,但我们怀疑使用更多的特殊令牌会导致输入分布进一步偏离预训练数据分布。另外,我们在第 F.3 节调查了不同适应方法在低数据情况下的性能。

6 相关工作

Transformer 语言模型。Transformer Vaswani et al. (2017) 是一种序列到序列架构,大量使用自注意力。Radford et al. (a) 通过使用一堆 Transformer 解码器将其应用于自回归语言建模。此后,基于 Transformer 的语言模型主导了 NLP,在许多任务中达到了最先进的水平。随着 BERT Devlin et al. (b) 和 GPT-2 Radford et al. (b) 的出现,一个新的范式出现了——两者都是在大量文本上训练的大型 Transformer 语言模型

表 4:不同适应方法在 GPT-3 175B 上的性能。我们报告 WikiSQL 上的逻辑形式验证准确率、MultiNLI-matched 上的验证准确率以及 SAMSum 上的 Rouge-1/2/L。LoRA 的性能优于先前的方法,包括完全微调。WikiSQL 上的结果波动约为 ±0.5%±0.5%,MNLI-m 约为 ±0.1%±0.1%,SAMSum 的三个指标约为 ±0.2/±0.2/±0.1±0.2/±0.2/±0.1。

图 2:几种适应方法在 WikiSQL 和 MNLI-matched 上的 GPT-3 175B 验证准确率与可训练参数数量的关系。LoRA 表现出更好的可扩展性和任务性能。有关绘制数据点的更多详细信息,请参见第 F.2 节。

===== 第 9 页 =====

——在通用领域数据上进行预训练后,对特定任务数据进行微调,与直接在特定任务数据上训练相比,提供了显著的性能增益。训练更大的 Transformer 通常会产生更好的性能,并且仍然是一个活跃的研究方向。GPT-3 (Brown et al., 2020) 是迄今为止训练的最大的单一 Transformer 语言模型,拥有 1750 亿参数。

提示工程与微调。虽然 GPT-3 175B 只需少量额外的训练示例就可以调整其行为,但结果在很大程度上取决于输入提示 (Brown et al., 2020)。这需要一种组合和格式化提示的经验技巧,以最大化模型在期望任务上的性能,这被称为提示工程或提示黑客(prompt hacking)。微调将在通用领域上预训练的模型重新训练到特定任务 Devlin et al. (b); Radford et al. (a)。它的变体包括只学习参数的一个子集 Devlin et al. (b); Collobert & Weston (2008),然而实践者通常重新训练所有参数以最大化下游性能。但是,GPT-3 175B 的巨大规模使得以通常的方式进行微调具有挑战性,因为它产生的大型检查点和高硬件入门门槛,因为其内存占用与预训练相同。

参数高效适应。许多人提出在神经网络的现有层之间插入适配器层 (Houlsby et al., 2019; Rebuffi et al., 2017; Lin et al., 2020)。我们的方法使用类似的瓶颈结构对权重更新施加低秩约束。关键的功能差异在于,我们学习的权重可以在推理期间与主权重合并,因此不会引入任何延迟,而适配器层则不是这种情况(第 3 节)。适配器的一个同时期的扩展是 compacter(Mahabadi et al., 2021),它本质上使用 Kronecker 乘积和一些预定的权重共享方案来参数化适配器层。类似地,将 LoRA 与其他基于张量积的方法结合可能会提高其参数效率,我们将其留给未来的工作。最近,许多人提出优化输入词嵌入以代替微调,类似于提示工程的连续和可微 generalization (Li & Liang, 2021; Lester et al., 2021; Hambardzumyan et al., 2020; Liu et al., 2021)。我们在实验部分包含了与 Li & Liang (2021) 的比较。然而,这类工作只能通过在提示中使用更多特殊令牌来扩展,当学习位置嵌入时,这些特殊令牌会占用任务令牌的可用序列长度。

深度学习中的低秩结构。低秩结构在机器学习中非常常见。许多机器学习问题具有某种内在的低秩结构 (Li et al., 2016; Cai et al., 2010; Li et al., a; Grasedyck et al., 2013)。此外,众所周知,对于许多深度学习任务,尤其是那些具有严重过参数化神经网络的任务,学习到的神经网络在训练后将享有低秩特性 (Oymak et al., 2019)。一些先前的工作甚至在训练原始神经网络时显式施加低秩约束 (Sainath et al., 2013; Povey et al., 2018; Zhang et al., 2014; Jaderberg et al., 2014; Zhao et al., 2016; Khodak et al., 2021; Denil et al., 2014);然而,据我们所知,这些工作中没有一项考虑对冻结模型进行低秩更新以适应下游任务。在理论文献中,众所周知,当底层概念类具有某种低秩结构时,神经网络优于其他经典学习方法,包括相应的(有限宽度)神经正切核 (Allen-Zhu et al., 2019; Li & Liang, 2018) (Ghorbani et al., 2020; Allen-Zhu & Li, 2019; Allen-Zhu & Li, a)。Allen-Zhu & Li (b) 中的另一个理论结果表明,低秩适应可能对对抗训练有用。总之,我们相信我们提出的低秩适应更新在文献中是有充分动机的。

7 理解低秩更新

鉴于 LoRA 的经验优势,我们希望进一步解释从下游任务中学到的低秩适应的属性。请注意,低秩结构不仅降低了硬件入门门槛,使我们能够并行运行多个实验,而且还更好地解释了更新权重如何与预训练权重相关联。我们将研究重点放在 GPT-3 175B 上,在那里我们实现了可训练参数的最大减少(高达 10,000 倍),而没有对任务性能产生不利影响。

我们进行了一系列实证研究来回答以下问题:1) 给定参数预算约束,在预训练的 Transformer 中,应该适应哪些权重矩阵子集

===== 第 10 页 =====

以最大化下游性能? 2) “最优”适应矩阵 ΔWΔW 真的秩不足吗?如果是,在实践中使用什么秩比较好? 3) ΔWΔW 和 WW 之间有什么联系?ΔWΔW 与 WW 高度相关吗?ΔWΔW 与 WW 相比有多大?

我们相信我们对问题 (2) 和 (3) 的回答揭示了使用预训练语言模型进行下游任务的基本原理,这是 NLP 中的一个关键主题。

7.1 我们应该将 LoRA 应用于 Transformer 中的哪些权重矩阵?

给定有限的参数预算,我们应该适应哪些类型的权重才能在下游任务上获得最佳性能?如第 4.2 节所述,我们只考虑自注意力模块中的权重矩阵。我们在 GPT-3 175B 上设置了 18M 的参数预算(如果以 FP16 存储,大约为 35MB),如果我们适应一种类型的注意力权重,则对应于 r=8r=8,或者如果我们适应两种类型,则对应于 r=4r=4,适用于所有 96 层。结果呈现在表 5 中。

请注意,将所有参数放在 ΔWqΔWq​ 或 ΔWkΔWk​ 中会导致性能显著降低,而同时适应 WqWq​ 和 WvWv​ 会产生最佳结果。这表明即使是秩为 4 也能在 ΔWΔW 中捕获足够的信息,因此适应更多权重矩阵比用更大秩适应单一类型的权重更可取。

7.2 LoRA 的最佳秩 rr 是多少?

我们将注意力转向秩 rr 对模型性能的影响。我们适应 {Wq,Wv}{Wq​,Wv​}、{Wq,Wk,Wv,Wc}{Wq​,Wk​,Wv​,Wc​},并仅适应 WqWq​ 以进行比较。

表 6 显示,令人惊讶的是,LoRA 在非常小的 rr 下已经具有竞争力(对于 {Wq,Wv}{Wq​,Wv​} 比仅 WqWq​ 更是如此)。这表明更新矩阵 ΔWΔW 可能具有非常小的“内在秩”。⁶ 为了进一步支持这一发现,我们检查了由不同 rr 选择和不同随机种子学习到的子空间的重叠。我们认为增加 rr 并没有覆盖更有意义的子空间,这表明低秩适应矩阵就足够了。

脚注 6:然而,我们并不期望一个小的 rr 对每个任务或数据集都有效。考虑以下思想实验:如果下游任务使用的语言与预训练使用的语言不同,重新训练整个模型(类似于 r=dmodelr=dmodel​ 的 LoRA)当然可以胜过具有小 rr 的 LoRA。

表 5:在 GPT-3 中,将 LoRA 应用于不同类型的注意力权重后,在 WikiSQL 和 MultiNLI 上的验证准确率,给定相同的可训练参数数量。同时适应 WqWq​ 和 WvWv​ 总体上给出了最佳性能。我们发现对于给定数据集,随机种子间的标准差是一致的,我们在第一列中报告。

表 6:不同秩 rr 在 WikiSQL 和 MultiNLI 上的验证准确率。令我们惊讶的是,对于这些数据集,适应 WqWq​ 和 WvWv​ 时,小至 1 的秩就足够了,而单独训练 WqWq​ 需要更大的 rr。我们在第 H.2 节对 GPT-2 进行了类似的实验。

===== 第 11 页 =====

不同 rr 之间的子空间相似性。给定 Ar=8Ar=8​ 和 Ar=64Ar=64​,它们是使用相同预训练模型学习到的秩分别为 r=8r=8 和 6464 的适应矩阵,我们执行奇异值分解(SVD)并获得右奇异酉矩阵 UAr=8UAr=8​​ 和 UAr=64UAr=64​​。⁷ 我们希望回答:由 UAr=8UAr=8​​ 中前 ii 个奇异向量(对于 1≤i≤81≤i≤8)张成的子空间有多少包含在 UAr=64UAr=64​​ 的前 jj 个奇异向量(对于 1≤j≤641≤j≤64)张成的子空间中?我们使用基于 Grassmann 距离的归一化子空间相似性来测量这个量(更正式的讨论参见附录 G)

脚注 7:注意,可以用 BB 和左奇异酉矩阵进行类似的分析——我们在实验中坚持使用 AA。

(这里跳过公式 4)

其中 UAr=8iUAr=8​i​ 表示 UAr=8UAr=8​​ 中对应前 ii 个奇异向量的列。

ϕ(⋅)ϕ(⋅) 的范围是 [0,1][0,1],其中 11 表示子空间完全重叠,00 表示完全分离。关于 ϕϕ 如何随着 ii 和 jj 变化,请参见图 3。由于空间限制,我们只查看了第 48 层(共 96 层),但结论也适用于其他层,如第 H.1 节所示。

我们从图 3 中得出一个重要观察结果

对应于顶部奇异向量的方向在 Ar=8Ar=8​ 和 Ar=64Ar=64​ 之间显著重叠,而其他方向则没有。具体来说,Ar=8Ar=8​ 的 ΔWvΔWv​(分别地 ΔWqΔWq​)和 Ar=64Ar=64​ 的 ΔWvΔWv​(分别地 ΔWqΔWq​)共享一个维度为 1 的子空间,其归一化相似性 >0.5>0.5,这解释了为什么 r=1r=1 在我们的 GPT-3 下游任务中表现相当好。

由于 Ar=8Ar=8​ 和 Ar=64Ar=64​ 都是使用相同的预训练模型学习的,图 3 表明 Ar=8Ar=8​ 和 Ar=64Ar=64​ 的顶部奇异向量方向是最有用的,而其他方向可能主要包含训练过程中积累的随机噪声。因此,适应矩阵确实可以具有非常低的秩。

不同随机种子之间的子空间相似性。我们通过绘制两个随机种子运行(r=64r=64)之间的归一化子空间相似性进一步证实了这一点,如图 4 所示。ΔWqΔWq​ 似乎比 ΔWvΔWv​ 具有更高的“内在秩”,因为两次运行都为 ΔWqΔWq​ 学习了更多共同的奇异值方向,这与我们在表 6 中的经验观察一致。作为比较,我们还绘制了两个随机高斯矩阵,它们彼此之间不共享任何共同的奇异值方向。

7.3 适应矩阵 ΔWΔW 与 WW 相比如何?

我们进一步研究了 ΔWΔW 和 WW 之间的关系。特别是,ΔWΔW 与 WW 高度相关吗?(或者数学上,ΔWΔW 主要包含在 WW 的顶部奇异方向中吗?)还有,

图 3:Ar=8Ar=8​ 和 Ar=64Ar=64​ 的列向量之间的子空间相似性,针对 ΔWqΔWq​ 和 ΔWvΔWv​。第三和第四张图放大了前两张图中的左下角三角形。r=8r=8 中的顶部方向包含在 r=64r=64 中,反之亦然。

===== 第 12 页 =====

与 WW 中相应方向相比,ΔWΔW 有多“大”?这可以揭示适应预训练语言模型的潜在机制。

为了回答这些问题,我们通过计算 U⊤WV⊤U⊤WV⊤ 将 WW 投影到 ΔWΔW 的 rr 维子空间上,其中 U/VU/V 是 ΔWΔW 的左/右奇异向量矩阵。然后,我们比较 ∥U⊤WV⊤∥F∥U⊤WV⊤∥F​ 和 ∥W∥F∥W∥F​ 之间的 Frobenius 范数。作为比较,我们还通过将 U,VU,V 替换为 WW 的前 rr 个奇异向量或随机矩阵来计算 ∥U⊤WV⊤∥F∥U⊤WV⊤∥F​。

我们从表 7 中得出几个结论。首先,与随机矩阵相比,ΔWΔW 与 WW 具有更强的相关性,表明 ΔWΔW 放大了 WW 中已经存在的一些特征。其次,ΔWΔW 没有重复 WW 的顶部奇异方向,而是只放大了 WW 中未强调的方向。第三,放大因子相当巨大:对于 r=4r=4,21.5≈6.91/0.3221.5≈6.91/0.32。关于为什么 r=64r=64 的放大因子更小,请参见第 H.4 节。我们还在第 H.3 节提供了一个可视化,展示了当我们包含更多来自 WqWq​ 的顶部奇异方向时,相关性如何变化。这表明低秩适应矩阵可能放大了在通用预训练模型中学习到但未强调的、对特定下游任务重要的特征

8 结论与未来工作

就所需的硬件以及为不同任务托管独立实例的存储/切换成本而言,微调巨大的语言模型成本高得令人望而却步。我们提出了 LoRA,一种高效的适应策略,它既不引入推理延迟,也不减少输入序列长度,同时保持高模型质量。重要的是,当作为服务部署时,它通过共享绝大部分模型参数来实现快速任务切换。虽然我们专注于 Transformer 语言模型,但所提出的原理通常适用于任何具有密集层的神经网络。

未来工作有许多方向。1) LoRA 可以与其他高效的适应方法结合,可能提供正交的改进。2) 微调或 LoRA 背后的机制远未清晰——预训练期间学习的特征是如何转换以在下游任务上表现良好的?我们相信 LoRA 使得回答这个问题比完全微调

表 7:U⊤WqV⊤U⊤Wq​V⊤ 的 Frobenius 范数,其中 UU 和 VV 是 (1) ΔWqΔWq​、(2) WqWq​ 或 (3) 随机矩阵的左/右前 rr 个奇异向量方向。权重矩阵取自 GPT-3 的第 48 层。

图 4:左和中: 来自两个随机种子的 Ar=64Ar=64​ 的列向量之间的归一化子空间相似性,针对第 48 层中的 ΔWqΔWq​ 和 ΔWvΔWv​。右: 两个随机高斯矩阵的列向量之间的相同热图。其他层参见第 H.1 节。

===== 第 13 页 =====

更容易处理。3) 我们主要依赖启发式方法选择要应用 LoRA 的权重矩阵。是否有更原则性的方法来做这件事?4) 最后,ΔWΔW 的秩不足表明 WW 也可能秩不足,这也可以作为未来工作的灵感来源。


文章转载自:

http://ZeiHbgsJ.Lpzqx.cn
http://wzM1UkCv.Lpzqx.cn
http://1IPIjtv7.Lpzqx.cn
http://vFypNQaz.Lpzqx.cn
http://7Vo074tD.Lpzqx.cn
http://y5Swt9Kl.Lpzqx.cn
http://YqceJIB0.Lpzqx.cn
http://1xzrVfp7.Lpzqx.cn
http://5HQzKbGp.Lpzqx.cn
http://H142Smq3.Lpzqx.cn
http://YpC9edoZ.Lpzqx.cn
http://jLZVDenT.Lpzqx.cn
http://yCjsKecn.Lpzqx.cn
http://5VgyERU3.Lpzqx.cn
http://fZFCI1xE.Lpzqx.cn
http://jfuwdzUh.Lpzqx.cn
http://NfmYrwLD.Lpzqx.cn
http://N4hJOeMp.Lpzqx.cn
http://x4Vx3G6w.Lpzqx.cn
http://FINBzz9s.Lpzqx.cn
http://UseOZwnH.Lpzqx.cn
http://JXWDIHh8.Lpzqx.cn
http://yCrBgJhT.Lpzqx.cn
http://AQAEWyDM.Lpzqx.cn
http://ZMtNe3g9.Lpzqx.cn
http://KW6gwPPA.Lpzqx.cn
http://v0pysPnG.Lpzqx.cn
http://j1m5uxZJ.Lpzqx.cn
http://CvQOxIu4.Lpzqx.cn
http://WIa7IGC7.Lpzqx.cn
http://www.dtcms.com/a/387216.html

相关文章:

  • Linux 内存管理章节十五:内核内存的侦探工具集:深入Linux内存调试与检测机制
  • Mysql-主从复制与读写分离
  • bevformer 網絡結構
  • MySQL 基础与实战操作
  • 系统架构设计(二)
  • 【Day 58】Redis的部署
  • UVM验证工具--gvim
  • 《C++ spdlog高性能日志库快速上手》
  • 代码随想录学习(二)——二分查找
  • 【代码随想录day 27】 力扣 53. 最大子序和
  • Zynq开发实践(SDK之第一个纯PS工程)
  • 【Spring生态】Spring Cloud
  • HarmonyOS应用拉起系列(三):如何直接拉起腾讯/百度/高德地图进行导航
  • Redis的主从库与切片集群机制
  • 打工人日报#20250916
  • WASM逆向
  • 如何计算最大公约数和最小公倍数
  • 我们设计时间戳的更新时间的时候通常将字段类型设置为int或者bigint 这样能避免2038的问题吗
  • 超越“防被告”:2025跨境电商IPR战略赋能与品牌升值之道
  • Scrapy进阶:POST请求模拟登录实战与管道的使用
  • Zabbix 7.0 配置钉钉告警
  • 知识拓展-智能体和数字人
  • 飞牛NAS部署影视站MooncakeTV
  • yolov8 和OPENCV 自带的目标检测模型 对比
  • 课前练习题-20250916-复习题
  • 基于Transformer-卷积神经网络和度量元学习的高压断路器小样本机械故障诊断
  • 基于 Rust 的 IoT 平台基础功能设计(一)
  • vue+typescript+node的前端项目
  • catkin工程和CMakelist.txt的基本使用
  • 使用 MyCat 实现 MySQL 主从读写分离