Skip to content
Gains Summary
Main Navigation 首页 / Home
C++ 编程 / C++ Programming
系统与高性能 / Systems & Performance
Web 开发 / Web Development
人工智能 / Artificial Intelligence
工业软件 / Industrial Software
其他内容 / Other Topics
C++ 编程 / C++系统与性能 / SystemsWeb 开发 / Web人工智能 / AI工业软件 / Industrial

外观

Sidebar Navigation

← 人工智能 / Artificial Intelligence

大语言模型 / Large Language Models

1. LLM 前置知识学习路线 / A Prerequisite Learning Path for Large Language Models

2. 神经网络基础 - 从零理解 AI 的"计算单元" / Neural Network Fundamentals from Artificial Neurons

3. Token 与上下文窗口 - LLM 的计费与记忆单位 / Tokens and Context Windows as the Units of LLM Cost and Memory

4. 解码策略 - 控制 LLM 输出的艺术 / Decoding Strategies for Controlling LLM Output

5. 消息角色 - 构建 Agent 对话的基础 / Message Roles as the Foundation of Agent Conversations

6. 流式输出 - 实时交互的体验优化 / Streaming Output for Responsive Interaction

7. Prompt 工程基础 - 与 LLM 高效对话的技巧 / Prompt Engineering Fundamentals for Effective LLM Interaction

8. LLM 进化史 - 从词向量到 Transformer / The Evolution of LLMs from Word Embeddings to Transformers

9. Transformer 手动计算:从 Attention 到 Encoder-Decoder 完整数据流

10. Transformer 核心原理 - 现代 LLM 的基石 / Transformer Fundamentals Behind Modern LLMs

11. Decoder-Only LLM 深度解析:为什么扔掉 Encoder,以及 KV Cache 如何工作

12. 训练 vs 推理:同一个 Transformer,两条完全不同的执行路径

13. Transformer 训练阶段计算详解 - 手算每一行矩阵 / Transformer Training Computation Matrix by Matrix

14. Transformer 推理阶段详解 — 模型如何"思考"并生成回答 / Transformer Inference and Autoregressive Generation

15. 训练基础扫盲 - 理解 Fine-tune 在做什么 / A Training Primer for Understanding Fine-Tuning

16. LLM 预训练全景:数据管道、Scaling Laws 与训练稳定性

17. 训练基础设施 - 从单卡到千卡集群 / Training Infrastructure from One GPU to Thousand-GPU Clusters

18. Post-Training Pipeline - 从 Base Model 到可用助手 / The Post-Training Pipeline from Base Model to Assistant

19. SFT 深度解析:从 Base Model 到指令跟随——后训练第一步 / SFT Deep Dive: Teaching Base Models to Follow Instructions

20. RLHF 深度解析:从 Reward Model 到 PPO 的完整对齐流程

21. DPO 与对齐方法:从 RLHF 复杂度到直接偏好优化

22. 研究视角:DL/RL 理论到 LLM 训练的完整映射

本页目录

Post-Training Pipeline - 从 Base Model 到可用助手 / The Post-Training Pipeline from Base Model to Assistant ​

📅 创建时间:2026-05-31 🏷️ 标签:#Post-Training #SFT #RLHF #DPO #Alignment #InstructGPT 📚 前置知识:[[11 - 训练基础扫盲]] [[07 - LLM 进化史]] 🎯 文档定位:科普深入 × 专业浅显 — 讲清楚"ChatGPT 为什么比 Base Model 好用",但不陷入强化学习的数学推导


📋 本章目标 ​

阅读完本文档后,你将能够:

  • [ ] 解释 Pretrained Model 和 Instruct Model 的本质区别
  • [ ] 描述 SFT 的数据格式和训练方式
  • [ ] 理解 RLHF 三阶段流程(Reward Model → PPO → KL 约束)
  • [ ] 解释 DPO 为什么能替代 RLHF,以及两者的权衡
  • [ ] 了解 Alignment 家族的多种方法(Constitutional AI、RLAIF 等)
  • [ ] 理解 InstructGPT 的完整训练流程
  • [ ] 为后续理解训练基础设施打下基础

第1部分:Pretraining vs Post-Training — 为什么 Base Model 不能直接用 ​

1.1 预训练学到的是什么 ​

回顾 [[07 - LLM 进化史]] 中讲的内容:预训练的核心任务是 Next Token Prediction(预测下一个词)。

