什么是模型微调:SFT、DPO 和 RLHF 一次搞明白

用最通俗的语言解释 SFT 监督微调、RLHF 人类反馈强化学习和 DPO 直接偏好优化的区别,以及 Hermes 在训练中具体用了哪些方法。

目录

  1. 一个生活中的类比
  2. 先搞清楚「微调」是什么
  3. SFT:监督微调
    1. 原理
    2. 为什么管用
    3. 数据质量决定一切
    4. Hermes 的 SFT 实践
  4. RLHF:人类反馈强化学习
    1. 原理
    2. 为什么 RLHF 有效但很麻烦
    3. 关于 RLHF 和过度对齐
  5. DPO:直接偏好优化
    1. 原理
    2. 相比 RLHF 的优势
    3. DPO 的局限
    4. Hermes 的 DPO 实践
  6. 三种方法的对比
  7. 其他值得了解的微调方法
    1. LoRA / QLoRA
    2. KTO(Kahneman-Tversky Optimization)
    3. ORPO(Odds Ratio Preference Optimization)
  8. 为什么了解这些方法很重要
  9. Hermes 的训练方法演变总结

一个生活中的类比

假设你要培训一个新来的客服人员。

第一种方式:你给他一大堆标准话术——客户问什么、应该答什么,让他照着学。这叫监督学习

第二种方式:他学完基本话术后开始实际接客。你听他的对话录音,好的回答你点赞,不好的你标个差评,让他慢慢调整。这叫基于人类反馈的强化学习(RLHF)

第三种方式:你把他的两个回答放在一起让他看——「这个回答比那个好,你以后往这个方向靠」。这叫直接偏好优化(DPO)

这三种方式,对应的就是 AI 模型训练中的 SFT、RLHF 和 DPO。它们是当前大语言模型微调中最核心的三种方法。

Hermes 系列模型在不同阶段使用了这些方法的组合,理解它们有助于你明白 Hermes 的能力是怎么来的。

先搞清楚「微调」是什么

在讲具体方法之前,先把「微调」这个概念定义清楚。

一个大语言模型的训练分两大阶段:

预训练(Pre-training):用海量文本数据(网页、书籍、代码等,可能有几万亿个 token)从零训练模型。这一步教会模型「语言是什么」——语法、知识、推理能力等。这一步耗资巨大,通常只有 Meta、Google、阿里这种级别的公司才做得起。

微调(Fine-tuning):在预训练好的模型基础上,用相对少量但更高质量的数据继续训练。这一步教会模型「怎么和人交互」——遵从指令、生成有用的回答、避免有害输出等。

Hermes 做的就是微调。它拿 Llama、Qwen、Seed 这些已经预训练好的底座模型,用自己精心准备的数据和方法做微调,让模型变得更好用。想了解 Hermes 用了哪些底座,可以看 Hermes 模型版本怎么看

现在我们来逐个讲解三种微调方法。

SFT:监督微调

SFT 全称 Supervised Fine-Tuning,监督微调,是最基础也最直观的微调方法。

原理

核心思路极其简单:准备一批「问题-答案」对,让模型照着学。

比如:

1
2
问题:Python 怎么反转一个列表?
答案:你可以用切片语法 list[::-1],也可以用 list.reverse() 方法...

你准备几万、几十万条这样的高质量「指令-回答」数据对,然后让模型在这些数据上继续训练。训练的目标就是让模型的输出尽可能接近你准备的标准答案。

为什么管用

预训练后的模型虽然「知道很多东西」,但它不太会「按照人类的方式说话」。你让它补全一段文本,它可能会给你一段维基百科风格的叙述,而不是直接回答你的问题。

SFT 的作用就是教会模型:当用户问一个问题时,你应该以「回答问题」的方式来组织输出,而不是以「续写文章」的方式。

数据质量决定一切

SFT 听起来简单,但实际效果差异巨大。关键因素是训练数据的质量

低质量数据的例子:

  • 从 ChatGPT 批量生成的对话(质量参差不齐)
  • 没有经过筛选的网络爬取数据
  • 答案过于简单或包含错误信息

高质量数据的特征:

  • 问题覆盖广泛的领域和难度
  • 答案详细、准确、格式清晰
  • 经过人工审核和筛选
  • 包含多种对话风格(简洁回答、详细解释、代码示例等)

Nous Research 在 SFT 数据质量上的投入是它区别于其他微调项目的核心竞争力。 Ryan Teknium 本人多次强调,他们的数据管线中有大量手动审核和过滤的环节,确保每一条训练数据都是高质量的。

