引言
本文深入探讨了当前主流大模型高效微调方法——低秩适应(LoRA)。在代码编程、数学推理两个领域,对比了LoRA和全微调在不同数据规模下的性能。结果表明:LoRA在大多数情况下性能不如全微调,但作为一种正则化手段,LoRA能够保证在源领域上的性能(遗忘问题),并减少对新任务的学习成本。最后作者还给出了使用LoRA的最佳实践,来方便大家更有效地利用LoRA进行大模型微调。
https://arxiv.org/pdf/2405.09673
当前大型语言模型(LLMs)基本上都数十亿的权重参数,对该类模型进行微调需要大量的GPU内存,那么在GPU内存有限的情况下如何对大模型进行微调呢?为此,研究人员们提出了一些参数高效微调方法(「Parameter-Efficient Fine-Tuning,PEFT)」,旨在减少模型训练期间的内存占用。例如:Adapter Tuning、Prefix Tuning、LoRA等。
其中低秩适配(Low-Rank Adaptation, LoRA) 是一种特定的参数高效微调方法,它通过训练选定权重矩阵的低秩扰动来实现。自从LoRA被提出以来,一直被认为是一种优秀的模型微调方法,它不仅能够提升模型训练效率,而且还能在新的目标任务中保证较高的准确性。
尽管LoRA被广泛认为是有效的,但与全参数微调相比,当前只有少数研究对大型参数化的LLMs进行了基准测试,并且实验结果各不相同。除此之外,有些研究成果主要依赖较老的模型和评估基准,在代码生成等方面,LoRA表现出不如完全微调的情况。为此,本文作者提出了两个问题:
针对以上两个问题,本文作者在代码生成、数学推理这两个应用领域中,对Llama-2 7B/13B模型进行了LoRA和全量微调的严格比较。在每个领域内,作者探讨了两种不同的训练方案:「指令微调」(Instruction Finetuning, IFT)和****(Continued Pretraining, CPT);并采用「目标领域性能」和「源领域遗忘性能」来进行评估。其中:
「指令微调」 是一种常见的微调方法,特别适用于LoRA。这种方法涉及使用QA问答数据集,这些数据集包含数千万到数亿个token。在IFT中,模型通过这些指令性的数据对来进行训练,目的是让模型学习如何根据给定的指令或问题生成正确的答案或解决方案。
数据集方面,在编程领域,作者采用了「Magicoder-Evol-Instruct-110K」数据集,该数据集包含编程问题及其解决方案,用于训练和评估模型在编程任务上的性能;在数学领域,作者采用了「MetaMathQA」,该数据集包含数学问题及其解答,用于训练和评估模型在解决数学问题上的能力。
「持续预训练」 是一种较少见的训练机制,它涉及在数十亿未标记的token上进行训练。与IFT不同,CPT不依赖于QA问答对,而是使用大量未结构化的文本数据来继续训练模型。这种方法的目标是让模型吸收更广泛的语言知识和模式,从而提高其在特定任务上的性能。
数据集方面,在编程领域,作者采用了「StarCoder-Python」数据集,该数据集包含来自GitHub的Python代码库,提供了大量的编程语言实例;在数学领域,作者采用「OpenWebMath」数据集,该数据集包含从互联网上抓取的数学网页内容,包含了大量的数学表达式和概念。
「目标领域性能」 旨在评估模型微调后的下游任务性能,在编程领域方面,作者采用「HumanEval」基准测试集,在数学领域,作者采用「GSM8K」基准测试集。
「源领域遗忘性能」 旨在评估模型微调后的遗忘问题,作者在语言理解、世界知识和常识推理任务等三个方面进行评估,使用的数据集分别为:「HellaSwag」、「WinoGrande」、「ARC-Challenge」。
如下图所示,在编程领域,LoRA显著落后于全参数微调;然而在数学领域,LoRA缩小了与全参数微调的差距,尽管需要更长的训练时间
LoRA比全量微调遗忘更少,尤其在编程领域更为明显。在代码CPT中,LoRA的遗忘曲线基本保持不变,而全量微调随着数据量增加而退化。在编程IFT中,两种方法随训练轮数增加都会退化,但LoRA表现更好。在数学CPT中,LoRA和全量微调都没有明显的遗忘,而在数学IFT中,LoRA的遗忘也比全量微调少。
如下图所示,LoRA提供了比注意力dropout和权重衰减更强的正则化效果。LoRA微调(绿色)会产生较少的学习(以HumanEval上的准确率衡量,左侧)和较少的遗忘(以HellaSwag、ARC和WinoGrande衡量,右侧)。
「1、选择目标模块」:选择“所有”(Attention、MLP)模块进行LoRA微调通常比仅针对单一模块(如仅Attention或仅MLP)更有效。并且通常较高的秩(例如256)比较低的秩(例如16)表现更好。
「2、学习率」:LoRA对学习率非常敏感。LoRA的最佳学习率比全参数微调的学习率要高一个数量级。因此,进行详尽的学习率搜索以找到LoRA训练中最高的稳定学习率是至关重要的。
「3、秩的选择」:在LoRA配置中,秩的选择会影响性能和内存需求之间的权衡。较低的秩是一个在性能和准确性之间取得良好平衡的选择,尤其是当内存资源有限时。
「4、训练时长」:建议至少进行四轮的微调,因为实验表明,即使在更长的训练时间内,LoRA也能保持其正则化特性,而不会显著增加遗忘。