预训练数据:互联网上的万亿 token
预训练目标:给定前 N 个词,预测第 N+1 个词

学到的是什么:
- 语法结构(主谓宾)
- 世界知识(巴黎在法国)
- 基本的推理能力
- 词的语义关系
1
2
3
4
5
6
7
8

1.2 但预训练有一个致命问题 ​

预训练模型只会"续写",不会"听话"。

┌─────────────────────────────────────────────────────────────────┐
│              Base Model vs Instruct Model 对比                      │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  用户输入:"帮我写一首关于秋天的诗"                                  │
│                                                                  │
│  Base Model(预训练模型)的回答:                                  │
│  ┌─────────────────────────────────────┐                       │
│  │  "写一首关于秋天的诗                                        │                       │
│  │                                                             │                       │
│  │  秋风起,白云飞,                                          │                       │
│  │  草木黄落雁南归。                                          │                       │
│  │  独在异乡为异客,                                          │                       │
│  │  每逢佳节倍思亲。..."                                      │                       │
│  │                                                             │                       │
│  │  问题:它在续写"写一首关于秋天的诗"这段文本                 │                       │
│  │       而不是真正执行"写诗"这个指令!                       │                       │
│  └─────────────────────────────────────┘                       │
│                                                                  │
│  Instruct Model(对齐后模型)的回答:                              │
│  ┌─────────────────────────────────────┐                       │
│  │  当然可以!这是一首关于秋天的诗:                            │                       │
│  │                                                             │                       │
│  │  《秋韵》                                                    │                       │
│  │  枫叶如火染山林,                                          │                       │
│  │  秋风送爽入衣襟。                                          │                       │
│  │  金桂飘香满庭院,                                          │                       │
│  │  丰收季节最怡人。                                          │                       │
│  │                                                             │                       │
│  │  希望你喜欢这首诗!                                        │                       │
│  └─────────────────────────────────────┘                       │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

1.3 问题根源 ​

预训练的目标是 P(next_token | context),即"给定上下文,下一个词最可能是什么"。

用户输入:"帮我写一首关于秋天的诗"

Base Model 看到的是:"帮我写一首关于秋天的诗"
它认为最好的续写是",因为这是互联网上这类文本最常见的接法

Instruct Model 看到的是:"帮我写一首关于秋天的诗"
它理解这是"用户的请求",应该生成一首诗来回应
1
2
3
4
5
6
7

这个差异叫做 Distribution Gap(分布差异):

  • 预训练数据中,"问题"和"回答"往往在同一个文本流里
  • 对话数据中,"问题"和"回答"是分开的 turn

1.4 Post-Training 的定义 ​

Post-Training = 预训练之后的所有训练

┌─────────────────────────────────────────────────────────────────┐
│                  LLM 训练的完整阶段                                 │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  阶段1:预训练(Pretraining)                                    │
│  ├─ 目标:学会语言规律和世界知识                                  │
│  ├─ 数据:数万亿 token 的互联网文本                               │
│  └─ 资源:数千 GPU,训练数月                                     │
│                                                                  │
│  阶段2:后训练(Post-Training)← 本文档重点                       │
│  ├─ 目标:让模型对齐人类意图,遵循指令                            │
│  ├─ 方法:SFT / RLHF / DPO / ...                               │
│  └─ 资源:远少于预训练                                           │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

第2部分:SFT — 监督微调 ​

2.1 SFT 的核心思想 ​

SFT(Supervised Fine-Tuning)= 用人工标注的高质量数据做微调

核心逻辑:
1. 收集一批高质量的 Prompt-Response 对(人工编写)
2. 用这些数据做普通的监督学习(和 [[11 - 训练基础扫盲]] 中的训练一样)
3. 模型学会:在收到这个 Prompt 时,生成这个 Response
1
2
3
4

2.2 SFT 数据格式 ​

SFT 的训练数据是 Prompt-Response 对:

