参数更新量仅为LoRA的5%,性能不减反升!南加大提出高效精调法LaMDA
夕小瑶科技说 原创
作者 | Axe_越
万物负阴而抱阳,冲气以为和
——《道德经·第四十二章》
从Bert时代一路过来的朋友们应该还记得,对于仅仅只有1亿参数的Bert,在特定任务上做一个全参数微调(Full Parameter Fine-tuning,FPFT),那简直是再正常不过的操作。即使想不开要对Bert重新做个预训练(Pretraining),也无碍乎是“几张卡+几天”的事情,根本无伤大雅。
随着模型参数规模逐渐从1亿扩大到现在的百亿、千亿,全参数微调,哪怕是LoRA等仅更新部分参数的参数高效微调方法(Parameter Efficient Fine-Tuning,PEFT)也已经变成了一种奢侈的事情,因此我们开始转入对“尽可能影响更少的参数、让模型变得更快、资源消耗变得更低”的“小型化”追求。
今天要介绍的这篇文章,在LoRA的基础上,把模型训练时的参数更新量进一步缩小了将近20倍!不但如此,甚至还获得了相对更好的表现。这对我们众多资源匮乏党来说,无疑是一个巨大惊喜,就让我们来看看,它到底是怎么做到的!
论文标题:
LaMDA: Large Model Fine-Tuning via Spectrally Decomposed
Low-Dimensional Adaptation
论文链接:
https://arxiv.org/pdf/2406.12832.pdf
高效!还要更高效!
大模型(LLMs)由于其在大量数据上训练后所表现出的泛化能力,在NLP的多种任务中都取得了惊人的性能。然而,要充分发挥LLMs的潜力,仍然需要对它们进行微调以适应特定的应用场景。尽管微调可以显著提升模型在特定任务上的表现,但对大型模型进行全面微调的成本非常高,这不仅包括计算资源,还包括内存需求,尤其在边缘设备上进行微调几乎是不可能的。
此外,全参数微调LLM还可能导致过拟合和灾难性遗忘,即模型在更新参数以适应新任务时,可能会忘记其在预训练阶段学到的有用信息。为了解决这些问题,研究者们提出了参数高效的微调(PEFT)技术,这些技术只更新模型参数的一小部分,或者训练任务特定的软提示。在这些PEFT技术中,低秩适应技术(LoRA)就是其中的杰出代表。
LoRA通过在模型冻结参数的主路径旁添加两个可训练的低秩适配矩阵(即下图A和B,通过秩分解预训练权重获得;𝛼用于平衡主路径和适配路径贡献的超参;W为主路径被冻结参数)来实现微调,从而减少了GPU内存需求和可训练参数数量。但是,LoRA的可训练参数数量可能仍然比预训练LLM的低内在维度要大,而且随着模型嵌入维度的增加,对可训练参数的需求也会增加,导致计算成本上升。
为了克服LoRA的这些限制,本文提出了LaMDA,利用低维适应(low-dimensional adapter,LDA)来显著减少可训练参数和峰值GPU内存占用,从而为LLMs提供一个更为高效和可扩展的微调框架,使其能够在资源受限的环境中得到有效应用。
方法
LaMDA
Low-Dimensional Adapter (LDA) 是LaMDA方法的核心组件,它通过在微调过程中引入一个低维的可训练方阵来显著减少参数数量和内存占用。LDA的引入是基于这样的理念:通过在一个较小的参数空间内进行调整,可以在保持模型性能的同时减少所需的计算资源。
具体来说,LDA是一个的方阵S,它被集成到模型的适配路径中,与两个映射矩阵() 和()结合使用。与LoRA不同,首先对方W进行奇异值分解,得到U,,V然后利用与最大奇异值对应的奇异向量初始化和。这种初始化方法确保了在微调开始时,主路径和适配路径的组合能够近似于预训练权重,从而提高了微调的效率。
在LaMDA方法中,A在微调开始时就被冻结,而B在微调的早期阶段逐步冻结。这么做的目的是在微调的初始阶段,通过将B保持可训练状态,允许模型适应新任务。随着微调的进行,将根据奇异值的大小逐步冻结,随后S成为了唯一可训练的矩阵,从而在保持模型性能的同时减少计算成本。
通过这种设计,LaMDA将可训练参数的数量从LoRA中的减少到 𝑟2, 由于这里的r远小于模型的嵌入维度d。这种参数数量的减少带来了两个主要优势:首先,它有效限制了参数数量,降低了过拟合的风险,增强了模型的泛化能力;其次,由于需要更新的参数数量减少,微调过程中的计算和内存需求也随之降低。
此外,LDA的使用还减少了在反向传播过程中需要存储的激活数量。在LoRA中,需要存储的激活数量与模型的嵌入维度d成正比,而在LaMDA中,由于A被冻结,所需的激活存储空间降低到了维空间,这导致了显著的内存使用减少。
LaMDA++
由于奇异值本身代表了矩阵的重要程度或“能量”,较大的奇异值意味着它们在矩阵中占据了更重要的角色。因此,本文定义了矩阵的能量得分(Energy-score),其为矩阵奇异值的平方和。随后,归一化能量分数(normalized energy-score)则为单个层的能量分数与模型中所有层能量分数总和的比例。这提供了一种衡量每层相对于其他层重要性的方法,使得模型能够更有效地分配其有限的参数预算。
LaMDA++正是基于这一思想的LaMDA增强版本,它在原有的基础上引入了自适应秩分配的概念,允许在不同网络层之间动态调整可训练参数的数量。这种机制的目的是更有效地利用模型的参数预算,将更多的参数分配给那些在预训练权重中具有更高能量成分的层,同时减少对那些能量较低层的参数分配。
在LaMDA++的实现中,首先定义了一个秩预算集合Rs,其中包含了可能的秩候选值,并且𝑟1<𝑟2<...<𝑟𝑆,LaMDA++的目标是将这些秩分配给不同的层,使得所有层的秩之和等于目标秩𝑟𝑇。对于每一层 𝑙,
微信扫码关注该文公众号作者