作者:
地点:hby
来源:https://arxiv.org/pdf/2106.09685
工具:文心
LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS
摘要
自然语言处理的一个重要范式包括在通用领域数据上进行大规模预训练,并适应特定任务或领域。随着我们预训练更大的模型,重新训练所有模型参数的全面微调变得不太可行。以GPT-3 175B为例——部署具有1750亿参数的独立微调模型实例成本极高。我们提出了低秩适应(Low-Rank Adaptation,简称LoRA),该方法冻结了预训练模型的权重,并在Transformer架构的每一层中注入可训练的低秩分解矩阵,从而大大减少了下游任务的可训练参数数量。与使用Adam算法对GPT-3 175B进行微调相比,LoRA可以将可训练参数数量减少10,000倍,GPU内存需求减少3倍。
尽管LoRA(低秩适应)具有更少的可训练参数、更高的训练吞吐量,并且与适配器不同,它不会增加额外的推理延迟,但在RoBERTa、DeBERTa、GPT-2和GPT-3等模型上,LoRA在模型质量方面与微调相当或更优。此外,我们还对语言模型适应中的秩缺陷进行了实证研究,这揭示了LoRA的有效性。我们发布了一个软件包,该软件包促进了LoRA与PyTorch模型的集成,并提供了RoBERTa、DeBERTa和GPT-2的实现和模型检查点。
引言
自然语言处理中的许多应用都依赖于将一个大规模的预训练语言模型适应到多个下游应用中。这种适应通常通过微调来实现,即更新预训练模型的所有参数。微调的主要缺点是,新模型包含的参数与原始模型一样多。随着每隔几个月就会训练出更大的模型,这从GPT-2(Radford等人,b)或RoBERTa large(Liu等人,2019)的“不便”转变为GPT-3(Brown等人,2020)的关键部署挑战,GPT-3拥有1750亿个可训练参数。
评:难、难、难,训练代价十分之大。
为了缓解这个问题,许多人尝试仅调整部分参数或学习新任务的外部模块。这样,我们除了预训练模型外,只需存储和加载每个任务的少量特定任务参数,从而大大提高部署时的操作效率。然而,现有技术通常通过扩展模型深度来增加推理延迟(Houlsby等人,2019;Rebuffi等人,2017),或缩短模型可用的序列长度(Li & Liang,2021;Lester等人,2021;Hambardzumyan等人,2020;Liu等人,2021)(第3节)。更重要的是,这些方法往往无法与微调基线相匹敌,从而在效率和模型质量之间形成了权衡。
评:虽然调节模型的部分参数或者学习新的模块能够将需要的训练的参数减少,但是效果比较差,而且使用外部模块会增加推理的时延。
我们从Li等人(2018a)和Aghajanyan等人(2020)的研究中获得灵感,他们表明学习到的过参数化模型实际上位于一个低本征维度上。我们假设在模型适应过程中权重的变化也具有较低的“本征秩”,这促使我们提出了低秩适应(LoRA)方法。LoRA允许我们通过优化适应过程中密集层变化的秩分解矩阵来间接训练神经网络中的某些密集层,同时保持预训练权重不变,如图1所示。以GPT-3 175B为例,我们表明,即使全秩(即d)高达12,288,一个非常低的秩(即图1中的r可以是一或二)也足够了,这使得LoRA在存储和计算上都非常高效。
评:根据模型的参数矩阵的秩并不是满秩,都位于一个低的本质维度上。这说明压根就不用那么多的参数来表示信息。能够达到它的本质维度的就能满足信息的要求。
LoRA possesses several key advantages.
一个预训练模型可以被共享并用于构建许多针对不同任务的小型LoRA模块。我们可以冻结共享的模型,并通过替换图1中的矩阵A和B来高效地切换任务,从而显著降低存储需求和任务切换的开销
• LoRA(低秩自适应微调)使得训练更加高效,并在使用自适应优化器时降低了硬件门槛高达3倍,因为我们不需要为大多数参数计算梯度或维护优化器状态。相反,我们只需优化注入的、更小的低秩矩阵。
• 我们简单的线性设计允许我们在部署时将可训练矩阵与冻结的权重合并,从而在结构上与完全微调模型相比不引入任何推理延迟。
• LoRA与许多先前的方法是正交的,并可以与其中许多方法结合使用,如前缀调谐。我们在附录E中提供了一个例子。
评:将内容写得详细异常重要。让别人懂得你的论文。
术语和约定
我们在文中频繁提及Transformer架构,并采用了其维度方面的常规术语。我们将Transformer层的输入和输出维度大小称为dmodel。在自注意力模块中,我们使用Wq、Wk、Wv和Wo来分别指代查询(query)、键(key)、值(value)和输出投影矩阵。W或W0代表预训练的权重矩阵,而∆W则表示在适应过程中累积的梯度更新。我们用r来表示LoRA(Low-Rank Adaptation)模块的秩。
我们遵循了(Vaswani et al., 2017; Brown et al., 2020)设定的约定,并使用Adam优化器(Loshchilov & Hutter, 2019; Kingma & Ba, 2017)进行模型优化。在Transformer的多层感知机(MLP)前馈网络中,我们使用df_fn = 4 × dmodel来表示其维度,其中df_fn是前馈网络的维度,这一设置是Transformer架构中的常见配置。
评价:定义好词表达的是什么意思,防止文章指代不清。
问题陈述
尽管我们的方法对各种任务都适应,但我们以语言建模作为驱动用例来展开讨论。下面是对语言建模问题,特别是给定特定任务提示下条件概率最大化的简要描述。
语言建模是自然语言处理中的一个核心任务,其目标是让模型学习语言的统计规律,从而能够预测给定文本序列中下一个词或字符的概率。在更广泛的任务背景下,语言建模可以看作是为文本生成任务提供基础,如机器翻译、文本摘要、对话系统等。
在给定特定任务提示(task-specific prompt)的情况下,条件概率最大化指的是模型根据这个提示来预测接下来文本序列的概率分布,并尝试选择最可能的序列作为输出。这里的“任务特定提示”可以是一个简短的文本描述、一个查询问题、或者任何能够引导模型生成特定类型文本的信息。
通过最大化条件概率,模型能够学会根据上下文(包括任务提示)来生成更加相关和有意义的文本。这种能力对于实现高效、准确的自然语言处理系统至关重要。
假设我们有一个使用参数Φ进行参数化的预训练自回归语言模型PΦ(y|x)。这个模型可以是一个基于Transformer架构(Vaswani et al., 2017)的通用多任务学习器,比如GPT(Radford et al., b; Brown et al., 2020)等。现在,我们考虑将这个预训练模型适应到下游的条件文本生成任务中,比如摘要生成、机器阅读理解(MRC)和自然语言到SQL(NL2SQL)的转换。
每个下游任务都由一组包含上下文-目标对的训练数据集Z来表示:Z = {(xi, yi)}i=1,…,N,其中xi和yi都是标记(token)序列。具体来说:
在NL2SQL任务中,xi是一个自然语言查询,而yi是其对应的SQL命令。这个任务的目标是让模型能够理解自然语言查询,并生成能够执行该查询的SQL语句。
对于摘要生成任务,xi是一篇文章的内容,而yi是这篇文章的摘要。该任务的目标是训练模型从长文本中提取关键信息,并生成简洁的摘要。
评:两个已经做了好久的任务了。
在完全微调(full fine-tuning)过程中,模型首先被初始化为预训练权重Φ0,然后通过反复沿着梯度更新这些权重来最大化条件语言建模目标,从而更新到Φ0 + ∆Φ。这个过程的目标函数可以表示为:
评:这是一个交叉熵损失,-log句子的概率
本文的使用lora微调后的公式形式
评:这个公式还是不错的
现存的解决方案不够好吗?
我们着手解决的问题绝非新鲜事物。自迁移学习诞生以来,数十项工作都致力于使模型适应更加参数化和计算高效。关于一些知名工作的概览,请参见第6节。以语言建模为例,在高效适应方面存在两种主要策略:添加适配器层(Houlsby 等人,2019;Rebuffi 等人,2017;Pfeiffer 等人,2021;Rucklé 等人,2020)或优化输入层激活的某些形式(Li & Liang,2021;Lester 等人,2021;Hambardzumyan 等人,2020;Liu 等人,2021)。然而,这两种策略都有其局限性,尤其是在大规模和延迟敏感的生产场景中。
评:找出二者之间的gap
适配器层引入推理延迟
适配器有多种变体。我们主要关注Houlsby等人(2019)的原始设计,该设计在每个Transformer块中引入了两个适配器层,以及Lin等人(2020)的较新设计,后者在每个块中仅引入了一个适配器层,但增加了一个LayerNorm层(Ba等人,2016)。尽管人们可以通过修剪层或利用多任务设置来减少总体延迟(Rucklé等人,2020;Pfeiffer等人,2021),但适配器层中的额外计算量无法直接绕过。这看似不是问题,因为适配器层通过小的瓶颈维度被设计成仅包含少量参数(有时少于原始模型的1%),从而限制了它们可以添加的浮点运算次数(FLOPs)。然而,大型神经网络依赖硬件并行性来保持低延迟,而适配器层必须按顺序处理。这在在线推理设置中有所区别,其中批处理大小通常小至一个。在没有模型并行性的通用场景中,例如在单个GPU上运行GPT-2(Radford等人)中型模型进行推理时,即使使用非常小的瓶颈维度,我们也能在使用适配器时看到明显的延迟增加(表1)。
评:原始的适配器,如同增加了一些神经网络, 增加了计算
问:这里的顺序计算表示的是什么意思?
当我们需要像Shoeybi等人(2020)和Lepikhin等人(2020)所做的那样对模型进行分片时,这个问题会变得更加严重,因为额外的深度需要更多的同步GPU操作,如AllReduce和Broadcast,除非我们多次冗余地存储适配器参数。这进一步增加了计算和通信成本,从而可能显著增加整体推理延迟。因此,在模型分片的情况下,如何有效地处理适配器层成为了一个需要仔细考虑的问题。
问:什么额外的深度?
直接优化提示是困难的
另一个方向,以前缀调优(Prefix Tuning, Li & Liang, 2021)为例,面临着不同的挑战。我们观察到,前缀调优的优化难度较大,并且其性能在可训练参数中呈现非单调性变化,这与原论文中的类似观察结果一致。更根本的是,为适应而保留一部分序列长度,必然会减少处理下游任务时可用的序列长度,我们怀疑这会使得调整提示的性能相比其他方法有所下降。关于任务性能的研究,我们将在第5节中详细讨论。
问:何为前缀调优?
我们描述了LoRA(Low-Rank Adaptation)的简单设计及其实际优势。这里概述的原则适用于深度学习模型中的任何密集层,尽管在我们的实验中,我们仅关注Transformer语言模型中的某些权重,以作为驱动用例。LoRA的核心思想是通过低秩矩阵来参数化模型更新,从而减少参数数量和计算成本,同时保持较高的适应性和性能。这种设计特别适用于需要快速适应新任务或数据分布的场景,如自然语言处理中的迁移学习和持续学习。
神经网络包含许多执行矩阵乘法的密集层。这些层中的权重矩阵通常是满秩的。在适应特定任务时,Aghajanyan等人(2020)表明,预训练的语言模型具有较低的“本征维度”,并且尽管随机投影到较小的子空间,它们仍然可以高效地学习。受此启发,我们假设在适应过程中,权重的更新也具有较低的“本征秩”。对于预训练的
评:使用这样的方式,使用BA来代替要更新的参数,参数量变小。训练数度加快,推理数度不变。
我们在图1中展示了我们的重新参数化方法。我们对矩阵A使用随机高斯初始化,对矩阵B使用零初始化,因此在训练开始时,∆W = BA 为零。然后,我们将 ∆W 以 α/r来进行缩放,其中 α 是与秩 r 相关的一个常数。在使用Adam优化器时,如果我们适当地缩放初始化值,那么调整 α 就大致相当于调整学习率。因此,我们简单地将** α 设置为我们尝试的第一个 r 值**,并且不对其进行调整。这种缩放有助于减少在改变 r 时重新调整超参数的需要(Yang & Hu, 2021)。这样,我们可以通过简单地改变 r 的值来探索不同的低秩近似空间,而无需过多地担心超参数的调整。
评:a是一个常数,为1也行吧,不如学习率。
全微调的一种泛化。微调的一种更一般的形式允许训练预训练参数的一个子集。LoRA更进一步,它在适应过程中不要求权重矩阵的累积梯度更新具有满秩。这意味着当我们将LoRA应用于所有权重矩阵并训练所有偏置项时,通过将LoRA的秩r设置为预训练权重矩阵的秩,我们大致可以恢复全微调的表达能力。换句话说,随着可训练参数数量的增加,训练LoRA大致会收敛到训练原始模型,而基于适配器的方法会收敛到一个多层感知机(MLP),而基于前缀的方法则会收敛到一个无法处理长输入序列的模型。
评:作者任务使用这个lora微调能够与全微调的效果相同。但是使用适配器的方法就是收敛于一个多层感知机。
无额外的推理延迟。而且方便切换
评:方法简单,但是效果比较好。
原理上,我们可以将LoRA应用于神经网络中任何权重矩阵的子集,以减少可训练参数的数量。在Transformer架构中,自注意力模块有四个权重矩阵(Wq, Wk, Wv, Wo),而MLP模块有两个。尽管输出维度通常被划分为注意力头,但我们仍将Wq(或Wk, Wv)视为一个维度为dmodel × dmodel的单一矩阵。为了简化和提高参数效率,我们的研究仅限于针对下游任务调整注意力权重,并冻结MLP模块(即在下游任务中不训练它们)。在7.1节中,我们将进一步研究在Transformer中调整不同类型注意力权重矩阵的影响。对于调整MLP层、LayerNorm层和偏置项的实证研究,我们将其留待未来工作。
问:现在hf中的peft是否会更新mlp模块?
实际益处与限制。最显著的益处来自于内存和存储使用的减少。对于一个使用Adam优化器训练的大型Transformer模型,如果r远小于dmodel(即LoRA的秩远小于模型的维度),我们最多可以减少2/3的VRAM使用量,因为我们不需要为冻结的参数存储优化器状态。在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模块,但这增加了实现的复杂性。
这种局限性意味着,在需要快速响应或实时处理的场景中,LoRA可能不是最佳选择,因为它需要额外的步骤来根据任务动态选择LoRA模块。然而,在训练或推理过程中可以容忍一定延迟的场景中,LoRA仍然是一种非常有效的参数调整方法,可以显著减少计算成本和内存使用。
评:这个问题还是一个比较小的问题
实验
我们在RoBERTa(Liu et al., 2019)、DeBERTa(He et al., 2021)和GPT-2(Radford et al., b)上评估了LoRA在下游任务中的性能,并扩展到了GPT-3 175B(Brown et al., 2020)。我们的实验涵盖了从自然语言理解(NLU)到生成(NLG)的广泛任务。具体来说,我们在RoBERTa和DeBERTa上评估了GLUE(Wang et al., 2019)基准测试的性能。为了进行直接比较,我们遵循了Li & Liang(2021)在GPT-2上的设置,并在GPT-3的大规模实验中添加了WikiSQL(Zhong et al., 2017)(自然语言到SQL查询)和SAMSum(Gliwa et al., 2019)(对话摘要)任务。有关我们使用的数据集的更多详细信息,请参阅附录C。所有实验均使用NVIDIA Tesla V100进行。
评:四个模型,实验还是比较广泛的。
为了与其他基线进行广泛比较,我们复制了先前工作使用的设置,并尽可能重用他们报告的数字。然而,这意味着某些基线可能仅出现在某些实验中。
微调(Fine-Tuning, FT)是一种常见的自适应方法。在微调过程中,模型被初始化为预训练的权重和偏置,并且所有模型参数都会经历梯度更新。一个简单的变体是只更新某些层而冻结其他层。我们在GPT-2上包含了一个这样的基线(来自先前工作Li & Liang, 2021),它仅调整最后两层(FTTop2)。这种方法允许我们在保持模型大部分结构不变的情况下,针对特定任务对模型进行快速调整。然而,与LoRA相比,微调可能需要更多的计算资源和时间,因为它需要更新模型中的所有参数。
评:这对我之后的实验设计有很大的启示。
Bias-only或BitFit是一个基线方法,其中我们仅训练偏置向量,同时冻结模型的其他所有部分。这种方法最近也被BitFit(Zaken et al., 2021)等研究探讨过。
前缀嵌入调整(Prefix-embedding Tuning, PreEmbed)是在输入标记中插入特殊标记的方法。这些特殊标记具有可训练的词嵌入,并且通常不在模型的词汇表中。这些特殊标记的放置位置可能会对性能产生影响。我们关注“前缀”和“中缀”两种方式,前者是在提示前添加这些特殊标记,后者是在提示中插入这些标记;这两种方式都在Li & Liang(2021)中有所讨论。我们使用lp(resp. li)来表示前缀(resp. 中缀)标记的数量。可训练参数的数量为|Θ| = dmodel × (lp + li)。
前缀层调整(Prefix-layer Tuning, PreLayer)是前缀嵌入调整的一种扩展。它不仅仅学习某些特殊标记的词嵌入(或等效地,嵌入层之后的激活),而是学习Transformer每一层之后的激活。简单地用可训练的激活替换之前层计算的激活。结果,可训练参数的数量为|Θ| = L × dmodel × (lp + li),其中L是Transformer层的数量。这种方法允许模型在每个层上都进行微调,从而可能获得更好的任务性能,但相应地也会增加更多的可训练参数。
评:只要找好自己要做的点,直接去做就可以了。第二个是增加特殊的token 来学习他们的参数
**问:这里为什么参数量回事L * d * **
在Houlsby等人(2019)提出的适配器调整(Adapter tuning)方法中,适配器层被插入到自注意力模块(和多层感知机MLP模块)与随后的残差连接之间。适配器层包含两个带有偏置的全连接层,并在两者之间有一个非线性层。我们将这种原始设计称为AdapterH。
最近,Lin等人(2020)提出了一种更高效的设计,即适配器层仅应用于MLP模块之后和LayerNorm之后。我们称之为AdapterL。这与Pfeiffer等人(2021)提出的另一种设计非常相似,我们称之为AdapterP。
此外,我们还包括了一个名为AdapterDrop(Rucklé等人,2020)的基线方法,该方法通过丢弃一些适配器层来提高效率,我们称之为AdapterD。
为了最大化我们比较的基线数量,我们尽可能引用先前工作中的数字,这些数字在表格的第一列中用星号(*)标记的行中给出。
在所有情况下,模型参数的总数|Θ|由以下公式给出:
|Θ| = LˆAdpt × (2×dmodel × r + r + dmodel) + 2×LˆLN × dmodel
其中,LˆAdpt是适配器层的数量,LˆLN是可训练的LayerNorm层的数量(例如,在AdapterL中)。这个公式考虑了适配器层中的参数(包括两个全连接层的参数和非线性层的参数),以及LayerNorm层的参数。通过这种方式,我们可以计算出不同适配器设计对模型大小的影响。
评:直接加入一些层来进行微调
RoBERTa(Liu等人,2019)优化了BERT(Devlin等人,2019a)最初提出的预训练配方,并在不引入更多可训练参数的情况下提升了后者的任务性能。尽管近年来在NLP排行榜(如GLUE基准测试(Wang等人,2019))上,RoBERTa已被更大规模的模型超越,但由于其大小适中,它仍然是实践者中一个具有竞争力和受欢迎的预训练模型。我们从HuggingFace Transformers库(Wolf等人,2020)中获取了预训练的RoBERTa基础版(1.25亿参数)和RoBERTa大型版(3.55亿参数),并在GLUE基准测试的任务上评估了不同高效适应方法的性能。我们还根据Houlsby等人(2019)和Pfeiffer等人(2021)的设置进行了实验复现。
为了确保比较的**公平性,在与适配器进行比较时,我们对LoRA的评估方式做了两个关键性的改动。首先,我们对所有任务使用相同的批量大小,并使用序列长度为128来匹配适配器基线。**其次,对于MRPC、RTE和STS-B任务,我们将模型初始化为预训练模型,而不是像微调基线那样已经适应于MNLI任务的模型。遵循Houlsby等人(2019)中这种更受限的设置进行的运行,我们在表格中标以†标记。结果展示在表2的前三节中。有关使用的超参数详情,请参阅D.1节。
评:实验参数必须要保持一致才能具有可比性。实验复现也非常中哟啊。
很多大模型,大而无当。没有太多的必要。还不如一些小模型呢
DeBERTa(He等人,2021)是BERT的一个较新变体,它在更大规模的数据集上进行了训练,并在诸如GLUE(Wang等人,2019)和SuperGLUE(Wang等人,2020)等基准测试中表现出非常强的竞争力。我们评估了LoRA是否能够在 GLUE基准测试上仍然匹配完全微调过的 DeBERTa XXL(15亿参数)的性能。结果展示在表2的底部部分。有关使用的超参数的详细信息,请参阅D.2节。
在已经证明LoRA可以成为自然语言理解(NLU)任务中全微调的一个有竞争力的替代方案后,我们希望探讨LoRA在自然语言生成(NLG)模型上是否仍然占据优势,比如GPT-2中等规模和大规模模型(Radford等人,b)。为了进行直接比较,我们尽量保持我们的设置与Li & Liang(2021)的设置一致。由于空间限制,我们仅在本节中展示在E2E NLG Challenge(表3)上的结果。有关WebNLG(Gardent等人,2017)和DART(Nan等人,2020)的结果,请参阅F.1节。在D.3节中,我们列出了所使用的超参数列表。
作为LoRA的最终压力测试,我们将其扩展到了拥有1750亿参数的GPT-3。由于训练成本高昂,我们仅报告了给定任务在不同随机种子下的典型标准差,而不是为每一项都提供一个标准差。有关使用的超参数的详细信息,请参阅D.4节。如表4所示,LoRA在所有三个数据集上都达到了或超过了微调基线。请注意,并非所有方法都能从更多可训练参数中单调受益,如图2所示。我们观察到,当使用超过256个特殊标记进行前缀嵌入调优或使用超过32个特殊标记进行前缀层调优时,性能会显著下降。这证实了Li & Liang(2021)中的类似观察结果。虽然对这一现象进行彻底调查超出了本文的范围,但我们怀疑,拥有更多特殊标记会使输入分布进一步偏离预训练数据的分布。另外,我们在F.3节中研究了不同适应方法在低数据情况下的性能。
评:这里我感觉也是一样。因为这里,增加新的标记,无论说是特殊token还是非特殊token,可以将模型的其他token所不能明确区分的迁移过去。所以这还是蛮有意思的。
相关的工作
Transformer语言模型。Transformer(Vaswani等人,2017)是一种序列到序列的架构,大量使用了自注意力机制。Radford等人(a)通过使用一堆Transformer解码器,将其应用于自回归语言建模。自此以后,基于Transformer的语言模型在NLP领域占据主导地位,在许多任务中都达到了最先进的水平。随着BERT(Devlin等人,2019b)和GPT-2(Radford等人,b)的出现,一种新的范式应运而生——它们都是在大量文本上训练的大型Transformer语言模型——在通用领域数据上进行预训练后,再在特定任务的数据上进行微调,与直接在特定任务的数据上进行训练相比,可以显著提高性能。训练更大的Transformer通常能带来更好的性能,这仍然是一个活跃的研究方向。GPT-3(Brown等人,2020)是目前为止训练过的最大的单个Transformer语言模型,拥有1750亿个参数。
注:论文发表是2021年
提示工程(Prompt Engineering)和微调(Fine-Tuning)。虽然GPT-3 175B仅通过几个额外的训练示例就可以调整其行为,但结果在很大程度上取决于输入提示(Brown等人,2020)。这需要通过实证的方式,通过编写和格式化提示来最大化模型在所需任务上的性能,这被称为提示工程或提示黑客技术。微调是对在通用领域上预训练的模型进行重新训练,以适应特定任务(Devlin等人,2019b;Radford等人,a)。微调的变体包括仅学习参数的一个子集(Devlin等人,2019b;Collobert & Weston,2008),但从业者通常会重新训练所有参数以最大化下游性能。然而,GPT-3 175B的庞大规模使得以常规方式进行微调变得具有挑战性,因为它会产生大量的检查点,并且由于它与预训练时具有相同的内存占用,因此硬件门槛也很高。
思:虽然知道提示词工程就是设计好提示词模板。然后给使用这个模板来对模型进行询问。但是仍旧了解的不够仔细。这篇论文可以看一下。思维链的方式其实也是一种提示词工程。
参数高效的自适应。许多人提出在神经网络的现有层之间插入适配器层(Houlsby等人,2019;Rebuffi等人,2017;Lin等人,2020)。我们的方法使用类似的瓶颈结构来对权重更新施加低秩约束。关键的功能性差异在于,我们的学习权重可以在推理过程中与主权重合并,从而不会引入任何延迟,而适配器层则不然(第3节)。适配器的一个当代扩展是COMPACTER(Mahabadi等人,2021),它基本上是通过使用具有某些预定权重共享方案的克罗内克积来参数化适配器层。类似地,将LoRA与其他基于张量积的方法相结合可能会提高其参数效率,这留待未来的工作来完成。最近,许多人提出优化输入词嵌入来代替微调,这类似于对提示工程的一种连续且可微的泛化(Li & Liang,2021;Lester等人,2021;Hambardzumyan等人,2020;Liu等人,2021)。我们在实验部分中包含了与Li & Liang(2021)的比较。然而,这一类工作只能通过在提示中使用更多的特殊标记来扩展,当学习位置嵌入时,这些特殊标记会占用任务标记的可用序列长度。
解:为什么会占用序列的长度呢,嗯。因为生成的时候,还是正常生成一个句子的。
深度学习中的低秩结构。低秩结构在机器学习中非常常见。许多机器学习问题都具有某种固有的低秩结构(Li等人,2016;Cai等人,2010;Li等人,2018b;Grasedyck等人,2013)。此外,众所周知,对于许多深度学习任务,特别是那些具有大量超参数化神经网络的任务,训练后的神经网络将具有低秩特性(Oymak等人,2019)。一些先前的工作甚至在训练原始神经网络时明确施加了低秩约束(Sainath等人,2013;Povey等人,2018;Zhang等人,2014;Jaderberg等人,2014;Zhao等人,2016;Khodak等人,2021;Denil等人,2014);然而,据我们所知,这些工作都没有考虑对冻结模型进行低秩更新以适应下游任务。在理论文献中,**已知当底层概念类具有某种低秩结构时,神经网络的表现优于其他经典学习方法,**包括相应的(有限宽度)神经正切核(Allen-Zhu等人,2019;Li & Liang,2018)(Ghorbani等人,2020;Allen-Zhu & Li,2019;Allen-Zhu & Li,2020a)。Allen-Zhu & Li(2020b)中的另一个理论结果表明,低秩适应对于对抗性训练是有用的。总之,我们相信我们提出的低秩适应更新方法是有文献依据的。
评:论文功底很足,大丈夫当如是也。
理解低秩更新
鉴于LoRA(Low-Rank Adaptation,低秩适应)的经验优势,我们希望能够进一步解释从下游任务中学习的低秩适应的特性。值得注意的是,低秩结构不仅降低了硬件的入门门槛,使我们能够并行运行多个实验,还提高了更新权重与预训练权重之间相关性的可解释性。我们的研究专注于GPT-3 175B模型,在这个模型中,我们实现了可训练参数的最大减少(高达10,000倍),同时并未对任务性能产生不利影响。
我们进行了一系列实证研究来回答以下问题:1)** 在给定的参数预算约束下,我们应该调整预训练Transformer中的哪个权重矩阵子集,以最大化下游任务的性能?2) “最优”适应矩阵∆W真的是秩不足的吗?如果是,那么在实际应用中应该使用什么好的秩?3) ∆W和W之间有什么联系?∆W与W之间是否存在高度相关性?∆W与W相比有多大?**
评:哪个权重子集能是得最大化任务的性能?
思:这里是需要我借鉴的
我们相信,我们对问题(2)和(3)的回答揭示了使用预训练语言模型进行下游任务的基本原理,这是自然语言处理(NLP)中的一个关键主题。
在给定有限的参数预算下,我们应该使用LoRA(Low-Rank Adaptation,低秩适应)来调整哪种类型的权重,以便在下游任务中获得最佳性能?如第4.2节所述,我们只考虑自注意力模块中的权重矩阵。我们在GPT-3 175B上设置了18M的参数预算(如果以FP16格式存储,则大约为35MB),这对应于如果我们调整一种类型的注意力权重,则r=8;如果我们调整两种类型的注意力权重,则对于所有96层,r=4。结果如表5所示。
表5:在给定相同数量的可训练参数下,将LoRA应用于GPT-3中不同类型的注意力权重后,WikiSQL和MultiNLI上的验证准确率。同时调整Wq和Wv总体上给出了最佳性能。我们发现,对于给定的数据集,不同随机种子的标准差是一致的,我们在第一列中报告了这一点。
请注意,如果将所有参数都放在∆Wq或∆Wk中,会导致性能显著降低,而同时调整Wq和Wv则能获得最佳结果。这表明,即使在∆W中使用四阶秩,也足以捕获足够的信息,因此,与使用更大秩来调整单一类型的权重相比,调整更多的权重矩阵是更优的选择。
评:在同样的参数量的基础上,将参数分散到不同的权重矩阵中hi更好。
接下来,我们关注秩r对模型性能的影响。我们分别调整{Wq, Wv}、{Wq, Wk, Wv, Wc}和仅调整Wq进行比较。
表6:不同秩r下WikiSQL和MultiNLI的验证准确率。令人惊讶的是,在这些数据集上,同时调整Wq和Wv时,秩r即使小到1也足够了,而单独训练Wq则需要更大的r。我们在第H.2节中对GPT-2进行了类似的实验。
注:需要对这个实验在进行初步验证
表6显示,令人惊讶的是,LoRA在r非常小的情况下(特别是对于{Wq, Wv}而不是仅Wq)已经表现出具有竞争力的性能。这表明更新矩阵∆W可能具有非常小的“本征秩”。为了进一步支持这一发现,我们检查了由不同r值选择和不同随机种子学习的子空间的重叠情况。我们认为,增加r并不会覆盖更有意义的子空间,这表明低秩适应矩阵就足够了。
不同秩r之间的子空间相似性。给定Ar=8和Ar=64,这是使用相同的预训练模型学习得到的适应矩阵,秩分别为r=8和64,我们进行奇异值分解,并获得右奇异酉矩阵UAr=8和UAr=64。我们希望回答:UAr=8中由前i个奇异向量(对于1≤i≤8)张成的子空间有多大比例被包含在UAr=64中由前j个奇异向量(对于1≤j≤64)张成的子空间中?我们使用基于格拉斯曼距离(Grassmann distance)的归一化子空间相似性来度量这个量(更多正式讨论见附录G)
其中U_i^{Ar=8}表示UAr=8中对应于前i个奇异向量的列。φ(·)的取值范围是[0, 1],其中1表示子空间完全重叠,0表示完全分离。如图3所示,φ随着i和j的变化而变化。由于空间限制,我们只看第48层(共96层),但如第H.1节所示,该结论也适用于其他层。
我们从图3中得出一个重要观察结果。Ar=8和Ar=64中对应于前奇异向量的方向存在显著重叠,而其他方向则不存在。具体来说,Ar=8的∆Wv(或∆Wq)和Ar=64的∆Wv(或∆Wq)共享一个归一化相似性大于0.5的1维子空间,这解释了为什么在我们的GPT-3下游任务中,r=1表现相当好。由于Ar=8和Ar=64都是使用相同的预训练模型学习的,图3表明Ar=8和Ar=64的前奇异向量方向是最有用的,而其他方向可能主要包含了训练过程中积累的随机噪声。因此,适应矩阵确实可以具有非常低的秩。
评:累计噪声就是流氓罪,什么不可解释的罪都能用这个罪来套。作者认为低秩情况,大家的子空间更加相似。这样效果能与之前媲美。
不同随机种子之间的子空间相似性。我们通过绘制两个随机种子运行(r=64)之间的归一化子空间相似性(如图4所示)来进一步确认这一点。∆Wq似乎具有比∆Wv更高的“本征秩”,因为两个运行都为∆Wq学习了更多的共同奇异值方向,这与我们在表6中的经验观察结果一致。作为对比,我们还绘制了两个随机高斯矩阵,它们之间没有任何共同的奇异值方向。
我们进一步研究了∆W和W之间的关系。特别是,∆W是否与W高度相关?(或者从数学上讲,∆W是否主要包含在W的顶部奇异值方向中?)另外,
与W中相应的方向相比,∆W的“大小”如何?这可以揭示出适应预训练语言模型的潜在机制。
为了回答这些问题,我们将W投影到∆W的r维子空间上,通过计算U^T * W * V,其中U/V是∆W的左/右奇异向量矩阵。然后,**我们比较U^T * W * V的Frobenius范数与W的Frobenius范数。**作为比较,我们还通过用W的前r个奇异向量或随机矩阵替换U、V来计算U^T * W * V的Frobenius范数。
表7:U^T * Wq * V的Frobenius范数,其中U和V分别是(1)∆Wq、(2)Wq或(3)一个随机矩阵的左/右前r个奇异向量方向。权重矩阵取自GPT-3的第48层。
从表7中我们可以得出几个结论。首先,与随机矩阵相比,∆W与W具有更强的相关性,这表明∆W放大了W中已经存在的一些特征。其次,∆W并没有重复W的顶部奇异方向,而是放大了W中没有强调的方向。第三,放大因子相当大:当r=4时,放大因子约为21.5(即6.91/0.32)。关于为什么r=64时放大因子较小,请参见H.4节。此外,在H.3节中,我们还提供了可视化,展示了当我们从Wq中包括更多的顶部奇异方向时,相关性如何变化。这表明低秩适应矩阵可能会放大在一般预训练模型中已学习但未强调的、对特定下游任务重要的特征。
评:这里表示的放大因子是什么意思?
结论与未来的工作
对庞大的语言模型进行微调在硬件要求和为不同任务托管独立实例的存储/切换成本方面都是极其昂贵的。我们提出了LoRA,这是一种高效的适应策略,它在保持模型高质量的同时,既不引入推理延迟,也不减少输入序列的长度。重要的是,当作为服务部署时,它允许通过共享绝大多数模型参数来快速切换任务。虽然我们专注于Transformer语言模型,但所提出的原则普遍适用于任何具有密集层的神经网络。
未来的工作有很多方向。1) LoRA可以与其他高效的适应方法相结合,可能会提供正交的改进。2) 微调或LoRA背后的机制还远不清楚——在预训练期间学习的特征是如何转化为在下游任务中表现良好的?我们相信,与全面微调相比,LoRA使得回答这个问题变得更加容易。3) 我们主要依赖启发式方法来选择应用LoRA的权重矩阵。是否有更原则性的方法来做这件事?4) 最后,∆W的秩缺陷表明W也可能是秩缺陷的,这也可以为未来工作提供灵感来源。
评:预训练的特征到下游任务有用,这是困难的。
Lora权重矩阵的选择? 低秩网络?