┌─────────────────────────────────────────────────────────────────┐
│                    SFT 训练数据格式                                 │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  数据集示例:                                                     │
│                                                                  │
│  ┌─────────────────────────────────────────────────────────┐   │
│  │  Prompt: "用一句话解释量子纠缠"                            │   │
│  │  Response: "量子纠缠是两个粒子间的一种特殊关联,             │   │
│  │            即使相隔很远,一个粒子的状态变化会立即影响         │   │
│  │            另一个粒子的状态,这是一种超越空间限制的           │   │
│  │            非局域关联效应。"                               │   │
│  └─────────────────────────────────────────────────────────┘   │
│                                                                  │
│  ┌─────────────────────────────────────────────────────────┐   │
│  │  Prompt: "写一个 Python 快排算法"                          │   │
│  │  Response: "def quicksort(arr):\n"                       │   │
│  │            "    if len(arr) <= 1:\n"                    │   │
│  │            "        return arr\n"                        │   │
│  │            "    ..."                                      │   │
│  └─────────────────────────────────────────────────────────┘   │
│                                                                  │
│  SFT 的 Loss 只在 Response 部分计算(Prompt 部分不参与梯度)       │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

2.3 SFT 训练方式 ​

和 [[11 - 训练基础扫盲]] 中讲的训练循环完全一样,只是数据格式不同:

SFT 训练循环:

for batch in SFT_dataloader:
    # Forward
    outputs = model(input_ids=batch["input_ids"])
    
    # 只在 Response 部分计算 Loss
    shift_logits = outputs.logits[..., :-1, :].contiguous()
    shift_labels = batch["labels"][..., 1:].contiguous()
    loss = cross_entropy(shift_logits, shift_labels)
    
    # Backward + Update
    loss.backward()
    optimizer.step()
1
2
3
4
5
6
7
8
9
10
11
12
13
14

2.4 SFT 的问题 ​

SFT 听起来很简单,但实际有几个严重问题:

┌─────────────────────────────────────────────────────────────────┐
│                    SFT 的三个问题                                  │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  问题1:数据标注成本极高                                          │
│  ─────────────────────────────────────────────────────────────  │
│  要让模型学会各种任务,需要覆盖所有任务类型的高质量回答:           │
│  ├─ 写代码                                                         │
│  ├─ 写文章                                                         │
│  ├─ 回答知识问题                                                   │
│  ├─ 做数学题                                                       │
│  ├─ 对话聊天                                                       │
│  └─ ... 几千种任务                                                │
│                                                                  │
│  人工标注 10 万条高质量、多样化的数据,成本可能高达数十万美元        │
│                                                                  │
│  问题2:泛化能力有限                                              │
│  ─────────────────────────────────────────────────────────────  │
│  模型只会模仿训练数据中的回答方式                                   │
│  遇到训练集没见过的新任务,可能表现很差                            │
│                                                                  │
│  问题3:回答质量依赖标注员水平                                     │
│  ─────────────────────────────────────────────────────────────  │
│  标注员的水平上限 = 模型的上限                                    │
│  要训练出 GPT-4 水平的模型,需要 GPT-4 级别的标注数据!          │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

关键洞察:OpenAI 在 2022 年的 InstructGPT 论文中发现,RLHF 比 SFT 能用更少的数据达到更好的效果。这推动了 RLHF 的广泛采用。


第3部分:RLHF — 人类反馈强化学习 ​

3.1 为什么需要 RLHF ​

SFT 不够的根本原因:

1. 无法定义"好"的数学形式
   "什么是一篇好的请假邮件?" → 很难用规则写清楚

2. 人工标注成本高且质量有上限
   要让 AI 超越人类水平,必须用 AI 来帮助训练

RLHF 的核心思想:
不用人工定义"好",而是让人类来比较"哪个更好"
然后用强化学习让模型学会"生成人类更喜欢的内容"
1
2
3
4
5
6
7
8
9
10
11

3.2 RLHF 三阶段概述 ​

┌─────────────────────────────────────────────────────────────────┐
│                    RLHF 三阶段流程                                │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  ┌─────────────────────────────────────────────────────────┐   │
│  │  Stage 1:收集人类偏好数据                                 │   │
│  │                                                         │   │
│  │  Prompt A: "什么是量子计算?"                            │   │
│  │  Response 1: "量子计算是一种..."                         │   │
│  │  Response 2: "量子计算利用..."                           │   │
│  │  人类选择:哪个更好? → Response 1                      │   │
│  │                                                         │   │
│  │  收集 10 万到 100 万个这样的偏好对比                     │   │
│  └─────────────────────────────────────────────────────────┘   │
│                           ↓                                      │
│  ┌─────────────────────────────────────────────────────────┐   │
│  │  Stage 2:训练 Reward Model(奖励模型)                  │   │
│  │                                                         │   │
│  │  输入:Prompt + Response                               │   │
│  │  输出:一个分数(越高表示人类越喜欢)                    │   │
│  │                                                         │   │
│  │  训练目标:让 RM 的打分和人类偏好一致                    │   │
│  └─────────────────────────────────────────────────────────┘   │
│                           ↓                                      │
│  ┌─────────────────────────────────────────────────────────┐   │
│  │  Stage 3:用 PPO 微调 LLM                               │   │
│  │                                                         │   │
│  │  LLM 生成回答 → RM 打分 → 根据分数更新 LLM              │   │
│  │  目标:让 LLM 生成 RM 高分的内容                         │   │
│  │  同时:用 KL 约束防止 LLM 跑偏                          │   │
│  └─────────────────────────────────────────────────────────┘   │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

