自然语言处理的一个重要范式,是先在通用领域数据上进行大规模预训练,再自适应到特定任务或领域。然而随着预训练模型越来越大,重新训练全部参数的全量微调(full fine-tuning)变得愈发不可行。以 GPT-3 175B 为例——为每个任务部署一份独立的、各含 1750 亿参数的微调模型,代价高得令人却步。我们提出低秩自适应(Low-Rank Adaptation,简称 LoRA):冻结预训练模型权重,并在 Transformer 架构的每一层注入可训练的秩分解矩阵,从而极大地减少下游任务的可训练参数量。与使用 Adam 微调的 GPT-3 175B 相比,LoRA 能把可训练参数量减少 10000 倍,把 GPU 显存需求降低 3 倍。尽管 LoRA 的可训练参数更少、训练吞吐更高,且不像 adapter 那样引入额外的推理延迟,但它在 RoBERTa、DeBERTa、GPT-2 和 GPT-3 上的模型质量与微调持平甚至更好。我们还对语言模型自适应中的秩亏(rank-deficiency)现象进行了实证研究,这有助于解释 LoRA 为何有效。我们发布了一个便于将 LoRA 与 PyTorch 模型集成的工具包,并在 上提供了 RoBERTa、DeBERTa 和 GPT-2 的实现与模型 checkpoint。
自然语言处理中的许多应用,都依赖于把一个大规模预训练语言模型自适应到多个下游应用。这种自适应通常通过微调(fine-tuning)完成,即更新预训练模型的全部参数。微调的主要缺点是:新模型所含的参数量与原模型一样多。当模型每隔几个月就变大一轮时,这从 GPT-2(Radford et al., b)或 RoBERTa large(Liu et al., 2019)时代的一桩"小麻烦",演变成了 GPT-3(Brown et al., 2020)——拥有 1750 亿可训练参数——时代一个关键的部署难题。1
许多工作试图通过只自适应部分参数、或为新任务学习外部模块来缓解这一问题。这样一来,对每个任务,我们只需在预训练模型之外存储并加载少量任务相关参数,从而大幅提升部署时的运行效率。然而,现有技术往往会通过加深模型来引入推理延迟(Houlsby et al., 2019;Rebuffi et al., 2017),或者缩短模型可用的序列长度(Li & Liang, 2021;Lester et al., 2021;Hambardzumyan et al., 2020;Liu et al., 2021)(见第 3 节)。更重要的是,这些方法常常无法达到微调基线的水平,从而在效率与模型质量之间形成一种权衡。
我们受到 Li et al.(2018a)、Aghajanyan et al.(2020)的启发——他们的工作表明,学习到的过参数化模型实际上栖息在一个低内在维度(intrinsic dimension)之上。我们由此假设:模型自适应过程中权重的变化也具有一个低"内在秩(intrinsic rank)",进而提出了低秩自适应(LoRA)方法。如图 1 所示,LoRA 允许我们在保持预训练权重冻结的同时,通过优化稠密层在自适应过程中变化量的秩分解矩阵,来间接训练神经网络中的某些稠密层。以 GPT-3 175B 为例,我们证明即便满秩(即图 1 中的 \(d\))高达 12288,一个非常低的秩(即图 1 中的 \(r\) 可以取 1 或 2)也已足够,这使得 LoRA 在存储和计算上都十分高效。
LoRA 具有几个关键优势:
术语与约定。我们会频繁引用 Transformer 架构,并沿用其各维度的惯用术语。我们把一个 Transformer 层的输入和输出维度大小记为 \(d_{model}\)。我们用 \(W_q, W_k, W_v, W_o\) 分别表示自注意力模块中的 query/key/value/output 投影矩阵。\(W\) 或 \(W_0\) 指预训练权重矩阵,\(\Delta W\) 指其在自适应过程中累积的梯度更新。我们用 \(r\) 表示一个 LoRA 模块的秩。我们遵循 Vaswani et al.(2017)、Brown et al.(2020)设定的约定,使用 Adam(Loshchilov & Hutter, 2019;Kingma & Ba, 2017)进行模型优化,并采用 Transformer MLP 前馈维度 \(d_{ffn} = 4 \times d_{model}\)。
1 尽管 GPT-3 175B 借助 few-shot 学习就能取得不俗的性能,但如附录 A 所示,微调能显著提升其表现。
虽然我们的提案与训练目标无关,但我们以语言建模作为引出问题的应用场景。下面简要描述语言建模问题,特别是在给定任务相关 prompt 时对条件概率的最大化。
假设给定一个由 \(\Phi\) 参数化的预训练自回归语言模型 \(P_{\Phi}(y \mid x)\)。例如,\(P_{\Phi}(y \mid x)\) 可以是一个基于 Transformer 架构(Vaswani et al., 2017)的通用多任务学习器,如 GPT(Radford et al., b;Brown et al., 2020)。考虑把这个预训练模型自适应到下游的条件文本生成任务,如摘要、机器阅读理解(MRC)以及自然语言转 SQL(NL2SQL)。每个下游任务由一个上下文-目标对的训练集表示:\(\mathcal{Z} = \{(x_i, y_i)\}_{i=1,\dots,N}\),其中 \(x_i\) 和 \(y_i\) 都是 token 序列。例如在 NL2SQL 中,\(x_i\) 是自然语言查询,\(y_i\) 是其对应的 SQL 命令;在摘要任务中,\(x_i\) 是文章内容,\(y_i\) 是其摘要。
在全量微调时,模型被初始化为预训练权重 \(\Phi_0\),并通过反复沿梯度方向更新来最大化条件语言建模目标,从而变为 \(\Phi_0 + \Delta\Phi\):
全量微调的主要缺点之一是:对每个下游任务,我们都要学习一组不同的参数 \(\Delta\Phi\),其维度 \(|\Delta\Phi|\) 等于 \(|\Phi_0|\)。因此,如果预训练模型很大(例如 GPT-3,\(|\Phi_0| \approx 1750\) 亿),那么存储和部署许多份独立的微调模型即便可行,也是极具挑战性的。
本文采用一种更具参数效率的方法:任务相关的参数增量 \(\Delta\Phi = \Delta\Phi(\Theta)\) 被进一步用一组规模小得多的参数 \(\Theta\) 来编码,且 \(|\Theta| \ll |\Phi_0|\)。于是,寻找 \(\Delta\Phi\) 的任务就变成了对 \(\Theta\) 的优化:
在后续章节中,我们提议用一种低秩表示来编码 \(\Delta\Phi\),它在计算和内存上都很高效。当预训练模型为 GPT-3 175B 时,可训练参数量 \(|\Theta|\) 可以小到仅为 \(|\Phi_0|\) 的 0.01%。
我们着手解决的问题绝非新问题。自迁移学习诞生以来,已有数十项工作致力于让模型自适应在参数和计算上更高效。第 6 节对一些知名工作做了综述。以语言建模为例,在高效自适应方面有两种主流策略:添加 adapter 层(Houlsby et al., 2019;Rebuffi et al., 2017;Pfeiffer et al., 2021;Rücklé et al., 2020),或优化输入层激活的某种形式(Li & Liang, 2021;Lester et al., 2021;Hambardzumyan et al., 2020;Liu et al., 2021)。然而,这两种策略都有其局限,尤其是在大规模、对延迟敏感的生产场景下。
adapter 有许多变体。我们关注 Houlsby et al.(2019)的原始设计——每个 Transformer 块含两个 adapter 层;以及 Lin et al.(2020)较新的设计——每块只含一个 adapter 层,但额外带一个 LayerNorm(Ba et al., 2016)。虽然可以通过剪枝层或利用多任务设置(Rücklé et al., 2020;Pfeiffer et al., 2021)来降低整体延迟,但没有直接的办法可以绕过 adapter 层中额外的计算。这看似不成问题,因为 adapter 层被设计成参数很少(有时不到原模型的 1%)——通过一个小的瓶颈维度来限制它们能增加的 FLOPs。然而,大型神经网络依赖硬件并行来保持低延迟,而 adapter 层必须被串行处理。在 batch size 通常小到只有 1 的在线推理场景下,这会造成明显差别。在没有模型并行的通用场景下(例如在单张 GPU 上对 GPT-2 medium 做推理),即便瓶颈维度非常小,使用 adapter 时我们也能看到延迟的明显增加(表 1)。
当我们需要像 Shoeybi et al.(2020)、Lepikhin et al.(2020)那样对模型分片时,问题会更严重:额外的深度需要更多同步的 GPU 操作(如 AllReduce 和 Broadcast),除非我们把 adapter 参数冗余地多存几份。
| Batch Size | 32 | 16 | 1 |
|---|---|---|---|
| Sequence Length | 512 | 256 | 128 |
| \(|\Theta|\) | 0.5M | 11M | 11M |
| Fine-Tune / LoRA | 1449.4±0.8 | 338.0±0.6 | 19.8±2.7 |
| Adapter\(^{\mathrm{L}}\) | 1482.0±1.0 (+2.2%) | 354.8±0.5 (+5.0%) | 23.9±2.1 (+20.7%) |
| Adapter\(^{\mathrm{H}}\) | 1492.2±1.0 (+3.0%) | 366.3±0.5 (+8.4%) | 25.8±2.2 (+30.3%) |
另一个方向,以 prefix tuning(Li & Liang, 2021)为代表,面临着不同的挑战。我们观察到,prefix tuning 难以优化,且其性能随可训练参数量呈非单调变化,这印证了原论文中类似的观察。更根本的是,为自适应保留一部分序列长度,必然会减少可用于处理下游任务的序列长度,我们怀疑这正是调 prompt 相比其他方法表现较差的原因。我们把任务性能的研究推迟到第 5 节。
我们描述 LoRA 这一简单设计及其实际收益。这里给出的原则适用于深度学习模型中的任何稠密层,不过在实验中,作为引出问题的应用场景,我们只聚焦于 Transformer 语言模型中的某些权重。
神经网络包含许多执行矩阵乘法的稠密层。这些层中的权重矩阵通常是满秩的。Aghajanyan et al.(2020)表明,在自适应到特定任务时,预训练语言模型具有较低的"内在维度",即便被随机投影到一个更小的子空间,仍能高效学习。受此启发,我们假设自适应过程中权重的更新同样具有较低的"内在秩"。对于一个预训练权重矩阵 \(W_0 \in \mathbb{R}^{d\times k}\),我们用一个低秩分解 \(W_0 + \Delta W = W_0 + BA\) 来表示其更新,从而约束它,其中 \(B \in \mathbb{R}^{d\times r}\)、\(A \in \mathbb{R}^{r\times k}\),且秩 \(r \ll \min(d, k)\)。在训练期间,\(W_0\) 被冻结、不接收梯度更新,而 \(A\) 和 \(B\) 含可训练参数。注意 \(W_0\) 与 \(\Delta W = BA\) 乘以同一个输入,它们各自的输出向量按坐标相加。对于 \(h = W_0 x\),我们修改后的前向传播给出:
我们在图 1 中展示了这种重参数化。我们对 \(A\) 使用随机高斯初始化、对 \(B\) 使用零初始化,因此在训练开始时 \(\Delta W = BA\) 为零。随后我们用 \(\frac{\alpha}{r}\) 来缩放 \(\Delta W x\),其中 \(\alpha\) 是一个关于 \(r\) 的常数。用 Adam 优化时,若把初始化适当缩放,则调 \(\alpha\) 大致等同于调学习率。因此我们简单地把 \(\alpha\) 设为我们尝试的第一个 \(r\),并不再对它调参。这种缩放有助于在改变 \(r\) 时减少重新调超参的需要(Yang & Hu, 2021)。
对全量微调的推广。更一般形式的微调允许训练预训练参数的一个子集。LoRA 更进一步,不要求自适应过程中对权重矩阵累积的梯度更新是满秩的。这意味着:当我们把 LoRA 应用于所有权重矩阵并训练所有偏置2时,只要把 LoRA 的秩 \(r\) 设为预训练权重矩阵的秩,就能大致恢复全量微调的表达能力。换句话说,随着可训练参数量的增加3,训练 LoRA 大致收敛到训练原始模型;而基于 adapter 的方法收敛到一个 MLP,基于 prefix 的方法则收敛到一个无法接收长输入序列的模型。
无额外推理延迟。在生产环境部署时,我们可以显式地计算并存储 \(W = W_0 + BA\),然后照常进行推理。注意 \(W_0\) 和 \(BA\) 都属于 \(\mathbb{R}^{d\times k}\)。当我们需要切换到另一个下游任务时,可以通过减去 \(BA\) 来恢复 \(W_0\),再加上一个不同的 \(B'A'\)——这是一个内存开销极小的快速操作。关键在于,这按构造保证了:相比微调模型,我们在推理时不引入任何额外延迟。
原则上,我们可以把 LoRA 应用于神经网络中任意权重矩阵子集,以减少可训练参数量。在 Transformer 架构中,自注意力模块有四个权重矩阵(\(W_q, W_k, W_v, W_o\)),MLP 模块有两个。我们把 \(W_q\)(或 \(W_k\)、\(W_v\))视为一个维度为 \(d_{model}\times d_{model}\) 的单一矩阵,尽管其输出维度通常会被切分到各个注意力头。为了简单与参数效率,我们把研究限制在仅为下游任务自适应注意力权重,并冻结 MLP 模块(因此它们在下游任务中不被训练)。我们在第 7.1 节进一步研究自适应 Transformer 中不同类型注意力权重矩阵的影响。我们把自适应 MLP 层、LayerNorm 层和偏置的实证研究留待未来工作。
实际收益与局限。最显著的收益来自内存与存储使用的减少。对于用 Adam 训练的大型 Transformer,若 \(r \ll d_{model}\),由于无需为冻结参数存储优化器状态,我们把 VRAM 使用最多减少 2/3。在 GPT-3 175B 上,我们把训练期间的 VRAM 消耗从 1.2TB 降到了 350GB。当 \(r = 4\) 且仅自适应 query 和 value 投影矩阵时,checkpoint 体积缩小了约 10000 倍(从 350GB 降到 35MB)4。这使我们能用少得多的 GPU 进行训练,并避免 I/O 瓶颈。另一个收益是:部署时可以仅交换 LoRA 权重(而非全部参数),从而以低得多的成本在任务间切换。这使得我们可以创建许多定制化模型,并在那些把预训练权重存于 VRAM 的机器上即时换入换出。我们还观察到,在 GPT-3 175B 上,相比全量微调训练加速约 25%5,因为我们无需为绝大多数参数计算梯度。
LoRA 也有其局限。例如,若选择把 \(A\) 和 \(B\) 吸收进 \(W\) 以消除额外推理延迟,那么在单次前向传播中对使用不同 \(A\)、\(B\) 的不同任务输入做批处理就不直接了。不过,在延迟不关键的场景下,也可以不合并权重,转而动态地为一个 batch 中的样本选择要使用的 LoRA 模块。
2 相比权重,偏置所占的参数量可以忽略不计。
3 在自适应到困难任务时,这是不可避免的。
4 部署时我们仍然需要那个 350GB 的模型;但存储 100 个自适应模型只需 350GB + 35MB × 100 ≈ 354GB,而不是 100 × 350GB ≈ 35TB。
5 对 GPT-3 175B,全量微调的训练吞吐为每张 V100 GPU 32.5 tokens/s;在模型并行权重分片数相同的情况下,LoRA 的吞吐为每张 V100 GPU 43.1 tokens/s。
在扩展到 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)的广泛任务。具体而言,我们在 GLUE(Wang et al., 2019)基准上评估 RoBERTa 和 DeBERTa。在 GPT-2 上,我们沿用 Li & Liang(2021)的设置以便直接比较;对 GPT-3 的大规模实验,我们另加入 WikiSQL(Zhong et al., 2017,自然语言转 SQL 查询)和 SAMSum(Gliwa et al., 2019,对话摘要)。所用数据集的更多细节见附录 C。所有实验均使用 NVIDIA Tesla V100。
为了与其他基线进行广泛比较,我们复现了前人工作所用的设置,并尽可能复用其报告的数字。不过这意味着某些基线可能只出现在特定实验中。
微调(FT)是一种常见的自适应方法。微调时,模型被初始化为预训练权重和偏置,所有模型参数都接受梯度更新。一个简单变体是只更新部分层、冻结其余层。我们纳入了前人工作(Li & Liang, 2021)在 GPT-2 上报告的一个这样的基线,它只自适应最后两层(FT\(^{\mathrm{Top2}}\))。
仅偏置(Bias-only / BitFit)是一个只训练偏置向量、冻结其余一切的基线。与此同时,这一基线也被 BitFit(Zaken et al., 2021)研究过。
前缀嵌入微调(PreEmbed)在输入 token 之间插入特殊 token。这些特殊 token 具有可训练的词嵌入,且通常不在模型词表中。把这类 token 放在何处会影响性能。我们关注"前置(prefixing)"(把这类 token 加在 prompt 前面)和"中插(infixing)"(加在 prompt 后面);两者均在 Li & Liang(2021)中讨论过。我们用 \(l_p\)(分别地 \(l_i\))表示前缀(分别地中插)token 的数量。可训练参数量为 \(|\Theta| = d_{model} \times (l_p + l_i)\)。
前缀层微调(PreLayer)是前缀嵌入微调的扩展。我们不再只为某些特殊 token 学习词嵌入(或等价地,嵌入层之后的激活),而是学习每一个 Transformer 层之后的激活。前面层算出的激活被直接替换为可训练的激活。由此得到的可训练参数量为 \(|\Theta| = L \times d_{model} \times (l_p + l_i)\),其中 \(L\) 是 Transformer 层数。
Adapter 微调如 Houlsby et al.(2019)所提出,在自注意力模块(和 MLP 模块)与其后的残差连接之间插入 adapter 层。一个 adapter 层中有两个带偏置的全连接层,中间夹一个非线性。我们称这一原始设计为 Adapter\(^{\mathrm{H}}\)。近期,Lin et al.(2020)提出了一种更高效的设计:adapter 层只在 MLP 模块之后、且在一个 LayerNorm 之后应用。我们称之为 Adapter\(^{\mathrm{L}}\)。这与 Pfeiffer et al.(2021)提出的另一设计非常相似,我们称之为 Adapter\(^{\mathrm{P}}\)。我们还纳入另一个名为 AdapterDrop(Rücklé et al., 2020)的基线,它丢弃部分 adapter 层以换取更高效率(Adapter\(^{\mathrm{D}}\))。我们尽可能引用前人工作的数字,以最大化可比较的基线数量;它们位于首列带星号(*)的行。在所有情形下,我们有 \(|\Theta| = \hat L_{Adpt} \times (2\times d_{model}\times r + r + d_{model}) + 2 \times \hat L_{LN}\times d_{model}\),其中 \(\hat L_{Adpt}\) 是 adapter 层数,\(\hat L_{LN}\) 是可训练 LayerNorm 的数量(如 Adapter\(^{\mathrm{L}}\) 中)。
LoRA在既有权重矩阵旁,并行地添加可训练的秩分解矩阵对。如第 4.2 节所述,为简单起见,大多数实验中我们只把 LoRA 应用于 \(W_q\) 和 \(W_v\)。可训练参数量由秩 \(r\) 和原权重的形状决定:\(|\Theta| = 2 \times \hat L_{LoRA} \times d_{model} \times r\),其中 \(\hat L_{LoRA}\) 是我们应用 LoRA 的权重矩阵数量。
| 模型 & 方法 | # 可训练参数 | MNLI | SST-2 | MRPC | CoLA | QNLI | QQP | RTE | STS-B | Avg. |
|---|---|---|---|---|---|---|---|---|---|---|
| RoB\(_{base}\) (FT)* | 125.0M | 87.6 | 94.8 | 90.2 | 63.6 | 92.8 | 91.9 | 78.7 | 91.2 | 86.4 |
| RoB\(_{base}\) (BitFit)* | 0.1M | 84.7 | 93.7 | 92.7 | 62.0 | 91.8 | 84.0 | 81.5 | 90.8 | 85.2 |
| RoB\(_{base}\) (Adpt\(^{\mathrm{D}}\))* | 0.3M | 87.1±.0 | 94.2±.1 | 88.5±1.1 | 60.8±.4 | 93.1±.1 | 90.2±.0 | 71.5±2.7 | 89.7±.3 | 84.4 |
| RoB\(_{base}\) (Adpt\(^{\mathrm{D}}\))* | 0.9M | 87.3±.1 | 94.7±.3 | 88.4±.1 | 62.6±.9 | 93.0±.2 | 90.6±.0 | 75.9±2.2 | 90.3±.1 | 85.4 |
| RoB\(_{base}\) (LoRA) | 0.3M | 87.5±.3 | 95.1±.2 | 89.7±.7 | 63.4±1.2 | 93.3±.3 | 90.8±.1 | 86.6±.7 | 91.5±.2 | 87.2 |
| RoB\(_{large}\) (FT)* | 355.0M | 90.2 | 96.4 | 90.9 | 68.0 | 94.7 | 92.2 | 86.6 | 92.4 | 88.9 |
| RoB\(_{large}\) (LoRA) | 0.8M | 90.6±.2 | 96.2±.5 | 90.9±1.2 | 68.2±1.9 | 94.9±.3 | 91.6±.1 | 87.4±2.5 | 92.6±.2 | 89.0 |
| RoB\(_{large}\) (Adpt\(^{\mathrm{P}}\))† | 3.0M | 90.2±.3 | 96.1±.3 | 90.2±.7 | 68.3±1.0 | 94.8±.2 | 91.9±.1 | 83.8±2.9 | 92.1±.7 | 88.4 |
| RoB\(_{large}\) (Adpt\(^{\mathrm{P}}\))† | 0.8M | 90.5±.3 | 96.6±.2 | 89.7±1.2 | 67.8±2.5 | 94.8±.3 | 91.7±.2 | 80.1±2.9 | 91.9±.4 | 87.9 |
| RoB\(_{large}\) (Adpt\(^{\mathrm{H}}\))† | 6.0M | 89.9±.5 | 96.2±.3 | 88.7±2.9 | 66.5±4.4 | 94.7±.2 | 92.1±.1 | 83.4±1.1 | 91.0±1.7 | 87.8 |
| RoB\(_{large}\) (Adpt\(^{\mathrm{H}}\))† | 0.8M | 90.3±.3 | 96.3±.5 | 87.7±1.7 | 66.3±2.0 | 94.7±.2 | 91.5±.1 | 72.9±2.9 | 91.5±.5 | 86.4 |
| RoB\(_{large}\) (LoRA)† | 0.8M | 90.6±.2 | 96.2±.5 | 90.2±1.0 | 68.2±1.9 | 94.8±.3 | 91.6±.2 | 85.2±1.1 | 92.3±.5 | 88.6 |
| DeB\(_{XXL}\) (FT)* | 1500.0M | 91.8 | 97.2 | 92.0 | 72.0 | 96.0 | 92.7 | 93.9 | 92.9 | 91.1 |
| DeB\(_{XXL}\) (LoRA) | 4.7M | 91.9±.2 | 96.9±.2 | 92.6±.6 | 72.4±1.1 | 96.0±.1 | 92.9±.1 | 94.9±.4 | 93.0±.2 | 91.3 |
RoBERTa(Liu et al., 2019)优化了 BERT(Devlin et al., 2019a)最初提出的预训练方案,在不引入太多额外可训练参数的情况下提升了后者的任务性能。尽管近年来在 GLUE(Wang et al., 2019)等 NLP 排行榜上,RoBERTa 已被大得多的模型超越,但就其规模而言,它在从业者中仍是一个有竞争力且流行的预训练模型。我们从 HuggingFace Transformers 库(Wolf et al., 2020)取来预训练的 RoBERTa base(125M)和 RoBERTa large(355M),并在 GLUE 基准的任务上评估不同高效自适应方法的性能。我们也按 Houlsby et al.(2019)和 Pfeiffer et al.(2021)的设置复现了它们。为确保公平比较,在与 adapter 对比时,我们对评估 LoRA 的方式做了两处关键改动。第一,我们对所有任务使用相同的 batch size,并用 128 的序列长度以匹配 adapter 基线。第二,对 MRPC、RTE 和 STS-B,我们把模型初始化为预训练模型,而非像微调基线那样初始化为已自适应到 MNLI 的模型。遵循 Houlsby et al.(2019)这一更受限设置的运行以 † 标注。结果见表 2(上三段)。所用超参的细节见第 D.1 节。
DeBERTa(He et al., 2021)是 BERT 较新的变体,在大得多的规模上训练,并在 GLUE(Wang et al., 2019)和 SuperGLUE(Wang et al., 2020)等基准上表现非常有竞争力。我们评估 LoRA 能否在 GLUE 上仍然匹配全量微调的 DeBERTa XXL(1.5B)的性能。结果见表 2(最下段)。所用超参的细节见第 D.2 节。
在已经证明 LoRA 可作为 NLU 上全量微调的有竞争力替代之后,我们希望回答:在 NLG 模型(如 GPT-2 medium 和 large,Radford et al., b)上 LoRA 是否仍然占优。为便于直接比较,我们的设置尽量贴近 Li & Liang(2021)。受篇幅所限,本节仅给出我们在 E2E NLG Challenge 上的结果(表 3)。WebNLG(Gardent et al., 2017)和 DART(Nan et al., 2020)上的结果见第 F.1 节。所用超参列于第 D.3 节。
| 模型 & 方法 | # 可训练参数 | BLEU | NIST | MET | ROUGE-L | CIDEr |
|---|---|---|---|---|---|---|
| E2E NLG Challenge | ||||||
| GPT-2 M (FT)* | 354.92M | 68.2 | 8.62 | 46.2 | 71.0 | 2.47 |
| GPT-2 M (Adapter\(^{\mathrm{L}}\))* | 0.37M | 66.3 | 8.41 | 45.0 | 69.8 | 2.40 |
| GPT-2 M (Adapter\(^{\mathrm{L}}\))* | 11.09M | 68.9 | 8.71 | 46.1 | 71.3 | 2.47 |
| GPT-2 M (Adapter\(^{\mathrm{H}}\)) | 11.09M | 67.3±.6 | 8.50±.07 | 46.0±.2 | 70.7±.2 | 2.44±.01 |
| GPT-2 M (FT\(^{\mathrm{Top2}}\))* | 25.19M | 68.1 | 8.59 | 46.0 | 70.8 | 2.41 |
| GPT-2 M (PreLayer)* | 0.35M | 69.7 | 8.81 | 46.1 | 71.4 | 2.49 |
| GPT-2 M (LoRA) | 0.35M | 70.4±.1 | 8.85±.02 | 46.8±.2 | 71.8±.1 | 2.53±.02 |
| GPT-2 L (FT)* | 774.03M | 68.5 | 8.78 | 46.0 | 69.9 | 2.45 |
| GPT-2 L (Adapter\(^{\mathrm{L}}\)) | 0.88M | 69.1±.1 | 8.68±.03 | 46.3±.0 | 71.4±.2 | 2.49±.0 |
| GPT-2 L (Adapter\(^{\mathrm{L}}\)) | 23.00M | 68.9±.3 | 8.70±.04 | 46.1±.1 | 71.3±.2 | 2.45±.02 |
| GPT-2 L (PreLayer)* | 0.77M | 70.3 | 8.85 | 46.2 | 71.7 | 2.47 |
| GPT-2 L (LoRA) | 0.77M | 70.4±.1 | 8.89±.02 | 46.8±.2 | 72.0±.2 | 2.47±.02 |
作为对 LoRA 的最终压力测试,我们扩展到拥有 1750 亿参数的 GPT-3。由于训练成本高昂,我们只报告每个任务在不同随机种子下的典型标准差,而非为每个条目都提供一个。所用超参的细节见第 D.4 节。
如表 4 所示,LoRA 在全部三个数据集上都匹配或超过了微调基线。注意并非所有方法都从更多可训练参数中单调获益,如图 2 所示。当前缀嵌入微调使用超过 256 个特殊 token、或前缀层微调使用超过 32 个特殊 token 时,我们观察到性能显著下降。这印证了 Li & Liang(2021)中类似的观察。虽然对这一现象的深入调查超出了本文范围,但我们怀疑:更多的特殊 token 会使输入分布进一步偏离预训练数据分布。此外,我们在第 F.3 节研究了不同自适应方法在低数据量场景下的性能。
| 模型 & 方法 | # 可训练参数 | WikiSQL Acc.(%) | MNLI-m Acc.(%) | SAMSum R1/R2/RL |
|---|---|---|---|---|
| GPT-3 (FT) | 175,255.8M | 73.8 | 89.5 | 52.0/28.0/44.5 |
| GPT-3 (BitFit) | 14.2M | 71.3 | 91.0 | 51.3/27.4/43.5 |
| GPT-3 (PreEmbed) | 3.2M | 63.1 | 88.6 | 48.3/24.2/40.5 |
| GPT-3 (PreLayer) | 20.2M | 70.1 | 89.5 | 50.8/27.3/43.5 |
| GPT-3 (Adapter\(^{\mathrm{H}}\)) | 7.1M | 71.9 | 89.8 | 53.0/28.9/44.8 |
| GPT-3 (Adapter\(^{\mathrm{H}}\)) | 40.1M | 73.2 | 91.5 | 53.2/29.0/45.1 |
| GPT-3 (LoRA) | 4.7M | 73.4 | 91.7 | 53.8/29.8/45.9 |
| GPT-3 (LoRA) | 37.7M | 74.0 | 91.6 | 53.4/29.2/45.1 |
Transformer 语言模型。Transformer(Vaswani et al., 2017)是一种大量使用自注意力的序列到序列架构。Radford et al.(a)用一叠 Transformer 解码器把它应用于自回归语言建模。自那以后,基于 Transformer 的语言模型主导了 NLP,在许多任务上取得了最先进的水平。BERT(Devlin et al., 2019b)和 GPT-2(Radford et al., b)开启了一个新范式——两者都是在大量文本上训练的大型 Transformer 语言模型——在通用领域数据上预训练后,再在任务相关数据上微调,相比直接在任务相关数据上训练能带来显著的性能提升。训练更大的 Transformer 通常会带来更好的性能,并仍是活跃的研究方向。GPT-3(Brown et al., 2020)是迄今训练过的最大单体 Transformer 语言模型,拥有 1750 亿参数。
Prompt 工程与微调。尽管 GPT-3 175B 仅凭几个额外训练样例就能调整其行为,但结果在很大程度上取决于输入 prompt(Brown et al., 2020)。这就需要一门组合与编排 prompt 的经验性艺术,以在期望任务上最大化模型性能,这被称为 prompt 工程或 prompt hacking。微调则把一个在通用领域上预训练的模型重新训练到特定任务(Devlin et al., 2019b;Radford et al., a)。它的变体包括只学习参数的一个子集(Devlin et al., 2019b;Collobert & Weston, 2008),但从业者往往会重新训练全部参数以最大化下游性能。然而,GPT-3 175B 的庞大体量,使得以通常方式做微调颇具挑战——它产生的 checkpoint 巨大,且硬件进入门槛很高(其内存占用与预训练相同)。
参数高效自适应。许多工作提出在神经网络既有层之间插入 adapter 层(Houlsby et al., 2019;Rebuffi et al., 2017;Lin et al., 2020)。我们的方法使用类似的瓶颈结构对权重更新施加低秩约束。关键的功能性差异在于:我们学到的权重可以在推理时与主权重合并,因而不引入任何延迟,而 adapter 层做不到这一点(第 3 节)。adapter 的一个当代扩展是 COMPACTER(Mahabadi et al., 2021),它本质上用 Kronecker 积加上某种预设的权重共享方案来参数化 adapter 层。类似地,把 LoRA 与其他基于张量积的方法结合,或许能进一步提升其参数效率,我们把这留待未来工作。最近,许多工作提议优化输入词嵌入以替代微调,这近似于对 prompt 工程的连续且可微的推广(Li & Liang, 2021;Lester et al., 2021;Hambardzumyan et al., 2020;Liu et al., 2021)。我们在实验部分纳入了与 Li & Liang(2021)的比较。然而,这一系列工作只能靠在 prompt 中使用更多特殊 token 来扩展,而当学习位置嵌入时,这些 token 会占用本可用于任务 token 的序列长度。
深度学习中的低秩结构。低秩结构在机器学习中非常常见。许多机器学习问题具有某种内在的低秩结构(Li et al., 2016;Cai et al., 2010;Li et al., 2018b;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);然而据我们所知,这些工作都没有考虑为下游任务自适应而对一个冻结模型做低秩更新。在理论文献中,已知当底层概念类具有某种低秩结构时(Ghorbani et al., 2020;Allen-Zhu & Li, 2019;Allen-Zhu & Li, 2020a),神经网络会优于包括对应(有限宽度)神经正切核(neural tangent kernel)在内的其他经典学习方法(Allen-Zhu et al., 2019;Li & Liang, 2018)。Allen-Zhu & Li(2020b)的另一个理论结果表明,低秩自适应对对抗训练可能有用。总之,我们相信所提出的低秩自适应更新有充分的文献依据。
鉴于 LoRA 的实证优势,我们希望进一步解释从下游任务学到的低秩自适应所具有的性质。注意低秩结构不仅降低了进入门槛的硬件要求(使我们能并行运行多个实验),还更好地揭示了更新权重与预训练权重之间的关联。我们把研究聚焦在 GPT-3 175B 上,因为在那里我们实现了可训练参数量的最大削减(最多 10000 倍)而未对任务性能产生不利影响。
我们进行了一系列实证研究来回答以下问题:(1) 在给定参数预算约束下,应自适应预训练 Transformer 中权重矩阵的哪个子集,才能最大化下游性能?(2)"最优"自适应矩阵 \(\Delta W\) 是否真的是秩亏的?若是,实践中用什么秩较好?(3) \(\Delta W\) 与 \(W\) 之间有什么联系?\(\Delta W\) 与 \(W\) 高度相关吗?\(\Delta W\) 相比 \(W\) 有多大?
我们相信,对问题 (2) 和 (3) 的回答,能够揭示利用预训练语言模型完成下游任务的基本原理——这是 NLP 中一个关键的课题。
在有限参数预算下,应该用 LoRA 自适应哪些类型的权重,才能在下游任务上获得最佳性能?如第 4.2 节所述,我们只考虑自注意力模块中的权重矩阵。我们在 GPT-3 175B 上设定 18M 的参数预算(若以 FP16 存储约 35MB)——对全部 96 层而言,若自适应一种类型的注意力权重则对应 \(r=8\),若自适应两种类型则对应 \(r=4\)。结果见表 5。
| # 可训练参数 = 18M | |||||||
|---|---|---|---|---|---|---|---|
| 权重类型 | \(W_q\) | \(W_k\) | \(W_v\) | \(W_o\) | \(W_q, W_k\) | \(W_q, W_v\) | \(W_q,W_k,W_v,W_o\) |
| 秩 \(r\) | 8 | 8 | 8 | 8 | 4 | 4 | 2 |
| WikiSQL (±0.5%) | 70.4 | 70.0 | 73.0 | 73.2 | 71.4 | 73.7 | 73.7 |
| MultiNLI (±0.1%) | 91.0 | 90.8 | 91.0 | 91.3 | 91.3 | 91.3 | 91.7 |
注意,把全部参数都放在 \(\Delta W_q\) 或 \(\Delta W_k\) 上会导致性能显著降低,而同时自适应 \(W_q\) 和 \(W_v\) 则给出最佳结果。这表明:即便秩仅为 4,\(\Delta W\) 也已捕获了足够的信息,因此自适应更多权重矩阵,比用更大的秩自适应单一类型权重更可取。
我们转向秩 \(r\) 对模型性能的影响。我们分别自适应 \(\{W_q, W_v\}\)、\(\{W_q, W_k, W_v, W_o\}\) 以及仅 \(W_q\) 来作对比。
| 数据集 / 权重类型 | \(r=1\) | \(r=2\) | \(r=4\) | \(r=8\) | \(r=64\) |
|---|---|---|---|---|---|
| WikiSQL (±0.5%) | |||||
| \(W_q\) | 68.8 | 69.6 | 70.5 | 70.4 | 70.0 |
| \(W_q, W_v\) | 73.4 | 73.3 | 73.7 | 73.8 | 73.5 |
| \(W_q, W_k, W_v, W_o\) | 74.1 | 73.7 | 74.0 | 74.0 | 73.9 |
| MultiNLI (±0.1%) | |||||
| \(W_q\) | 90.7 | 90.9 | 91.1 | 90.7 | 90.7 |
| \(W_q, W_v\) | 91.3 | 91.4 | 91.3 | 91.6 | 91.4 |
| \(W_q, W_k, W_v, W_o\) | 91.2 | 91.7 | 91.7 | 91.5 | 91.4 |
表 6 显示,令人惊讶的是,LoRA 在非常小的 \(r\) 下就已表现得颇具竞争力(对 \(\{W_q, W_v\}\) 比仅 \(W_q\) 更是如此)。这表明更新矩阵 \(\Delta W\) 可能具有非常小的"内在秩"。6为进一步支持这一发现,我们检查了不同 \(r\) 取值、以及不同随机种子所学子空间之间的重叠。我们论证:增大 \(r\) 并不会覆盖更有意义的子空间,这表明一个低秩自适应矩阵就足够了。
不同 \(r\) 之间的子空间相似度。给定用同一预训练模型、以秩 \(r=8\) 和 \(64\) 学得的自适应矩阵 \(A_{r=8}\) 和 \(A_{r=64}\),我们做奇异值分解(SVD),得到右奇异酉矩阵 \(U_{A_{r=8}}\) 和 \(U_{A_{r=64}}\)。7我们希望回答:\(U_{A_{r=8}}\) 中由前 \(i\) 个奇异向量张成的子空间(\(1 \le i \le 8\)),有多少包含在 \(U_{A_{r=64}}\) 中由前 \(j\) 个奇异向量张成的子空间内(\(1 \le j \le 64\))?我们用一个基于 Grassmann 距离的归一化子空间相似度来度量这个量(更正式的讨论见附录 G):
其中 \(U_{A_{r=8}}^{i}\) 表示 \(U_{A_{r=8}}\) 中对应前 \(i\) 个奇异向量的列。\(\phi(\cdot)\) 的取值范围为 \([0,1]\),其中 1 表示子空间完全重叠,0 表示完全分离。\(\phi\) 随 \(i\) 和 \(j\) 变化的情况见图 3。受篇幅所限,我们只看第 48 层(共 96 层),但结论对其他层同样成立,如第 H.1 节所示。
我们从图 3 得出一个重要观察。
由于 \(A_{r=8}\) 和 \(A_{r=64}\) 都用同一预训练模型学得,图 3 表明:\(A_{r=8}\) 和 \(A_{r=64}\) 的顶部奇异向量方向最为有用,而其他方向可能主要包含训练中累积的随机噪声。因此,自适应矩阵确实可以具有非常低的秩。
不同随机种子之间的子空间相似度。我们进一步通过绘制两次随机种子(\(r=64\))运行之间的归一化子空间相似度来证实这一点,如图 4 所示。\(\Delta W_q\) 似乎比 \(\Delta W_v\) 具有更高的"内在秩",因为两次运行为 \(\Delta W_q\) 学到了更多共同的奇异值方向,这与我们在表 6 中的实证观察一致。作为对比,我们还绘制了两个随机高斯矩阵,它们彼此之间不共享任何共同的奇异值方向。
我们进一步考察 \(\Delta W\) 与 \(W\) 之间的关系。具体而言,\(\Delta W\) 与 \(W\) 高度相关吗?(或者用数学语言说,\(\Delta W\) 是否大体上包含于 \(W\) 的顶部奇异方向之中?)此外,\(\Delta W\) 相比它在 \(W\) 中对应的方向"有多大"?这能揭示自适应预训练语言模型的内在机制。
为回答这些问题,我们通过计算 \(U^\top W V^\top\) 把 \(W\) 投影到 \(\Delta W\) 的 \(r\) 维子空间,其中 \(U/V\) 是 \(\Delta W\) 的左/右奇异向量矩阵。然后,我们比较 \(\|U^\top W V^\top\|_F\) 与 \(\|W\|_F\) 之间的 Frobenius 范数。作为对比,我们也通过把 \(U, V\) 替换为 \(W\) 的前 \(r\) 个奇异向量或一个随机矩阵来计算 \(\|U^\top W V^\top\|_F\)。
| \(r = 4\) | \(r = 64\) | |||||
|---|---|---|---|---|---|---|
| \(\Delta W_q\) | \(W_q\) | Random | \(\Delta W_q\) | \(W_q\) | Random | |
| \(\|U^\top W_q V^\top\|_F =\) | 0.32 | 21.67 | 0.02 | 1.90 | 37.71 | 0.33 |
| \(\|W_q\|_F = 61.95\) | \(\|\Delta W_q\|_F = 6.91\) | \(\|\Delta W_q\|_F = 3.57\) | ||||
我们从表 7 得出几个结论。第一,相比随机矩阵,\(\Delta W\) 与 \(W\) 有更强的相关性,表明 \(\Delta W\) 放大了 \(W\) 中已有的某些特征。第二,\(\Delta W\) 并非重复 \(W\) 的顶部奇异方向,而是只放大那些在 \(W\) 中未被强调的方向。第三,放大倍数相当大:对 \(r=4\),\(21.5 \approx 6.91/0.32\)。\(r=64\) 放大倍数较小的原因见第 H.4 节。我们还在第 H.3 节提供了可视化,展示随着我们从 \(W_q\) 纳入更多顶部奇异方向,相关性如何变化。这表明:低秩自适应矩阵可能放大了那些为特定下游任务而学到、但在通用预训练模型中未被强调的重要特征。
6 不过,我们并不指望小的 \(r\) 对每个任务或数据集都有效。考虑下面这个思想实验:如果下游任务使用的语言不同于预训练所用的语言,那么重新训练整个模型(类似于 \(r=d_{model}\) 的 LoRA)当然能胜过小 \(r\) 的 LoRA。
7 注意类似的分析也可以用 \(B\) 和左奇异酉矩阵来做——我们的实验固定采用 \(A\)。
就所需硬件、以及为不同任务托管独立实例所带来的存储/切换成本而言,微调庞大的语言模型代价高得令人却步。我们提出 LoRA——一种高效的自适应策略:它既不引入推理延迟,也不减少输入序列长度,同时保持高的模型质量。重要的是,通过共享绝大多数模型参数,它使得以服务形式部署时能够快速切换任务。虽然我们聚焦于 Transformer 语言模型,但所提出的原则普遍适用于任何带有稠密层的神经网络。
未来工作有许多方向。(1) LoRA 可以与其他高效自适应方法结合,可能提供正交的改进。(2) 微调或 LoRA 背后的机制远未明朗——预训练中学到的特征是如何被转化以在下游任务上表现良好的?我们相信,相比全量微调,LoRA 让回答这个问题更易处理。(3) 我们在选择对哪些权重矩阵应用 LoRA 时,主要依赖启发式方法。是否存在更有原则的做法?(4) 最后,\(\Delta W\) 的秩亏暗示 \(W\) 本身可能也是秩亏的,这也可以成为未来工作的灵感来源。
按学术惯例,参考文献保留原文。
Armen Aghajanyan, Luke Zettlemoyer, and Sonal Gupta. Intrinsic Dimensionality Explains the Effectiveness of Language Model Fine-Tuning. arXiv:2012.13255 [cs], December 2020.
Zeyuan Allen-Zhu and Yuanzhi Li. What Can ResNet Learn Efficiently, Going Beyond Kernels? In NeurIPS, 2019.
Zeyuan Allen-Zhu and Yuanzhi Li. Backward feature correction: How deep learning performs deep learning. arXiv preprint arXiv:2001.04413, 2020a.
Zeyuan Allen-Zhu and Yuanzhi Li. Feature purification: How adversarial training performs robust deep learning. arXiv preprint arXiv:2005.10190, 2020b.
Zeyuan Allen-Zhu, Yuanzhi Li, and Zhao Song. A convergence theory for deep learning via over-parameterization. In ICML, 2019.
Jimmy Lei Ba, Jamie Ryan Kiros, and Geoffrey E. Hinton. Layer normalization, 2016.
Tom B. Brown, Benjamin Mann, Nick Ryder, Melanie Subbiah, Jared Kaplan, et al. Language Models are Few-Shot Learners. arXiv:2005.14165 [cs], July 2020.
Jian-Feng Cai, Emmanuel J. Candès, and Zuowei Shen. A singular value thresholding algorithm for matrix completion. SIAM Journal on Optimization, 20(4):1956–1982, 2010.
Daniel Cer, Mona Diab, Eneko Agirre, Inigo Lopez-Gazpio, and Lucia Specia. Semeval-2017 task 1: Semantic textual similarity multilingual and crosslingual focused evaluation. In SemEval-2017, 2017.
Ronan Collobert and Jason Weston. A unified architecture for natural language processing: deep neural networks with multitask learning. In ICML '08, pp. 160–167, 2008.
Misha Denil, Babak Shakibi, Laurent Dinh, Marc'Aurelio Ranzato, and Nando de Freitas. Predicting parameters in deep learning, 2014.
Jacob Devlin, Ming-Wei Chang, Kenton Lee, and Kristina Toutanova. Bert: Pre-training of deep bidirectional transformers for language understanding, 2019a.
Jacob Devlin, Ming-Wei Chang, Kenton Lee, and Kristina Toutanova. BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding. arXiv:1810.04805 [cs], May 2019b.
William B. Dolan and Chris Brockett. Automatically constructing a corpus of sentential paraphrases. In IWP2005, 2005.
Claire Gardent, Anastasia Shimorina, Shashi Narayan, and Laura Perez-Beltrachini. The webnlg challenge: Generating text from rdf data. In INLG, pp. 124–133, 2017.
Behrooz Ghorbani, Song Mei, Theodor Misiakiewicz, and Andrea Montanari. When do neural networks outperform kernel methods? arXiv preprint arXiv:2006.13409, 2020.
Bogdan Gliwa, Iwona Mochol, Maciej Biesek, and Aleksander Wawer. Samsum corpus: A human-annotated dialogue dataset for abstractive summarization. CoRR, abs/1911.12237, 2019.
Lars Grasedyck, Daniel Kressner, and Christine Tobler. A literature survey of low-rank tensor approximation techniques. GAMM-Mitteilungen, 36(1):53–78, 2013.
Jihun Ham and Daniel D. Lee. Grassmann discriminant analysis: a unifying view on subspace-based learning. In ICML, pp. 376–383, 2008.
Karen Hambardzumyan, Hrant Khachatrian, and Jonathan May. WARP: Word-level Adversarial ReProgramming. arXiv:2101.00121 [cs], December 2020.
Pengcheng He, Xiaodong Liu, Jianfeng Gao, and Weizhu Chen. Deberta: Decoding-enhanced bert with disentangled attention, 2021.
Neil Houlsby, Andrei Giurgiu, Stanislaw Jastrzebski, Bruna Morrone, Quentin de Laroussilhe, Andrea Gesmundo, Mona Attariyan, and Sylvain Gelly. Parameter-Efficient Transfer Learning for NLP. arXiv:1902.00751 [cs, stat], June 2019.
Max Jaderberg, Andrea Vedaldi, and Andrew Zisserman. Speeding up convolutional neural networks with low rank expansions. arXiv preprint arXiv:1405.3866, 2014.
Mikhail Khodak, Neil Tenenholtz, Lester Mackey, and Nicolo Fusi. Initialization and regularization of factorized neural layers, 2021.
Diederik P. Kingma and Jimmy Ba. Adam: A method for stochastic optimization, 2017.
Dmitry Lepikhin, HyoukJoong Lee, Yuanzhong Xu, Dehao Chen, Orhan Firat, Yanping Huang, Maxim Krikun, Noam Shazeer, and Zhifeng Chen. Gshard: Scaling giant models with conditional computation and automatic sharding, 2020.
Brian Lester, Rami Al-Rfou, and Noah Constant. The Power of Scale for Parameter-Efficient Prompt Tuning. arXiv:2104.08691 [cs], April 2021.
Chunyuan Li, Heerad Farkhoor, Rosanne Liu, and Jason Yosinski. Measuring the Intrinsic Dimension of Objective Landscapes. arXiv:1804.08838 [cs, stat], April 2018a.
Xiang Lisa Li and Percy Liang. Prefix-Tuning: Optimizing Continuous Prompts for Generation. arXiv:2101.00190 [cs], January 2021.
Yuanzhi Li and Yingyu Liang. Learning overparameterized neural networks via stochastic gradient descent on structured data. In NeurIPS, 2018.
Yuanzhi Li, Yingyu Liang, and Andrej Risteski. Recovery guarantee of weighted low-rank approximation via alternating minimization. In ICML, pp. 2358–2367, 2016.
Yuanzhi Li, Tengyu Ma, and Hongyang Zhang. Algorithmic regularization in over-parameterized matrix sensing and neural networks with quadratic activations. In COLT, pp. 2–47, 2018b.
Zhaojiang Lin, Andrea Madotto, and Pascale Fung. Exploring versatile generative language model via parameter-efficient transfer learning. In Findings of EMNLP 2020, pp. 441–459, 2020.
Xiao Liu, Yanan Zheng, Zhengxiao Du, Ming Ding, Yujie Qian, Zhilin Yang, and Jie Tang. GPT Understands, Too. arXiv:2103.10385 [cs], March 2021.
Yinhan Liu, Myle Ott, Naman Goyal, Jingfei Du, Mandar Joshi, Danqi Chen, Omer Levy, Mike Lewis, Luke Zettlemoyer, and Veselin Stoyanov. Roberta: A robustly optimized bert pretraining approach, 2019.
Ilya Loshchilov and Frank Hutter. Decoupled weight decay regularization. arXiv preprint arXiv:1711.05101, 2017.
Ilya Loshchilov and Frank Hutter. Decoupled weight decay regularization, 2019.
Rabeeh Karimi Mahabadi, James Henderson, and Sebastian Ruder. Compacter: Efficient low-rank hypercomplex adapter layers, 2021.
Linyong Nan, Dragomir Radev, Rui Zhang, Amrit Rau, Abhinand Sivaprasad, Chiachun Hsieh, Xiangru Tang, et al. Dart: Open-domain structured data record to text generation. arXiv preprint arXiv:2007.02871, 2020.
Jekaterina Novikova, Ondřej Dušek, and Verena Rieser. The e2e dataset: New challenges for end-to-end generation. arXiv preprint arXiv:1706.09254, 2017.
Samet Oymak, Zalan Fabian, Mingchen Li, and Mahdi Soltanolkotabi. Generalization guarantees for neural networks via harnessing the low-rank structure of the jacobian. arXiv preprint arXiv:1906.05392, 2019.
Jonas Pfeiffer, Aishwarya Kamath, Andreas Rücklé, Kyunghyun Cho, and Iryna Gurevych. Adapterfusion: Non-destructive task composition for transfer learning, 2021.
Daniel Povey, Gaofeng Cheng, Yiming Wang, Ke Li, Hainan Xu, Mahsa Yarmohammadi, and Sanjeev Khudanpur. Semi-orthogonal low-rank matrix factorization for deep neural networks. In Interspeech, pp. 3743–3747, 2018.
Alec Radford, Karthik Narasimhan, Tim Salimans, and Ilya Sutskever. Improving Language Understanding by Generative Pre-Training. (a)
Alec Radford, Jeffrey Wu, Rewon Child, David Luan, Dario Amodei, and Ilya Sutskever. Language Models are Unsupervised Multitask Learners. (b)
Pranav Rajpurkar, Robin Jia, and Percy Liang. Know what you don't know: Unanswerable questions for squad. CoRR, abs/1806.03822, 2018.
Sylvestre-Alvise Rebuffi, Hakan Bilen, and Andrea Vedaldi. Learning multiple visual domains with residual adapters. arXiv:1705.08045 [cs, stat], November 2017.
Andreas Rücklé, Gregor Geigle, Max Glockner, Tilman Beck, Jonas Pfeiffer, Nils Reimers, and Iryna Gurevych. Adapterdrop: On the efficiency of adapters in transformers, 2020.
Tara N. Sainath, Brian Kingsbury, Vikas Sindhwani, Ebru Arisoy, and Bhuvana Ramabhadran. Low-rank matrix factorization for deep neural network training with high-dimensional output targets. In ICASSP, pp. 6655–6659, 2013.
Mohammad Shoeybi, Mostofa Patwary, Raul Puri, Patrick LeGresley, Jared Casper, and Bryan Catanzaro. Megatron-lm: Training multi-billion parameter language models using model parallelism, 2020.
Richard Socher, Alex Perelygin, Jean Wu, Jason Chuang, Christopher D. Manning, Andrew Ng, and Christopher Potts. Recursive deep models for semantic compositionality over a sentiment treebank. In EMNLP, pp. 1631–1642, 2013.
Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N. Gomez, Łukasz Kaiser, and Illia Polosukhin. Attention is all you need. In NeurIPS, pp. 6000–6010, 2017.
Alex Wang, Amanpreet Singh, Julian Michael, Felix Hill, Omer Levy, and Samuel R. Bowman. Glue: A multi-task benchmark and analysis platform for natural language understanding, 2019.
Alex Wang, Yada Pruksachatkun, Nikita Nangia, Amanpreet Singh, Julian Michael, Felix Hill, Omer Levy, and Samuel R. Bowman. Superglue: A stickier benchmark for general-purpose language understanding systems, 2020.
Alex Warstadt, Amanpreet Singh, and Samuel R. Bowman. Neural network acceptability judgments. arXiv preprint arXiv:1805.12471, 2018.
Adina Williams, Nikita Nangia, and Samuel Bowman. A broad-coverage challenge corpus for sentence understanding through inference. In NAACL-HLT, pp. 1112–1122, 2018.
Thomas Wolf, Lysandre Debut, Victor Sanh, Julien Chaumond, Clement Delangue, Anthony Moi, et al. Transformers: State-of-the-art natural language processing. In EMNLP: System Demonstrations, pp. 38–45, 2020.
Greg Yang and Edward J. Hu. Feature Learning in Infinite-Width Neural Networks. arXiv:2011.14522 [cond-mat], May 2021.
Elad Ben Zaken, Shauli Ravfogel, and Yoav Goldberg. Bitfit: Simple parameter-efficient fine-tuning for transformer-based masked language-models, 2021.
Yu Zhang, Ekapol Chuangsuwanich, and James Glass. Extracting deep neural network bottleneck features using low-rank matrix factorization. In ICASSP, pp. 185–189, 2014.
Yong Zhao, Jinyu Li, and Yifan Gong. Low-rank plus diagonal adaptation for deep neural networks. In ICASSP, pp. 5005–5009, 2016.
Victor Zhong, Caiming Xiong, and Richard Socher. Seq2sql: Generating structured queries from natural language using reinforcement learning. CoRR, abs/1709.00103, 2017.
当我们只有少量训练样本时,few-shot 学习(或 prompt 工程)非常有利。然而在实践中,对于性能敏感的应用,我们往往负担得起精心整理出几千甚至更多的训练样例。如表 8 所示,无论在大数据集还是小数据集上,微调相比 few-shot 学习都能大幅提升模型性能。我们从 GPT-3 论文(Brown et al., 2020)中取得 GPT-3 在 RTE 上的 few-shot 结果。对 MNLI-matched,我们每类使用两个示例、共六个 in-context 样例。
| 方法 | MNLI-m (Val. Acc./%) | RTE (Val. Acc./%) |
|---|---|---|
| GPT-3 Few-Shot | 40.6 | 69.0 |
| GPT-3 Fine-Tuned | 89.5 | 85.4 |
adapter 层是以串行方式加到预训练模型上的外部模块,而我们的提案 LoRA 则可视为以并行方式添加的外部模块。因此,adapter 层必须在基础模型之外额外计算,不可避免地引入额外延迟。正如 Rücklé et al.(2020)所指出的,当模型 batch size 和/或序列长度足够大、能充分利用硬件并行时,adapter 层引入的延迟可以被缓解。我们在 GPT-2 medium 上做了类似的延迟研究以证实他们的观察,并指出存在某些场景(尤其是 batch size 很小的在线推理),其中增加的延迟可能相当可观。
我们在 NVIDIA Quadro RTX8000 上测量单次前向传播的延迟,对 100 次试验取平均。我们改变输入 batch size、序列长度以及 adapter 瓶颈维度 \(r\)。我们测试两种 adapter 设计:Houlsby et al.(2019)的原始设计(称为 Adapter\(^{\mathrm{H}}\)),以及 Lin et al.(2020)较新、更高效的变体(称为 Adapter\(^{\mathrm{L}}\))。设计的更多细节见第 5.1 节。我们在图 5 中绘制相对于无 adapter 基线的减速百分比。
GLUE 基准是一个涵盖广泛的自然语言理解任务集合。它包括 MNLI(推理,Williams et al. (2018))、SST-2(情感分析,Socher et al. (2013))、MRPC(释义检测,Dolan & Brockett (2005))、CoLA(语言可接受性,Warstadt et al. (2018))、QNLI(推理,Rajpurkar et al. (2018))、QQP(问答)、RTE(推理)和 STS-B(文本相似度,Cer et al. (2017))。其广泛覆盖使 GLUE 基准成为评估 RoBERTa、DeBERTa 等 NLU 模型的标准指标。各数据集以不同的宽松许可证发布。
WikiSQL由 Zhong et al.(2017)提出,含 56355/8421 个训练/验证样例。任务是从自然语言问题和表结构生成 SQL 查询。我们把上下文编码为 \(x = \{\text{表结构}, \text{查询}\}\),目标为 \(y = \{\text{SQL}\}\)。该数据集以 BSD 3-Clause 许可证发布。
SAMSum由 Gliwa et al.(2019)提出,含 14732/819 个训练/测试样例。它由两人之间编排的聊天对话及语言学家撰写的相应抽象式摘要组成。我们把上下文编码为用"\n"拼接、后接"\n\n"的话语序列,目标为 \(y = \{\text{摘要}\}\)。该数据集以非商业许可证 Creative Commons BY-NC-ND 4.0 发布。
E2E NLG Challenge由 Novikova et al.(2017)首次提出,作为训练端到端、数据驱动的自然语言生成系统的数据集,常用于数据到文本的评估。E2E 数据集来自餐厅领域,约含 42000 个训练、4600 个验证和 4600 个测试样例。每个作为输入的源表可以有多个参考。每个样本输入 \((x, y)\) 由一串槽-值对及相应的自然语言参考文本组成。该数据集以 Creative Commons BY-NC-SA 4.0 发布。
DART是 Nan et al.(2020)描述的开放域数据到文本数据集。DART 的输入被结构化为「实体—关系—实体」三元组序列。DART 共含 82K 个样例,相比 E2E 是一个规模大得多、也更复杂的数据到文本任务。该数据集以 MIT 许可证发布。
WebNLG是另一个常用的数据到文本评估数据集(Gardent et al., 2017)。WebNLG 共含 22K 个样例,由 14 个不同类别构成,其中 9 个在训练中可见。由于 14 个类别中有 5 个在训练中未见、但出现在测试集中,评估通常按「已见(S)」类别、「未见(U)」类别和「全部(A)」分别给出。每个输入样例由一串「主语—属性—宾语」三元组表示。该数据集以 Creative Commons BY-NC-SA 4.0 发布。
我们使用 AdamW 并配合线性学习率衰减调度进行训练。我们为 LoRA 扫描学习率、训练轮数和 batch size。遵循 Liu et al.(2019),在自适应到 MRPC、RTE 和 STS-B 时,我们把 LoRA 模块初始化为我们最优的 MNLI checkpoint,而非通常的初始化;所有任务中预训练模型保持冻结。我们报告 5 个随机种子的中位数;每次运行的结果取自最优轮。为与 Houlsby et al.(2019)和 Pfeiffer et al.(2021)的设置公平比较,我们把模型序列长度限制为 128,并对所有任务使用固定的 batch size。重要的是,自适应到 MRPC、RTE 和 STS-B 时,我们从预训练的 RoBERTa large 模型开始,而非已自适应到 MNLI 的模型。这一受限设置下的运行以 † 标注。所用超参见表 9。
| 方法 / 数据集 | MNLI | SST-2 | MRPC | CoLA | QNLI | QQP | RTE | STS-B |
|---|---|---|---|---|---|---|---|---|
| Optimizer | AdamW | |||||||
| Warmup Ratio | 0.06 | |||||||
| LR Schedule | Linear | |||||||
| RoBERTa base · LoRA | ||||||||
| Batch Size | 16 | 16 | 16 | 32 | 32 | 16 | 32 | 16 |
| # Epochs | 30 | 60 | 30 | 80 | 25 | 25 | 80 | 40 |
| Learning Rate | 5E-04 | 5E-04 | 4E-04 | 4E-04 | 4E-04 | 5E-04 | 5E-04 | 4E-04 |
| LoRA Config. | \(r_q = r_v = 8\) | |||||||
| LoRA \(\alpha\) | 8 | |||||||
| Max Seq. Len. | 512 | |||||||
| RoBERTa large · LoRA | ||||||||
| Batch Size | 4 | 4 | 4 | 4 | 4 | 4 | 8 | 8 |
| # Epochs | 10 | 10 | 20 | 20 | 10 | 20 | 20 | 30 |
| Learning Rate | 3E-04 | 4E-04 | 3E-04 | 2E-04 | 2E-04 | 3E-04 | 4E-04 | 2E-04 |
| LoRA Config. | \(r_q = r_v = 8\) | |||||||
| LoRA \(\alpha\) | 16 | |||||||
| Max Seq. Len. | 128 | 128 | 512 | 128 | 512 | 512 | 512 | 512 |
| RoBERTa large · LoRA† | ||||||||
| Batch Size | 4 | |||||||
| # Epochs | 10 | 10 | 20 | 20 | 10 | 20 | 20 | 10 |
| Learning Rate | 3E-04 | 4E-04 | 3E-04 | 2E-04 | 2E-04 | 3E-04 | 4E-04 | 2E-04 |
| LoRA Config. / \(\alpha\) / Seq | \(r_q=r_v=8\);\(\alpha=16\);Max Seq. Len. 128 | |||||||
我们同样使用 AdamW 并配合线性学习率衰减调度进行训练。遵循 He et al.(2021),我们调学习率、dropout 概率、warm-up 步数和 batch size。为保持比较公平,我们使用与 He et al.(2021)相同的模型序列长度。同样遵循该工作,在自适应到 MRPC、RTE、STS-B 时把 LoRA 模块初始化为最优 MNLI checkpoint;所有任务中预训练模型保持冻结。我们报告 5 个随机种子的中位数,结果取自最优轮。所用超参见表 10。
| 方法 / 数据集 | MNLI | SST-2 | MRPC | CoLA | QNLI | QQP | RTE | STS-B |
|---|---|---|---|---|---|---|---|---|
| Optimizer / Warmup / Schedule | AdamW;Warmup Ratio 0.1;Linear | |||||||
| DeBERTa XXL · LoRA | ||||||||
| Batch Size | 8 | 8 | 32 | 4 | 6 | 8 | 4 | 4 |
| # Epochs | 5 | 16 | 30 | 10 | 8 | 11 | 11 | 10 |
| Learning Rate | 1E-04 | 6E-05 | 2E-04 | 1E-04 | 1E-04 | 1E-04 | 2E-04 | 2E-04 |
| Weight Decay | 0 | 0.01 | 0.01 | 0 | 0.01 | 0.01 | 0.01 | 0.1 |
| CLS Dropout | 0.15 | 0 | 0 | 0.1 | 0.1 | 0.2 | 0.2 | 0.2 |
| LoRA Config. / \(\alpha\) | \(r_q = r_v = 8\);\(\alpha = 8\) | |||||||
| Max Seq. Len. | 256 | 128 | 128 | 64 | 512 | 320 | 320 | 128 |
我们用 AdamW(Loshchilov & Hutter, 2017)配合线性学习率调度,训练所有 GPT-2 模型 5 轮。我们使用 Li & Liang(2021)所述的 batch size、学习率和 beam search 束宽,并相应地为 LoRA 调上述超参。我们报告 3 个随机种子的均值,结果取自最优轮。GPT-2 中 LoRA 所用超参列于表 11;其他基线所用超参见 Li & Liang(2021)。
| 数据集 | E2E | WebNLG | DART |
|---|---|---|---|
| Training | |||
| Optimizer | AdamW | ||
| Weight Decay | 0.01 | 0.01 | 0.0 |
| Dropout Prob | 0.1 | 0.1 | 0.0 |
| Batch Size | 8 | ||
| # Epoch | 5 | ||
| Warmup Steps | 500 | ||
| LR Schedule | Linear | ||
| Label Smooth | 0.1 | 0.1 | 0.0 |
| Learning Rate | 0.0002 | ||
| Adaptation | \(r_q = r_v = 4\) | ||
| LoRA \(\alpha\) | 32 | ||
| Inference | |||
| Beam Size | 10 | ||
| Length Penalty | 0.9 | 0.8 | 0.8 |
| no repeat ngram size | 4 | ||
对所有 GPT-3 实验,我们用 AdamW(Loshchilov & Hutter, 2017)训练 2 轮,batch size 为 128 个样本,权重衰减系数为 0.1。我们对 WikiSQL(Zhong et al., 2017)使用 384 的序列长度、对 MNLI(Williams et al., 2018)使用 768、对 SAMSum(Gliwa et al., 2019)使用 2048。我们为所有「方法-数据集」组合调学习率。对前缀嵌入微调,我们发现最优的 \(l_p\) 和 \(l_i\) 分别为 256 和 8,共计 3.2M 可训练参数。对前缀层微调,我们用 \(l_p = 8\)、\(l_i = 8\)(20.2M 可训练参数)以获得总体最佳性能。我们为 LoRA 给出两种参数预算:4.7M(\(r_q = r_v = 1\) 或 \(r_v = 2\))和 37.7M(\(r_q = r_v = 8\) 或 \(r_q = r_k = r_v = r_o = 2\))。我们报告每次运行的最佳验证性能。GPT-3 实验所用训练超参列于表 12。
| 超参数 | Fine-Tune | PreEmbed | PreLayer | BitFit | Adapter\(^{\mathrm{H}}\) | LoRA |
|---|---|---|---|---|---|---|
| Optimizer | AdamW | |||||
| Batch Size | 128 | |||||
| # Epoch | 2 | |||||
| Warmup Tokens | 250,000 | |||||
| LR Schedule | Linear | |||||
| Learning Rate | 5.00E-06 | 5.00E-04 | 1.00E-04 | 1.6E-03 | 1.00E-04 | 2.00E-04 |
LoRA 可以与既有的基于 prefix 的方法自然结合。本节我们在 WikiSQL 和 MNLI 上评估 LoRA 与两种 prefix-tuning 变体的组合。
LoRA+PrefixEmbed(LoRA+PE)把 LoRA 与前缀嵌入微调结合:我们插入 \(l_p + l_i\) 个特殊 token,其嵌入被当作可训练参数。关于前缀嵌入微调,详见第 5.1 节。
LoRA+PrefixLayer(LoRA+PL)把 LoRA 与前缀层微调结合。我们同样插入 \(l_p + l_i\) 个特殊 token;但不再让这些 token 的隐藏表示自然演化,而是在每个 Transformer 块之后用一个与输入无关的向量替换它们。因此,嵌入以及后续 Transformer 块的激活都被当作可训练参数。关于前缀层微调,详见第 5.1 节。
在表 15 中,我们展示 LoRA+PE 和 LoRA+PL 在 WikiSQL 和 MultiNLI 上的评估结果。首先,LoRA+PE 在 WikiSQL 上显著优于 LoRA 和前缀嵌入微调,这表明 LoRA 与前缀嵌入微调在某种程度上是正交的。在 MultiNLI 上,LoRA+PE 的组合并不优于 LoRA,可能是因为 LoRA 本身已达到与人类基线相当的性能。其次,我们注意到即便有更多可训练参数,LoRA+PL 的表现也略逊于 LoRA。我们把这归因于:前缀层微调对学习率的选择非常敏感,从而使得 LoRA+PL 中 LoRA 权重的优化更加困难。
我们还遵循 Li & Liang(2021)的设置,在 DART(Nan et al., 2020)和 WebNLG(Gardent et al., 2017)上重复了实验,结果见表 13。与第 5 节报告的 E2E NLG Challenge 结果类似,在可训练参数量相同的情况下,LoRA 优于、或至少持平于基于 prefix 的方法。
| 方法 | # 可训练参数 | BLEU↑ | MET↑ | TER↓ |
|---|---|---|---|---|
| GPT-2 Medium · DART | ||||
| Fine-Tune | 354M | 46.2 | 0.39 | 0.46 |
| Adapter\(^{\mathrm{L}}\) | 0.37M | 42.4 | 0.36 | 0.48 |
| Adapter\(^{\mathrm{L}}\) | 11M | 45.2 | 0.38 | 0.46 |
| FT\(^{\mathrm{Top2}}\) | 24M | 41.0 | 0.34 | 0.56 |
| PrefLayer | 0.35M | 46.4 | 0.38 | 0.46 |
| LoRA | 0.35M | 47.1±.2 | 0.39 | 0.46 |
| GPT-2 Large · DART | ||||
| Fine-Tune | 774M | 47.0 | 0.39 | 0.46 |
| Adapter\(^{\mathrm{L}}\) | 0.88M | 45.7±.1 | 0.38 | 0.46 |
| Adapter\(^{\mathrm{L}}\) | 23M | 47.1±.1 | 0.39 | 0.45 |
| PrefLayer | 0.77M | 46.7 | 0.38 | 0.45 |
| LoRA | 0.77M | 47.5±.1 | 0.39 | 0.45 |
| 方法 | BLEU↑ | MET↑ | TER↓ | ||||||
|---|---|---|---|---|---|---|---|---|---|
| U | S | A | U | S | A | U | S | A | |
| GPT-2 Medium · WebNLG | |||||||||
| Fine-Tune (354M) | 27.7 | 64.2 | 46.5 | .30 | .45 | .38 | .76 | .33 | .53 |
| Adapter\(^{\mathrm{L}}\) (0.37M) | 45.1 | 54.5 | 50.2 | .36 | .39 | .38 | .46 | .40 | .43 |
| Adapter\(^{\mathrm{L}}\) (11M) | 48.3 | 60.4 | 54.9 | .38 | .43 | .41 | .45 | .35 | .39 |
| FT\(^{\mathrm{Top2}}\) (24M) | 18.9 | 53.6 | 36.0 | .23 | .38 | .31 | .99 | .49 | .72 |
| Prefix (0.35M) | 45.6 | 62.9 | 55.1 | .38 | .44 | .41 | .49 | .35 | .40 |
| LoRA (0.35M) | 46.7±.4 | 62.1±.2 | 55.3±.2 | .38 | .44 | .41 | .46 | .33 | .39 |
| GPT-2 Large · WebNLG | |||||||||
| Fine-Tune (774M) | 43.1 | 65.3 | 55.5 | .38 | .46 | .42 | .53 | .33 | .42 |
| Adapter\(^{\mathrm{L}}\) (0.88M) | 49.8±.0 | 61.1±.0 | 56.0±.0 | .38 | .43 | .41 | .44 | .35 | .39 |
| Adapter\(^{\mathrm{L}}\) (23M) | 49.2±.1 | 64.7±.2 | 57.7±.1 | .39 | .46 | .43 | .46 | .33 | .39 |
| Prefix (0.77M) | 47.7 | 63.4 | 56.3 | .39 | .45 | .42 | .48 | .34 | .40 |
| LoRA (0.77M) | 48.4±.3 | 64.0±.3 | 57.0±.1 | .39 | .45 | .42 | .45 | .32 | .38 |
我们在表 15 中给出 GPT-3 采用不同自适应方法的额外运行。重点在于厘清性能与可训练参数量之间的权衡。
| 方法 | 超参数 | # 可训练参数 | WikiSQL | MNLI-m |
|---|---|---|---|---|
| Fine-Tune | - | 175B | 73.8 | 89.5 |
| PrefixEmbed | \(l_p=32, l_i=8\) | 0.4 M | 55.9 | 84.9 |
| \(l_p=64, l_i=8\) | 0.9 M | 58.7 | 88.1 | |
| \(l_p=128, l_i=8\) | 1.7 M | 60.6 | 88.0 | |
| \(l_p=256, l_i=8\) | 3.2 M | 63.1 | 88.6 | |
| \(l_p=512, l_i=8\) | 6.4 M | 55.9 | 85.8 | |
| PrefixLayer | \(l_p=2, l_i=2\) | 5.1 M | 68.5 | 89.2 |
| \(l_p=8, l_i=0\) | 10.1 M | 69.8 | 88.2 | |
| \(l_p=8, l_i=8\) | 20.2 M | 70.1 | 89.5 | |
| \(l_p=32, l_i=4\) | 44.1 M | 66.4 | 89.6 | |
| \(l_p=64, l_i=0\) | 76.1 M | 64.9 | 87.9 | |
| Adapter\(^{\mathrm{H}}\) | \(r=1\) | 7.1 M | 71.9 | 89.8 |
| \(r=4\) | 21.2 M | 73.2 | 91.0 | |
| \(r=8\) | 40.1 M | 73.2 | 91.5 | |
| \(r=16\) | 77.9 M | 73.2 | 91.5 | |
| \(r=64\) | 304.4 M | 72.6 | 91.5 | |
| LoRA | \(r_v=2\) | 4.7 M | 73.4 | 91.7 |
| \(r_q=r_v=1\) | 4.7 M | 73.4 | 91.3 | |
| \(r_q=r_v=2\) | 9.4 M | 73.3 | 91.4 | |
| \(r_q=r_k=r_v=r_o=1\) | 9.4 M | 74.1 | 91.2 | |
| \(r_q=r_v=4\) | 18.8 M | 73.7 | 91.3 | |
| \(r_q=r_k=r_v=r_o=2\) | 18.8 M | 73.7 | 91.7 | |
| \(r_q=r_v=8\) | 37.7 M | 73.8 | 91.6 | |
| \(r_q=r_k=r_v=r_o=4\) | 37.7 M | 74.0 | 91.7 | |
| \(r_q=r_v=64\) | 301.9 M | 73.6 | 91.4 | |
| \(r_q=r_k=r_v=r_o=64\) | 603.8 M | 73.9 | 91.4 | |
| LoRA+PE | \(r_q=r_v=8, l_p=8, l_i=4\) | 37.8 M | 75.0 | 91.4 |
| \(r_q=r_v=32, l_p=8, l_i=4\) | 151.1 M | 75.9 | 91.1 | |
| \(r_q=r_v=64, l_p=8, l_i=4\) | 302.1 M | 76.2 | 91.3 | |
| LoRA+PL | \(r_q=r_v=8, l_p=8, l_i=4\) | 52.8 M | 72.9 | 90.2 |
为评估不同自适应方法在低数据量场景下的性能,我们从 MNLI 的完整训练集中随机抽取 100、1k 和 10k 个训练样例,构成低数据 MNLI-\(n\) 任务。表 16 展示不同自适应方法在 MNLI-\(n\) 上的性能。令我们惊讶的是,PrefixEmbed 和 PrefixLayer 在 MNLI-100 数据集上表现非常差,其中 PrefixEmbed 仅略好于随机猜测(37.6% vs. 33.3%)。PrefixLayer 优于 PrefixEmbed,但在 MNLI-100 上仍显著差于 Fine-Tune 或 LoRA。随着训练样例增多,基于 prefix 的方法与 LoRA/微调之间的差距缩小,这或许暗示基于 prefix 的方法不适合 GPT-3 中的低数据任务。考虑到随机种子带来的(±0.3)方差,LoRA 在 MNLI-100 和 MNLI-Full 上都优于微调,在 MNLI-1k 和 MNLI-10K 上则结果相当。
| 方法 | MNLI(m)-100 | MNLI(m)-1k | MNLI(m)-10k | MNLI(m)-392K |
|---|---|---|---|---|
| GPT-3 (Fine-Tune) | 60.2 | 85.8 | 88.9 | 89.5 |
| GPT-3 (PrefixEmbed) | 37.6 | 75.2 | 79.5 | 88.6 |
| GPT-3 (PrefixLayer) | 48.3 | 82.5 | 85.9 | 89.6 |
| GPT-3 (LoRA) | 63.8 | 85.6 | 89.2 | 91.7 |
不同自适应方法在 MNLI-\(n\) 上的训练超参数见表 17。我们对 MNLI-100 上的 PrefixLayer 采用更小的学习率,因为更大的学习率下训练损失不下降。
| 超参数 | 自适应 | MNLI-100 | MNLI-1k | MNLI-10K | MNLI-392K |
|---|---|---|---|---|---|
| Optimizer | - | AdamW | |||
| Warmup Tokens | - | 250,000 | |||
| LR Schedule | - | Linear | |||
| Batch Size | - | 20 | 20 | 100 | 128 |
| # Epoch | - | 40 | 40 | 4 | 2 |
| Learning Rate | FineTune | 5.00E-6 | |||
| PrefixEmbed | 2.00E-04 | 2.00E-04 | 4.00E-04 | 5.00E-04 | |
| PrefixLayer | 5.00E-05 | 5.00E-05 | 5.00E-05 | 1.00E-04 | |
| LoRA | 2.00E-4 | ||||
| 自适应特定 | PrefixEmbed \(l_p\) | 16 | 32 | 64 | 256 |
| PrefixEmbed \(l_i\) | 8 | ||||
| PrefixTune \(l_p=l_i\) | 8 | ||||
| LoRA | \(r_q=r_v=8\) | ||||
本文中,我们用度量 \(\phi(A, B, i, j) = \psi(U_A^i, U_B^j) = \dfrac{\| U_A^{i\top} U_B \|_F^2}{\min\{i,j\}}\) 来度量两个列正交矩阵 \(U_A^i \in \mathbb{R}^{d\times i}\) 与 \(U_B^j \in \mathbb{R}^{d\times j}\) 之间的子空间相似度,二者分别由取 \(A\) 和 \(B\) 左奇异矩阵的列得到。我们指出,这一相似度只是度量子空间距离的标准投影度量(Projection Metric)(Ham & Lee, 2008)的一个反向版本。
具体而言,设 \(U_A^{i\top} U_B^{j}\) 的奇异值为 \(\sigma_1, \sigma_2, \cdots, \sigma_p\),其中 \(p = \min\{i, j\}\)。我们知道投影度量(Ham & Lee, 2008)定义为:
而我们的相似度定义为:
该相似度满足:若 \(U_A^i\) 与 \(U_B^j\) 张成相同的列空间,则 \(\phi(A, B, i, j) = 1\);若它们完全正交,则 \(\phi(A, B, i, j) = 0\);否则 \(\phi(A, B, i, j) \in (0, 1)\)。
我们给出对低秩更新矩阵这一研究的更多结果。
图 3 和图 4 的结果如何推广到其他层,见图 6 和图 7。
我们在 GPT-2 上重复了关于 \(r\) 影响的实验(第 7.2 节)。以 E2E NLG Challenge 数据集为例,我们报告训练 26000 步后、不同 \(r\) 取值所达到的验证损失和测试指标,结果见表 18。GPT-2 Medium 的最优秩取决于所用指标,在 4 到 16 之间,这与 GPT-3 175B 相似。注意模型规模与自适应最优秩之间的关系仍是一个开放问题。
| 秩 \(r\) | val loss | BLEU | NIST | METEOR | ROUGE_L | CIDEr |
|---|---|---|---|---|---|---|
| 1 | 1.23 | 68.72 | 8.7215 | 0.4565 | 0.7052 | 2.4329 |
| 2 | 1.21 | 69.17 | 8.7413 | 0.4590 | 0.7052 | 2.4639 |
| 4 | 1.18 | 70.38 | 8.8439 | 0.4689 | 0.7186 | 2.5349 |
| 8 | 1.17 | 69.57 | 8.7457 | 0.4636 | 0.7196 | 2.5196 |
| 16 | 1.16 | 69.61 | 8.7483 | 0.4629 | 0.7177 | 2.4985 |
| 32 | 1.16 | 69.33 | 8.7736 | 0.4642 | 0.7105 | 2.5255 |
| 64 | 1.16 | 69.24 | 8.7174 | 0.4651 | 0.7180 | 2.5070 |
| 128 | 1.16 | 68.73 | 8.6718 | 0.4628 | 0.7127 | 2.5030 |
| 256 | 1.16 | 68.92 | 8.6982 | 0.4629 | 0.7128 | 2.5012 |
| 512 | 1.16 | 68.78 | 8.6857 | 0.4637 | 0.7128 | 2.5025 |
| 1024 | 1.17 | 69.37 | 8.7495 | 0.4659 | 0.7149 | 2.5090 |
\(W\) 与 \(\Delta W\) 在不同 \(r\) 下的归一化子空间相似度见图 8。
再次注意,\(\Delta W\) 并不包含 \(W\) 的顶部奇异方向:\(\Delta W\) 的前 4 个方向与 \(W\) 中前 10% 方向之间的相似度勉强超过 0.2。这佐证了 \(\Delta W\) 包含那些在 \(W\) 中未被强调的"任务相关"方向。一个有趣的后续问题是:为了让模型自适应良好工作,我们需要把这些任务相关方向放大"多强"?
我们可以自然地把特征放大倍数定义为比值 \(\dfrac{\|\Delta W\|_F}{\|U^\top W V^\top\|_F}\),其中 \(U\)、\(V\) 是 \(\Delta W\) 的 SVD 分解的左、右奇异矩阵。(回忆 \(UU^\top W V^\top V\) 给出 \(W\) 在 \(\Delta W\) 所张子空间上的"投影"。)
直观上,当 \(\Delta W\) 主要包含任务相关方向时,这个量度量了它们被 \(\Delta W\) 放大了多少。如第 7.3 节所示,对 \(r=4\),这个放大倍数高达 20。换句话说,(一般而言)每层中存在四个特征方向(在来自预训练模型 \(W\) 的整个特征空间中),需要被一个很大的倍数 20 放大,才能达到我们报告的下游特定任务准确率。而且,我们应预期:对每个不同的下游任务,被放大的特征方向集合会非常不同。
然而你可能注意到,对 \(r=64\),这个放大倍数只有约 2,意味着 \(r=64\) 的 \(\Delta W\) 中学到的大多数方向并未被放大多少。这并不意外,事实上它(再次)佐证了:表示"任务相关方向"(从而用于模型自适应)所需的内在秩是低的。相比之下,秩为 4 版本的 \(\Delta W\)(对应 \(r=4\))中的那些方向,被一个大得多的倍数 20 放大。
— 全文翻译完 —