AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


超详细解读大模型微调LoRA原论文,看不懂你来打我
发布日期:2024-04-12 06:32:51 浏览次数: 4387


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


注释:在Transformer架构中,每一层通常包含多个子层结构,如自注意力(Self-Attention)层和前馈神经网络(Feedforward Neural Network, FFN)层。当提到“在每一层注入可训练的秩分解矩阵”时,这里指的是一种优化技术或模型适应策略,即LoRALow-Rank Adaptation),用于对预训练好的大型Transformer模型进行微调或在线更新。


LoRA方法的基本思想是,在模型适应阶段,不直接修改预训练模型原有的稠密权重矩阵,而是引入额外的低秩矩阵来表示权重变化的部分。具体来说:


1. **秩分解**:对于一个原本的高维权重矩阵W,可以将其变化ΔW近似为两个低秩矩阵(UV的乘积)ΔW U * V^T,其中UV的列数(或行数,取决于定义方式)远小于原始矩阵W的维度,这样就降低了参数的数量级。


2. **注入低秩矩阵**:在 Transformer 的某些层(例如FFN层或注意力机制中的权重矩阵),不是直接更新原有的权重矩阵,而是在推理或者微调过程中通过相加或相乘操作结合这两个低秩矩阵UV来间接影响输出结果。


3. **保持预训练权重不变**:这种方法的一个关键优势在于它允许我们在不改变预训练模型参数的前提下进行模型的个性化调整或快速适应新任务,从而保留了预训练模型捕获的通用语言特征,并且由于使用了低秩矩阵,大大减少了存储和计算需求。


Transformer每一层注入可训练的秩分解矩阵意味着在不破坏原模型结构及预训练知识的基础上,采用了一种高效、简洁的方式来表达模型参数的变化,从而实现模型的轻量级微调和有效适应不同下游任务的需求。


1 引言


自然语言处理中的许多应用依赖于将一个大规模的预训练语言模型适应到多个下游应用。这种适应通常通过微调来完成,它会更新预训练模型的所有参数。微调的主要缺点是新模型包含的参数数量与原始模型相同。随着每几个月就训练出更大的模型,这从GPT-2Radford等人,b)或RoBERTa大型(Liu等人,2019)的“不便”转变为GPT-3Brown等人,2020)的175亿可训练参数的关键部署挑战。1


许多人试图通过只适应部分参数或为新任务学习外部模块来减轻这个问题。这样,我们只需要在每个任务中除了预训练模型之外,存储和加载少量任务特定的参数,极大地提高了部署时的操作效率。然而,现有技术通常通过扩展模型深度(Houlsby等人,2019Rebuffi等人,2017)引入推理延迟,或通过减少模型的可用序列长度(Li & Liang2021Lester等人,2021Hambardzumyan等人,2020Liu等人,2021)(第3节)来实现。更重要的是,这些方法通常无法达到微调基线,这在效率和模型质量之间形成了权衡。


我们从Li等人(2018a)和Aghajanyan等人(2020)的研究中获得灵感,他们表明实际上,学习到的过度参数化模型实际上存在于一个低内在维度上。我们假设在模型适应过程中权重的变化也具有低“内在秩”,这导致了我们提出的低秩适应(LoRA)方法。LoRA允许我们通过优化适应过程中密集层变化的秩分解矩阵间接训练神经网络中的一些密集层,同时保持预训练权重冻结,如图1所示。以GPT-3 175B为例,我们展示了即使在全秩(即图1中的d)高达12,288时,非常低的秩(即图1中的r可以是12)也足够了,使LoRA既节省存储空间又计算效率高。