3.3 Stage 1 — 收集人类偏好数据 ​

这是 RLHF 中最"贵"的部分,也是质量瓶颈。

偏好数据的格式:

┌─────────────────────────────────────────────────────────────────┐
│  原始 Prompt:写一个 Python 函数判断回文数                         │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  Response A:                                                    │
│  def is_palindrome(n):\n    s = str(n)\n    return s == s[::-1] │
│  简洁,正确,但缺少注释                                            │
│                                                                  │
│  Response B:                                                    │
│  def is_palindrome(n):\n    """判断一个整数是否为回文数"""...\n    │
│  包含 docstring,有示例,有边界处理                               │
│                                                                  │
│  人类偏好:B > A(更详细)                                       │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

偏好数据的特点:

  • 不需要绝对打分,只需要相对比较(哪个更好)
  • 相对比较更容易判断,成本更低
  • 通常每个 Prompt 生成 4-9 个候选回答,让人类排序

3.4 Stage 2 — 训练 Reward Model ​

Reward Model(RM)的任务:给定 Prompt + Response,输出一个分数。

Reward Model 的结构:

┌─────────────────────────────────────────────────────────────────┐
│  Reward Model(本质上是一个 LLM + 回归头)                          │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  Input:  Prompt + Response                                       │
│           ↓                                                      │
│  Base LLM 处理文本 → 输出向量                                     │
│           ↓                                                      │
│  新增一个线性层:reward_head                                      │
│           ↓                                                      │
│  Output: 一个标量分数 r                                          │
│                                                                  │
│  r ∈ (-∞, +∞)                                                   │
│  越高 = 越符合人类偏好                                           │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

RM 的训练( Bradley-Terry 模型):

训练目标:
对于同一个 Prompt 的两个回答 A 和 B:
如果人类更喜欢 A:RM(A) > RM(B)

Loss = -log(σ(RM(A) - RM(B)))
其中 σ 是 sigmoid 函数

直观理解:
如果 RM(A) > RM(B) → Loss → 0,RM 被奖励
如果 RM(A) < RM(B) → Loss → 大,RM 被惩罚
1
2
3
4
5
6
7
8
9
10

3.5 Stage 3 — PPO 微调 ​

PPO(Proximal Policy Optimization) 是强化学习中的一种策略优化算法。

不需要完全理解 PPO 的数学推导,重点理解它的核心思想和在 RLHF 中的作用。

PPO 在 RLHF 中的核心思想:

1. 让 LLM 生成一批回答
2. 用 Reward Model 给每个回答打分
3. 根据分数调整 LLM 的参数:高分回答的概率 ↑,低分回答的概率 ↓
4. 用 PPO 的特殊技巧保证:每次只更新一点点,不要一下子跑太远
1
2
3
4
5
6
KL 约束 = 防止模型"作弊"

问题:如果只追求 Reward Model 的高分,模型可能:
├─ 学会"取悦"Reward Model,而不是真正有用
├─ 生成语法正确但事实错误的内容
└─ 输出过于冗余(长回答往往分数更高)

KL 约束的作用:
KL(π_llm || π_sft) = 新模型和 SFT 模型的"距离"

优化目标 = Reward - β × KL
(β 是 KL 惩罚系数)

效果:模型在提升 Reward 的同时,
     必须不能离 SFT 太远
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

3.6 RLHF 的效果对比 ​

