什么场景需要后训练
1. 若仅需模型遵循少量指令(如回避敏感话题或禁止公司间比较),通过提示工程即可实现,但该方法虽简单却不够稳定
2. 如需查询实时数据库,检索增强生成或基于搜索的方法可能更适用
3. 创建领域专用模型(如医疗或网络安全语言模型)时,通常需要持续预训练结合标准后训练,先让模型学习领域知识(至少需10亿标记),再学习用户交互
4. 当需要严格遵循20条以上指令,或提升特定能力(如构建强SQL模型、函数调用模型或推理模型)时,后训练最能发挥价值——它能可靠改变模型行为并提升目标能力,但若实施不当可能导致其他未训练能力退化
SFT
监督式微调(Supervised Fine Tuning),一种把通用语言模型转换成任务型助手的方法。通过训练提示与理想回应的成对数据,模型学会模仿示例中的回答,从而能够按照指令行事、展示期望的行为并正确调用工具。
核心是让基础模型(只根据提示预测下一个 token)学会生成预期的回答。
基础模型:未经调整的 LLM 往往会给出泛泛或重复的回应,例如面对“你是谁?”这样的询问,它可能只是反问一句,而不是回答。
带标签的数据集:收集并整理用户提示与理想指令回应的配对,例如“请告诉我你的身份——我是 Llama…”、“你最近怎么样?——我很好!”。对这些配对进行微调,通过最小化回应的交叉熵损失来训练模型:,这一损失鼓励模型最大化在每个提示条件下生成目标回应的概率。
微调后的模型:完成训练后,模型可以针对新的查询给出合适的回复。
最佳使用场景
激发新的模型行为:将预训练模型转变为能遵循指令的助理。让不具备推理能力的模型学会基本推理。让模型在没有明确说明的情况下使用特定工具。
提升模型能力:利用强大的大模型生成高质量的合成数据,通过训练把这些能力“蒸馏”到小模型中。
数据准备
SFT 的效果高度依赖于数据质量。优质且多样的样本能让模型学到有用的行为;劣质样本则会让模型模仿不良习惯。
蒸馏:用更强的指令模型生成回复,再训练小模型去模仿这些回复,把强模型的能力迁移到弱模型上。
Best of K / 拒绝采样:同一提示生成多个候选回复,用奖励函数选出最好的作为训练数据。
过滤:从SFT 数据集中挑选出回应质量高且提示多样性的样本,形成精简的高质量数据集。
微调方法
全参数微调:对每一层加入一个完整的权重更新矩阵 ΔW ,即修改所有参数。这可以显著提升性能,但需要大量存储和计算资源。
参数高效微调:例如 LoRA(低秩适配)通过在每层引入小的低秩矩阵 A 和 B 来调整模型参数。这减少了可训练参数的数量,节省显存,缺点是学习和遗忘都更有限,因为更新的参数更少。
这两种策略可以与任何训练方法结合。根据资源约束和性能要求,你可以选择全微调或参数高效微调。后者在硬件条件有限的情况下尤为受欢迎。
DPO
一种离线强化学习,直接偏好优化被视为一种从正面和负面回复中进行对比学习的方法。
和监督微调一样,我们可以从任何大语言模型开始(通常建议使用指令微调大语言模型,这种模型已经可以回答用户的一些基本问题。比如用户问:“你是谁?”,模型回答说:“我是Llama”。在这种情况下,我们希望通过整理标注员准备的一些对比数据来改变模型身份。(这样的标注员可以是人工标注员,甚至也可以是一些基于模型的标注员,他们为我们整理数据集。)
这时,用户可能会问“告诉我你的身份”,我们至少需要准备两个回复,以便使直接偏好优化(DPO)起作用。 我们可以准备一个回答说“我是Athene”,另一个回答说“我是大语言模型”。其中“我是Athene”被标记为首选回答,而“我是大语言模型”被标记为次选回答。通过这种方式,当模型回答与身份相关的问题时,我们试图促使它说“我是Athene”而非“我是大语言模型”。收集到这类对比数据后,就可以使用准备好的数据在这个语言模型上执行直接偏好优化(DPO)。
在本节课中,我们很快就会深入探讨这个损失函数。 在大语言模型上执行直接偏好优化(DPO)后,我们将得到一个经过微调的大语言模型(LLM),希望它能从正向和负向样本中学习,它会尝试模仿偏好的样本,如果用户进一步询问“你是谁?”,希望助手回答“我是Athene”而不是“我是Llama”,使用这种直接偏好优化方法改变模型的身份。
DPO损失函数,某个对数差值的sigmoid函数的负对数,其中 σ 实际上就是sigmoid函数,而 β 是一个非常重要的超参数,我们可以在DPO的训练过程中对其进行调整。 β 值越高,这个对数差值就越重要。在这个大括号内,我们有两个对数差值,分别关注正样本和负样本。
首先,有两个概率比值的对数。分子即 π_θ ,是一个微调后的模型。这里我们关注的是,对于微调后的模型,在给定提示的情况下,产生正面回复的概率是多少。分母是一个参考模型,它是原始模型的副本,权重固定,不可调整。只关注原始模型在给定提示的情况下,产生那些正面回复的概率。同样,对于负样本,我们也有对数比值,其中 π_θ 是你微调后的模型, θ 是你在这里想要调整的参数。而 π 是一个固定的参考模型,可以是原始模型的副本。
本质上,这个对数比值项可以被看作是奖励模型的重新参数化。如果你将其视为奖励模型,那么这个DPO损失实际上就是正样本和负样本之间奖励差异的sigmoid函数。本质上,DPO试图最大化正样本的奖励,并最小化负样本的奖励。关于为什么这样的对数比值可以被视为这种奖励模型的重新参数化的详细信息,我建议阅读原始DPO论文,在那里找到详细内容。
直接偏好优化(DPO)最佳用例 ,改变模型行为,当想对模型响应进行小的修改时,直接偏好优化(DPO)非常有效。这包括改变模型特性,或使模型在多语言响应、指令遵循能力方面表现更好,或者改变模型一些与安全相关的响应。
提升模型能力。由于直接偏好优化(DPO)能够同时看到好样本和坏样本的对比特性,在提升模型能力方面,它可能比监督微调(SFT)更有效,特别是当你能使直接偏好优化(DPO)实现对齐时,对提升能力来说效果甚至会更好。这里有一些用于直接偏好优化(DPO)的数据整理原则,有几种常见的方法可用于高质量的DPO数据整理。
一、校正方法,通常可以从原始模型生成回复,将该回复作为一个主动样本,然后进行一些改进,使其成为一个正向回复。在这种情况下,一个最简单的例子是改变模型的身份,你可以从当前模型自身生成的一个负面例子开始,比如对于“你是谁?”这样的问题,模型可能会说“我是Llama”。 你可以直接进行修改,并用你想要的任何模型身份替换这个Llama。在这种情况下,对于同样的问题,我们希望模型说“我是Athene”,所以我们将这个回复设为正向的。通过这种方式,你可以使用这种基于纠正的方法,自动创建大规模、高质量的对比数据,用于DPO的训练。
二、在线或策略内DPO的一种特殊情况。在这种情况下,你希望从模型自身的分布中生成正向和负向示例。 实际上,你可以针对同一个提示,从你想要微调的当前模型中生成多个回复,然后你可以收集最佳回复作为正样本,最差回复作为负样本。之后你再判断哪个回复更好,哪个回复更差。你可以使用一些奖励函数或人工判断来完成这项工作。
另外,可能需要注意的第二点是在直接偏好优化(DPO)过程中避免过拟合。因为直接偏好优化本质上是在进行某种奖励学习,它很容易过度拟合到一些捷径上。与非首选答案相比,其中一个首选答案可能有一些捷径可学。 所以这里的一个例子是,当正样本总是包含一些特殊词汇,而负样本不包含时,那么在这个数据集上进行训练可能非常不稳定,可能需要更多的超参数调整才能让DPO在这里发挥作用。
在线强化学习
在线强化学习通常让模型自主探索更好的响应。 其典型流程如下:
准备一批 Prompt(输入提示);
将这些 Prompt 输入语言模型;
模型生成对应的 Response;
将 (prompt, response) 对送入 奖励函数(Reward Function);
奖励函数为每对 (prompt, response) 打分;
获得 (prompt, response, reward) 三元组;
使用这些数据来更新语言模型。
模型更新可采用不同方法,目前主要有PPO(Proximal Policy Optimization)和 GRPO(Group Relative Policy Optimization)
奖励函数
训练好的奖励模型(Reward Model)
收集多个模型响应,由人类进行偏好标注(选择更优的响应)。
使用这些人类偏好数据训练奖励模型。
奖励模型通过优化损失函数学习:L=log(σ(r_j-r_k)),若人类认为响应 j 优于 k,则鼓励模型提升$r_j$,降低$r_k$。
特点:
通常基于已有的 Instruct 模型初始化;
通过大规模人类或机器生成偏好数据训练;
可应用于开放式任务,如聊天能力、安全性提升等;
但在“正确性导向”的任务(如代码、数学、函数调用)中可能不够精确。
可验证奖励(Verifiable Reward)
在“正确性导向”场景中,更推荐使用可验证奖励:
数学任务:验证模型输出是否与标准答案匹配。
编程任务:通过 单元测试(Unit Tests) 检验代码执行结果是否正确。
特点:
需提前准备真值(Ground Truth)或测试集;
准备成本较高,但奖励信号更精确可靠;
更适合训练推理类模型(Reasoning Models),如代码、数学领域。
PPO(Proximal Policy Optimization)
第一代 ChatGPT 所使用的在线强化学习算法。工作流程:
输入一组查询(queries) ( q );
通过 策略模型(Policy Model)(即语言模型本身)生成响应;
响应被送入以下模块:
参考模型(Reference Model):计算 KL 散度,限制模型不偏离原始分布;
奖励模型(Reward Model):计算奖励;
价值模型(Value Model) 或 评论者模型(Critic Model):为每个 Token 分配价值。
使用 广义优势估计(Generalized Advantage Estimation, GAE) 来计算每个 Token 的 优势函数(Advantage),反映该 Token 的贡献。
PPO 的目标函数:
每个 Token 拥有独立的优势值;反馈粒度更细;但需额外训练价值模型 → 占用更多 GPU 内存。
GRPO(Group Relative Policy Optimization)
由 DeepSeek 提出,用于优化大型语言模型的推理能力。工作流程:
对每个 Prompt,模型生成多个响应 ( O_1,O_2,...,O_g );
对每个响应计算:
奖励(Reward)
与参考模型的 KL 散度;
对同一组(Group)响应计算相对奖励(Relative Reward);
将相对奖励作为整个响应的优势值;
使用此优势更新策略模型。
主要区别:
不再需要价值模型(Value Model);
所有 Token 在同一响应中共享相同优势值;
更节省显存,但优势估计较粗糙。
特征 | PPO | GRPO |
优势估计 | 基于价值模型(Value Model)的精细估计 | 基于响应组的相对奖励(Relative Reward) |
计算粒度 | 每个Token拥有独立优势 | 整个响应共享同一优势 |
显存需求 | 较高(需训练Critic) | 较低(无Critic) |
样本效率 | 高(样本利用率好) | 较低(需更多样本) |
奖励适配 | 适合连续或模型化奖励 | 适合二元/可验证奖励 |
应用场景 | 聊天、对齐、安全优化 | 数学、代码、推理任务 |
参考:
https://github.com/datawhalechina/post-training-of-llms