(注释:过参数化模型是指在机器学习和深度学习领域中,模型所拥有的参数数量远大于训练数据量所能提供的有效信息量。具体来说,当神经网络的可调权重数(即参数数量)非常多时,即使训练样本数目有限,网络仍有足够的自由度去拟合训练数据中的噪声以及捕捉复杂的潜在规律。


在深度学习中,许多现代神经网络架构(如卷积神经网络CNN用于图像识别、Transformer用于自然语言处理等)都属于过参数化模型。这样的设计往往能够带来以下好处:


1. 表现力增强:过参数化的模型可以表示更复杂的函数关系,从而有可能获得更好的预测性能。


2. 泛化能力:尽管存在过参数化现象,但通过正则化、dropout、早停等技术手段,模型仍能在测试集上表现良好,这表明过参数化模型具有良好的泛化能力,能够在未见过的数据上做出合理的推断。


3. 良好的微调潜力:对于预训练模型,大量的参数意味着更大的灵活性,在进行迁移学习或微调时更容易适应新的任务需求。


注释:LoRA允许我们在保持预训练权重不变的同时,通过优化密集层(dense layers)在适应(adaptation)过程中变化的秩分解矩阵(rank decomposition matrices),间接地训练这些密集层。这里的“适应”通常指的是将预训练的模型调整到特定任务的过程。


1. **预训练权重(Pre-trained Weights**


- 在深度学习中,预训练权重是在一个大型数据集上训练得到的模型参数。这些权重通常包含了丰富的特征表示,可以作为后续任务的基础。


2. **密集层(Dense Layers**


- 密集层是神经网络中的一种层,其中每个输入节点都与下一层的每个节点相连。在这些层中,参数数量通常很大,因为每个连接都有一个权重。大模型的密集层(Dense Layer)通常指的是全连接层


3. **秩分解(Rank Decomposition**


- 秩分解是一种数学技术,它可以将一个大的矩阵分解为几个小的矩阵的乘积。在神经网络中,这可以用来近似表示密集层的权重矩阵,从而减少参数数量。


4. **适应(Adaptation**


- LoRA中,适应指的是在特定任务上调整预训练模型的过程。这通常涉及到对模型的某些部分进行微调,以使其更好地适应新任务。


5. **优化秩分解矩阵**


- LoRA中,我们不是直接调整密集层的权重,而是优化这些权重的秩分解矩阵。这意味着我们寻找一组小的矩阵,它们的乘积可以近似原始权重矩阵在适应过程中的变化。


通过这种方式,LoRA能够在不直接修改预训练权重的情况下,有效地调整模型以适应新任务。这种方法减少了需要训练的参数数量,从而降低了计算成本,同时保持了预训练模型的强大能力。这使得LoRA成为一种在资源受限的情况下进行模型适应的有效技术。


 

1:我们的重参数化。我们只训练AB


LoRA拥有几个关键优势。


• 一个预训练模型可以共享并用于构建许多针对不同任务的小LoRA模块。我们可以冻结共享模型,并通过替换图1中的矩阵AB来高效地切换任务,显著减少存储需求和任务切换开销。


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


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


LoRA与许多先前的方法正交,并且可以与它们中的许多结合使用,例如前缀调整。我们在附录E中提供了一个例子。


术语和约定 我们频繁引用Transformer架构,并使用其维度的常规术语。我们称Transformer层的输入和输出维度大小为dmodel。我们使用WqWkWvWo来指代自注意力模块中的查询///输出投影矩阵。WW0指的是预训练权重矩阵,ΔW表示在适应过程中累积的梯度更新。我们用r来表示LoRA模块的秩。我们遵循(Vaswani等人,2017Brown等人,2020)设定的惯例,并使用AdamLoshchilov & Hutter2019Kingma & Ba2017)进行模型优化,并使用Transformer MLP前馈维度df fn = 4 × dmodel


注释:在Transformer模型中的多层感知器(MLP)部分,其前馈网络(Feed-Forward Network, FFN)的隐藏层尺寸设置为dmodel(即Transformer层输入输出的维度大小)的四倍。在原始Transformer论文(Vaswani等人,2017年)中,每个FFN层通常由两层线性变换组成,中间有一层ReLU激活函数。这个设计使得模型能够对来自自注意力模块的更高层次特征进行更复杂的转换和抽象表达。这里的“df fn”就是指FFN内部第一层到第二层之间的隐层神经元数量。因此,在本研究中,研究人员选择将这一维度设为4倍于基础模型尺寸dmodel,以增加模型的表达能力和学习复杂非线性关系的能力。


2 问题陈述


尽管我们的提议对训练目标不作特定假设,但我们以语言建模作为主要的应用场景进行讨论。以下是对语言建模问题的简要描述,特别是针对任务特定提示条件下条件概率最大化的问题。


假定我们有一个预训练的自回归语言模型PΦ(yx),该模型由参数 Φ定。例如, PΦ(yx) 可能是一个基于Transformer架构(Vaswani等人,2017年)的通用多任务学习器,如GPTRadford等人,bBrown等人,2020年)。现在考虑将这个预训练模型应用于下游条件文本生成任务,如摘要生成、机器阅读理解(MRC)、以及自然语言到SQL转换(NL2SQL)。每个下游任务都通过一组上下文-目标对的训练数据集 Z={(xi,yi)}i=1,,N 表示,其中 xi  yi 都是由令牌组成的序列。举例来说,在NL2SQL任务中, xi 是一个自然语言查询,而 yi 则是对应的SQL命令;在摘要生成任务中, xi 是文章的内容, yi 是其摘要。


注释:自然语言到SQL转换(Natural Language to SQLNL2SQL)是一种人工智能技术,它允许用户通过使用自然语言提出查询请求,系统能够自动将这些请求解析并转化为结构化查询语言(SQL)语句,从而从数据库中提取所需信息。简单来说,NL2SQL系统使得非技术人员可以通过日常对话式的提问方式与数据库进行交互,无需了解复杂的SQL语法。


例如,当用户以自然语言形式输入“找出所有由张三发表的论文”,NL2SQL系统会将其翻译成对应的SQL查询语句:“SELECT * FROM papers WHERE author = '张三'”。这种技术在数据检索、智能客服、数据分析等领域有着广泛的应用潜力。


在完全微调过程中,模型初始化为预训练权重Φ0,并通过反复沿着梯度方向更新,以最大化条件语言建模目标函数:


 

其中一个主要问题是,对于每个下游任务,我们都需要学习一组不同的参数增量∆Φ,其维度 |∆Φ| 等于 |Φ0|。因此,如果预训练模型非常大(比如GPT-3,其中 ( |Φ0| 1750亿),存储和部署许多独立的微调模型实例将面临挑战,甚至可能变得不可行。


注释:公式(1) 表示的是全微调(full fine-tuning)时使用的优化目标。全微调是指在预训练模型的基础上,通过反复遵循梯度更新参数,以最大化条件语言建模目标函数。


- Φ0表示预训练模型的初始权重。


- ΔΦ 表示在全微调过程中更新的参数。


- Z表示训练数据集,其中包含输入x和对应的输出序列y


- t表示时间步,从1开始计数。


- PΦ(yt∣x,yt)表示给定历史信息(x,yt)时,预测下一个输出yt的概率。


通过最大化上述条件语言建模目标函数,全微调可以使预训练模型更好地适应下游任务,从而获得更好的性能。然而,全微调的一个主要缺点是,对于每个下游任务,都需要学习一组不同的参数ΔΦ,这可能导致存储和部署多个微调模型的挑战,特别是当预训练模型非常大(例如GPT-3,其Φ0大约为1750)时。


在本文中,我们采用了一种更节省参数的方法,其中任务特定的参数增量 ∆Φ = ∆Φ(Θ)由一组规模小得多的参数 Θ来进一步编码,满足∣Θ∣≪∣Φ0∣。因此,寻找 ∆Φ的任务转化为针对 Θ进行优化的问题:


 

在后续章节中,我们建议使用低秩表示来编码∆Φ,这种表示既具有计算高效性,又具有内存高效性。当预训练模型为GPT-3 1750亿参数时,可训练参数的数量|Θ|可以小到仅为|Φ0|0.01%


3 现有解决方案是否足够好?


我们着手解决的问题绝不是新的。自从迁移学习的概念提出以来,已经有数十项工作试图使模型适应更加节省参数和计算效率。参见第6节,了解一些知名工作的调查。以语言建模为例,当涉及到高效适应时,有两种突出的策略:添加适配器层(Houlsby等人,2019年;Rebuffi等人,2017年;Pfeiffer等人,2021年;Rücklée等人,2020年)或优化输入层激活的某种形式(Li & Liang2021年;Lester等人,2021年;Hambardzumyan等人,2020年;Liu等人,2021年)。然而,这两种策略都有其局限性,特别是在大规模且对延迟敏感的生产场景中。


适配器层引入推理延迟


适配器有许多变体。我们关注Houlsby等人(2019年)的原始设计,每个Transformer块有两个适配器层,以及Lin等人(2020年)的较新设计,每个块只有一个,但增加了额外的LayerNormBa等人,2016年)。虽然可以通过修剪层或利用多任务设置(Rücklée等人,2020年;Pfeiffer等人,2021年)来减少总体延迟,但没有直接方法绕过适配器层中的额外计算。这似乎不是一个大问题,因为适配器层被设计为具有很少的参数(有时是原始模型的<1%),通过具有小瓶颈维度,这限制了它们可以添加的浮点运算次数(FLOPs)。然而,大型神经网络依赖于硬件并行性来保持延迟低,适配器层必须按顺序处理。这在在线推理设置中有所不同,批量大小通常只有一。在没有模型并行性的通用场景中,例如在单个GPU上运行GPT-2Radford等人,b)的中等大小,我们发现使用适配器时延迟明显增加,即使瓶颈维度非常小(表1)。


当我们需要像Shoyebi等人(2020年)和Lepikhin等人(2020年)所做的那样分片模型时,这个问题变得更糟,因为额外的深度需要更多的同步GPU操作,如AllReduceBroadcast,除非我们多次冗余地存储适配器参数。


注释: 这段话在讨论适配器层(Adapter Layers)在神经网络模型中的作用,特别是在Transformer模型中。适配器层是一种技术,它被添加到预训练的模型中,以便在不改变大部分模型结构的情况下,对模型进行微调以适应特定的任务。这里的“推理延迟”(Inference Latency)指的是模型在进行预测时所需的时间。


1. **适配器层的多样性**:有多种适配器层的设计,这里提到了两种。Houlsby等人(2019年)的原始设计在每个Transformer块中添加了两个适配器层,而Lin等人(2020年)的更新设计每个块只添加了一个适配器层,但增加了一个LayerNorm层。


2. **推理延迟**:适配器层会增加模型在进行预测时的延迟。尽管可以通过减少层数或利用多任务设置来降低延迟,但无法直接避免适配器层带来的额外计算负担。


3. **参数数量**:适配器层通常设计得参数很少(有时少于原始模型的1%),通过设置一个小的瓶颈维度来限制它们增加的浮点运算次数(FLOPs)。这听起来不是大问题,因为参数少意味着计算量小。


4. **硬件并行性**:大型神经网络依赖于硬件并行性来保持低延迟。适配器层需要按顺序处理,这在在线推理设置中尤其成问题,因为通常每个批次的处理量很小,甚至只有一个。


5. **模型分片**:当我们需要将模型分割(shard)时,问题会变得更糟。例如,在分布式训练中,额外的模型深度需要更多的同步GPU操作,如AllReduceBroadcast。除非我们多次冗余地存储适配器参数,否则这会增加延迟。


简单来说,适配器层是一种在不改变预训练模型大部分结构的情况下,对其进行微调的方法。虽然它们参数少,计算量小,但在实际应用中,尤其是在需要快速响应的在线推理场景下,它们可能会增加模型的响应时间。在某些情况下,这种延迟可能不是问题,但在其他情况下,尤其是在资源有限或对延迟敏感的应用中,这可能是一个需要考虑的重要因素。


直接优化提示很困难


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


注释: 这段话在讨论一种称为前缀调整(prefix tuning)的技术,这是一种优化模型以适应特定任务的方法。这里的“提示”(prompt)指的是输入到模型中的文本序列,前缀调整就是在这些文本序列的前面添加一些特定的词或标记,以此来指导模型的行为。


1. **优化难度**:前缀调整很难优化。这意味着在训练过程中,找到最佳的参数设置来提高模型性能是一个挑战。模型的性能可能会随着参数的变化而波动,而不是持续改善。


2. **性能变化**:前缀调整的性能变化是非单调的,也就是说,增加或减少某些参数并不总是导致性能提升。这与原始论文中的观察结果一致。


3. **序列长度问题**:在前缀调整中,为了适应特定的任务,需要在输入序列的前面预留一部分空间。这就意味着用于处理下游任务的序列长度减少了。这可能会影响模型处理任务的能力,因为模型需要足够的空间来理解和响应输入。


4. **与其他方法的比较**:作者怀疑,与其它方法相比,前缀调整可能不是最优的选择,因为它限制了模型处理输入的能力。


5. **后续研究**:作者计划在报告的第5部分进一步研究这种方法在不同任务上的表现。


通俗的说,前缀调整的方法来改进模型,让它更好地完成特定的任务。但是,这个方法很难调整到最佳状态,有时候改了参数后,模型的表现反而变差了。而且,因为我们在输入的文本前面加了一些东西,所以留给处理实际任务的空间就变小了。我们担心这可能会让模型的表现不如其他方法。我们会在报告的后面部分更详细地看看这个问题。”


 

1:在NVIDIA Quadro RTX8000上测量的GPT-2中等模型单次前向传播推理延迟(以毫秒为单位),数据基于100次试验的平均值。"|Θ|"表示适配器层中的可训练参数数量。AdapterLAdapterH是两种适配器调优的变体,我们将在5.1节中详细介绍。在在线、短序列长度场景下,由适配器层引入的推理延迟可能会相当显著。详细研究请参阅附录B


注释: 这个表格展示了在GPT-2中型模型(GPT-2 medium)上,使用不同配置和方法时,单次前向传播(inference)的延迟时间(以毫秒为单位)。这些延迟时间是在100次试验中平均得出的,使用的硬件是NVIDIA Quadro RTX8000显卡。表格中的“|Θ| ”表示适配器层中可训练参数的数量。表格中的“Adapter'”和“Adapter''”是适配器调整(adapter tuning)的两种变体,具体描述在第5.1节。


表格的列和行分别代表以下内容:


- **Batch Size**:批量大小,即每次处理的输入样本数量。这里列出了32161


- **Sequence Length**:序列长度,即模型处理的文本序列的最大长度。这里列出了51225612810


- **Fine-Tune/LoRA**LoRALow-Rank Adaptation)微调(Fine-Tune)是一种更节省参数的方法,只调整模型的一部分。


- **Adapter'** **Adapter''**:这两种是适配器调整的不同变体,它们在模型中引入额外的适配器层来适应特定的任务。


表格中的数值表示在不同配置下,模型完成一次前向传播所需的平均时间。这些数值可以帮助我们理解在不同的批量大小和序列长度下,不同调整方法对模型延迟的影响。例如,当批量大小为1,序列长度为10时,使用LoRA方法的延迟是19.8±2.7毫秒,而使用Adapter'方法的延迟是23.9±2.1毫秒,这表明Adapter'方法引入了更高的延迟。


表格还提供了每种方法相对于微调(Fine-Tune)的延迟百分比增加,这可以帮助我们量化不同方法在延迟上的差异。例如,Adapter'方法在序列长度为512时,相对于微调的延迟增加了20.7%


总的来说,这个表格显示了在不同的模型调整方法和配置下,GPT-2中型模型在前向传播时的延迟表现。这些信息对于理解模型在实际应用中的性能,特别是在需要快速响应的在线场景中,是非常有用的。


4 我们的方法


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


4.1 低秩参数化更新矩阵


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


h = W0x + W x = W0x + BAx (3)


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


(通俗理解:


想象一下,神经网络就像一个复杂的机器,它有很多小部件(我们称之为“密集层”),这些小部件通过一种特殊的数学运算(矩阵乘法)来工作。每个小部件都有一堆数字(权重矩阵),这些数字决定了小部件如何处理信息。通常,这些数字是完全独立的,就像一个有很多抽屉的柜子,每个抽屉都可以独立打开和关闭。


但是,有些研究者发现,即使我们不完全使用这些数字,神经网络也能很好地学习和完成任务。这就像我们发现,其实不需要打开柜子里的每一个抽屉,只要打开一部分就可以了。这种发现让我们可以用更少的数字来训练神经网络,这样不仅节省了空间,还能让网络学习得更快。


在这段话中,作者提出了一种新的方法(LoRA),它允许我们在训练神经网络时,只改变一部分权重(就像只打开一部分抽屉),而不是全部。具体来说,他们用两个新的小部件(AB)来代替原来的权重矩阵(W0),这样在训练过程中,原来的权重矩阵就保持不变,而AB则可以学习新的任务。这个过程就像是在不打开所有抽屉的情况下,找到一种方法来重新组织柜子里的东西。


为了使这个过程有效,作者还引入了一个小技巧:他们通过调整一个叫做α的常数来控制新小部件(AB)的学习速度。这就像是给小部件设定了一个学习速度的“开关”,这样在不同的任务之间切换时,就不需要重新调整这个“开关”了。


在适应特定任务时,Aghajanyan等人在2020年的研究中发现,预训练的语言模型具有较低的“内在维度”(intrinsic dimension)。这里的“内在维度”指的是模型在表示数据时所需的参数数量,或者说是模型捕获数据特征所需的复杂性。即使在将模型的参数随机投影到一个更小的子空间(即减少参数数量)的情况下,这些预训练的语言模型仍然能够有效地学习。


换句话说,这项研究表明,即使在对模型进行压缩或简化,使其在更少的参数下运行时,预训练的语言模型仍然能够保持其性能,有效地学习和适应新的特定任务。这可能是因为这些模型在预训练阶段已经学习到了丰富的语言特征,因此在适应新任务时不需要太多的额外参数。这种特性对于资源受限的环境(如移动设备或边缘计算设备)中的模型部署非常有用,因为它允许在保持模型性能的同时减少计算和存储需求。


然后我们按α/r缩放∆W x,其中α是r中的常数,这句话描述的是在机器学习模型训练过程中,特别是使用Adam优化器时,对模型参数进行重新参数化(reparametrization)的一种策略。这里的重新参数化涉及到两个矩阵AB,它们的乘积∆W = BA用于更新模型的权重。以下是对这句话的详细解释:


1. **初始化**:在训练开始时,矩阵A使用随机高斯分布(即正态分布)进行初始化,而矩阵B初始化为零。这意味着在训练的最开始,∆W(即BA)的值是零。


2. **缩放∆W**:随着训练的进行,我们对∆W进行缩放,具体是通过乘以一个因子αr。这里的α是一个常数,r是矩阵AB的秩(rank),也就是它们的列数或行数中较小的一个。


3. **优化过程中的调整**:在Adam优化器中,调整α的过程与调整学习率类似。如果我们适当地缩放初始化的参数,那么调整α就相当于调整学习率。


4. **设置α**:为了简化过程,研究者们选择将α设置为尝试的第一个r值,并且在后续的训练中不再调整α。这样做的好处是,当我们改变r的值时,不需要重新调整超参数(如学习率)。


5. **减少超参数调整**:这种缩放策略有助于在改变r时减少对其他超参数(如学习率)的调整需求。这是根据Yang & Hu2021年)的研究得出的结论。


总的来说,这句话描述的是一种在训练深度学习模型时,通过调整参数的缩放因子来简化超参数调整的策略。这种方法可以使得模型在不同的参数设置下更加稳定,同时减少训练过程中的调参工作。)


全微调的泛化形式。一种更普遍的微调方式允许训练预训练参数的一个子集。LoRA则更进一步,它在适应过程中并不要求累积到权重矩阵上的梯度更新具有满秩。这意味着当我们将LoRA应用到所有权重矩阵并对所有偏置进行训练时,通过将LoRA的秩r设置为预训练权重矩阵的秩,我们大致能够恢复全微调的表达能力。换句话说,随着可训练参数数量的增加,在训练LoRA时,其表现大约会收敛于训练原始模型;而基于适配器的方法会收敛至一个MLP(多层感知机),基于前缀的方法则会收敛至一个无法处理长输入序列的模型。


没有额外的推理延迟。在生产中部署时,我们可以明确计算并存储W = W0 + BA,并像往常一样进行推理。注意W0BA都在Rd×k中。当我们需要切换到另一个下游任务时,我们可以通过减去BA然后添加不同的BA来恢复W0,这是一个快速操作,几乎没有内存开销。关键的是,这保证了我们在推理过程中不会引入任何额外的延迟,与通过构造的微调模型相比。


通俗解释: 想象一下,我们有一个已经学会很多东西的机器人(预训练模型),现在我们想让这个机器人学会一个新的技能(特定任务)。通常,我们会通过调整机器人的所有部分(微调所有参数)来让它适应这个新技能。但是,这样做需要很多时间和资源。


现在,有一种新的方法(LoRA)可以让我们更聪明地教机器人新技能。我们不是调整机器人的所有部分,而是只调整一小部分关键部分。这样,我们就可以更快地教会机器人新技能,而且不会影响它已经学会的东西。


这种方法的好处是,当我们需要让机器人学会更多不同的技能时,我们可以重复这个过程,而不需要每次都从头开始。这就像是给机器人添加了一种灵活性,让它能够快速适应新的任务。


而且,当我们在实际使用这个机器人时,我们可以直接计算出它需要的所有信息,并存储起来。这样,当机器人需要切换到另一个任务时,我们只需要做一些简单的调整,就可以让它继续工作,而不需要等待很长时间。这就像是给机器人装了一个快速切换按钮,让它能够迅速适应不同的工作环境。


总的来说,LoRA这种方法让机器人(神经网络模型)在学习和适应新任务时更加高效,而且不会在实际工作中拖慢速度。


4.2 LoRA应用于Transformer


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


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


注释:在涉及大型深度学习模型训练时,通常是指GPU上的高速显存。在训练大型Transformer模型如GPT-3 175B时,由于模型参数量巨大,需要大量的VRAM来存储模型权重、中间计算结果以及优化器的状态等信息。通过使用更少的GPU资源(例如,通过减少VRAM使用量、优化模型结构或采用分布式训练策略等方法),我们能够在不牺牲训练效率的情况下进行大型模型或大规模数据集的训练。这样做的好处在于:


1. **节省硬件成本**:减少对高性能GPU的需求意味着可以降低硬件采购和维护的成本。


2. **提高资源利用率**:在有限的GPU集群中,能够训练更大的模型或者同时运行更多的训练任务,提高了整体的资源利用效率。


3. **避免I/O瓶颈**I/O瓶颈通常出现在从硬盘读取大量数据时速度无法满足GPU计算速度需求的情况。通过减少GPU数量但保持高效训练,可以在一定程度上减少对硬盘I/O带宽的压力,从而避免因数据传输速率不足导致的性能限制。


LoRA也有其局限性。例如,如果选择将AB吸收到W中以消除额外的推理延迟,那么在单个前向传递中批量输入不同任务的输入并不直观,这些任务具有不同的AB。尽管在延迟不是关键的情况下,不合并权重并动态选择用于批量中样本的LoRA模块是可能的。


(通俗的解释:想象一下,我们有一个非常复杂的机器(神经网络),它有很多不同的部分(权重矩阵),每个部分都有一堆小齿轮(参数)来帮助它工作。现在,我们想让这台机器学会做一些特定的新任务,但我们不想改变它所有的小齿轮,因为这会非常耗时和占用很多空间。


LoRA是一种聪明的方法,它允许我们只调整机器中的一部分小齿轮(权重矩阵的子集),这样我们就可以节省空间和时间。在一种叫做Transformer的机器里,有四个特殊的部分(自注意力模块)和另外两个部分(MLP模块),我们决定只调整自注意力模块中的一些小齿轮,而保持其他部分不变。这样做可以让机器更快地学会新任务,同时不会影响它已经会做的事情。


使用LoRA的好处是,我们可以减少机器运行时需要的内存,这样我们就可以在同一台机器上运行更多的任务,而不会因为内存不足而卡住。此外,当我们需要让机器切换到另一个新任务时,我们只需要更换一小部分小齿轮,而不是全部,这样切换起来更快、成本更低。


但是,LoRA也有一些限制。比如,如果我们想要在机器运行时快速切换不同的任务,那么我们需要确保这些任务的小齿轮(AB)不会互相冲突。虽然我们可以在不太在意延迟的情况下,动态地选择适合当前任务的小齿轮,但如果我们想要完全消除这种延迟,那么就需要更复杂的设置。


5 实证实验


我们在RoBERTaLiu等人,2019年)、DeBERTaHe等人,2021年)和GPT-2Radford等人,b)上评估了LoRA在下游任务上的性能,然后在扩展到GPT-3 175BBrown等人,2020年)之前。我们的实验涵盖了从自然语言理解(NLU)到生成(NLG)的各种任务。具体来说,我们对RoBERTaDeBERTaGLUEWang等人,2019年)基准测试上进行了评估。我们在GPT-2上遵循Li & Liang2021年)的设置进行直接比较,并在GPT-3上增加了WikiSQLZhong等人,2017年)(自然语言到SQL查询)和SAMSumGliwa等人,2019年)(对话摘要)进行大规模实验。有关我们使用的更多数据集详细信息,请参见附录C。我们使用NVIDIA Tesla V100进行所有实验。