┌─────────────────────────────────────────────────────────────────┐
│                    RLHF 效果实测(InstructGPT 论文)                  │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  评测方式:人类评估员对比不同模型对同一 Prompt 的回答质量            │
│                                                                  │
│  结果(Preferred by human evaluators):                         │
│                                                                  │
│  1. SFT-1.3B    ████                                            │
│  2. SFT-175B    ██████████                                       │
│  3. PPO-1.3B    ████████████████                                │
│  4. PPO-175B    ████████████████████████████(最佳)              │
│  5. PPO-1.3B + KL ↓ ████████████████████████████                 │
│                                                                  │
│  关键发现:                                                       │
│  - PPO-1.3B 超过了 SFT-175B!                                   │
│  - 说明 RLHF 比单纯增大模型规模更有效                             │
│  - 小模型 + RLHF > 大模型 + SFT(到一定程度)                    │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

第4部分:DPO — 绕过强化学习 ​

4.1 RLHF 的痛点 ​

RLHF 虽然效果好,但工程实现非常复杂:

RLHF 的工程复杂度:

1. 需要同时运行三个模型:
   ├─ LLM(主模型,要更新的)
   ├─ Reward Model(打分模型,固定的)
   └─ Reference Model(SFT 模型,固定的)
   
2. PPO 的超参数非常敏感:
   ├─ 学习率
   ├─ KL 系数 β
   └─ 价值函数系数
   
3. 训练不稳定,容易崩溃

4. 超参数调优成本极高
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

4.2 DPO 的核心思想 ​

DPO(Direct Preference Optimization,直接偏好优化) 提出了一个革命性的简化:

关键观察:

RLHF 的优化目标(简化版):
最大化 Reward,同时保持和 Reference Model 的 KL 约束

这个问题有闭式解!

Reward = α·KL divergence 的函数

所以:不需要 Reward Model
     不需要 PPO
     只需要偏好数据,直接优化!
1
2
3
4
5
6
7
8
9
10
11
12

4.3 DPO 的数学直觉 ​

DPO 的 Loss 函数:

L_DPO = - E_(x, y_w, y_l) [log(σ(r_θ(x, y_w) - r_θ(x, y_l)))]

其中:
- y_w = 人类偏好的回答(winning)
- y_l = 人类不喜欢的回答(losing)
- r_θ = 用 LLM 自己充当 reward 函数(而不需要单独的 RM)
- σ = sigmoid 函数

直观理解:
让 LLM 学会:
  r_θ(x, y_w) > r_θ(x, y_l)
即使得偏好的回答得分更高,不偏好的回答得分更低
1
2
3
4
5
6
7
8
9
10
11
12
13
14

4.4 DPO vs RLHF 对比 ​

RLHFDPO
模型数量3个(LLM + RM + Ref)2个(LLM + Ref)
强化学习需要 PPO不需要
训练稳定性不稳定,超参敏感更稳定
数学复杂度高(策略优化)低(类似 SFT 的分类问题)
效果效果更好(理论上)效果相当(实践中)
偏好数据格式pairwisepairwise
实现难度高低
实践中的选择:

OpenAI / Anthropic 等大厂:仍用 RLHF(控制力更强)
开源社区:大量使用 DPO(Llama 3、Qwen 等都用了 DPO)
原因:DPO 实现简单,效果足够好
1
2
3
4
5

4.5 代码对比:RLHF vs DPO ​

RLHF(使用 trl 库的 PPOTrainer):

from trl import PPOTrainer, PPOTrainerConfig

config = PPOTrainerConfig(
    model_name="meta-llama/Llama-3-8B",
    learning_rate=1.4e-5,
)

trainer = PPOTrainer(config, model, ref_model, reward_model, ...)
trainer.train()  # 复杂的 PPO 训练循环


DPO(使用 trl 库的 DPOTrainer):

from trl import DPOTrainer, DPOConfig

config = DPOConfig(
    model_name="meta-llama/Llama-3-8B",
    learning_rate=1.0e-6,
    beta=0.1,  # KL 系数,DPO 的唯一关键超参
)

trainer = DPOTrainer(config, model, ref_model, ...)
trainer.train()  # 简单的对比学习循环
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

超参对比:RLHF 需要调 PPO 学习率、KL 系数、价值函数系数、PPO epoch 数等。DPO 只需要调 beta(KL 系数),简单得多。


第5部分:Alignment 家族一览 ​

5.1 为什么叫 Alignment ​

Alignment(对齐) = 让 AI 的行为和人类意图/价值观一致。

不对齐的问题:

├─ 模型可能帮助用户做有害的事情
├─ 模型可能生成虚假信息
├─ 模型可能歧视特定群体
└─ 模型可能不遵循安全指令

对齐的目标:
让 AI Helpful(有用)、Harmless(无害)、Honest(诚实)
= HHH 原则
1
2
3
4
5
6
7
8
9
10

5.2 InstructGPT — RLHF 的开创者 ​

InstructGPT(2022)是第一个系统性地将 RLHF 用于 LLM 对齐的论文:

┌─────────────────────────────────────────────────────────────────┐
│                InstructGPT 完整训练流程                            │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  GPT-3(预训练,175B 参数)                                       │
│       ↓                                                          │
│  Stage 1:SFT(人工标注的 demo 数据,~13k 条)                    │
│       ↓                                                          │
│  SFT-175B 模型                                                   │
│       ↓                                                          │
│  Stage 2:RM 训练(人类偏好对比数据,~33k 条)                    │
│       ↓                                                          │
│  Reward Model                                                   │
│       ↓                                                          │
│  Stage 3:PPO 微调(RM 打分,~31k 条)                           │
│       ↓                                                          │
│  InstructGPT (PPO-175B)                                          │
│                                                                  │
│  关键数据量:                                                     │
│  SFT: 13k demo examples                                         │
│  RM:  33k comparison examples                                   │
│  PPO: 31k prompts                                               │
│                                                                  │
│  小于 5 万条人类标注数据 >> 1750 亿参数预训练模型                 │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

5.3 Constitutional AI — Anthropic 的方法 ​

Constitutional AI(CAI) 是 Anthropic 在 Claude 中使用的方法:

核心思想:不用人类对每个回答打分,而是用一套"准则(Constitution)"来引导 AI

准则示例:
1. "选择一个对所有文化背景的人都尊重和包容的回答"
2. "选择一个避免仇恨言论的回答"
3. "选择一个事实准确的回答"

训练流程:
1. 让 LLM 自我批评(用准则评估自己的回答)
2. 修改回答使其更符合准则
3. 用这些自我修改的数据做微调

优点:
- 大幅减少人类标注量
- 可以迭代改进准则
- 比纯人类反馈更一致
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

5.4 RLAIF — 用 AI 反馈替代人类反馈 ​

RLAIF(RL from AI Feedback) = 用另一个 AI 模型打分替代人类偏好:

RLAIF vs RLHF:

RLHF:人类对回答打分 → 训练 RM → PPO 微调
RLAIF:AI(通常是更大的模型)对回答打分 → 训练 RM → PPO 微调

Google 的实验结果(2023):
RLAIF 在某些任务上达到了和 RLHF 相当的效果

优点:
- 不需要人类标注,成本大幅降低
- 可以用更大的模型来评估小模型
- 一致性更高(AI 不会疲劳,不会矛盾)

缺点:
- 需要一个足够强的 AI 模型来打分
- 存在"自我服务偏差"(大模型可能给自己的回答打高分)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

5.5 Alignment 方法对比 ​

|| 核心思想 | 标注成本 | 效果 | 代表模型 | |---------|---------|------|---------| | SFT | 模仿人工标注的回答 | 高 | 一般 | GPT-3(早期) | | RLHF | 人类偏好 + 强化学习 | 很高 | 最好 | ChatGPT、Claude(早期) | | DPO | 直接用偏好数据优化 | 高 | 很好 | Llama 3、Qwen2 | | CAI | AI 自我批评 + 准则 | 低 | 很好 | Claude | | RLAIF | AI 替代人类打分 | 低 | 不错 | Gemini |


第6部分:Post-Training Pipeline — 完整流程 ​

6.1 业界完整流程 ​