Hermes 的 SFT 实践

Hermes 全系列都经过 SFT 训练。从 Hermes 1 的纯 SFT,到后续版本 SFT + 其他方法的组合,SFT 始终是基础。

Hermes 的 SFT 数据有几个特点:

  1. 多样性高:覆盖通用对话、代码、数学、创意写作、角色扮演等多个领域
  2. 包含工具使用数据:从 Hermes 2 Pro 开始,SFT 数据中包含了函数调用和 JSON 输出的样例
  3. ChatML 格式:所有数据都按照 ChatML 格式组织,确保模型熟悉这种对话结构
  4. system prompt 多样性:训练数据中包含各种不同的 system prompt,让模型学会遵从不同的角色设定

RLHF:人类反馈强化学习

RLHF 全称 Reinforcement Learning from Human Feedback,是让 ChatGPT 一鸣惊人的关键技术之一。

原理

RLHF 的流程分三步:

第1步:SFT
先用上面说的 SFT 方法训练一个基础版本。这是起点。

第2步:训练奖励模型(Reward Model)
请一批人类标注员来评价模型的输出。对于同一个问题,模型可能生成多个不同的回答,人类标注员给这些回答排序——哪个好、哪个差。

用这些排序数据训练一个「奖励模型」。这个奖励模型的作用是:给模型的任何输出打一个分数,表示这个输出有多「好」。它学习的是人类的偏好。

第3步:强化学习优化
用强化学习(具体来说通常是 PPO 算法)来优化原始模型。优化的目标是:让模型的输出能在奖励模型那里获得更高的分数。

简单说就是:模型生成回答 → 奖励模型打分 → 模型根据分数调整自己 → 循环往复。

为什么 RLHF 有效但很麻烦

RLHF 有效的原因是:它直接优化了「人类觉得好」这个目标。SFT 只是让模型模仿标准答案,而 RLHF 让模型学会了人类偏好的本质。

但 RLHF 也是公认的「麻烦」:

1. 需要大量人工标注
训练奖励模型需要海量的人类偏好数据。这些数据必须由人工标注,成本很高。

2. 奖励模型本身可能有缺陷
如果奖励模型学偏了,它会给错误的输出打高分,导致最终模型也跑偏。这叫「奖励黑客」(Reward Hacking)。

3. PPO 训练不稳定
PPO 是一个强化学习算法,训练过程中容易出现各种稳定性问题——模型输出质量可能突然暴跌、或者陷入重复输出等。

4. 过度对齐风险
如果人类标注员的偏好太保守(比如「但凡有点敏感就给低分」),模型会学到「拒绝比回答更安全」的策略。结果就是——你问什么它都说「作为AI我无法回答」。这就是很多商业模型被诟病的「过度对齐」问题。

关于 RLHF 和过度对齐

这个问题和 Hermes 的设计理念直接相关。传统 RLHF 模型(尤其是早期的 ChatGPT 和一些跟风的开源模型)普遍存在过度拒绝的问题。Hermes 采取了不同的策略来避免这个陷阱,具体可以看 Hermes 的个体对齐哲学

DPO:直接偏好优化

DPO 全称 Direct Preference Optimization,是 2023 年由 Stanford 研究团队提出的一种替代 RLHF 的方法。

原理

DPO 的核心创新是:跳过了奖励模型的训练和强化学习步骤,直接用偏好数据来优化模型。

它的输入数据格式很直观:

1
2
3
4
5
问题:怎么做一道番茄炒蛋?

好的回答(Chosen):先把鸡蛋打散,锅里放油烧热,蛋液下去快速翻炒至凝固盛出。然后重新起锅,放少量油,下番茄块翻炒出汁,加一点糖提鲜,再把炒好的鸡蛋倒回去,撒点葱花就完成了。

差的回答(Rejected):做番茄炒蛋很简单,把番茄和鸡蛋放在一起炒就行了。

DPO 直接用这种「好/差回答对」来训练模型,数学上可以证明这等价于先训练奖励模型再做强化学习的效果,但实现上简单得多。

相比 RLHF 的优势

1. 更简单
不需要训练额外的奖励模型,不需要复杂的 PPO 训练。整个训练管线大幅简化。

2. 更稳定
没有了强化学习中的不稳定因素,训练过程更可控、更容易复现。

3. 计算成本更低
少了奖励模型的训练和推理开销,GPU 资源需求降低。

4. 数据需求更灵活
偏好数据可以从多种来源获取——人工标注、GPT-4 评估、甚至从现有模型的输出中自动构造。