5.1 基线


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


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


仅偏置或BitFit是一个基线,我们只训练偏置向量,同时冻结其他所有内容。同时,这个基线也被BitFitZaken等人,2021年)研究过。


前缀嵌入调整(PreEmbed在输入标记之间插入特殊标记。这些特殊标记具有可训练的词嵌入,通常不在模型的词汇表中。放置这些标记的位置可能会影响性能。我们关注“前缀”,即将这些标记添加到提示的前面,以及“内缀”,即将它们添加到提示的后面;两者都在Li & Liang2021年)中讨论过。我们用lp(分别表示前缀标记的数量)和li(分别表示内缀标记的数量)来表示。可训练参数的数量是|Θ| = dmodel × (lp + li)


前缀层调整(PreLayer是前缀嵌入调整的扩展。它不仅仅是学习一些特殊标记的词嵌入(或等价地,嵌入层之后的激活),而是学习每个Transformer层之后的激活。从先前层计算得到的激活被可训练的激活所取代。可训练参数的结果是|Θ| = L × dmodel × (lp + li),其中LTransformer层的数量。


适配器调整,如Houlsby等人(2019年)所提出的,在自注意力模块(和MLP模块)与随后的残差连接之间插入适配器层。适配器层中有两个带有偏置的全连接层,中间有一个非线性。我们称这个原始设计为AdapterH。最近,Lin等人(2020年)提出了一个更高效的设计,适配器层仅在MLP模块之后和LayerNorm之后应用。我们称它为AdapterL。这与Pfeiffer等人(2021年)提出的另一个设计非常相似,我们称它为AdapterP。我们还包括了另一个基线AdapterDropRücklée等人,2020年),它为了更高的效率而丢弃了一些适配器层(AdapterD)。我们尽可能引用先前工作中的数字,以最大化我们比较的基线数量;它们在第一列带有星号(*)的行中。在所有情况下,我们有|Θ| = ˆLAdpt ×(2×dmodel ×r+r+dmodel)+ 2× ˆLLN ×dmodel,其中ˆLAdpt是适配器层的数量,ˆLLN是可训练的LayerNorm的数量(例如,在AdapterL中)。LoRA在现有权重矩阵旁边添加可训练的秩分解矩阵对。