┌─────────────────────────────────────────────────────────────────┐
│                LLM Post-Training 完整 Pipeline                      │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  1. Base Model(预训练模型)                                     │
│           ↓                                                      │
│  2. 数据收集与清洗                                               │
│     ├─ 开源数据集(SlimPajama、RedPajama 等)                    │
│     ├─ 人工标注(SFT 数据)                                      │
│     ├─ 人类偏好数据(RM 数据)                                    │
│     └─ 质量过滤(去除低质量、有害内容)                           │
│           ↓                                                      │
│  3. SFT(Supervised Fine-Tuning)                               │
│     几万到几百万条 Prompt-Response 数据                          │
│     → 得到 SFT Model                                             │
│           ↓                                                      │
│  4a. RM 训练(如果用 RLHF)                                      │
│      人类偏好对比数据                                             │
│      → 得到 Reward Model                                         │
│           ↓                                                      │
│  4b. DPO / RLHF / CAI 对齐                                      │
│      → 得到对齐后的模型                                           │
│           ↓                                                      │
│  5. Safety Red Teaming(安全红队测试)                            │
│     专门测试有害内容,修复漏洞                                     │
│           ↓                                                      │
│  6. Benchmark 评测                                               │
│     ├─ MMLU(多任务知识理解)                                    │
│     ├─ HumanEval(代码生成)                                      │
│     ├─ GSM8K(数学推理)                                         │
│     └─ MT-Bench(多轮对话)                                      │
│           ↓                                                      │
│  7. 模型发布                                                     │
│     ├─ Base 版本(研究用)                                       │
│     ├─ Instruct 版本(SFT 后)                                    │
│     └─ Chat 版本(对齐后)                                        │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38

6.2 各环节资源与耗时 ​

|| 环节 | 数据量 | GPU 资源 | 耗时 | |------|------|---------|------| | SFT | 10K-1M 条 | 8-64 卡 | 数天 | | RM 训练 | 10K-100K 对比 | 8-64 卡 | 数天 | | RLHF/DPO | 数万 prompt | 8-64 卡 | 数天到数周 | | 红队测试 | N/A(人工) | N/A | 数周 | | Benchmark 评测 | N/A | N/A | 数天 |

对比预训练:预训练一个 70B 模型需要数千卡、数月。Post-Training 的总耗时通常在几周到几个月,远少于预训练。


核心总结 ​

总结1:Base Model 和 Instruct Model 的差距 ​

Base Model:会续写,但不会听话
Instruct Model:能理解并执行指令

差距来源:Post-Training(主要是 SFT + RLHF/DPO)
1
2
3
4

总结2:SFT vs RLHF vs DPO ​

SFT:人工标注 Prompt-Response 对,直接监督学习
     简单但成本高、泛化差

RLHF:人类偏好数据 → Reward Model → PPO 微调
      效果好但工程复杂

DPO:直接用偏好数据优化,效果接近 RLHF,实现更简单
     主流选择
1
2
3
4
5
6
7
8

总结3:Alignment 的意义 ​

Alignment = 让 AI 的行为符合人类意图

核心挑战:如何定义"好"?
├─ 显式定义(SFT)→ 成本高
├─ 人类比较(RLHF/DPO)→ 效果好
├─ 准则引导(CAI)→ 成本低
└─ AI 反馈(RLAIF)→ 可扩展
1
2
3
4
5
6
7

章节测试 ​

测试1:Base Model 问题 ​

为什么预训练后的 Base Model 不能直接作为聊天助手使用?请用一个具体例子说明。

测试2:SFT 局限性 ​

SFT 的三个主要局限性是什么?为什么说 RLHF 比 SFT 更高效?

测试3:RLHF 流程 ​

描述 RLHF 三个阶段的输入、输出和核心目标。

测试4:DPO vs RLHF ​

DPO 相比 RLHF 解决了哪些痛点?两者在工程实现上的最大差异是什么?

测试5:Alignment 方法选择 ​

如果一个团队资源有限(只有少量标注预算),应该优先选择哪种 Alignment 方法?为什么?

测试6:完整 Pipeline ​

按照业界最佳实践,给出一个从 Base Model 到 Chat Model 的完整 Pipeline,并标注每个环节的主要输入。


参考答案 ​

测试1答案 ​

答案:预训练模型只会"续写",不会"理解并执行指令"。

解析:

示例:

用户输入:"帮我写一封请假邮件"

Base Model 的输出:
"写一封请假邮件通常包括以下部分:标题、称谓、正文、落款。
其中正文需要说明请假原因、时间等信息..."

问题分析:
Base Model 把"帮我写一封请假邮件"当作普通文本续写,
而不是当作用户的"请求"来理解。

它输出的是关于"如何写请假邮件"的文本,
而不是"一封具体的请假邮件"本身。

这说明 Base Model 没有学会"遵循指令"这种行为模式。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

测试2答案 ​

答案:SFT 的三个局限性:

1. 数据标注成本极高
   覆盖所有任务类型需要大量高质量人工标注
   标注员水平上限 = 模型水平上限

