传统微调方法(如下图所示)对于大语言模型而言并不可行,因为这些模型具有数百亿甚至千亿的参数量,而且显存需求高达数百GB,并非所有人都能获得如此规模的计算资源。
但如今,我们拥有多种优化大语言模型的微调方法,下图展示了五种主流技术:
1. LoRA(Low-Rank Adaptation)
LoRA 通过引入两个低秩矩阵 A(降维)和 B(升维)来微调预训练模型,仅训练这两个小矩阵,而冻结原始权重 W。这样可以大幅减少训练参数(如仅调整 0.1% 的参数),同时保持接近全量微调的性能。
将两个低秩矩阵A和B与权重矩阵叠加,这些权重矩阵包含可训练参数。不对W进行微调,而是调整这些低秩矩阵中的权重。
2. LoRA-FA(LoRA with Frozen-A)
LoRA-FA 是 LoRA 的改进版,冻结矩阵 A,仅训练矩阵 B,从而进一步减少激活内存需求(降低 1.4 倍),同时保持性能接近 LoRA。
虽然LoRA显著减少了训练参数的总量,但仍需大量激活内存来更新低秩权重。LoRA-FA(FA代表Frozen-A)通过冻结矩阵A并仅更新矩阵B来解决这一问题。
3. VeRA(Vector-based Random Matrix Adaptation)
在 LoRA 中,每一层都有一对不同的低秩矩阵A和B,且这两个矩阵都参与训练。然而在VeRA中,VeRA 采用共享随机矩阵 A 和 B,并引入可训练的缩放向量 d 和 b,使可训练参数比 LoRA 减少 10 倍以上,适用于低资源场景。VeRA的核心思想是学习微小的、特定于各层的缩放向量(记为b和d),这些向量是唯一可训练的参数。
4. Delta-LoRA
除了训练低秩矩阵外,矩阵W也会被调整,但并非采用传统方式。而是将连续两个训练步骤中低秩矩阵A与B乘积的差值(或增量)叠加到W上,从而增强表达能力,同时不增加额外计算成本:
5. LoRA+
在LoRA中,矩阵A和B均采用相同的学习率进行更新。研究者发现,为矩阵B设置更高的学习率能实现更优的收敛效果,提高训练效率,可加速训练,同时小幅提升准确率。
总结
技术 | 核心改进 | 训练参数 | 内存优化 | 性能表现 | 适用场景 |
---|---|---|---|---|---|
LoRA | 引入低秩矩阵 A、B 微调,冻结 W | 较少(~0.1% 参数) | 中等 | 接近全量微调 | 通用微调 |
LoRA-FA | 冻结 A,仅训练 B | 更少(比 LoRA 减半) | 高 | 接近 LoRA | 低显存设备 |
VeRA | 共享随机 A、B,训练缩放向量 d、b | 极少(比 LoRA 少 10 倍) | 最高 | 略低于 LoRA | 超低参数微调 |
Delta-LoRA | 通过 BA 的梯度更新 W | 较多(额外调整 W) | 中等 | 优于 LoRA | 高精度微调 |
LoRA+ | A、B 采用不同学习率(B 更高) | 同 LoRA | 中等 | 略优于 LoRA | 快速微调 |
-
LoRA 是最基础的版本,适用于大多数微调任务。
-
LoRA-FA 适合显存受限的环境。
-
VeRA 参数效率最高,适合超低资源场景。
-
Delta-LoRA 增强表达能力,适合需要更高精度的任务。
-
LoRA+ 优化训练速度,适合快速迭代。