LoRA在现有权重矩阵旁边并行添加了可训练的秩分解矩阵对。正如第4.2节中提到的,为了简单起见,我们在大多数实验中只对WqWv应用LoRA。可训练参数的数量由秩r和原始权重的形状决定:|Θ| = 2 × ˆLLoRA × dmodel × r,其中ˆLLoRA是我们应用LoRA的权重矩阵的数量。


注释: 这句话描述了在使用LoRALow-Rank Adaptation)方法时,模型中可训练参数数量的计算方式。LoRA是一种技术,它通过在现有的权重矩阵中添加低秩(low-rank)的矩阵对来更新模型的权重,而不是直接修改原始的权重。这样做可以在不显著增加参数数量的情况下,使模型适应特定的任务。


这里的各个符号代表的含义如下:


- **|Θ|**:表示模型中可训练参数的总数。


- **r**:表示LoRA中使用的秩(rank),即新添加的低秩矩阵的秩。秩是矩阵中线性无关的行或列的数量,它决定了新添加的参数的数量。


- **ˆLLoRA**:表示应用LoRA的权重矩阵的数量。也就是说,模型中有多少个权重矩阵被LoRA方法更新。


- **dmodel**:表示模型中每个权重矩阵的维度。这通常是模型的隐藏层大小,也就是每个权重矩阵的行数和列数。