2. 泛化能力有限
   模型只会模仿训练数据中的回答方式
   遇到没见过的新任务可能表现很差

3. 难以定义"好"的数学形式
   有些回答质量很难用规则描述
   比如"什么样的代码更好看"?

RLHF 更高效的原因:
- 不需要定义"好"的绝对标准
- 只需要人类判断"哪个更好"(相对比较)
- 可以让模型自主探索更优的回答方式
- 少量偏好数据(万级)就能显著提升效果
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

测试3答案 ​

答案:

Stage 1:收集人类偏好数据
├─ 输入:Prompt + 多个候选回答
├─ 输出:人类偏好标记(如 Response A > Response B)
└─ 核心目标:建立"人类认为什么是好回答"的数据集

Stage 2:训练 Reward Model
├─ 输入:Prompt + Response 对
├─ 输出:标量分数 r(越高越符合人类偏好)
└─ 核心目标:学习一个能预测人类偏好的打分函数

Stage 3:PPO 微调 LLM
├─ 输入:LLM 生成的回答 + RM 分数
├─ 输出:更新后的 LLM 参数
└─ 核心目标:最大化 RM 分数,同时保持和 SFT 模型的 KL 约束
1
2
3
4
5
6
7
8
9
10
11
12
13
14

测试4答案 ​

答案:

DPO 解决的 RLHF 痛点:

1. 不需要单独的 Reward Model
   RLHF 需要同时运行 3 个模型(LLM + RM + Ref)
   DPO 只需要 2 个模型(LLM + Ref)

2. 不需要复杂的 PPO 强化学习
   PPO 有多个敏感超参数,训练不稳定
   DPO 本质上是一个简单的对比学习问题

3. 实现和调参都更简单
   RLHF 需要调 PPO 学习率、KL 系数、价值函数系数...
   DPO 只需要调一个参数:beta(KL 系数)

最大工程差异:
RLHF 使用强化学习(策略优化)来更新模型
DPO 使用监督学习(类似 SFT)来更新模型
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

测试5答案 ​

答案:优先选择 DPO 或 Constitutional AI。

解析:

推荐策略:

如果有一定标注预算 + 想要最好的效果:
→ DPO
  ├─ 只需要偏好对比数据(比 SFT 的完整回答标注便宜)
  ├─ 效果接近 RLHF
  └─ 实现简单,开源工具成熟(trl 库)

如果预算非常有限:
→ Constitutional AI(CAI)
  ├─ 用 AI 自我批评代替人类标注
  ├─ 准则可以迭代改进
  └─ 适合快速原型验证

不推荐:
→ 纯 SFT(泛化差,数据标注成本高)
→ 完整 RLHF(工程复杂,调试成本高)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

测试6答案 ​

答案:

Base Model(预训练模型)
       ↓
数据收集与清洗
├─ 开源数据集(RedPajama 等)
├─ 人工标注 SFT 数据
└─ 人类偏好对比数据
       ↓
SFT(Supervised Fine-Tuning)
输入:Prompt-Response 对
输出:SFT Model
       ↓
Reward Model 训练(如果用 RLHF)
输入:人类偏好对比数据
输出:能打分的 RM
       ↓
对齐微调(RLHF 或 DPO)
输入:RM打分数据 或 偏好对比数据
输出:对齐后的模型
       ↓
Safety Red Teaming
输入:有害/边缘场景测试用例
输出:修复安全漏洞
       ↓
Benchmark 评测
输入:标准化评测集(MMLU、HumanEval 等)
输出:性能指标报告
       ↓
模型发布(Base / Instruct / Chat 版本)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

相关笔记 ​

  • [[11 - 训练基础扫盲]] - 训练循环、Loss、优化器的基础
  • [[07 - LLM 进化史]] - LLM 的演进历史和 GPT 系列
  • [[13 - 训练基础设施]] - 分布式训练和 Infra 组件

下一步学习 ​

  • [ ] 阅读 13 - 训练基础设施

学习状态:🟡 待学习

最后更新于:

Pager
上一篇17. 训练基础设施 - 从单卡到千卡集群 / Training Infrastructure from One GPU to Thousand-GPU Clusters
下一篇19. SFT 深度解析:从 Base Model 到指令跟随——后训练第一步 / SFT Deep Dive: Teaching Base Models to Follow Instructions

持续记录,持续成长

Copyright © Tidenflow