Low-rank Adaptation (LoRA) 是用于在您自己的数据上微调专门化的大型语言模型 (LLM) 最简单的技术。最近的研究训练了数百个 LoRA 模型,得出了四个关键的结论...
简而言之:LoRA 最适合狭窄/不太复杂的任务,在这些任务中,LoRA 微调一致性地击败了 GPT-4。Mistral/Zephyr 是 LoRA 的最佳基础模型,而且通常较大的模型更好(例如,7B > 2B)。
什么是 LoRA?当我们微调一个语言模型时,我们会修改模型的底层参数。LoRA 背后的核心思想是通过低秩分解来模拟对模型参数的更新,在实践中实现为一对线性投影。LoRA 保留预训练的层不变,并在每个被调整的层(即 LLM 中的注意力层的线性投影)注入一个可训练的秩分解矩阵。
LoRA 的好处有很多:
- 一个单一的预训练模型可以由几个(小得多的)LoRA 模块共享,这些模块适应它们以解决不同的任务,这简化了部署和托管过程。
- LoRA 模块可以“烘焙”到预训练模型的权重中,避免额外的推理延迟,我们可以快速在不同的 LoRA 模块之间切换以解决不同的任务(即“热交换”)。
- 我们只需要为极少数参数维护优化器状态,这显著减少了内存开销,并允许在更适度的硬件上进行微调。
- 使用 LoRA 进行微调明显快于端到端微调(即 GPT-3 的情况下大约快 25%)。
LoRA Land。Predibase 的最近一篇论文训练了大量的 LoRA 模块,旨在提供标准化和全面的微调分析。他们考虑了 10 个基础模型(+ GPT-3.5/4)和 31 个不同的任务(见上文),因此总共训练了 310 个 LoRA 模型。这些模型的分析得出了四个简单而重要的结论。
(1)通过 LoRA 进行微调提供了大量且一致的性能提升:301/310 模型在使用 LoRA 进行微调后超过了基础模型的性能。224/310 模型在使用 LoRA 进行微调后超越了 GPT-4 的性能。值得注意的是,GPT-4 使用简单的零次/单次提示策略,通过提示工程可以实现更好的性能。
(2)Mistral 和 Zephyr 是 LoRA 最好的基础模型:Mistral-7B 在 10/31 个任务中表现最佳(任何模型中最多),而 Zephyr-7B-beta 则拥有最高的整体平均性能。
(3)大小很重要!7B 型号的变体(例如 Mistral 和 Zephyr)始终优于 2B 型号的变体(例如 Gemma 和 Phi)。这一发现适用于 29/31 个任务!
(4)任务类型很重要!通过 LoRA 进行微调最适合狭窄、定义清晰的任务(例如,分类),而 GPT-4 最擅长更广泛和复杂的任务(例如,MMLU 或 HumanEval)。有趣的是,作者在论文中展示了简单的数据启发式(例如,可压缩性或输入/输出长度)可以与微调性能相关联。
换句话说,LoRA 最适合不太复杂的任务,而 GPT-4 更适合更难的任务。我们可以推导出与任务复杂性密切相关的简单数据启发式,从而帮助我们预测 LoRA 是否适合某个特定任务!