所以,整个公式 |Θ| = 2 × ˆLLoRA × dmodel × r 的意思是,可训练参数的总数是两倍的(因为每个权重矩阵都会添加两个低秩矩阵,一个用于权重的增加,一个用于权重的减少),乘以应用LoRA的权重矩阵的数量,再乘以每个权重矩阵的维度,最后乘以低秩矩阵的秩。


这个公式帮助我们理解,通过LoRA方法,我们可以在保持模型大小大致不变的情况下,增加模型的灵活性和适应性。


 

2:在GLUE基准测试上,使用不同适应方法的RoBERTa基础版、RoBERTa大版和DeBERTa XXL。我们报告了MNLI的整体(匹配和不匹配)准确率、CoLAMatthew相关系数、STS-B的皮尔逊相关系数,以及其他任务的准确率。所有指标中,数值越高越好。*表示先前作品中发布的数字。†表示为了公平比较,配置了与Houlsby等人(2019年)相似的设置的运行。


注释: 这张表格展示了在GLUE基准测试中,使用不同适应方法的RoBERTa基础版(RoBERTabase)、RoBERTa大版(RoBERTalarge)和DeBERTa XXLDeBERTaxxL)模型的性能比较。GLUE基准测试是一系列自然语言理解任务的集合,用于评估模型在各种NLP任务上的性能。表格列出了每种方法的可训练参数数量以及在各个任务上的准确率或相关系数。


表格中的列代表以下内容:


- **Model & Method**:模型和方法,列出了不同的适应方法,如全微调(FT)、BitFit、适配器PAdptP)、适配器HAdptH)和LoRA


- **# Trainable Parameters**:可训练参数的数量,表示每种方法使用的参数数量。


- **MNLI****SST-2****MRPC****CoLA****QNLI****QQP****RTE****STS-B**:这些是GLUE基准测试中的具体任务。MNLIMulti-Genre Natural Language Inference)是一个自然语言推理任务,CoLACorpus of Linguistic Acceptability)是一个语法可接受性任务,SST-2Stanford Sentiment Treebank)是一个情感分析任务,MRPCMicrosoft Research Paraphrase Corpus)是一个句子对语义相似度任务,QNLIStanford Question Answering Dataset)是一个问答任务,QQPQuora Question Pairs)是一个问题对语义相似度任务,RTERecognizing Textual Entailment)是一个文本蕴含任务,STS-BSemantic Textual Similarity Benchmark)是一个文本相似度任务。


表格中的行代表不同的模型版本,包括RoBERTa基础版和大版,以及DeBERTa XXL,以及它们在不同适应方法下的性能。例如,RoBERTa基础版(FT* 表示RoBERTa基础版的全微调版本,它有125.0M(百万)个可训练参数,并在各项任务上取得了一定的准确率或相关系数。


表格还提供了星号(*)和加号(+)来标记特定的数据点。星号表示之前工作中发布的数字,加号表示配置设置与Houlsby等人(2019年)相似的运行,以进行公平比较。


总的来说,这张表格显示了在GLUE基准测试中,不同适应方法的模型在各项任务上的性能表现。这些数据可以帮助研究者和实践者了解哪种适应方法在特定任务上更有效,以及在保持较少可训练参数的同时是否能够达到或超越全微调模型的性能。


5.2 RoBERTa基础版/大版


RoBERTaLiu等人,2019年)优化了BERTDevlin等人,2019a)最初提出的预训练配方,并在不引入更多可训练参数的情况下提升了后者的任务性能。尽管近年来在GLUEWang等人,2019年)等NLP排行榜上,RoBERTa已被更大的模型超越,但它仍然是因其规模而在实践中具有竞争力和受欢迎的预训练模型。我们从HuggingFace Transformers库(Wolf等人,2020年)中获取了预训练的RoBERTa基础版(125M)和RoBERTa大版(355M),并评估了不同高效适应方法在GLUE基准测试任务上的性能。我们还根据Houlsby等人(2019年)和Pfeiffer等人(2021年)的设置进行了复制。为了确保公平比较,我们在与适配器比较时对评估LoRA的方式进行了两个关键更改。首先,我们对所有任务使用相同的批量大小,并使用128的序列长度以匹配适配器基线。其次,我们初始化模型为MRPCRTESTS-B的预训练模型,而不是像微调基线那样已经适应MNLI的模型。遵循Houlsby等人(2019年)更受限设置的运行在表2(前三部分)中标记有†。结果呈现在表2中。有关使用的超参数的详细信息,请参见D.1节。


