LLM 算法工程师的速成指南：微调、强化学习微调与偏好微调

OpenAI 近期在直播中，提到了两个新的概念 ：
①强化学习微调（Reinforcement Fine-Tuning）：仅需少量高质量数据（数十到数千个），模型即可通过强化学习处理复杂任务。
②偏好微调 (Preference Fine-Tuning, PFT) ：采用直接偏好优化 (例如Direct Preference Optimization, DPO) 算法，通过比较不同的模型输出，让 AI 能够学习并区分 “更好” 的回复，从而在语气、风格、创造性等主观性任务上表现更出色。

在解释这些概念之前，让我们先理解一下：
一、微调（Fine-tuning）：
（1）什么是微调？
我们可以将现在使用的大语言模型想象成一座巨大的图书馆，蕴藏着海量知识。
之前大家所熟知的是，提示词工程（Prompt Engineering）：在提示词中加入指令，有时也会加入一些示例(few shots)。这种通过演示引导模型完成任务的方法，被称为“少样本学习”（few-shot learning）。
微调，则是在“少样本学习”基础上的进一步提升。具体而言，我们会使用特定领域的数据来训练模型，从而使其在特定领域上表现得更加出色。换言之，微调是对模型进行针对性的“特训”，使其更好地适应特定场景。
与直接使用提示词相比，微调具有以下优势：
- (在目标领域)效果更佳： 微调后的模型能输出更高质量的结果。
- 训练数据更多：  如果采用 few-shots 的方法，因为模型的上下文窗口限制，无法放下太多的数据，而且有很多相关研究发现模型在超长 context length 下的表现可能不如短上下文。同时，微调可以使用的数据量是不受限制的。
- 更省 Token： 微调后，提示词可以更短，从而节省 token。
- 回复速度更快： 更短的提示词意味着更快的回复速度（主要是减少 prefill 时间）。

（2）什么时候该用微调？
微调能让模型在特定应用场景中表现更出色，但需要投入更多时间和精力，还有训歪的风险。因此我们还是应该首先尝试：提示词工程（Prompt Engineering），或者用 prompt 组成一些复杂的工作流。另外函数调用（Function Calling）可能也是一个选项，但效果可能不会太好。
一般来说，以下情况下，可以考虑使用微调：
- 提示词效果不理想： 即使反复调整提示词，模型仍然无法很好地完成任务。
- 需要大量训练数据： 如果有大量特定领域的训练数据，而提示词无法容纳，则微调是更佳选择。
- 需要更快响应和更少 Token： 微调可以帮助缩短提示词，从而提高回复速度并减少 token 消耗。

二、强化学习微调（Reinforcement Fine-Tuning）：
强化学习微调只需要少量（数十至数千个）高质量数据，就能使模型通过强化学习处理目标领域的复杂任务。
它的目标是训练模型学会推理过程，而不仅仅是记住答案，从而提高模型的泛化能力和专业水平。
- 少量高质量数据驱动：RFT 的核心优势在于仅需少量高质量数据即可显著提升模型性能，比 SFT 的数据效率要高。
- 强化学习算法：RFT 采用强化学习算法，通过对模型输出的答案进行评分，并强化正确的推理路径，引导模型的学习。
- 提升推理能力： RFT 不仅仅是让模型模仿输入，而是训练模型如何在特定领域进行推理，这使得模型在解决相似问题时，能够更加灵活和准确。它是在训练模型学习如何思考，而不仅仅是记住答案。
- 适用于专业领域： RFT 特别适合于需要专业知识的领域，如法律、金融、工程、保险等，这些领域通常有明确的正确答案，并且需要复杂的推理过程。
- 与 SFT 的区别： 与传统的监督式微调（SFT）不同，RFT 更侧重于训练模型的推理能力，而不是简单地记忆训练数据。 RFT 可以被看作是对 SFT 的一种补充和改进，它将强化学习的优势融入到了模型微调的过程中。
总结来说：RFT 不仅仅是简单的微调，更是一种训练模型思考和推理的方法。可以将其视为一个“特训班”，通过少量高质量案例和强化学习，让模型成为特定领域的专家，而不仅仅是“复读机”。
（这里可以参考 24 年初的一篇论文：REFT: Reasoning with REinforced Fine-Tuning）
SFT和ReFT在CoT替代方案存在时的比较：