LoRA (低秩自适应 - arxiv.org/abs/2106.09685) 是一种经济高效微调大型语言模型 (LLM) 的流行技术。但 2024 年涌现出大量新的参数高效微调技术,各种 LoRA 替代方案层出不穷:SVF、SVFT、MiLoRA、PiSSA、LoRA-XS ?…… 其中大多数都基于我非常喜欢的一种矩阵技术:奇异值分解 (SVD)。让我们深入探讨。
LoRA 的最初见解是,微调模型的所有权重是过度操作。相反,LoRA 冻结模型,只训练一对小的低秩“适配器”矩阵。请参见下面的插图(其中 W 是 Transformer LLM 中任何权重矩阵)。
由于需要计算和存储的梯度要少得多,因此可以节省内存和计算周期。例如,这是一个使用 LoRA 微调以模拟海盗说话方式的 Gemma 8B 模型:只有 2200 万个参数可训练,85 亿个参数保持冻结状态。
LoRA 非常流行。它甚至已作为单行 API 进入 Keras 等主流 ML 框架:
<code>gemma.backbone.enable_lora(rank=8)</code>
但是 LoRA 是最好的吗?研究人员一直在努力改进该公式。实际上,选择较小的“适配器”矩阵的方法有很多种。由于它们大多数巧妙地利用了矩阵的奇异值分解 (SVD),让我们暂停一下,进行一些数学运算。
SVD 是理解矩阵结构的一个好工具。该技术将矩阵分解为三个:W = USVT,其中 U 和 V 是正交的(即基变换),S 是排序的奇异值的对角矩阵。这种分解总是存在的。
在“教科书式”SVD 中,U 和 V 是方阵,而 S 是一个矩形矩阵,对角线上是奇异值,后面是零。实际上,您可以使用方阵 S 和矩形 U 或 V——参见图片——截断的部分只是乘以零。这种“经济型”SVD 是常用库(例如 numpy.linalg.svd)中使用的。
那么我们如何利用这一点更有效地选择要训练的权重呢?让我们快速浏览五种最近基于 SVD 的低秩微调技术,并附带注释说明。
LoRA 最简单的替代方法是对模型的权重矩阵使用 SVD,然后直接微调奇异值。奇怪的是,这是最新的技术,称为 SVF,发表在 Transformers² 论文中 (arxiv.org/abs/2501.06252v2)。
SVF 在参数方面比 LoRA 经济得多。此外,它使微调模型具有可组合性。有关这方面的更多信息,请参见此处我的 Transformers² 说明,但是组合两个 SVF 微调模型只是一个加法运算:
如果您需要更多可训练参数,SVFT 论文 (arxiv.org/abs/2405.19597) 探讨了多种方法,首先是在对角线上添加更多可训练权重。
它还评估了其他多种替代方案,例如将它们随机分散到“M”矩阵中。
更重要的是,SVFT 论文证实,拥有比对角线更多的可训练值是有用的。请参见下面的微调结果。
接下来是几种将奇异值分成两组“大”和“小”的技术。但在我们继续之前,让我们暂停一下,进行更多 SVD 数学运算。
SVD 通常被视为分解成三个矩阵 W=USVT,但它也可以被认为是许多秩 1 矩阵的加权和,由奇异值加权:
如果您想证明这一点,请一方面使用 USVT 形式和矩阵乘法的公式来表达单个矩阵元素 Wjk,另一方面使用 Σ siuiviT 形式,使用 S 是对角线的事实进行简化,并注意它是一样的。
在此表示中,很容易看出您可以将总和分成两部分。并且由于您可以始终对奇异值进行排序,因此您可以将其分成“大”和“小”奇异值。
回到三矩阵形式 W=USVT,这就是分割的样子:
基于此公式,两篇论文探讨了如果您只调整大的奇异值或只调整小的奇异值会发生什么,即 PiSSA 和 MiLoRA。
PiSSA(主奇异值和奇异向量自适应,arxiv.org/abs/2404.02948)声称您应该只调整大的主值。机制如下所示:
摘自论文:“PiSSA 旨在通过调整主要奇异分量来近似完全微调,这些分量被认为捕捉了权重矩阵的本质。相反,MiLoRA 旨在适应新任务,同时最大限度地保留基础模型的知识。”
PiSSA 论文还有一个有趣的发现:完全微调容易过度拟合。使用低秩微调技术,您可能会在绝对值上获得更好的结果。
另一方面,MiLoRA(次要奇异分量 LoRA arxiv.org/abs/2406.09044)声称您应该只调整小的主值。它使用与 PiSSA 类似的机制:
令人惊讶的是,MiLoRA 似乎占据了上风,至少在微调数学数据集时是这样,这些数据集可能与原始预训练相当一致。可以说,PiSSA 应该更适合将 LLM 的行为从其预训练中进一步弯曲。
最后,我想提到 LoRA-XS (arxiv.org/abs/2405.17604)。与 PiSSA 非常相似,但机制略有不同。它还显示出比 LoRA 少得多的参数也能获得良好的结果。
该论文提供了数学解释,说明在两种情况下这种设置是“理想的”:
在我看来,两者都值得怀疑,所以我不会详细介绍数学。一些结果:
根本假设似乎是奇异值分为“大”和“小”两种,但事实是这样吗?我在 Colab 上快速检查了 Gemma2 9B。底线:99% 的奇异值在 0.1 – 1.1 范围内。我不确定将它们分成“大”和“小”是否有意义。
还有许多其他参数高效的微调技术。值得一提的是:
我的结论:为了超越具有 10 倍参数的 LoRA 标准,我喜欢 Transformers² 的 SVF 的简单性。如果您需要更多可训练权重,SVFT 是一种简单的扩展。两者都使用所有奇异值(全秩,无奇异值修剪),并且仍然很便宜?。祝您微调愉快!
注意:所有插图均由作者创作或从 arxiv.org 论文中提取,用于评论和讨论。
以上是您是否仍在使用Lora来微调LLM?的详细内容。更多信息请关注PHP中文网其他相关文章!