【AI大模型】揭秘监督微调(SFT):语言模型性能跃升的秘密武器!
【AI大模型】揭秘监督微调(SFT):语言模型性能跃升的秘密武器!
大型语言模型(LLMs)的训练通常分为多个阶段,包括预训练和后续的微调阶段。虽然预训练成本高昂(通常需要数百万美元的计算资源),但相比之下,微调一个LLM或通过上下文学习进行适配的成本要低得多,仅需几百美元甚至更少。随着高质量的预训练模型(如 MPT、Falcon 或 LLAMA-2)的广泛可用,并且许多可以免费甚至商业化使用,我们能够通过在特定任务上微调这些模型,快速构建功能强大的应用。这种方法不仅经济高效,还显著降低了开发复杂AI系统的门槛。
在人工智能研究的最新进展中,监督微调(SFT)已成为大型语言模型(LLMs)最广泛应用的微调方法之一。SFT 的核心是利用一个高质量的数据集(通常是 LLM 输出的精挑细选内容),通过标准语言建模目标对模型进行微调。这种方法以其简单性和低成本著称,作为校准语言模型的有效工具,迅速在开源LLM研究社区以及更广泛的应用领域中流行开来。
语言模型的基础知识
语言模型是理解SFT的基础。语言模型是一种能够预测给定文本序列中下一个词的概率的模型。在深度学习领域,Transformer架构因其出色的性能和并行计算能力而成为主流选择。语言模型的训练过程通常分为三个阶段:
- 预训练:这是训练过程中计算量最大的步骤,模型通过大量无标注文本数据学习语言的统计规律。
- 对齐:通过监督微调(SFT)和基于人类反馈的强化学习(RLHF)对模型进行调整,使其输出更符合人类期望。
- 微调:在特定任务或领域上进一步优化模型性能。
监督微调(SFT)的工作原理
监督微调(SFT)是LLMs对齐过程中的第一个训练步骤,实际上非常简单。首先,我们需要整理一个高质量的LLM输出数据集——这些基本上只是LLM正确运行的例子。然后,我们直接根据这些示例对模型进行微调。在这里,微调的“监督”方面来自于这样一个事实:我们正在收集模型应该模拟的示例数据集。然后,模型在微调期间学习复制这些示例的样式。
与下一个标记预测的关系:有趣的是,SFT 与语言模型预训练没有太大区别——预训练和 SFT 都使用下一个 token 预测作为其基本训练目标!主要区别在于所使用的数据。在预训练过程中,我们使用大量原始文本数据来训练模型。相比之下,SFT 使用高质量LLM输出的监督数据集。在每次训练迭代期间,我们都会对几个示例进行采样,然后使用下一个标记预测目标在此数据上微调模型。通常,下一个标记预测目标仅应用于每个示例中与LLM输出相对应的部分(例如上图中的响应)。
SFT的优势与局限性
SFT 使用简单——训练过程和目标与预训练非常相似。另外,该方法在执行对齐方面非常有效,并且相对于预训练而言,计算成本低廉(即便宜100X,甚至更多)。
然而,SFT也存在一些局限性:
创建数据集:SFT 的结果在很大程度上取决于我们管理的数据集。如果该数据集包含一组不同的示例,可以准确捕获所有相关的对齐标准并表征语言模型的预期输出,那么 SFT 是一种很好的方法。然而,我们如何保证用于 SFT 的数据集全面捕获我们在对齐过程中想要鼓励的所有行为?这只能通过仔细的手动检查数据来保证,这i)不可扩展,并且ii)通常很昂贵。作为替代方案,最近的研究探索了为 SFT 生成数据集的自动化框架(例如,自我指导[12];见上文),但无法保证数据的质量。因此,SFT 尽管很简单,但需要管理高质量的数据集,而这可能很困难。
添加 RLHF 是有益的:即使在为 SFT 策划了高质量的数据集之后,最近的研究表明,通过执行 RLHF 可以获得进一步的好处。换句话说,仅通过 SFT 微调语言模型是不够的。这一发现在最近的LLaMA-2 [5] 出版物中尤为明显,该出版物通过 SFT 和 RLHF 进行对齐;见上文。对于 SFT,LLaMA-2 使用大量(总共 27,540 个示例)对话会话数据集,这些数据集是手动策划的,以确保质量和多样性。尽管 SFT 使用了大量高质量的数据源,但进一步执行 RLHF 在有用性和安全性方面产生了巨大的好处(即 LLaMA-2 的对齐标准);见下文。此外,作者指出,执行 SFT 后,语言模型能够生成与人类编写的对话质量相似的对话会话。因此,为 SFT 创建更多数据带来的好处较少,因为我们可以使用模型本身自动为 SFT 生成更多数据。
SFT的实践应用
在实践中,我们可以使用 SFT 训练LLM的最佳工具之一是Transformer Reinforcement Learning (TRL) Python 库,它包含 SFT 的实现,可用于微调现有的语言模型,只需使用几行代码。
执行 SFT:TRL 构建在HuggingFace 转换器库之上,可以使用上面显示的代码通过 SFT训练语言模型(在本例中为 Meta 的OPT 模型)。这个简单的例子展示了通过 SFT 训练模型是多么容易!由于简单性,通过 SFT 微调模型在开源LLM研究社区中非常受欢迎。快速访问Open LLM排行榜将向我们展示一系列有趣的例子。使用 SFT 微调预训练的LLM是目前训练开源LLMs最简单、最有效的方法之一。
除了 SFT 的基本定义之外,我们可能还想使用一些有用的(并且更先进的)技术,例如仅对模型响应应用监督(而不是完整的对话或示例),通过共享来增强所有响应示例提示模板,甚至采用参数有效微调(PEFT)方法(例如LoRA[13])。有趣的是,TRL 定义的 SFTTrainer 类具有足够的适应性和可扩展性,足以处理每种情况。有关实施的更多详细信息,请参阅下面的链接。
结论
SFT 对于人工智能从业者来说是一个强大的工具,因为它可用于以数据有效的方式将语言模型与某些人类定义的目标保持一致。虽然通过 RLHF 可以获得更多好处,但 SFT 使用简单(即与预训练非常相似)、计算成本低且高效。这些特性使得 SFT 在开源LLM研究社区中得到广泛采用,几乎每天都会训练(使用 SFT)并发布各种新模型。如果能够访问高质量的基础模型(例如 LLaMA-2),我们可以通过 SFT 高效、轻松地微调这些模型,以处理各种不同的用例。