DPO 的局限

当然,DPO 也不是万能的:

  • 对数据质量的敏感度依然很高。垃圾数据进去,垃圾效果出来。
  • 在某些场景下,效果可能不如精心调参的 RLHF。
  • 偏好数据的构造本身就是一个需要专业知识的工作。

Hermes 的 DPO 实践

从 Hermes 3 开始,Nous Research 在训练中引入了 DPO。

具体做法是 SFT + DPO 的两阶段训练:

  1. 先用高质量指令数据做 SFT,得到一个基础版本
  2. 再用偏好数据做 DPO,让模型的输出更贴合人类偏好

这个组合的效果很好。在 cocoloop 社区的用户反馈中,Hermes 3 相比 Hermes 2 在「回答质量」和「对话自然度」上有明显提升,DPO 训练是其中一个重要因素。

三种方法的对比

整理一下三种方法的核心区别:

维度 SFT RLHF DPO
核心思路 模仿标准答案 通过奖励模型+强化学习优化 直接用偏好数据优化
数据需求 指令-回答对 偏好排序数据+大量交互 偏好对(好/差回答)
实现复杂度
训练稳定性 低(PPO不稳定) 中高
计算成本 高(需要奖励模型)
效果上限 高(理论上) 中高

对于大多数开源团队来说,SFT + DPO 是目前性价比最高的组合。 RLHF 的效果上限可能更高,但实施难度和资源需求也大得多,不是每个团队都玩得起的。

其他值得了解的微调方法

除了上面三种主流方法,还有一些你可能会看到的名词:

LoRA / QLoRA

这不是训练「方法」,而是训练「技术」。LoRA(Low-Rank Adaptation)的思路是:不修改原始模型的所有参数,只训练一小部分新增的参数

好处是大幅降低了微调的计算成本和显存需求。QLoRA 更进一步,在 LoRA 的基础上加了量化,让你在一张消费级显卡上就能微调 7B 甚至 13B 的模型。

很多社区用户用 LoRA/QLoRA 在 Hermes 基础上做自己的二次微调,效果不错。

KTO(Kahneman-Tversky Optimization)

一种比 DPO 更新的偏好优化方法,灵感来自于行为经济学中的前景理论。它不需要成对的好/差回答数据,只需要对单条回答的好/差标注就行,数据收集更简单。

ORPO(Odds Ratio Preference Optimization)

另一种偏好优化方法的变体,试图在一次训练中同时完成 SFT 和偏好优化,进一步简化训练流程。

这些新方法都在快速发展中,Nous Research 也在持续跟进和实验。

为什么了解这些方法很重要

你可能会想:我又不训练模型,知道这些有什么用?

其实了解微调方法对你选择和使用模型很有帮助:

  1. 理解模型能力的来源:当你发现某个模型在特定任务上表现出色,了解它的训练方法能帮你判断这种优势是否稳定可靠。

  2. 判断模型是否「过度对齐」:如果一个模型动不动就拒绝回答,你就知道它可能在 RLHF 阶段被调得太保守了。换一个用 DPO 训练且注重用户自主性的模型(比如 Hermes)可能更适合你。

  3. 做二次微调的基础:如果你以后想在 Hermes 基础上做自己的微调(比如让它更擅长你的特定业务场景),了解这些方法就是必要的基础知识。

  4. 参与社区讨论:在 cocoloop 论坛和其他 AI 社区里,关于训练方法的讨论非常多。了解基本概念能让你有效参与这些讨论,而不是看帖子如同读天书。

Hermes 的训练方法演变总结

最后用一张表总结 Hermes 各版本使用的训练方法:

版本 训练方法 关键改进
Hermes 1 SFT 高质量数据基础
Hermes 2 SFT 多底座适配
Hermes 2 Pro SFT + 特殊能力数据 函数调用训练数据引入
Hermes 3 SFT + DPO 首次引入偏好优化
Hermes 4/4.3 SFT + DPO + 推理增强 思考模式训练

从纯 SFT 到 SFT+DPO 再到加入推理增强训练,Hermes 的训练方法论在稳步升级。但核心的数据质量优先原则从第一天起就没有变过。

这也许就是 Hermes 能持续保持竞争力的根本原因。方法可以迭代,但对质量的追求不能打折。

参与讨论

对这篇文章有疑问或想法?cocoloop 社区有不少开发者在讨论 Hermes 相关话题,欢迎加入交流。

前往 cocoloop 社区 →