注释: 在进行模型训练或评估时,研究者们选择了一个特定的起点。在这个例子中,他们没有选择一个已经在MNLIMultiNLI,一个自然语言推理任务的数据集)上进行过微调的模型作为起点。相反,他们选择了MRPCMicrosoft Research Paraphrase Corpus,一个句子对语义相似度任务的数据集)、RTERecognizing Textual Entailment,一个文本蕴含任务的数据集)和STS-BSemantic Textual Similarity Benchmark,一个文本相似度任务的数据集)这些任务的预训练模型。


“微调基线”则是指那些已经在特定任务(如MNLI)上进行了额外训练,以适应该任务的模型。


选择这样的起点是为了确保在评估或训练过程中,模型的表现是基于其在新任务上的适应能力,而不是依赖于之前在MNLI任务上可能获得的任何特定优化。这样可以更公平地评估模型在新任务上的学习能力和适应性。


5.3 DeBERTa XXL


DeBERTaHe等人,2021年)是BERT的一个较新变体,它在更大的规模上进行训练,并在GLUEWang等人,2019年)和SuperGLUEWang等人,2020年)等基准测试上表现出色。我们评估LoRA是否仍能在GLUE上与完全微调的DeBERTa XXL1.5B)相匹配。结果呈现在表2(底部部分)。有关使用的超参数的详细信息,请参见D.2节。


5.4 GPT-2中等版/大版


在展示了LoRANLU上可以作为完全微调的有竞争力的替代方案之后,我们希望回答LoRANLG模型上是否仍然占优势,例如GPT-2中等版和大版(Radford等人,b)。我们尽可能保持与Li & Liang2021年)的设置接近,以便直接比较。由于空间限制,我们仅在本节中展示了我们在E2E NLG挑战赛(表3)上的结果。有关WebNLGGardent等人,2017年)和DARTNan等人,2020年)的结果,请参见F.1节。我们在D.3节中列出了使用的超参数列表。


(注释:NLUNatural Language Understanding,自然语言理解)和NLGNatural Language Generation,自然语言生成))


 

3:在E2E NLG挑战赛中,针对GPT-2中型(M)和大型(L)模型应用了不同的适应方法。对于所有评估指标,数值越高表示性能越好。LoRA方法在具有可比或更少训练参数的情况下超越了几种基准方法。表格中展示了我们进行实验时计算出的置信区间。带有星号(*)的数字表示之前研究工作中已经发表的结果。


(注释: 这张表格展示了在端到端自然语言生成挑战(E2E NLG Challenge)中,GPT-2中型(M)和大型(L)模型使用不同适应方法的性能比较。表格列出了每种方法的可训练参数数量、BLEU分数、NIST分数、MET分数、ROUGE-L分数和CIDEr分数。这些指标用于评估模型在文本生成任务上的性能,分数越高表示性能越好。


表格中的列代表以下内容:


- **Model & Method**:模型和方法,列出了不同的适应方法,如全微调(FT)、适配器(Adapter)、适配器HAdapterH)、FTTop2、前层(PreLayer)和LoRA


- **# Trainable Parameters**:可训练参数的数量,表示每种方法使用的参数数量。


- **BLEU****NIST****MET****ROUGE-L****CIDEr**:这些是评估文本生成质量的不同指标,分别对应不同的评分标准。


表格中的行代表不同的GPT-2模型版本,包括中型(M)和大型(L),以及它们在不同适应方法下的性能。例如,GPT-2 M (FT)* 表示GPT-2中型模型的全微调版本,它有354.92M(百万)个可训练参数,并在各项指标上取得了一定的分数。


表格还提供了置信区间(Confidence intervals),这是对实验结果的一种统计评估,表明了结果的可靠性。星号(*)表示之前工作中发布的数字。


总的来说,这张表格显示了LoRA方法在保持较少或可比的可训练参数数量的同时,能够在多个指标上超越其他基线方法。这表明LoRA是一种有效的模型适应方法,可以在不显著增加参数数量的情况下提高模型性能。)


5.5 扩展到GPT-3 175B


作为LoRA的最终压力测试,我们将规模扩展到拥有1750亿参数的GPT-3。由于训练成本高昂,我们只报告了给定任务在随机种子上的典型标准差,而不是为每个条目提供一个。有关使用的超参数的详细信息,请参见D.4节。如表4所示,LoRA在所有三个数据集上匹配或超过了微调基线。请注意,并非所有方法都能从拥有更多可训练参数中单调受益,如图2所示。我们观察到,当我们使用超过256个特殊标记进行前缀嵌入调整或超过32个特殊标记进行前缀层调整时,性能显著下降。这证实了Li & Liang2021年)中的类似观察。虽然对这一现象的彻底调查超出了这项工作的范围,但我们怀疑拥有更多的特殊标记会导致输入分布进一步偏离预训练数据分布。此外,我们在F.3节中调查了低数据环境下不同适应方法的性能。


 

4:不同适应方法在GPT-3 175B模型上的性能表现。我们报告了WikiSQL上逻辑形式验证准确率、MultiNLI-matched上的验证准确率以及SAMSum上的Rouge-1/2/L指标。结果显示,LoRA相比于先前的方法(包括完全微调)表现出更好的性能。在WikiSQL数据集上的结果波动约在±0.5%左右,MNLI-matched数据集上的波动约为±0.1%,而SAMSum数据集上三个指标的波动分别约为±0.2、±0.2和±0.1


注释: 这张表格展示了在GPT-3 175B模型上,使用不同适应方法(adaptation methods)的性能比较。这些适应方法包括全微调(Full Tuning, FT)、BitFit、前缀嵌入(PreEmbed)、前层(PreLayer)、适配器HAdapterH)和LoRA。表格列出了每种方法的可训练参数数量以及在WikiSQLMultiNLI匹配(MNLI-m)和SAMSum任务上的性能指标。


表格中的列代表以下内容:


- **Model & Method**:模型和方法,列出了不同的适应方法。


- **# Trainable Parameters**:可训练参数的数量,表示每种方法使用的参数数量。


- **Acc. (%)**:准确率,表示模型在特定任务上的正确预测百分比。


- **R1/R2/RL**:在SAMSum任务上,分别代表Rouge-1Rouge-2Rouge-L分数,这些是评估文本摘要任务性能的指标。


表格中的行代表不同的适应方法及其在三个任务上的性能表现。例如,GPT-3 (FT) 表示GPT-3模型的全微调版本,它有175,255.8M(约175亿)个可训练参数,并在WikiSQLMNLI-mSAMSum任务上取得了一定的准确率和Rouge分数。


表格还提供了性能结果的波动范围(fluctuation),这表示结果的稳定性。例如,WikiSQL任务的结果波动范围是±0.5%MNLI-m任务是±0.1%,而SAMSum任务的Rouge-1/2/L分数的波动范围分别是±0.2/±0.2/±0.1


总的来说,这张表格显示了LoRA方法在GPT-3 175B模型上相对于其他适应方法的性能优势,包括全微调。LoRA在保持较少可训练参数的同时,能够在WikiSQLMNLI-mSAMSum任务上取得更好的性能。这表明LoRA是一种有效的模型适应方法,可以在不显著增加参数数量的情况下提高模型在特定任务上的性能。



2展示了GPT-3 1750亿参数模型在WikiSQLMNLI-matched数据集上的验证准确率与几种适应方法的可训练参数数量之间的关系。结果显示,LoRA方法具有更好的扩展性和任务性能表现。有关图表中所绘数据点的更多详情,请参阅F.2节。


6 相关工作


