生成式AI原理与实战(Part 4)学习笔记:推理模型、DeepSeek-R1 与高效训练架构
- 约 17 分钟读完 - 全文 6686 字生成式AI原理与实战(Part 4)学习笔记:推理模型、DeepSeek-R1 与高效训练架构
这是《生成式AI原理与实战》学习笔记的第四篇,也是这个系列的收尾篇。Part 4 的问题非常“硬核”,集中在推理模型(Reasoning Model)、强化学习训练、DeepSeek-R1 系列以及DeepSeek 的高效训练架构上。目标读者仍然是刚接触 AI 的初中级开发者:我会尽量用工程直觉和生活化类比,把这些问题串成一条可理解的脉络。
写在前面:为什么推理模型这么重要?
过去两年,大模型领域最大的变化之一,就是从“问什么答什么”的聊天模型,演进到“会思考”的推理模型。DeepSeek-R1、OpenAI o1/o3、QwQ-32B 等模型展示了一个趋势:让模型在回答前多“想一会儿”,能显著提升复杂任务的准确率。
但这背后涉及很多问题:
- 模型为什么会“思考”?这和写
let's think step by step有什么区别? - 推理模型是怎么训练出来的?为什么它贵?
- DeepSeek-R1 为什么要先做 SFT 冷启动?
- 训练大模型要花多少数据和算力?
- DeepSeek 的 MLA、MoE、FP8、DualPipe 到底在解决什么问题?
这篇文章会按四个主题展开:推理模型基础、训练与对齐方法选择、DeepSeek-R1 解析、DeepSeek 架构与训练系统。
一、推理模型基础:从“直接回答”到“测试时计算”
1.1 缩放定律:训练一个模型需要多少数据和算力?
缩放定律(Scaling Laws)告诉我们:模型的性能大致随参数量、训练数据量和计算量一起提升。Chinchilla 论文给出的经验是:
给定固定算力预算,模型参数量 N 和训练 token 数 D 应该大致成比例增长,即 D ≈ 20N。
也就是说,一个 70B 参数的模型,理想情况下需要用约 1.4 万亿 token 来训练。
算力估算:每个 token 的前向 + 反向传播大约需要 6 × 参数量 次浮点运算(FLOPs)。所以训练 70B 模型用 1.4T token,总计算量约为:
6 × 70B × 1.4T ≈ 5.9 × 10^23 FLOPs
flowchart LR
A[参数量 N] --> C[计算量 C ~ 6ND]
B[数据量 D] --> C
C --> P[模型能力]
style C fill:#fff2cc
工程直觉:大模型训练就像烧开水——水壶越大(参数越多)、火越旺(数据越多)、烧得越久(训练越久),水温才越高。但三者的配比要合理,否则就是浪费。
1.2 为什么普通大模型不能可靠解决 24 点?
24 点问题需要:给定 4 个整数,通过加减乘除得到 24。这本质上是一个搜索 + 验证问题。
普通大模型(如 Llama-3 70B)在不输出思维链的情况下,只能做一次前向传播,每个位置预测一个 token。Transformer 没有内置的“试错-回溯”机制,无法枚举所有数字组合并验证结果。因此它可能猜对,但不能可靠地保证正确。
而一旦允许输出思维链,模型就可以:
- 写出候选算式;
- 逐步计算;
- 检查结果是否为 24;
- 错了就换一条路。
这就是“测试时计算(Test-Time Compute)”的威力:用更多的生成 token 换取更高的准确率。
1.3 CoT 提示词 vs 推理模型:同样是“多想一会儿”,区别在哪?
flowchart TD
subgraph CoT 提示工程
P1[用户问题] --> T1[写 let's think step by step]
T1 --> G1[模型按已有习惯推理]
end
subgraph 推理模型
P2[用户问题] --> T2[模型自动生成<br/>长思维链]
T2 --> R2[自我验证/修正]
R2 --> G2[更高质量答案]
end
| 对比项 | CoT 提示词 | 推理模型 |
|---|---|---|
| 本质 | 提示工程技巧 | 训练出来的推理能力 |
| 思维链质量 | 依赖模型原始能力 | 被 RL 训练专门优化 |
| 长度 | 通常较短 | 可生成很长的内部思考 |
| 上限 | 受限于模型本身 | 通过测试时计算持续提升 |
推理模型上限更高的原因是:它在训练时被显式激励去生成更多推理步骤、进行自我验证、尝试不同路径。而普通模型只是被训练成“预测下一个词”,没有专门被优化去“想得更深”。
1.4 推理模型的 RL 与非推理模型的 RLHF 有什么区别?
| 对比项 | 推理模型 RL | 普通模型 RLHF |
|---|---|---|
| 奖励信号 | 通常是可自动验证的(答案对错) | 人类偏好(好坏、有用、安全) |
| 优化目标 | 提升推理正确率 | 提升人类满意度 |
| 典型任务 | 数学、编程、逻辑推理 | 对话、写作、问答 |
| 奖励模型 | 可以直接用规则/单元测试 | 需要训练 Reward Model |
推理模型 RL 更像是“做数学题对答案”:对了加分,错了扣分。RLHF 更像是“写作文给老师看”:老师打分,模型学着更符合人类口味。
1.5 AlphaZero 的启示:训练时计算 vs 测试时计算的最优配比
AlphaZero 下围棋时,训练阶段通过自我对弈生成大量棋谱、更新策略网络;测试阶段用 MCTS 在每一步搜索最佳落子。
它的启示是:
- 训练时计算用于学习通用策略和价值判断;
- 测试时计算用于在具体局面下做精细搜索;
- 最优配比取决于任务:对围棋这类可验证、搜索空间大的任务,测试时计算可以非常多;对开放性文本生成,测试时计算受延迟限制。
有研究认为,在可验证推理任务上,训练时计算 : 测试时计算 的最优配比可能在 1000:1 到 10000:1 量级。但这不是固定值,更多是一种设计哲学:先让模型学到好的“直觉”,再让它在推理时多花时间验证。
二、训练推理模型:奖励模型、MCTS 与 STaR
2.1 过程奖励模型 vs 结果奖励模型
| 模型 | 打分对象 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|
| ORM(结果奖励模型) | 最终答案 | 简单、可自动验证 | 不知道哪步错了 | 数学、编程等答案可验证任务 |
| PRM(过程奖励模型) | 中间推理步骤 | 能定位错误步骤 | 需要大量过程标注 | 长推理、可分解任务 |
ORM 像期末考试只看最终分数;PRM 像老师批改作业,每步都打分。PRM 更好,但标注成本更高。
2.2 MCTS 中的探索与利用
MCTS(蒙特卡洛树搜索)在推理中用于探索不同解题路径。每选择一个节点时,需要平衡:
- 利用(Exploitation):选择当前平均奖励高的节点;
- 探索(Exploration):选择访问次数少、潜力未知的节点。
常用 UCB1 公式:
UCB = Q/N + c × sqrt(ln(N_parent) / N)
其中 Q 是累计奖励,N 是访问次数,c 是探索系数。
graph TD
Root[根节点] --> A[节点 A<br/>Q=10 N=5]
Root --> B[节点 B<br/>Q=3 N=1]
Root --> C[节点 C<br/>Q=8 N=4]
B -->|探索加分高| B1[优先探索 B]
2.3 STaR:让模型自己教自己推理
STaR(Self-Taught Reasoner)的核心流程:
- 模型自己生成大量推理过程和答案;
- 只保留答案正确的样本;
- 用这些正确的
(问题, 推理, 答案)数据微调模型; - 迭代重复。
flowchart LR
Q[问题] --> G[模型生成推理+答案]
G --> F{答案正确?}
F -->|是| S[加入训练数据]
F -->|否| D[丢弃]
S --> T[微调模型]
T --> Q
优点:不需要人工标注推理链;缺点:如果模型一开始生成能力差,容易陷入“错误循环”。
2.4 推理深度与响应延迟的权衡
推理模型思考越久,准确率越高,但用户等待越久。常用平衡手段:
- 动态早停:模型自己对答案有把握时停止思考。
- 预算控制:设置最大思考 token 数。
- 用户可选深度:比如“快速回答 / 详细推理 / 深度分析”。
- 投机推理:先用小模型快速生成草稿,再由大模型验证。
三、方法论选择:什么时候用什么技术?
不同问题适合不同解法。下面是一张实用的选择表:
| 目标 | 推荐方法 | 原因 |
|---|---|---|
| 快速迭代基本能力 | 提示工程 | 成本低、见效快 |
| 用户个性化记忆 | 提示工程 + 记忆系统 | 把用户历史注入上下文 |
| 案例库和事实知识 | RAG | 外挂知识库,减少幻觉 |
| 输出格式和语言风格 | SFT | 用成对数据训练模型习惯 |
| 领域基础能力 | SFT | 让模型学会领域表达和常识 |
| 领域深度思考能力 | RL / 推理模型 RL | 用可验证奖励优化推理 |
| 领域工具调用能力 | RL + Tool Calling | 奖励正确的工具使用 |
| 根据用户反馈持续优化 | RLHF / DPO | 把偏好信号转化为训练目标 |
flowchart TD
Need{需求是什么?} -->|知识/事实| RAG[RAG]
Need -->|格式/风格| SFT[SFT]
Need -->|快速验证| PE[提示工程]
Need -->|深度推理| RL[RL 推理训练]
Need -->|用户偏好| RLHF[RLHF/DPO]
Need -->|工具使用| Tool[RL + Tool Calling]
四、DeepSeek-R1 深度解析
4.1 R1 与 R1-Zero:两条路径
DeepSeek-R1-Zero 是纯强化学习的产物:直接在基座模型上用 GRPO 做 RL,没有任何 SFT 冷启动。它证明了:即使没有人工标注的推理数据,模型也能自发学会长思维链推理。
但它有两个明显问题:
- 可读性差:思维链中经常出现中英文混杂、格式混乱;
- 通用任务弱:在非推理任务(写作、翻译、对话)上表现下降。
DeepSeek-R1 则先用少量高质量 CoT 数据做 SFT 冷启动,然后再用 GRPO 做 RL。这样既保留了推理能力,又改善了可读性和通用能力。
flowchart LR
subgraph R1-Zero
B1[基座模型] --> RL1[纯 RL]
RL1 --> M1[推理强但可读性差]
end
subgraph R1
B2[基座模型] --> SFT[SFT 冷启动]
SFT --> RL2[RL 优化]
RL2 --> M2[推理强 + 可读 + 通用]
end
R1-Zero 的价值:它证明了大模型可以通过纯 RL 自发涌现复杂推理能力。这是通向“超越人类智能”的一条可能路径——因为模型不再依赖人类标注的解题思路,而是可以自己探索策略。
4.2 为什么 R1 在创意写作上也比基座模型更好?
这看似违反直觉:推理模型不是做数学题的吗?
实际上,R1 学到的不仅是“数学推理”,更是一种问题分解和自我评估的元能力。在创意写作中,它会:
- 分析用户需求和潜在情绪;
- 构思多个创意方向;
- 快速评估哪个更有趣;
- 输出最终内容。
这种“先想后写”的能力,让它即使思考过程较短,也能产出更有趣的内容。
4.3 为什么 R1 不用 PRM、MCTS、Beam Search?
DeepSeek 的论文明确提到,他们尝试过 PRM 和 MCTS,但效果不佳。原因:
- PRM:需要大量高质量的过程标注,成本高,且很难定义“哪一步好”。
- MCTS:在开放文本生成中,搜索空间是组合爆炸的,每一步的“走法”太多了。
- Beam Search:同样受限于巨大的候选空间,且不利于探索非确定性推理。
GRPO + 可验证奖励(如答案正确性)更简单、更可扩展。
4.4 GRPO vs PPO:为什么 R1 选择 GRPO?
PPO 训练时需要维护多个模型:Actor、Critic、Reward Model、Reference Model。其中 Critic 模型通常和 Actor 一样大,显存开销很高。
GRPO(Group Relative Policy Optimization)的改进:
- 不需要 Critic 模型;
- 对同一个问题采样一组回答;
- 用组内相对奖励计算优势函数(减去组内均值,除以标准差)。
flowchart TD
subgraph PPO
P[Prompt] --> A[Actor]
P --> C[Critic]
A --> R[Reward Model]
A --> Ref[Reference Model]
end
subgraph GRPO
G[Prompt] --> GA[Actor]
GA -->|采样 N 个回答| GR[组内相对奖励]
GR --> GN[归一化优势]
GA --> GRef[Reference Model]
end
优势值归一化解决了 PPO 中 Critic 估计不准的问题,同时大幅降低了显存和计算成本。
4.5 GRPO 中的 KL 惩罚项
KL 惩罚项衡量当前策略与参考策略(通常是 SFT 模型)的差异,防止模型在 RL 训练中“跑偏”。
- KL 太大:策略更新保守,学不到新能力;
- KL 太小:策略可能崩溃,输出乱码或 reward hacking。
合适的 KL 系数需要在探索能力和稳定性之间找平衡。
4.6 为什么 R1 的 SFT 要加 20 万条非推理样本?
如果只用推理数据做 SFT,模型会变成“只会做题的偏科生”。加入非推理样本(写作、翻译、对话、常识问答)可以:
- 保持通用语言能力;
- 防止模型在非推理任务上退化;
- 让最终模型既能深度思考,也能正常聊天。
4.7 如何把 R1 蒸馏到小模型?
蒸馏的核心是用 R1 生成的高质量数据(包括长思维链)去监督微调一个小模型。步骤:
- 用 R1 在目标领域生成大量
(问题, 思维链, 答案); - 清洗和筛选高质量样本;
- 在小模型上做 SFT;
- 在垂直领域任务上评估。
要保留特定领域能力,关键是蒸馏数据要覆盖该领域的典型问题和推理模式。
4.8 R1-Zero 为什么会多语言混杂?
R1-Zero 的奖励函数只关心最终答案是否正确,不关心中间过程用什么语言。由于基座模型是多语言训练的,它会自发选择任何能表达推理的语言。中文 prompt 可能触发英文思考,反之亦然。
R1 通过 SFT 冷启动,让模型先学会用规范、统一的语言输出思维链,解决了这个问题。
4.9 如何把 R1-Zero 方法扩展到主观领域?
R1-Zero 依赖可验证奖励,所以最适合数学、编程。扩展到创意写作、战略分析等主观领域,需要:
- 定义可自动评估的代理指标(如多样性、一致性、可读性);
- 用 LLM-as-Judge 作为奖励信号;
- 用人工偏好数据做 RLHF/DPO;
- 引入多轮自洽性评估。
但效果通常不如数学/编程稳定,因为“好文章”没有唯一答案。
五、DeepSeek 架构与训练系统创新
5.1 MLA:低秩压缩的 KV 缓存
多头注意力(MHA)每一层都要保存 Query、Key、Value。KV 缓存是推理时显存占用的主要来源。
MLA(Multi-head Latent Attention)的核心思想:
把 KV 压缩到一个低维“潜空间”,需要时再解压。
flowchart LR
X[输入] --> Q[生成 Query]
X --> K[生成 Key]
X --> V[生成 Value]
K --> C[低秩压缩]
V --> C
C --> KV[小 KV 缓存]
KV --> D[解压]
Q --> A[Attention]
D --> A
虽然 MLA 单 token 的 KV 可能比 MQA(Multi-Query Attention)多一点,但它保留了更多信息,模型性能更好。它本质上是对 (注意力头数, 隐藏维度) 这个高维空间做低秩压缩。
5.2 MLA 与 RoPE 位置编码的兼容性
RoPE(旋转位置编码)把位置信息直接编码进 Q/K 向量中。如果直接对 KV 做低秩压缩,位置信息会被破坏。
DeepSeek 的解决方案是把位置编码部分和可压缩部分解耦:保留一个带位置信息的短向量,把其余信息压缩到潜空间。这样既能低秩压缩,又不丢失位置信息。
如果用 ALiBi 等基于注意力偏置的位置编码,低秩压缩会引入与位置相关的偏置,更难处理。
5.3 DeepSeek MoE:为什么前 3 层用稠密连接?
MoE(Mixture of Experts)把每一层换成多个“专家网络”,每次只激活一部分。DeepSeek 的设计是:前 3 层保持稠密,后面用 MoE。
原因:
- 前几层负责提取基础特征(词法、句法、低级语义);
- 这些基础特征需要稳定、共享的表示;
- 如果早期就用 MoE,不同 token 可能路由到不同专家,导致基础表示不一致,影响后续层。
5.4 DeepSeek MoE vs Mixtral MoE
| 特性 | Mixtral MoE | DeepSeek MoE |
|---|---|---|
| 专家数量 | 较少(如 8 个) | 很多(细粒度专家) |
| 专家大小 | 较大 | 较小 |
| 共享专家 | 无 | 有共享专家始终激活 |
| 路由策略 | Top-2 | 更细粒度的负载均衡路由 |
DeepSeek 的细粒度专家分割让模型能组合更多专家能力;共享专家隔离确保通用知识始终可用,避免所有 token 都涌向少数专家。
5.5 专家负载均衡:防止“路由崩溃”
如果所有 token 都选择同一个专家,其他专家就浪费了,这叫“路由崩溃”。DeepSeek 通过辅助损失函数解决:
- 专家级平衡损失:鼓励每个专家处理的 token 数量均衡;
- 通信平衡损失:减少节点间通信开销;
- 设备级平衡损失:让不同 GPU 上的负载均衡。
flowchart LR
T[Token] --> R[路由网络]
R --> E1[专家 1]
R --> E2[专家 2]
R --> E3[专家 3]
E1 --> L[负载均衡损失]
E2 --> L
E3 --> L
5.6 多词元预测:一次预测多个未来 token
传统模型一次只预测下一个 token。DeepSeek-V3 的多词元预测(Multi-Token Prediction)会同时预测后面几个 token。
优势:
- 样本效率更高:每个训练位置提供多个监督信号;
- 推理更快:可以配合投机解码,一次验证多个 token。
5.7 FP8 混合精度训练
DeepSeek-V3 在大量矩阵计算中使用 FP8(8 位浮点)量化,包括 Linear 层和 Attention 中的矩阵乘法。为了降低精度损失,它采用了分组量化(tile/block-wise quantization):
- 把大矩阵切成小块;
- 每块独立计算 scale 和 zero-point;
- 对激活值和权重都这样做。
这样比全局量化更精细,损失更小。
5.8 DualPipe:双向流水线并行
训练超大模型时,流水线并行把模型分层放到不同 GPU 上。传统流水线有“气泡时间”——GPU 在等待上下游数据时空闲。
DualPipe 的创新是双向流水线:同时从前后两个方向传递数据,让 GPU 尽可能不空闲。结合专家并行,它还能平衡 MoE 中不同专家的负载,提高整体训练效率。
flowchart LR
subgraph 传统流水线
A[GPU 1] --> B[GPU 2]
B --> C[GPU 3]
C --> D[GPU 4]
style B fill:#f8cecc
style C fill:#f8cecc
end
subgraph DualPipe
E[GPU 1] --> F[GPU 2]
F --> G[GPU 3]
G --> H[GPU 4]
H -.-> E
style F fill:#e1f5e1
style G fill:#e1f5e1
end
六、扩展:垂直领域与多模态
6.1 在 QwQ-32B 上强化 Deep Research 能力
Deep Research 场景需要模型:搜索 → 浏览 → 总结 → 再搜索。构建 RL 训练数据时:
- 准备多轮搜索-总结任务;
- 奖励函数包括:最终答案正确性、引用来源覆盖度、信息是否过时、是否完成任务。
6.2 让 R1 支持图片推理
要把 R1 扩展到多模态,需要:
- 增加视觉编码器(如 ViT);
- 构建图片 + 问题 + CoT + 答案的训练数据;
- 奖励函数包括:答案正确性、推理过程是否与图片内容一致。
任务如走迷宫、地理定位、图表分析,都需要模型能把视觉信息和符号推理结合起来。
七、从面试题到工程实践
- 不要迷信大模型参数。同样参数的推理模型和普通模型,能力侧重点完全不同。
- 可验证奖励是 RL 训练的关键。数学、编程适合 RL;开放域生成更适合 RLHF/DPO。
- 测试时计算是新的 scaling 维度。未来提升模型能力,不一定只靠堆参数量,也可以让它“想得更久”。
- 架构创新是为了训练和服务更便宜。MLA、MoE、FP8、DualPipe 的目标都是在保持性能的同时降低成本。
- 蒸馏是把大模型能力落地到小场景的有效路径。关键是要有高质量的教师数据。
结语
Part 4 把我们从“怎么用大模型”带到了“怎么训练和优化大模型”的深处。对初级开发者来说,不必一次性掌握所有细节,但要建立几个核心直觉:
- 推理模型的本质是用更多测试时计算换准确率;
- RL 训练的关键是奖励信号设计;
- DeepSeek-R1 的成功说明:SFT 冷启动 + 可验证奖励的 RL 是一条务实的路径;
- 大模型训练不只是算法问题,更是系统工程问题(MLA、MoE、FP8、DualPipe 都在解决工程效率)。
如果你能理解这些,就已经具备了参与大模型应用和训练工程的基本视野。
参考:《生成式AI原理与实战 —— Part 4》,答案基于公开论文与工程实践整理。