跳转至

后训练学习

代码&讲稿地址

intro

  • 监督式微调 SFT supervised fine-tuning
  • 在有标记的问答对上训练模型学习如何遵循指令或者通过复现 “输入提示词 → 期望响应” 的对应关系,来(让 AI)学会使用工具。
  • 对于引入新行为特别有效或对模型进行重大修改
  • 直接偏好微调 DPO direct preference optimization
  • 通过展示好答案和坏答案来教导模型
  • 通过对比损失推动模型接近好的响应,远离坏的响应
  • 在线强化学习
  • 人类提供提示,模型产生响应,奖励函数对答案质量进行评分,模型根据奖励分数进行更新

    • 训练奖励模型的方式
    • 以人类对响应质量的判断开始,训练一个和人类判断一致的函数来打分
      • 近端策略优化 PPO proximal policy optimization
      • 可验证奖励 verifiable rewards
      • 适用有客观正确性度量的任务,例如数学和编程
      • 通过数学检查器或者单元测试来验证正确性
      • 这种客观对错构成奖励函数
  • 分组相对策略优化 GRPO grouped relative policy optimization

## introduction to post training

what

how

  • respond是模型应该回应的理想回复
  • 只对response的token进行训练

  • 在线强化学习
  • 让模型自己生成回复,并用奖励模型打分,使用奖励信号更新模型
  • 同时最大化prompt和response

  • 算法和数据的良好协同设计是成功后训练的重要因素
  • 评估套件用于跟踪模型性能确保模型表现良好

  • 改进任何一个基准都很容易,难的是不让其他领域的能力下降

when

  1. 特定领域大模型 :让模型先学知识,然后学会如何与用户交谈
  2. 严格遵循有限个指令或需要提升某个领域的能力

  3. 用于可靠地改变某个领域的能力,如果训练有误可能会降低其他没有训练的能力

basics of SFT

  • 经过预训练之后的LLM只有token补全的功能,即自回归的预测下一个token
  • 对于通过在标注数据上经过SFT之后的LLM,可以变成聊天助手等各种自定义用途

  • loss公式可以进一步地写成每个token生成概率的乘积的形式

SFT最佳用例

  • SFT需要模仿提供的所有数据,如果数据集中有低质量数据模型会被污染。所以质量大于数量

全量微调和参数高效微调

  • 节省大量内存、计算更高效
  • 学习到的更少,忘记的也更少
  • 这两种方法和后训练方法是并行的,可以兼容

SFT

  • 主要是学习输入数据的格式和知识,一般不用于调整风格
  • 通过在模板中添加prompt可以调整风格,会导致问答能力下降。容易答非所问

问题

tokenizer.chat_template = """

{% for message in messages %}

{% if message['role'] == 'system' %}System: {{ message['content'] }}\n

{% elif message['role'] == 'user' %}User: {{ message['content'] }}\n

{% elif message['role'] == 'assistant' %}Assistant: Meow~{{ message['content'] }}Meow~ <|endoftext|>

{% endif %}

{% endfor %}



"""
  • 这里的一个问题就是在模板格式中在加入固定字符Meow~后模型是否会看到和学习-
  • 不理解为啥不行,反正记住SFT从数据集中学习就行了。在模板中加东西没用

DPO

  • 一种对比学习方法
  • 通常使用一个指令型LLM作为起点
  • 贝塔越高代表这个对数差异越重要

  • 从模型本身收集同一个问题的多个响应,排序好坏响应
  • 避免模型学到正面响应的通用特征。比如都有一些特殊词等。如果这样的话这个数据集上的训练会非常脆弱

大模型后训练(SFT / DPO / 在线RL)核心总结:数据集 + 损失函数 共同决定训练效果

结合你聊的「句尾加meow风格」+ L4S参数调优场景,分模块梳理如下:

一、核心总论点

大模型后训练不是单一模块起作用,数据集构造方式损失函数设计两者强耦合,共同决定模型最终学到什么、会不会走捷径、泛化是否稳定。不同后训练算法,本质就是换了「损失函数」,同时对数据集的要求也随之改变。


二、分阶段拆解(SFT → DPO → 在线强化学习)

1. 监督微调 SFT

  1. 损失函数:标准逐Token交叉熵损失 特点:对整段序列每个字符一视同仁,长文本、主体内容占比高,损失贡献大;单个结尾风格Token(meow、L4S小参数)权重极低,容易被模型忽略。
  2. 数据集:单条「输入→输出」配对数据
  3. 两者结合的表现
  4. 优点:让模型学会基础格式、语义、句式,建立基础生成范式
  5. 短板:想单独优化「结尾风格、局部小特征」很难,纯SFT容易学不到细节;
  6. 对应你的场景:先用SFT把「句尾带meow」练成常规生成习惯,是后续优化的基础。

2. 直接偏好优化 DPO

  1. 损失函数:偏好对比损失 特点:不逐Token拟合,只对比「成对样本的优劣差异」,天然聚焦两组输出的不同点,非常适合优化风格、偏好、局部特征。
  2. 数据集:必须构造 (同输入,优回答 / 劣回答) 偏好对
  3. 两者耦合的关键问题(重点)
  4. 若数据集特征过于单一(所有正例=正文+固定meow,负例=纯正文): 损失会引导模型只识别「有没有meow」这个表面关键词,学捷径、模型极度脆弱,泛化差;
  5. 若数据集做多样化变体(不同标点、衔接语气,仅保留「句尾带meow」核心风格): 损失无法靠单一特征投机,模型才能真正学到风格,鲁棒性变强。
  6. 定位:轻量偏好对齐方案,训练稳定、无需额外奖励模型,承接在SFT之后做风格强化最合适。

