模型训练
本章覆盖大语言模型从预训练到对齐的完整训练流程,帮助你理解如何将一个随机初始化的模型训练成有用的 AI 助手。
学习路线
| 主题 | 核心内容 | 预计时间 |
|---|---|---|
| 预训练 | 大规模语料上的自监督训练 | 1-2 周 |
| 数据集构建 | 数据收集、清洗、格式化 | 1 周 |
| 监督微调 (SFT) | 指令跟随能力的注入 | 1 周 |
| 偏好对齐 | RLHF、DPO 等对齐技术 | 1-2 周 |
| 推理模型 | O1/R1 范式、PRM、MCTS | 1-2 周 |
| 知识蒸馏 | 大模型能力迁移到小模型 | 1 周 |
训练三阶段
预训练 (Pre-training) → 监督微调 (SFT) → 偏好对齐 (Alignment) → 推理增强 / 蒸馏
│ │ │ │
海量文本学习语言能力 指令数据学习对话格式 人类偏好学习安全有用 推理能力 / 模型压缩理解这三个阶段的目标差异是把握大模型训练全貌的关键:预训练赋予模型"知识",SFT 教会模型"格式",对齐让模型"听话且安全"。
详细内容索引
agent-rl.md — Agent 强化学习 (757 lines)
- 在大模型体系中的位置 (L11)
- 为什么需要 Agent-RL? (L33)
- 静态对齐的局限 (L35)
- Agent-RL 的核心洞察 (L47)
- Agent-RL 核心架构 (L72)
- 经典 Agent-RL 循环 (L74)
- 三大核心组件 (L95)
- 训练算法 (L135)
- GRPO for Agents (L139)
- PPO for Agents (L192)
- GRPO vs PPO:Agent-RL 场景下的选择 (L229)
- Agent-RL 与文本 GRPO 的关键差异 (L244)
- Rollout 生成 (L256)
- 同步 Rollout (L260)
- 异步 Rollout (L274)
- SGLang 高吞吐推理 (L321)
- 多轮轨迹:Agent Rollout 的特殊结构 (L354)
- 奖励设计 (L384)
- Rule-based Rewards(规则奖励) (L388)
- Verifiable Environments (RLVE) (L426)
- Process Rewards vs Outcome Rewards (L454)
- 生产级训练框架:slime 架构 (L466)
- 整体架构 (L470)
- 三大模块详解 (L487)
- 参数同步与 Colocate 模式 (L540)
- 支持的模型 (L562)
- Agentic Training 的特殊挑战 (L570)
- 长轨迹问题 (L574)
- 稀疏奖励与信用分配 (L586)
- 环境多样性 (L620)
- 异步解耦 (L629)
- 训练加速 (L640)
- 实际应用案例 (L648)
- P1:物理奥赛推理 (L652)
- RLVE:400 个可验证环境 (L659)
- TritonForge:训练模型写 GPU Kernel (L667)
- OpenClaw-RL:个性化对话 Agent (L674)
- qqr (ArenaRL):开放式 Agent 进化 (L681)
- Agent-RL vs 传统对齐 (L688)
- 苏格拉底时刻 (L705)
- 面试考点 (L717)
- 推荐资源 (L745)
alignment-advanced.md — 对齐进阶 (345 lines)
- 在大模型体系中的位置 (L11)
- Constitutional AI (CAI) (L25)
- 核心思想 (L27)
- 宪法示例 (L50)
- 为什么 CAI 重要 (L60)
- RLAIF:AI 反馈替代人类反馈 (L74)
- 从 RLHF 到 RLAIF (L76)
- RLAIF 的效果 (L104)
- 局限性 (L112)
- Reward Hacking (L120)
- 什么是 Reward Hacking (L122)
- 为什么会发生 (L135)
- 缓解策略 (L147)
- 对齐税(Alignment Tax) (L173)
- 有用性 vs 安全性的矛盾 (L175)
- 如何降低对齐税 (L199)
- 可扩展监督(Scalable Oversight) (L228)
- 问题定义 (L230)
- 当前的研究方向 (L236)
- Red Teaming:对抗测试 (L262)
- 什么是 Red Teaming (L264)
- 常见攻击类型 (L268)
- 自动化 Red Teaming (L278)
- 苏格拉底时刻 (L314)
- 常见问题 & 面试考点 (L324)
- 推荐资源 (L337)
alignment.md — 偏好对齐 (991 lines)
- 在大模型体系中的位置 (L11)
- RLHF 概述 (L27)
- Bradley-Terry 偏好模型 (L39)
- Reward Model 训练 (L53)
- 模型架构 (L55)
- 训练(含 Margin Loss) (L79)
- LLaMA 2 的双奖励选择 (L102)
- 奖励后处理:Whiten + KL 惩罚 (L116)
- PPO (Proximal Policy Optimization) (L136)
- RLHF-PPO 需要四个模型 (L140)
- PPO 训练流程 (L165)
- KL 惩罚奖励 (L192)
- GAE (Generalized Advantage Estimation) (L203)
- PPO 的核心损失函数 (L224)
- DPO (Direct Preference Optimization) (L261)
- 从 RLHF 到 DPO 的数学推导 (L265)
- DPO 损失的直觉 (L291)
- PyTorch 实现 DPO (L297)
- DPO 完整训练循环 (L337)
- DPO 的过拟合问题与 IPO (L371)
- GRPO (Group Relative Policy Optimization) (L385)
- GRPO 损失函数 (L389)
- 步骤 1:Group Sampling(组采样) (L395)
- 步骤 2:Rule-based Reward(规则奖励) (L412)
- 步骤 3:Group Relative Advantage(组内相对优势) (L437)
- 步骤 4:GRPO Loss (L466)
- GRPO 中的 KL 散度分析 (L502)
- 三种 KL 估计方式 (L506)
- 为什么 K3 恒为正? (L518)
- GRPO 使用 K3 的原因 (L544)
- KTO (Kahneman-Tversky Optimization) (L564)
- 动机:为什么不需要成对数据? (L568)
- 前景理论 (Prospect Theory) 的启发 (L578)
- 数学公式 (L591)
- 数据格式 (L616)
- KTO 损失函数实现 (L627)
- KTO vs DPO 对比 (L679)
- 各方法对比 (L698)
- 更多对齐算法 (L714)
- ORPO (Odds Ratio Preference Optimization) (L718)
- CPO (Contrastive Preference Optimization) (L733)
- RLOO (REINFORCE Leave-One-Out) (L745)
- Online DPO (L757)
- PRM (Process Reward Model) (L769)
- TRL 实战:对齐训练实现 (L798)
- DPO 训练 (L802)
- GRPO 训练 (L831)
- PPO 训练 (L862)
- 奖励函数设计模式 (L898)
- 对齐算法选择指南 (L933)
- 苏格拉底时刻 💡 (L967)
- 常见问题 & 面试考点 (L975)
- 推荐资源 (L982)
continue-pretraining.md — 继续预训练 (319 lines)
- 在大模型体系中的位置 (L11)
- 为什么需要继续预训练 (L29)
- 通用 LLM 在专业领域的局限 (L31)
- 一个直观的例子 (L40)
- CPT vs SFT vs RAG:三种领域适配方案 (L53)
- 实现:继续预训练的关键技术 (L71)
- 数据准备 (L73)
- 学习率策略:低 LR Warmup (L89)
- 灾难性遗忘的缓解 (L110)
- 代码示例:基于 HuggingFace Trainer 的 CPT Pipeline (L130)
- 进阶:课程学习策略 (L236)
- 领域案例 (L251)
- 医学领域 (L253)
- 法律领域 (L260)
- 代码领域 (L267)
- 苏格拉底时刻 (L285)
- 常见问题 & 面试考点 (L299)
- 推荐资源 (L312)
datasets.md — 数据集构建 (550 lines)
- 在大模型体系中的位置 (L10)
- 预训练数据 vs 后训练数据 (L26)
- 预训练数据集构建 (L41)
- 数据来源与规模 (L43)
- 数据清洗流水线 (L77)
- SFT 数据格式 (L165)
- Alpaca 格式 (L167)
- ShareGPT 格式 (L181)
- OpenAI 格式 (L197)
- Chat Template (L211)
- 合成数据生成 (L292)
- Self-Instruct (L294)
- Evol-Instruct (WizardLM) (L311)
- 使用 GPT-4 / Claude 生成数据的最佳实践 (L335)
- Seed Task 设计 (L343)
- 质量把控 (L354)
- 数据增强技术 (L368)
- Rejection Sampling (L370)
- Chain-of-Thought 扩展 (L384)
- 多样性增强 (Persona-driven) (L396)
- 难度递增 (Auto-Evol) (L408)
- 偏好数据构建 (L420)
- Chosen/Rejected pair 的收集 (L422)
- 人工标注 vs 模型标注 (L436)
- Bradley-Terry 模型的数据需求 (L446)
- 数据质量评估 (L460)
- 自动评估指标 (L462)
- Reward Model 打分 (L472)
- 去重与去污染验证 (L486)
- 苏格拉底时刻 (L511)
- 常见问题 & 面试考点 (L525)
- 推荐资源 (L540)
distillation.md — 知识蒸馏 (594 lines)
- 在大模型体系中的位置 (L11)
- 蒸馏的动机 (L29)
- 为什么需要蒸馏? (L31)
- 蒸馏的本质:暗知识(Dark Knowledge) (L42)
- 经典知识蒸馏(Hinton 2015) (L58)
- 核心框架 (L60)
- Temperature Scaling (L78)
- 完整数学推导 (L120)
- PyTorch 实现 (L167)
- LLM 时代的蒸馏方法 (L217)
- 黑盒蒸馏:数据驱动 (L221)
- 白盒蒸馏:知识深度对齐 (L257)
- 推理蒸馏:蒸馏 CoT 能力 (L303)
- 实用蒸馏流水线 (L320)
- 数据生成流水线 (L322)
- 训练策略 (L371)
- Alpaca / Vicuna 等项目的蒸馏实践 (L393)
- Alpaca:指令数据蒸馏的先驱 (L395)
- Vicuna:对话数据蒸馏 (L412)
- 蒸馏的法律和伦理问题 (L424)
- 蒸馏 vs LoRA vs 量化 (L435)
- 代码实战:用 Temperature Scaling 实现简单蒸馏 (L463)
- 苏格拉底时刻 (L569)
- 常见问题 & 面试考点 (L577)
- 推荐资源 (L585)
pretraining.md — 预训练 (893 lines)
- 在大模型体系中的位置 (L11)
- 预训练的本质 (L25)
- Next Token Prediction 目标 (L27)
- Causal Language Modeling vs Masked Language Modeling (L108)
- 预训练赋予模型什么能力? (L120)
- Scaling Laws (L132)
- Kaplan et al. (2020) 的发现 (L134)
- Chinchilla 法则 (L152)
- 对实践的指导意义 (L173)
- Scaling Laws 深度:从理论到实践 (L181)
- 数据准备 (L444)
- 数据来源 (L446)
- 数据清洗流水线 (L480)
- FineWeb 与 RedPajama (L505)
- 数据配比 (L516)
- 优化器 (L536)
- AdamW 详解 (L538)
- 学习率调度 (L612)
- Mixed Precision Training (L670)
- FP32, FP16, BF16 的精度对比 (L672)
- Loss Scaling 技巧 (L680)
- 为什么 BF16 比 FP16 更适合训练 (L690)
- Gradient Checkpointing (L704)
- 内存 vs 计算的 trade-off (L706)
- 实现原理 (L712)
- 训练监控 (L728)
- 关键指标:loss, grad norm, learning rate (L730)
- Loss Spike 的处理 (L761)
- MFU (Model FLOPs Utilization) 的计算 (L771)
- 预训练实战 (L785)
- 完整训练配置示例 (L787)
- 训练成本估算 (L838)
- 苏格拉底时刻 (L855)
- 常见问题 & 面试考点 (L869)
- 推荐资源 (L884)
reasoning.md — 推理模型 (1005 lines)
- 在大模型体系中的位置 (L11)
- 从 System 2 Thinking 到 Test-time Compute Scaling (L29)
- Reasoning Token 与 Chain-of-Thought (L46)
- 什么是 Reasoning Token? (L48)
- Process Reward Model (PRM) (L69)
- ORM vs PRM (L71)
- PRM 的数学形式 (L92)
- PRM 训练数据构建(PRM800K) (L116)
- PRM 模型架构 (L133)
- Monte Carlo Tree Search (MCTS) (L161)
- MCTS 核心思想 (L163)
- MCTS 四步循环 (L179)
- 代码示例:简化版 MCTS for LLM Reasoning (L197)
- MCTS 在推理模型中的应用 (L272)
- GRPO for Reasoning(DeepSeek-R1 方案) (L283)
- 无需 Reward Model 的 RL 训练 (L285)
- 规则奖励函数设计 (L305)
- "Aha Moment" 涌现 (L337)
- GRPO 推理训练核心逻辑 (L365)
- 推理蒸馏 (L407)
- 用大推理模型的 CoT 教小模型 (L409)
- 蒸馏 vs RL 的效果对比 (L427)
- Scaling Law for Test-time Compute (L436)
- 代码实战:PRM 训练 + MCTS 搜索 + Best-of-N 采样 (L455)
- Part 1:PRM 训练代码实战 (L465)
- Part 2:MCTS 搜索实现——完整四步循环 (L577)
- Part 3:PRM 引导的逐步验证搜索 (L766)
- Part 4:端到端示例——用 MCTS + PRM 解 GSM8K 数学题 (L850)
- 苏格拉底时刻 (L980)
- 常见问题 & 面试考点 (L988)
- 推荐资源 (L996)
rl-basics.md — 强化学习基础 (868 lines)
- 在大模型体系中的位置 (L11)
- RL 核心概念 (L25)
- 1.1 Agent-Environment 交互 (L27)
- 1.2 核心术语表 (L46)
- 1.3 MDP 框架 (L58)
- 1.4 累积回报 (Return) (L78)
- Bellman 方程 (L89)
- 2.1 Value Function 的递推关系 (L91)
- 2.2 Bellman 最优方程 (L113)
- 2.3 代码验证:手算 Bellman 方程 (L129)
- 动态规划 (L172)
- 3.1 Policy Evaluation(策略评估) (L176)
- 3.2 Policy Iteration(策略迭代) (L184)
- 3.3 Value Iteration(值迭代) (L190)
- 3.4 代码:4x4 Grid World 的 Value Iteration (L200)
- Monte Carlo 方法 (L253)
- 4.1 First-Visit MC 估计
(L257) - 4.2 MC 估计
+ epsilon-Greedy 改进 (L300)
- 时序差分 (Temporal Difference) (L345)
- 5.1 TD(0) (L349)
- 5.2 SARSA(On-Policy TD Control) (L359)
- 5.3 Q-Learning(Off-Policy TD Control) (L398)
- 5.4 SARSA vs Q-Learning:On-Policy vs Off-Policy (L435)
- DQN:从 Q-Learning 到深度强化学习 (L449)
- 6.1 为什么需要 DQN? (L451)
- 6.2 两个关键技巧 (L455)
- 6.3 DQN 完整实现 (L473)
- Policy Gradient (L558)
- 7.1 从 Value-Based 到 Policy-Based (L560)
- 7.2 策略梯度定理 (L569)
- 7.3 对数导数技巧 (Log-Derivative Trick) 推导 (L583)
- 7.4 REINFORCE 算法 (L623)
- 7.5 从 REINFORCE 到 PPO 的演化 (L706)
- 从 RL 到 RLHF 的桥梁 (L732)
- 8.1 LLM 生成 = RL 序贯决策 (L734)
- 8.2 RLHF 的 RL 视角 (L746)
- 8.3 为什么需要 KL 惩罚? (L768)
- RL 方法总览 (L785)
- 苏格拉底时刻 (L808)
- 面试考点 (L819)
- 推荐资源 (L856)
sft.md — 监督微调 (710 lines)
- 在大模型体系中的位置 (L11)
- 什么是监督微调? (L23)
- 预训练模型的"复读机"问题 (L25)
- SFT 的核心思路 (L41)
- Full Fine-tuning (L62)
- LoRA:低秩适配 (L83)
- 核心原理 (L85)
- PyTorch 实现 LoRA (L99)
- 替换模型中的 Linear 层 (L144)
- 关键参数详解 (L166)
- 使用 PEFT 库(推荐生产用法) (L175)
- QLoRA:量化 + LoRA (L193)
- 三大技术 (L197)
- 实现 QLoRA 核心:量化线性层 (L203)
- QLoRA = 量化 + LoRA (L234)
- Transformers 快捷调用 (L248)
- SFT 数据集准备 (L265)
- 数据格式对比 (L267)
- Chat Template:对话模板 (L277)
- Token 级别的数据处理(含 Label Masking) (L302)
- Padding 与 Collate 函数 (L334)
- 完整 SFT 训练流程 (L360)
- 数据加载 (L362)
- 训练循环 (L389)
- 推理验证 (L426)
- 训练参数调优指南 (L448)
- TRL SFTTrainer 实战 (L461)
- 基本用法 (L465)
- Chat Template 处理 (L488)
- 数据格式详解 (L496)
- Packing(序列打包) (L517)
- LoRA 集成 (L540)
- 多轮对话训练 (L563)
- 数据格式 (L567)
- 训练要点 (L582)
- 训练加速与显存优化 (L602)
- Gradient Checkpointing (L606)
- Mixed Precision 混合精度训练 (L619)
- DeepSpeed ZeRO (L634)
- Gradient Accumulation (L649)
- Flash Attention (L660)
- vLLM 集成 (L673)
- 苏格拉底时刻 💡 (L688)
- 常见问题 & 面试考点 (L695)
- 推荐资源 (L702)