9、微调技术——Lora(论文阅读)

Lora背景

从微调的本质可知,我们希望得到改动的量,但是全量微调需要算力太高。
(1)对于改动的量,可能里面包含许多有限的有用值。比如100亿的参数,可能只有50亿有用,别的都是重复或者可根据已知来推导的
(2)有时我们希望模型某一方面的能力更突出,所以只需要训练部分参数即可

Lora核心思想

为了减少训练量,我们不会更新所有参数。假设预训练模型的参数矩阵为W,我们可以将其写成W=A*B的形式。

其中k成为rank。假设原本w为100x100大小,则A大小为100xK,B为Kx100,假设W中有用信息多,我们就可以让k大一点,否则就小一点。假设k=2,则AB中各有200个参数,一共400个,远远比W参数少得多。
这样可以大大减少显存空间和学习成本

前言

当我们预训练更大的模型时,重新训练所有模型参数的完全微调变得不太可行。
LoRA,冻结预训练的模型权重,将可训练的秩分解矩阵注入到Transformer架构的每一层,大大减少下游任务的可训练参数数量。
并且,与适配器不同,没有额外的推理延迟

Lora的几个优点

(1)LoRA(低秩适应)通过引入小型的、特定任务的模块来调整大型预训练模型的行为。通常,这些模块由矩阵
A 和 B 组成,插入到预训练模型的各层中,使模型能够适应特定的任务。在适应不同任务的过程中,预训练模型保持不变(冻结)。这意味着在切换任务时,无需重新训练或修改模型本身。
(2)通过为不同任务替换 LoRA 模块中的矩阵 A 和 B,可以高效地在任务之间进行切换。这种方法显著减少了存储需求和任务切换的计算开销。与其为每个任务存储和加载完全不同的模型,不如只存储小型的 LoRA 模块,并在需要时进行替换。
(3)在 LoRA 中,你不需要计算大多数参数的梯度.自适应优化器(如 Adam 等)通常需要为每个参数维护额外的状态信息(如动量、二阶矩等)。LoRA 只对注入的低秩矩阵进行优化,意味着只需维护这些小型矩阵的状态,而不必为整个模型的所有参数维护状态。

问题陈述

假设我们有一个预训练的自回归语言模型 𝑃Φ(𝑦∣𝑥),其中 Φ 是模型的参数。例如,P Φ (y∣x) 可以是一个通用的多任务学习模型,如基于Transformer架构的GPT。
该预训练模型可以被进一步调整以适应不同的下游条件文本生成任务,比如摘要生成、机器阅读理解(MRC)、以及自然语言到SQL的转换(NL2SQL)。
在这里插入图片描述

全量微调的过程

在这里插入图片描述

全量微调的缺点

在这里插入图片描述

参数高效的微调办法

在这里插入图片描述

Lora方法的具体陈述

根据 Aghajanyan 等人(2020)的研究,预训练语言模型在适应特定任务时具有较低的“内在维度”,即使权重被随机投影到更小的子空间,模型仍能有效学习。这启发了作者假设:在模型适应过程中,权重更新也具有低“内在秩”(intrinsic rank)。

权重更新的低秩表示

在这里插入图片描述

低秩表示的实现与初始化

在这里插入图片描述

Lora不会增加推理延迟

一旦 LoRA 微调完成,就可以显式地计算和存储新的 ‘W’ (W0 + BA)。
在推理过程中,模型像往常一样使用组合后的 ‘W’ 进行计算。LoRA 适应不需要额外的步骤或计算,这意味着没有额外的延迟。如果您需要切换到另一个下游任务,只需从 ‘W’ 中减去当前的 LoRA 适应项 (‘BA’) 即可。然后,添加新的任务的 LoRA 适应项 (‘B’A’)。这是一个快速的操作,因为它只涉及矩阵加减法。

为什么Lora不会增加额外的推理延迟

1、参数高效性: Lora 不直接修改原始模型的参数,而是添加少量可训练的低秩矩阵 (通常只有几千个参数) 到目标模块中。这些新增的参数被称为 “Lora 矩阵”。由于参数数量非常少,因此不会对模型的计算量造成显著影响。
2、推理时仅使用新增参数: 在推理过程中,Lora 矩阵会与原始模型参数进行融合,然后进行计算。这意味着模型在推理时只需要使用原始模型参数和 Lora 矩阵,而不需要加载和计算所有原始模型参数,从而提高了推理效率。
3、并行计算: Lora 矩阵可以被并行地加载和计算,进一步提高了推理速度。
4、目标模块的选择: Lora 通常只针对模型中的一些关键模块进行微调,例如注意力机制中的 query、key、value 投影矩阵。这些模块是模型中最为重要的部分,微调它们可以显著提高模型性能,而不会影响其他模块的性能。

有关推理的说明

推理就是前向计算,即进行预测的过程
在这里插入图片描述

Lora的局限性

(1)任务特定性:LoRA的A和B矩阵是针对特定任务学习的,因此它们不是通用的。如果在一个批次中混合了多个任务的数据,而这些任务各自需要不同的A和B矩阵,那么直接应用LoRA就变得复杂。
(2)动态选择问题:如果在一个批次中不合并权重(即不将A和B合并到W中),理论上可以根据样本动态选择对应的LoRA模块。但这样做需要额外的逻辑来处理每个样本的LoRA矩阵加载和应用,可能会增加推理的复杂性。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值