3. 在线强化学习(后续进阶)

  1. 损失/优化目标:基于环境实时奖励(连续分值、吞吐量/延迟等量化指标) 特点:动态优化,目标不再是“二选一”,而是持续最大化综合收益
  2. 数据集/数据来源:不再是离线标注集,而是模型在线交互实时生成的样本 + 环境即时反馈。
  3. 两者关系: 依赖真实环境的动态数据+连续奖励损失,解决DPO只能处理静态成对偏好的局限,但训练复杂度、不稳定性也随之上升。

三、三者演进逻辑(问题驱动迭代)

  1. 先用 SFT:靠交叉熵损失 + 单条样本,打好基础能力,但难优化小众细节/风格
  2. 针对SFT短板,推出 DPO:改用对比损失 + 偏好对数据集,专门对齐风格、偏好;但数据集质量决定会不会学捷径
  3. 针对DPO只能用静态离线偏好的短板,延伸出 在线强化学习:动态数据 + 连续奖励损失,适配实时、动态场景。

全程遵循:换损失函数 → 对应改变数据集构造规则 → 解决上一阶段的缺陷


四、落地结论(适配你的实验)

  1. 标准稳妥链路:SFT(建基础风格) → DPO(强化偏好),二者互补,是学习固定风格(meow)的最优组合;
  2. 数据+损失避坑:DPO阶段严禁单一固定特征,必须做样本变体,避免模型投机;
  3. 底层规律不变:无论哪种后训练方式,想得到什么效果,就要同时设计匹配的损失函数 + 对应的数据集

online RL

  • 奖励函数的选择
  • 对基于正确性的领域不太适用

  • PPO
  • 策略模型指的就是要更新和训练的模型
  • 黄色是可训练模型、蓝色是冻结的模型

alt text

总结

你的理解方向是对的,但我们可以把这个问题拆解得更精确、更“数学化”一点,帮你彻底搞懂这张图的底层逻辑。


1. 核心结论先给你

这张图想表达的,并不是“SFT的示例答案不在模型的解空间里”,而是:

  • Online RL(在线强化学习):是在模型已有的“自然生成分布”(native manifold,也就是模型自己会生成的、符合自身知识和语言习惯的回答集合)内部,微调模型的行为。它只强化“好回答”的概率,不会强迫模型生成它本来不会生成的东西。
  • SFT(监督微调):是让模型强行模仿一个“外部示例回答”(Example Response to Imitate),这个示例很可能和模型自己的自然生成分布偏差很大。为了拟合这个示例,模型的权重会发生不必要的大幅改动,从而破坏它原本的能力,导致“性能退化”。

2. 用你说的“解空间/流形”来解释

这里的“native manifold(原生流形/解空间)”,可以理解成模型在预训练结束后,已经形成的、稳定的生成行为空间

  • 模型的参数在这个流形上时,生成的回答(R1/R2/R3)都符合它学到的语言、知识和逻辑习惯,分布是连续且稳定的。
  • Online RL:它的优化目标是“在这个流形里,让好的回答(R1)概率更高,差的(R2/R3)更低”。它的梯度更新是沿着流形内部的方向走的,不会把模型推离这个稳定的区域,所以对原有的预训练能力破坏小。
  • SFT:它的目标是“让模型生成和外部示例完全一样的回答”。如果这个示例本身就不在模型的原生流形上(比如示例是人类写的、风格和模型完全不同,甚至有模型不认同的事实),那么模型为了拟合它,就必须大幅调整权重,把自己“拽”到一个它本来不熟悉的区域。这个过程会破坏模型预训练学到的通用知识和语言能力,也就是图里说的“risking unnecessary changes of model weights(冒着权重被不必要改动的风险)”。

你说的“示例答案和生成结果偏移很大”,本质上就是示例分布与模型原生分布不匹配,而SFT的“强制模仿”会放大这种偏移,导致模型偏离自己的稳定流形,进而出现能力退化。


3. 补充一个关键区别:优化目标的本质

  • Online RL(以PPO为例):是“偏好学习”,它不需要模型完全复刻某个回答,只需要让模型更倾向于生成“被认为更好的回答”。它的优化是相对的、引导性的,不会给模型一个“非它不可”的目标。
  • SFT:是“回归任务”,它的目标是让模型的输出和示例回答的分布完全一致(最小化交叉熵损失)。它是绝对的、目标明确的,一旦示例和模型原生分布偏差大,模型就必须“硬改”来拟合。

这也是为什么很多研究发现,SFT如果数据质量不高,反而会让模型“越训越傻”,而基于偏好的RL(尤其是在线RL)在保持模型通用能力上更有优势。


4. 举个通俗的例子帮你理解

  • Online RL:就像你本来就会说普通话,只是偶尔会说错词。RL只会帮你强化“说对词”的概率,不会让你去学一门完全不同的语言。
  • SFT:就像让你强行模仿一个外国人说中文的口音和用词,哪怕你本来的普通话很标准。为了模仿,你可能会改掉很多自己原本正确的发音和表达,结果反而变得不伦不类。

如果你愿意,我可以帮你把这个逻辑和DPO/ORPO这类离线RLHF方法做个对比,看看它们和Online RL、SFT在“流形保持”上的差异,这样你就能把整个RLHF的底层逻辑串起来了。需要吗?

评论