Transformer语言模型。TransformerVaswani等人,2017年)是一种序列到序列的架构,大量使用自注意力。Radford等人(a)通过使用一堆Transformer解码器将其应用于自回归语言建模。从那时起,基于Transformer的语言模型主导了自然语言处理(NLP),在许多任务中实现了最先进的性能。BERTDevlin等人,2019b)和GPT-2Radford等人,b)的出现带来了一种新的范式——两者都是在大量文本上训练的大型Transformer语言模型——在通用领域数据上预训练后,在特定任务数据上进行微调,与直接在特定任务数据上训练相比,可以显著提高性能。训练更大的Transformer通常会产生更好的性能,并仍然是一个活跃的研究方向。GPT-3Brown等人,2020年)是迄今为止训练的最大单一Transformer语言模型,拥有1750亿个参数。


提示工程和微调。虽然GPT-3 175B可以通过仅添加少量额外训练示例来适应其行为,但结果严重依赖于输入提示(Brown等人,2020年)。这需要一种实证艺术来组合和格式化提示,以最大化模型在特定任务上的性能,这被称为提示工程或提示黑客。


微调是重新训练在通用领域上预训练的模型以适应特定任务(Devlin等人,2019bRadford等人,a)。它的变体包括仅学习参数的子集(Devlin等人,2019bCollobert & Weston2008),然而实践者通常重新训练所有参数以最大化下游性能。然而,GPT-3 175B的巨大规模使得以通常的方式进行微调变得具有挑战性,因为它产生的检查点很大,而且由于它与预训练相同的内存占用,硬件门槛很高。


参数高效的适应。许多人提出了在神经网络的现有层之间插入适配器层(Houlsby等人,2019Rebuffi等人,2017Lin等人,2020)。我们的方法使用类似的瓶颈结构来对权重更新施加低秩约束。关键的功能区别在于,我们的学习权重可以在推理期间与主权重合并,因此不会引入任何延迟,而适配器层则不是这样(第3节)。


适配器的一个当代扩展是COMPACTERMahabadi等人,2021),它本质上使用Kronecker积和一些预定的权重共享方案来参数化适配器层。类似地,将LoRA与其他基于张量积的方法结合可能会进一步提高其参数效率,我们将这留给未来的工作。最近,许多人提出了优化输入词嵌入以代替微调,类似于提示工程的连续和可微分的泛化(Li & Liang2021Lester等人,2021Hambardzumyan等人,2020Liu等人,2021)。我们在实验部分与Li & Liang2021)进行了比较。


然而,这一系列工作只能通过在提示中使用更多的特殊标记来扩展,这些标记在位置嵌入被学习时占据了任务标记的可用序列长度。


深度学习中的低秩结构。低秩结构在机器学习中非常常见。许多机器学习问题具有一定的内在低秩结构(Li等人,2016Cai等人,2010Li等人,2018bGrasedyck等人,2013)。此外,众所周知,对于许多深度学习任务,特别是那些神经网络严重过参数化的任务,在训练后学习的神经网络将享有低秩属性(Oymak等人,2019)。一些先前的工作甚至在训练原始神经网络时明确施加低秩约束(Sainath等人,2013Povey等人,2018Zhang等人,2014Jaderberg等人,2014Zhao等人,2016Khodak等人,2021Denil等人,2014);然而,据我们所知,这些工作中没有考虑对冻结模型进行低秩更新以适应下游任务。在理论文献中,已知当底层概念类具有某些低秩结构时,神经网络优于其他经典学习方法,包括相应的(有限宽度)神经切线核(Allen-Zhu等人,2019Li & Liang2018)。


Ghorbani等人(2020)和Allen-Zhu & Li2019Allen-Zhu & Li2020a)的另一个理论结果表明,低秩适应对于对抗性训练可能是有用的。总之,我们认为我们提出的低秩适应更新得到了文献的充分支持。


7 理解低秩更新


鉴于LoRA的实证优势,我们希望进一步解释从下游任务中学到的低秩适应的性质。请注意,低秩结构不仅降低了硬件门槛,使我们能够并行运行多个实验,而且还提供了更好的解释性,说明更新权重与预训练权重之间的相关性。我们专注于研究GPT-3 175B,在那里我们在不影响任务性能的情况下,实现了可训练参数的最大减少(高达10,000倍)。


我们进行了一系列实证研究,以回答以下问题:1)在给定参数预算约束的情况下,我们应该适应预训练Transformer中的哪些权重矩阵,以最大化下游性能?2)“最优”适应矩阵∆W真的是秩不足的吗?如果是,实践中应该使用什么秩?3)∆WW之间有什么联系?∆WW高度相关吗?∆WW相比有多大?


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


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


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


 

5:在给定相同数量可训练参数的情况下,将LoRA应用于GPT-3的不同类型的注意力权重后,在WikiSQLMultiNLI数据集上的验证准确率。同时调整WqWv可以获得最佳的整体性能表现。我们发现对于给定的数据集,随机种子之间的标准偏差保持一致,该数值我们在第一列中报告。


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


注释:在进行模型参数的适应(adaptation)时,如果将所有的参数都放在∆Wq(查询权重矩阵的更新)或∆Wk(键权重矩阵的更新)中,会导致模型性能显著下降。相反,同时适应WqWv(值权重矩阵)会得到更好的结果。


为了在下游任务中获得最佳性能,我们不应该只更新查询或键的权重,而是应该同时更新查询、键和值的权重。这可能是因为在自注意力机制中,查询、键和值之间存在复杂的相互作用,只更新其中一部分可能无法充分利用模型的潜力,而同时更新它们可以更好地捕捉和利用这些相互作用。


7.2 LoRA的最优秩r是多少?


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


 

6:在WikiSQLMultiNLI上使用不同秩r的验证准确率。令我们惊讶的是,即使秩仅为一,也足以适应这些数据集上的WqWv,而单独训练Wq则需要更大的r。我们在第H.2节对GPT-2进行了类似的实验。


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


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


 

其中UiAr=8代表UAr=8中对应于前i个奇异向量的列。


φ(·)的范围是[0, 1],其中1代表子空间的完全重叠,0代表完全分离。见图3,了解φ如何随着ij的变化而变化。由于空间限制,我们只看第48层(共96层),但结论也适用于其他层,如第H.1节所示。


 

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


注释:这张图展示了在不同的秩(r)下,适应矩阵(∆W)的列向量之间的子空间相似性。具体来说,它比较了秩为8Ar=8)和秩为64Ar=64)的适应矩阵∆Wq(查询权重更新)和∆Wv(值权重更新)的列向量。


图中的横轴(j)和纵轴(i)代表了奇异值分解中的奇异向量的位置。奇异值分解是一种将矩阵分解为奇异向量和奇异值的方法,它可以揭示矩阵中最重要的方向(即奇异向量)和这些方向的重要性(即奇异值)。


图中的每个点(例如,(Ar = 64, Ar = 8, i, j))表示在秩为64的适应矩阵(Ar=64)的第i个奇异向量和秩为8的适应矩阵(Ar=8)的第j个奇异向量之间的子空间相似性。相似性用一个介于01之间的值表示,其中1表示完全相似(即两个子空间完全重叠),0表示完全不相似(即两个子空间没有重叠)。


图中的第三和第四个图放大了前两个图中左下角的三角形区域。这表明在较低秩(r = 8)的适应矩阵中最重要的方向(即前奇异向量)被包含在较高秩(r = 64)的适应矩阵中,反之亦然。这意味着即使在较低秩的情况下,适应矩阵也能够捕获到与较高秩相似的重要特征方向。这可能表明在实际应用中,使用低秩适应矩阵可能是足够的,因为它们能够以较少的参数捕获到与高秩适应矩阵相似的重要信息。


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


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


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


