LORA:大型语言模型的低阶自适应
论文阅读:LORA-大型语言模型的低阶自适应
LoRA: Low-Rank Adaptation of Large Language Models
[2106.09685] LoRA: Low-Rank Adaptation of Large Language Models
摘要:对于大模型,重新训练所有模型参数的完全微调变得不太可行,代价高昂。我们提出了低秩自适应(Low-Rank Adaptation,简称LoRA),它冻结了预训练的模型权重,并将可训练的秩分解矩阵注入到Transformer架构的每一层中,大大减少了下游任务的可训练参数数量。与使用Adam微调的GPT-3 175 B相比,LoRA可以将可训练参数的数量减少10,000倍,将GPU内存需求减少3倍。LoRA在RoBERTa,DeBERTa,GPT-2和GPT-3上的模型质量方面表现相当或优于微调,尽管具有更少的可训练参数,更高的训练吞吐量,并且与适配器不同,没有额外的推理延迟。我们还提供了对语言模型自适应中的秩不足的实证调查,这揭示了LoRA的功效。我们发布了一个包,便于LoRA与PyTorch模型的集成,并提供了我们的RoBERTa,DeBERTa,和GPT-2https://github.com/microsoft/LoRA。
结论:微调巨大的语言模型是非常昂贵的硬件所需的和存储/交换成本托管独立的实例为不同的任务。我们提出了LoRA,一个有效的适应策略,既不引入推理延迟,也不减少输入序列长度,同时保持高模型质量。重要的是,当作为服务部署时,通过共享绝大多数模型参数,它允许快速的任务切换。当我们关注Transformer语言模型时,所提出的原理通常可应用于具有密集层的任何神经网络。
未来的工作有很多方向。1)LoRA可以与其他有效的自适应方法相结合,潜在地提供正交改进。2)微调或LoRA背后的机制还很不清楚-如何在预训练期间学习的特征转换为在下游任务中表现良好?我们相信LoRA比完全微调更容易回答这个问题。3)我们主要依赖于算法来选择LoRA应用的权重矩阵。是否有更有原则的方法来做?4)最后,ΔW的秩亏性表明W也可能是秩亏的,这也可以为未来的作品提供灵感。
问题描述
传统的微调范式需要更新所有模型参数,但是随着模型的规模越来越大,带来了极大的不便和挑战。很多想法希望只微调一部分参数或者为新任务添加额外的模块,这样可以大大提高部署时的效率,但是这些方法通过扩展模型深度或减少模型的可用序列长度来引入推理延迟,并且与微调结果有差距。
如果是full fine-tuning,需要对每个参数进行学习:
利用lora之前的方法:
Adapters:Adapters通过在模型的每一层之间添加较小的、可训练的网络(称为adapter模块),而不是微调整个模型。这样可以显著减少训练时需要调整的参数数量。
应用:Adapters适用于那些希望在保持预训练模型结构不变的同时,对模型进行特定任务调整的场景。
Prefix Tuning:在Prefix Tuning中,固定了大部分预训练模型的权重,仅在模型的输入部分添加一系列可训练的前缀向量(prefixes)。这些向量会和输入数据一起被送入模型,从而影响模型的行为。
应用:Prefix Tuning适用于需要对模型进行轻量级微调的场景,特别是当模型非常大,而可用于训练的资源有限时。
作者发现学习到的过度参数化模型(模型规模远超任务所需)实际上存在于较低的内在维度上,即参数的权重集中在具有较高信息量的维度上,忽略了其它维度,这导致了模型在一个较低的内在维度空间中进行有效的表示和学习。因此作者假设模型在adaptation的过程中也有”内在秩“,从而提出了低秩适应方法——LoRA。LoRA通过优化自适应过程中密集层变化的秩分解矩阵来间接训练神经网络中的密集层,同时保持预训练的权重不变(Frozen)。lora相当于修改了目标函数,只对参数量极少的Θ 进行优化:
论文方法
假设在自适应过程中,权重的更新也具有较低的“固有秩”。对于预训练的权重矩阵W 0 d ×k,我们通过用低秩分解W 0 + ️ W = W 0 + BA表示后者来限制其更新,其中B d×r ; A r×k,并且秩r =min(d; k)。在训练过程中,W 0被冻结并且不接收梯度更新,而A和B包含可训练的参数。请注意,W 0和W 0 W = BA都与相同的输入相乘,并且它们各自的输出向量按坐标方式求和。对于h = W 0x,我们修改的前向传递产生:
图示如下:
对A使用随机高斯初始化,对B使用零。因此在训练开始时,W = BA为零。然后我们通过α/ r缩放ΔW ,其中α是r中的常数。当使用Adam优化时,如果我们适当缩放初始化,则调整α与调整学习速率大致相同。因此,我们简单地将α设置为我们尝试的第一个r,并且不调整它。这种缩放有助于减少当我们改变r时重新调整超参数的需要。
在Transformer架构中,自注意力模块中有四个权重矩阵。(Wq; Wk; Wv; Wo)和MLP模中的两个。最显著的好处来自于内存和存储使用的减少。对于使用Adam训练的大型Transformer,如果r 近似于dmodel,我们将VRAM使用减少到2/3,因为我们不需要存储冻结参数的优化器状态。在GPT-3 175 B上,我们将训练期间的VRAM消耗从1.2TB减少到350 GB。在r = 4并且仅调整查询和值投影矩阵的情况下,检查点大小大约减少了10,000×(从350 GB到35 MB)4 .这使我们能够使用更少的GPU进行训练,并避免I/O瓶颈。另一个好处是,我们可以在部署时以低得多的成本在任务之间切换,只需交换LoRA权重,而不是所有参数。这允许创建许多自定义模型,我们还观察到,与完全微调5相比,GPT-3 175 B的训练速度提高了25%,因为我们不需要计算绝大多数参数的梯度。
LoRA也有其局限性。例如,如果选择将A和B吸收到W中以消除额外的推理延迟,则在单个前向传递中使用不同的A和B将不同任务的输入批量处理并不简单。尽管可以不合并权重并动态选择LoRA模块用于批量处理延迟不重要的场景中的样本。
讨论
1)给定一个参数预算约束,我们应该调整预训练的Transformer中的权重矩阵的哪个子集以最大化下游性能?
请注意,将所有参数都放在WqWq或WqWk中会导致性能显著降低,而同时调整Wq和Wv会产生最佳结果。这表明,即使秩为4,也能在WqWk中捕获足够的信息,因此,与调整具有较大秩的单一类型权重相比,更可取的是调整更多的权重矩阵。
2)“最优”自适应矩阵ΔW真的是低秩的吗?如果是这样,在实践中使用多少秩?
LoRA已经以非常小的r(对于Wq、Wv更是如此;,而不仅仅是Wq)。这表明更新矩阵ΔW可能具有非常小的“内在秩”。(然而,我们并不期望一个小的r对每个任务或数据集都有效。)
3)ΔW和W之间的联系是什么?
首先,与随机矩阵相比,ΔW与W的相关性更强,这表明ΔW放大了W中已经存在的一些特征。其次,ΔW只放大了W中没有被强调的方向,而不是重复W的顶部奇异方向。第三,放大因子相当大:r = 4时,21:5 <$6:91=0:32。
这表明,低秩适应矩阵潜在地放大了特定下游任务的重要特征,这些特征在一般预训练模型中已被学习但未被强调。