不同随机种子之间的子空间相似性。我们通过绘制r = 64的两个随机种子运行之间的标准化子空间相似性来进一步确认这一点,如图4所示。


Wq似乎具有比∆Wv更高的“内在秩”,因为两个运行都学习了更多的共同奇异值方向,这与我们在表6中的实证观察一致。


作为比较,我们还绘制了两个随机高斯矩阵,它们之间没有任何共同的奇异值方向。


7.3 适应矩阵∆WW的比较如何?


我们进一步研究∆WW之间的关系。特别是,∆WW高度相关吗?(或者数学上说,∆W是否主要包含在W的最高奇异方向中?)此外,与W中的相应方向相比,∆W有多“大”?这可以揭示适应预训练语言模型的潜在机制。


 

4:左图和中图:在第48层,两个随机种子的Ar=64的列向量之间的标准化子空间相似性,分别对应于∆Wq和∆Wv。右图:两个随机高斯矩阵的列向量之间的相同热图。有关其他层的信息,请参见第H.1节。


注释:这张图展示了在第48层中,两个不同随机种子生成的秩为64的适应矩阵(Ar=64)的列向量之间的标准化子空间相似性。这里的适应矩阵可能指的是∆Wq(查询权重更新)和∆Wv(值权重更新),它们是Transformer模型中自注意力机制的权重矩阵。


图中的左半部分和中间部分(Left and Middle)显示了两个随机种子生成的适应矩阵的列向量之间的相似性。这些相似性值被标准化,意味着它们被缩放到01的范围内,其中1表示完全相似,0表示完全不相似。这些值可以帮助我们理解不同随机种子生成的适应矩阵在特征空间中的相似程度。


图中的右半部分(Right)展示了两个随机生成的高斯矩阵的列向量之间的相似性。高斯矩阵是由随机高斯分布生成的矩阵,通常用于模拟随机噪声。这部分的热图(heat-map)提供了一个对比,展示了随机高斯矩阵与适应矩阵在子空间相似性上的差异。


热图中的每个单元格(或点)代表了一个特定的相似性度量,颜色的深浅表示相似性的高低。颜色越深,表示相似性越高;颜色越浅,表示相似性越低。通过比较适应矩阵和随机高斯矩阵的热图,我们可以观察到适应矩阵在特定方向上可能捕获了有意义的特征,而随机高斯矩阵则没有这种结构。)


为了解答这些问题,我们通过计算UTWVT投影矩阵W到∆Wr维子空间上,其中U/V分别是∆W的左/右奇异向量矩阵。接着,我们比较||UTWVT||F||W||F之间的弗罗贝尼乌斯范数。作为对比,我们也计算了用W的前r个奇异向量或一个随机矩阵代替UV时得到的||UTWVT||F


注释:这段话描述的是一个数学过程,用于研究和比较在神经网络中权重矩阵W和适应矩阵∆W之间的关系。这个过程涉及到奇异值分解(Singular Value Decomposition, SVD)和Frobenius范数的计算。下面是对这段话的详细解释:


1. **投影W到∆Wr维子空间**


- 首先,我们有一个原始的权重矩阵W,我们想要将其投影到适应矩阵∆Wr维子空间中。这里的r是一个较小的秩,表示我们只关注∆W中最重要的r个奇异向量。


- 为了实现这个投影,我们需要计算∆W的奇异值分解,得到左奇异向量矩阵U和右奇异向量矩阵V。奇异值分解可以将矩阵分解为U、奇异值矩阵Σ和V的转置(V^T)的乘积。


2. **计算Frobenius范数**


- Frobenius范数是一种度量矩阵大小的方法,它是矩阵元素的平方和的平方根。在这个上下文中,我们计算W在∆W的子空间中的投影的Frobenius范数,即U^T * W * V^TFrobenius范数。


- 然后,我们比较这个投影的Frobenius范数与原始权重矩阵WFrobenius范数。这个比较可以帮助我们理解W在∆W的子空间中的重要性。


3. **作为比较,使用W的奇异向量或随机矩阵**


- 为了进一步比较,我们用W的最高r个奇异向量或一个随机矩阵来替换UV,然后再次计算Frobenius范数。这可以帮助我们理解在不同的基(basis)下,W的投影是如何变化的。


总的来说,这段话描述的是一个分析过程,用于理解在神经网络适应过程中,原始权重矩阵W和适应矩阵∆W之间的关系。通过这种分析,我们可以更好地理解适应过程中权重的变化,以及这些变化如何影响模型在特定任务上的性能。


7:弗罗贝尼乌斯范数UTWVT,其中UV分别为以下三种情况的左/右前r个奇异向量方向:(1)Wq(2)Wq(3) 随机矩阵。权重矩阵取自GPT-3模型的第48层。

注释:这个表格展示了在GPT-3模型的第48层中,不同权重矩阵的Frobenius范数比较。这些权重矩阵包括∆Wq(适应矩阵)、Wq(原始权重矩阵)、∆W(适应矩阵的一部分)、W(原始权重矩阵的一部分),以及随机矩阵。表格中的Frobenius范数是通过计算UTWVT的值来得出的,其中UV是适应矩阵或原始权重矩阵的左/右奇异向量方向的前r个。


表格中的列代表不同的比较组:


1. **Wq**:适应矩阵∆W的一部分。


2. **Wq**:原始权重矩阵W的一部分。


3. **W**:适应矩阵∆W


4. **W**:原始权重矩阵W


5. **Random**:随机矩阵。


表格中的行代表不同的秩r值(464),这些值用于奇异值分解,以获取UV矩阵。Frobenius范数的计算结果如下:


- 对于r=4,适应矩阵∆WaFrobenius范数是21.67,而原始权重矩阵WaFrobenius范数是0.32。这表明适应矩阵在较低秩时与原始权重矩阵有较大的差异。


- 对于r=64,适应矩阵∆WFrobenius范数是37.71,而原始权重矩阵WFrobenius范数是0.33。这同样表明在较高秩时,适应矩阵与原始权重矩阵的差异较小。


表格还展示了适应矩阵∆W的查询部分(∆Wq)和值部分(∆Wv)的Frobenius范数,以及它们与原始权重矩阵WqWv的比较。例如,∆WqFrobenius范数是61.95,而WqFrobenius范数是6.91。这表明适应矩阵的查询部分在Frobenius范数上显著大于原始权重矩阵的查询部分。


这个表格的数据可以帮助我们理解在不同的秩下,适应矩阵与原始权重矩阵之间的关系,以及适应过程中权重的变化。这些信息对于优化模型的适应策略和理解模型的内部工作机制非常有用。)


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


8 结论和未来工作


微调巨大的语言模型在所需的硬件和为不同任务托管独立实例的存储/交换成本方面成本过高。我们提出了LoRA,一种高效的适应策略,它既不引入推理延迟,也不减少输入序列长度,同时保持高模型质量。重要的是,它允许在作为服务部署时快速切换任务,通过共享绝大多数模型参数。虽然我们专注于Transformer语言模型,但所提出的原则普遍适用于任何具有密集层的神经网络。


未来工作有许多方向。1LoRA可以与其他高效的适应方法结合,可能提供正交改进。2)微调或LoRA背后的机制远未明确——预训练期间学到的特征是如何转化为在下游任务上表现良好的?我们认为,LoRA使得回答这个问题比完全微调更容易。3)我们主要依赖启发式方法来选择应用LoRA的权重矩阵。有没有更有原则的方法来做这件事?4)最后,∆W的秩不足表明W也可能秩不足,这也可以成为未来工作的灵感来源。



53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询