reading-notes — The RLHF Book(Nathan Lambert, Manning 2025)
边读边记。格式:原文章 file → 要点、关键数字、可引段落(行号=text 文件行号)。 导航章跳过:01-fm(版权)、03-fm(目录)。02-fm Welcome 是作者自述,粗读即可。
04-ch01-1-overview.txt(第 1 章 Overview,29k 字符)
- 核心主张:RLHF 是把「难以明说的人类偏好」塞进 AI 的技术;ChatGPT 后成名。
- 三步流水线(L29-35):①语言模型能答话(ch4)→ ②收集人类偏好数据训奖励模型(ch5)→ ③用 RL 优化器对着奖励模型优化(ch6 / 附录 a)。
- post-training 三件套(L54-71):IFT/SFT(学格式)、PreFT 偏好微调(RLHF 主场)、RLVR(可验证奖励,最新)。RLHF 统治第二块。
- 关键例子(L107-113):Llama 3.1 405B Base 对 "The president of the united states in 2006 was" 续写出一堆网页噪音(George W. Bush…加上 metadata 垃圾);Tulu 3 405B(同 base)答得干净利落。→ RLHF 改变的是 style/format,不是知识。
- RLHF vs IFT 机制区别(L304-310):IFT 是 per-token 模仿具体答案;RLHF 在 response 级别调,告诉模型「更好的回答 长什么样」+ 负反馈 → 对比损失(contrastive loss)。
- RLHF 代价(L316-322):要训奖励模型、代理目标易过优化、更贵、长度偏差(length bias)。
- 1.2 elicitation interpretation(L340-370):post-training=「引出」base model 潜力;F1 底盘类比;OLMoE Instruct v1→v2 只改 post-training,评测 35→48(L352)——好数字!GPT-4.5 评价(L364)。
- LIMA 表面对齐假说批判(L376-406):「alignment 只是学 style」对了一半;几千条样本能改变模型但不「superficial」;RLHF 不是 vibes。
- 1.3 历史(L424-467):Alpaca/Vicuna/Koala/Dolly 时代 → 怀疑 RLHF 时代("instruction tuning is enough for alignment")→ DPO 时代(2023-05 论文,Zephyr-Beta/Tulu 2 靠更低学习率才把 DPO 跑起来,L448!)→ Llama 3.1/Nemotron 340B 报告显示 closed lab 的 post-training 复杂得多。UltraFeedback 一年后还是 SOTA(L455)。「Chris Manning literally thanked me for saving DPO」(L448)——作者亲历,可引。
- 1.4 未来(L479-491):RLHF 是 RL 进 LLM 的桥;o1 之后聚光灯转向 RLVR;核心仍是「把人类价值观映射进系统」。
- 引用列表给出经典论文时间线:Christiano 2017 → summarization 2020 → InstructGPT 2022。
05-ch02-2-a-tiny-history-of-rlhf.txt(第 2 章,11.6k)
- 三个时代(L26):2018 前(RL on preferences)/ 2019-2022(RLHF on LMs)/ 2023-(ChatGPT era)。
- TAMER 2008(L50):人给 agent 动作打分学 reward model;COACH:人反馈调 advantage。
- Christiano et al. 2017(L56):Atari 轨迹两两比较 ——RLHF 开山。
- 2019 Ziegler et al. Fine-Tuning LMs from Human Preferences(L74):现代术语在这里定型(reward models、KL 散度正则、feedback diagrams)。
- 应用清单(L74):summarization 2020、递归摘要书籍 2021、InstructGPT 2022、WebGPT 2021、GopherCite、Sparrow。
- 奠基议题(L80-92):reward model over-optimization(Gao/Schulman/Hilton 2023)、LM 作为 alignment 研究对象(Askell 2021)、red teaming。
- ChatGPT 官方公告原文(L115):"same methods as InstructGPT, but with slight differences in the data collection setup"。
- 今天:process reward(ch5)、DPO 系(ch8)、execution feedback/o1 系(ch7)。
06-ch03-3-training-overview.txt(第 3 章,15k)
- RL 基本设定(L50-82):agent/policy/state/action/reward/trajectory;Eq 3.1 轨迹分布;Eq 3.2 优化目标;折扣因子 γ。
- CartPole 例子(L101-127):state=位置/速度/角度/角速度,action=左/右推,reward=每步存活 +1,deterministic dynamics + Euler 积分。→ 好的主走查素材(具体数字:m_c=1.0, m_p=0.1, l=0.5, g=9.8)。
- RLHF 对标准 RL 的三处改造(L139-152):①reward 函数→学习的 reward model;②没有状态转移(prompt 是初始状态,action 不影响下一个状态);③response 级别整体给分(bandit problem)。
- Eq 3.3:单轮问题,无 horizon 无 discount。
- 3.1.3 正则(L195-208):从强 base model 出发 → 要防漂移;reference policy;KL 散度惩罚 Eq 3.4;「KL budget」概念(L214)。
- 3.1.4 工具清单(L226-249):RM(ch5)、IFT(ch4)、rejection sampling(ch9)、policy gradients(ch6)、direct alignment(ch8)。
- 3.2 三份菜谱:
- InstructGPT(L277-290):IFT ~10K 样本 → RM ~100K pairwise prompts → RLHF ~100K prompts。10💯100 的数据比例!
- Tulu 3(L335-352):IFT ~1M(主要合成数据,GPT-4o/Llama 3.1 405B 生成)→ on-policy 偏好数据 ~1M 对 → RLVR ~10K prompts。
- DeepSeek R1(L364-384):cold-start 100K+ on-policy 推理样本(来自 R1-Zero RL checkpoint,重过滤)→ 大规模 RLVR「直到收敛」→ 拒绝采样(3/4 推理 + 1/4 通用)→ 混合 RL(可验证奖励+偏好 RM 打磨)。
- Llama 2 记录了 5 个 RLHF 步骤(L309);Cohere Command A 用专门模型 + 权重合并(L322)。
07-ch04-4-instruction-fine-tuning.txt(第 4 章,15k)
- IFT 兴起两线汇合(L32):text-to-text 统一框架(T5/FLAN/T0/Natural Instructions)+ 预训练扩展/prompting 证明单模型可泛化。
- chat template(L50-244):base model 只认识 <bos_token>/<eos_token>/padding;ChatML 模板(<|im_start|>role\n…<|im_end|>)完整代码;三角色 system/user/assistant;Jinja 代码存在 tokenizer 里(apply_chat_template);Zephyr/Tulu 变体。
- 走查素材(L152-162):"How many helicopters can a human eat in one sitting?" → 完整 token 序列;海盗风格 system prompt(L133);多轮例子(L181-190);assistant 回答 "Oh just 6."。
- OpenAI 指令层级(L201, Wallace et al.):system > user,高层指令不一定对用户可见。
- 4.2 最佳实践(L264-279):高质量数据是 关键(completions 才是学习对象,prompt 通常不计 loss);~1M prompts 就够做优秀 post-training;prompt 分布要贴近下游;多阶段训练能容忍单阶段噪音。
- 4.3 实现(L284-305):batch 更小(OLMo 2:预训练 1024/2048 → post-training 256 序列);prompt masking(只学 completion);multi-turn masking 两派(只学最后一轮 vs 掩 user 学全部 assistant);loss 同预训练。
08-ch05-5-reward-modeling.txt(第 5 章,33k)
- RM 是 RLHF 的代理目标;输入文本输出标量。Bradley-Terry 模型(1952!)是标准形式。
- BT 数学(L59-155):Eq 5.1 p(y1≻y2)=σ(...);潜强度重参数化;Eq 5.3/5.4;两种等价 loss(InstructGPT 版 vs Askell 版,σ 与 exp 形式);只有分差有意义(加常数不变)。
- 实现(L167-268):AutoModelForSequenceClassification 式抽象;LM + 线性头 → 单 logit;代码:loss = -logsigmoid(r_chosen - r_rejected).mean();取最后一个非 padding token(EOS)的 hidden state 做 sequence rep;只训 1 epoch 防过拟合(L268)。
- 变体:
- margin loss(L287-311):Llama 2 用 1-5 分差作 margin(m=5-2=3 例子);Llama 3 删掉了 margin(规模大了收益递减,L311)。
- 每个 prompt 多个比较的平衡(L317-329):InstructGPT 按 prompt 加权,同 prompt 放同 batch,否则过拟合到 prompt。
- K-wise loss(L337-361):Starling 7B/34B 用 Plackett-Luce;k=2 退化成 BT。
- ORM(L367-495):每个 token 输出正确概率;Cobbe 2021 verifier;per-token 二分类 cross-entropy;来源是「对/错答案」不是偏好对;Let's Verify Step by Step 用的 ORM 没有 LM loss 部分;术语混乱(有的文献沿用 Cobbe 定义,有的不)。
- PRM(L501-616):每步推理结尾给分(-1/0/+1 三类);TRL 的 step separator 打包法;step 结尾 token 处 cross-entropy;「标签只管这步对不对,不管是否在正路上」(L550)。
- 四种东西对比表(Table 5.1,L628-688):RM(EOS 一个分,对比损失)/ ORM(per-token 正确率)/ PRM(每步一个分)/ Value Function(期望回报,回归)。注:value function 常取 discount=1,变得更像 ORM;PRM 可以用 rollout 的结果当步骤监督。
- Generative RM / LLM-as-a-judge(L698-741):MT-Bench 判官 prompt 全文(A/B/平局格式);常见技巧:温度 0 降方差;但 generative RM 在 RM 评测上仍落后专门 RM(L735)。
- 5.9 RewardBench 生态(L753-782):作者自己的 RewardBench;一大堆 benchmark 名单(文本/数学/PRM/agent/多模态)。
09-fm-this-chapter-covers.txt(ch06 开篇,8.5k)
- RLHF 训练环(L24-43):policy 生成 completion → RM 打分 → RL 优化器梯度步;fig 6.1 图说提到「frozen initial model 算 log prob 算 KL 惩罚防漂移」。
- on-policy 数据定义(L24):当前模型自己生成的数据。
- 三主角:PPO(ChatGPT 用的变体)、REINFORCE 系(简单、无 RM 时省显存省 GPU、无 GAE)、GRPO(推理任务流行)。
- 记号(L55):s/a vs x/y——RLHF 实现常把整条 completion 当一个 action。
- return/value function 定义;Eq 6.4 目标;rollout=从当前 policy 采样。
- policy gradient 推导链(L152-310):log-derivative trick → ∇log P(τ) 中环境动态项消掉,只剩 ∇log π → Eq 6.12 一般形式,Φ 可取:总奖励/后续奖励/baselined 版/Q/A^π/TD residual(Schulman 2015 分类法)。advantage 理论方差最低(L329)。
- LM 特殊情形(L343-356):deterministic policy 下 V(x)=r;Eq 6.13 advantage trick = reward - prompt 的 value + 整句的 discounted value。
10-ch06-01-6-1-1-vanilla-policy-gradient(1.5k)
- 核心问题:高方差(小 rollout 集合估计 return;温度高噪音大;稀疏奖励 0/1 更糟,L20)。
- 解法:baseline(批内平均/移动平均)。「Even these baselines can de-bias the gradients」。
11-ch06-01-6-1-2-reinforce(1.5k)
- REINFORCE 可能是 backronym:「REward Increment = Nonnegative Factor X Offset Reinforcement X Characteristic Eligibility」(L13)。
- 三件套:学习率 / baseline(offset)/ 逐 token 归因(log prob)。Eq 6.16-6.18。
- REINFORCE = vanilla PG 的 Monte Carlo 梯度估计实现。
12-ch06-01-6-1-3-rloo(2.8k)
- RLOO:baseline = 同 prompt 其他样本的平均奖励(leave-one-out)。前提:每个 prompt 采多条。
- 关键对比(L58):GRPO vs RLOO 差在 KL 放哪(GRPO 放 loss,RLOO/传统 PG 放 reward 里)+ 有没有 PPO 式 clipping。RLVR 时代 KL 越来越多人干脆关掉!
- value network vs 无 value network(L64):RLOO 把 sequence 级 advantage 广播到每个 token;PPO 每 token 不同值;GRPO 保留 sequence 级 advantage 但 KL 作为 per-token 项加进 loss。
13-ch06-01-6-1-4-ppo(11.7k)——承重章
- PPO = Deep RL 基石(OpenAI Five DOTA 2)。Eq 6.22 目标;ratio = π_θ/π_θ_old 来自 importance sampling(重用旧 policy 数据)。
- clip 到 [1-ε, 1+ε] 防单步更新过猛;trust region 概念来自 TRPO(前身)。
- 六种 case 表(L132-321):A>0 时 ratio>(1+ε) → 不更新(已经够大了,防过强化);A<0 时 ratio<(1-ε) → 不更新(防过压制)。trust region 内 PPO ≈ 标准 PG。
- PPO 的 loss 是对 min 的两个项取 max(=更悲观/更小的更新)(L91 实现 §:「taking the maximum selects the more pessimistic gradient」)。
- value function(L338-344):额外一份模型拷贝预测 per-token value;学习目标可选 GAE 或 Monte Carlo;PPO 两个 loss(policy + value)。
- 代码(L357-410):Monte Carlo return 反向累积;value clipping(epsilon_v=0.2);advantages=(targets - v_pred).detach()。
- 实践:每批 1-4 次梯度步后更新 old policy(L95)。
14-ch06-01-6-1-5-grpo(5.4k)——承重章
- GRPO 出自 DeepSeekMath(L7),用于 DeepSeek-V3/R1。= PPO 式 surrogate loss 但不学 value function:省一份模型显存(3 份→2 份)+ 避开「从 LM backbone 学 value function 没有最佳实践」的坑。
- 做法:同一 prompt 采 G 条 completion + G 个 reward,Monte Carlo 估计 baseline;每 token 分配相同的 group 相对值。
- Eq 6.28 advantage = (r_i - mean(group)) / std(group)。
- 直觉(L66):「模型学着更像被标对的答案、更不像其他答案」。GRPO 常用远多于 PPO 的每 prompt 样本数(advantage 完全靠组内相对值)。
- std 归一化的偏差(L72):对「几乎全对/全错」的 prompt,std 小 → advantage 被放大 → 奖励低方差问题。Dr. GRPO(GRPO Done Right,Liu et al. 2025)提议去掉 std 项;代价是压低「大多错、个别对」的高价值难题的权重——而那正是最该学的信号!
- Dr. GRPO advantage × (K-1)/K 与 RLOO 只差常数倍(L84-116)——算法相互纠缠的证据。
- process supervision 版 GRPO:advantage = 后续步骤归一化奖励之和(L78)。
15-ch06-01-6-1-6-gspo(4k)
- importance sampling 的必要性两场景(L26):①同批多次梯度步;②异步训练(vLLM 推理端 vs FSDP 训练端权重不同步)。
- token 级 clip 的失败模式(L32):ratio 出界的 token 梯度=0 →「token dropping」——稀有但关键的 token(低概率的推理关键步)永远学不会!
- GSPO:sequence 级 importance ratio,几何平均(长度归一化,防长序列数值问题);IS 修正粒度 = 奖励粒度(L95)。总结:「GRPO with sequence-level importance ratios」。
- 动机:MoE 大模型 token 级 ratio 数值不稳;单个大 ratio token 会主导更新(L44)。
16-ch06-01-6-1-7-cispo(2.2k)
- CISPO(MiniMax-M1):clip importance weight 本身(不是 objective),保留所有 token 的梯度;stop-gradient on 权重;回到 REINFORCE 式。
- PPO/GRPO clip objective → 稀有 token 梯度被丢;CISPO clip weight → 每 token 仍有 ∝ advantage 的梯度,只是权重限幅。偏差-方差交换(L33)。
- GSPO 和 CISPO 都是 MoE 大模型玩家搞的(MiniMax、Qwen 系)。CISPO 支持非对称 clip(与 DAPO clip-higher 呼应);TOPR 相关(正奖励不做 IS 修正,负奖励 clip)。
17-ch06-01-6-1-8-comparing-algorithms(3.4k)+ Table 6.1
- 对比表维度:on/off-policy(推导层面)、是否要 reference policy(优化本身,非 KL)。
- 实现细节坑(L33):生成被截断 → RM 打分 out-of-distribution → 解法:只在 eos_token 上跑 RM 打分,过长给惩罚。
- value network 初始化(L45):InstructGPT/Tulu 3 标准=用 RM 初始化 value network!
- reward normalization/whitening(0-1 归一 vs 零均值单位方差);KL 估计器多种近似(joschu.net kl-approx);KL controller(老 PPO 动态调,现代多静态)。
18-ch06-02-6-2-1-policy-gradient-basics(1.4k)
- 最简实现:pg_loss = -advantages * ratio;ratio 来自 log-prob 差。三个 case:正 advantage → 增大概率;负 → 减小;零 → 不动。
19-ch06-02-6-2-2-loss-aggregation(7.4k)——好数字!
- 三种聚合:①per-sequence(GRPO 标准):每条序列等权;②per-token(DAPO):每 token 等权;③fixed-length(Dr. GRPO):除以 max_gen_len。
- 书中例子(L99-118):seq_1_losses=[1,1,1,1,10] (5 token, mean 2.8), seq_2_losses=[1,1,1,1,1,1,1,1,1,10] (10 token, mean 1.9)。Strategy 1 下短序列每 token 梯度更大。
- 代码跑出的梯度(L181-200):masked_mean → 短序列 0.25 vs 长序列 0.1429;masked_sum(÷7) → 两者都 0.1429;token-level → 0.0909。
- bandit vs MDP framing(L218-241):bandit=整条 completion 一个 action、标量奖励广播;MDP=每 token 是 action、学 value function 算 GAE。RLOO/GRPO 偏 bandit;PPO 偏 MDP;DPO/A-LoL 也是 sequence-level 目标。
- bandit 例子代码(L255-260):reward=[3.0,1.0] → advantage [1,-1] 广播;MDP 例子:GAE 逐 token [0.2,0.5,0.8,1.5] 变化。
20-ch06-02-6-2-3-asynchronicity(3.9k)
- 完全 on-policy 理论上要求严格,实践中「slightly outside of the theoretical proofs」;「designing for what actually works」(L7)。
- 架构:learners(训练 GPU)与 actors(采样 GPU)分开,Ray 协调,推理引擎 vLLM;两条队列(L20-27,OLMo 图)。
- 推理模型时代:单条答案 10K-100K+ token → 生成为瓶颈;一条慢拖累全批(多数算力闲置)。
- sequence-level packing:短样本堆叠+巧妙 mask。
- 完全异步/跨数据中心(L39):INTELLECT-2;fully off-policy PG(TOPR)。
21-ch06-02-6-2-4-ppo-implementation(4.2k)
- 完整 PPO 代码六步(L20-60):①reward-beta*per_token_kl;②advantage=reward-values.detach() 再批内标准化;③ratio=exp(new_logps-old_logps),双项取 max,eps=0.2;④vf_loss=0.5(rewards-values)²;⑤合并+completion_mask;⑥clip_frac/approx_kl 指标。
- 重要澄清(L13):old logprobs 是「采样时的 policy」,reference policy 只用于 KL 惩罚。
- 1 步梯度时 PPO 退化(L109-121):θ=θ_old → ratio=1,clipping 逻辑整个删掉,退化成 REINFORCE 式更新。「实践中 PPO/GRPO 常只用 1 步」(6.3.2)。
- torch.max = 取更悲观(更小更新)的原因:最小化负 loss(L91)。
22-ch06-02-6-2-5-grpo-implementation(4.9k)
- GRPO 实现三差异(L77-89):①advantage 用组内 mean/std 归一化(不是 value function);②没有 value network(无 vf_loss);③KL 加在 loss 上(不是从 reward 里减)。
- KL 形状 [B, L, N] (L18)。
- RLOO TRL 实现(L107-119):reshape(k,N);baseline=(sum(0)-self)/(k-1)。
23-ch06-03-6-3-1-gae(3.4k)
- GAE:多步 advantage 估计的指数加权平均;λ 控 bias-variance(λ=0 单步 TD,λ=1 全轨迹);LLM 微调常用 λ=0.95(L7)。
- 代码(L59-89):反向循环,delta=r_t+γ·not_done·V_{t+1}-V_t;gae=delta+γλ·not_done·gae;targets=advantages+values 给 value 回归;advantages.detach() 给 policy loss。
- terminal 处 not_done=0 → 重置累积 → packing 友好。
- LM RLHF γ 常 =1(短序列、无折扣信用分配,L87)。
24-ch06-03-6-3-2-double-regularization(1.7k)
- RLHF 有两层正则:①PPO 内建步长限制(clip);②KL 距离惩罚(对 reference)。
- 关键洞见(L25):LM 微调场景 PPO/GRPO 常每批只跑 1 次梯度步 → clip 永远不触发 → 真正起作用的是 KL。PPO 与 REINFORCE 的差异在微调场景远不如从头训练重要。
- clip fraction = 被裁剪样本百分比,可监控。
25-ch06-03-6-3-3-further-reading(9.2k)
- P3O(直接用 pairwise 数据);CoPG(Cohere Command A 用,=IPO+vanilla PG 的推广);ReMax(为 RM 推理不确定性设计的 baseline);MDPO(Apple/Kimi k1.5 用,镜像下降)。
- DAPO 四改(L25):①clip-higher(非对称 ε,正方向更大步,鼓励探索);②dynamic sampling(删掉全对/全错样本——没有学习信号);③token-level loss;④过长软惩罚。
- VAPO:DAPO 优化+Value-Calibrated PPO+预训练 value function+长度自适应 GAE,证明 value-based 对 GRPO 的优势。
26-ch07-reasoning(41k)——承重章
- LeCun 蛋糕比喻(2016 NeurIPS):无监督=蛋糕体/SFT=糖霜/RL=樱桃。书主张:RLVR 让这个比喻「兑现」了。
- RLVR 定义(L73):RLHF 的 reward model 换成打分函数,答案对=1 否则=0。
- RLHF vs RLVR 打分对比(L79-133):opportunity cost 解释题(主观)vs「20 以下素数之和」(\boxed{77},正则抽取,verification: extracted_answer == 77 Reward = 1)。
- 代码验证例子(L158-184):fib(n) 单元测试,全过=1,有挂=0,或按通过比例部分给分。「这些领域模型对过优化鲁棒,多数配置干脆不用 RM」。
- RLVR 命名史(L196):作者团队本想叫 RLGT(ground truth);verifier 可以验证「多个正确解」不只单一 ground truth。
- goldfish 诗对比(L215-317):DeepSeek V3 直接给诗;R1 先生成
token(头脑风暴意象→韵律→结构)再答。思考 token 可达数千。 - RLVR 训练环(L331-348):采样多个答案 → 向正确答案梯度步 → 重复 revisit 同一批题。「简单的循环+好数据分布+稳的训练设施」→ 泛化到没见过的题。
- 7.1.1 为什么 RL 现在能用了(L372-392):稳定性可解;开源工具(TRL/Open Instruct/veRL/OpenRLHF);只有 2024 年后的前沿 base model 扛得住推理训练——底子能力是前提。
- 7.1.2 RL 训练 vs 推理时扩展(L398-416):test-time scaling 更早就有(value-guided sampling、repeated sampling/Large Language Monkeys);RL 训练是通往推理时扩展律的「短路径」;RLHF 长度偏差(边际收益换长度)vs RLVR 长度与真实性能相关。
- RLVR 用几百上千个 epoch 重复少量数据 vs SFT 1-2 epoch(L434)。
- 7.2.1 o1/R1 之前的推理研究(L458-470):STaR(2022,近似 policy gradient,cross-entropy 代替 log-prob)、Quiet-STaR(答题前先生成 token)、TRICE(MCMC 式 EM)、VinePPO(数学二值奖励)、RLVF(定理证明 verifier 反馈)、Tulu 3(简单 PPO trainer+保持通用性能)。
- 7.2.2 Table 7.1:R1(2025-01-22)/Kimi 1.5/Open-Reasoner-Zero/Seed-Thinking/Phi-4/Llama-Nemotron/INTELLECT-2(首个全球去中心化 RL 训练)/MiMo/Qwen3/Skywork OR-1/MiniMax-M1(CISPO)/Kimi K2/GLM-4.5/OLMo 3 Think(220 GPU 四周)…一直到 2025-12。
- 7.2.3 共同做法(L714-759):
- 离线难度过滤:起始模型 100% 或 0% 解出的题没有梯度;筛出解对率 20-80% 的题(采 N=16 条验证)。
- 批内在线过滤/课程表(Kimi 1.5/Magistral 等)。
- 去掉 KL 惩罚(RAGEN/Magistral/ORZ/Skywork):RL 拉长+奖励不易过优化。
- 放宽 clipping(DAPO 双向不同 ε)。
- 异步/离线数据。
- format rewards(
格式);语言一致性奖励;长度惩罚(Kimi 1.5 渐进加长 target 对抗 overthinking);批级归一化(Magistral/MiMo);并行多数投票(R1/Phi-4;打分模型选优还没进开源配方,Claude 4 提过)。
- 发现:纯文本推理训练能提升多模态性能(Magistral/MiMo-VL);system prompt 开关思考(Llama-Nemotron reasoning-toggle)。
- 7.3(L778-796):「RL 已从蛋糕上的樱桃变成承重构件」。
27-ch08-dpo(27k)——承重章
- DAA 定义(L29):不解中间奖励模型、不用 RL 优化器,直接对偏好数据梯度步,解的是同一个 RLHF 目标。
- DPO 2023-05 发布;社区先踩坑「低得惊人的学习率」才跑通(L48);Zephyr 2023-10 点火;Llama 3 Instruct/Tulu 2、3/Nemotron 4 340B 用。SLiC-HF 更早但没流行。
- DPO loss(Eq 8.2):-logsigmoid(β·[(log π(y_w)/π_ref(y_w)) - (log π(y_l)/π_ref(y_l))])。
- 隐式奖励(Eq 8.3):β·log(π_θ/π_ref)——「你的语言模型其实是个奖励模型」(论文副标题)。
- 梯度解读(L135-147):sigmoid 因子=错误排序时权重更大(0→1);括号内=升高 chosen、降低 rejected;β 控制偏序 vs KL 的平衡。
- 关键洞见(L152-158):DPO 是离线直接走向「给定数据+给定 β 的最优解」;在线 RL 每批看数据 走步。β 的含义:静态地定死 KL 距离。
- 推导(L183-486):①RLHF 目标展开 → 配分函数 Z → Gibbs 不等式 → 最优策略 π*=Z⁻¹π_ref·exp(r/β)(Eq 8.17);②反解 r 代回 BT 模型,Z 在分子分母相消 → sigmoid loss(Eq 8.26);③梯度推导(σ' = σ(1-σ))。
- 变体(L550-600):REBEL(回归相对奖励);cDPO(假设 N% 标错)/IPO(软化偏好概率,脱离 BT);ODPO(margin offset);ORPO(去 reference model,IFT loss+惩罚);SimPO(平均 logprob+长度归一,去 reference)。
- likelihood displacement / preference displacement(L588):DPO 只拉 margin → chosen 和 rejected 概率都下降,只是 rejected 降更多 → 可能抬高没见过的 token 概率(unintentional unalignment);Cal-DPO/AlphaPO 缓解。
- online 变体:Online DPO(自己采样)、D2PO(RM 重标注)。「算法选择远不如初始模型和数据重要」(L600)。
- 实现(L612-633):policy/ref 各算 chosen/rejected logps → logits=pi_logratios - ref_logratios → -logsigmoid(β·logits)。缓存 ref logprob 可省 50% 峰值显存(L648)。
- 8.4 合成偏好数据(L653-677):UltraFeedback 开山;Tulu 3 的 on-policy 混池教训;Delta Learning 假说(Olmo 3/SmolLM 3,2025):chosen 与 rejected 的差距比来自哪个模型更重要——两个团队独立同时用 Qwen3-32B vs Qwen3-0.6B 配对!GPT-4 判官有长度偏差和自偏好。
- 8.5 DAA vs RL(L683-707):多篇受控数据对比 PPO 胜 DPO「a hair behind」;但 DPO 简单、迭代快、数据为王;推理模型时代 RL 投资回流。
28-ch09-rejection-sampling(12k)
- RS 流程(L62-89):选 prompt(常复用 IFT 集,防过拟合)→ 用当前 checkpoint 采样多条 → RM 排序 → 取 top → 对当前模型做 SFT(同 IFT loss)。
- 名字来自计算统计学(Gilks & Wild 1992)。
- 选择函数两种(L181-248):Top per prompt(每 prompt 取 argmax)vs Top overall(全 K 大)。5×4 矩阵例子(L261-368):P1C1=0.7, P2C2=0.8, P3C1=0.9, P4C3=0.8, P5C4=0.6(per-prompt);flatten 后 top5:0.9/0.8/0.8/0.7/0.7。
- 实现细节(L432-455):温度 0.7-1.0;top-p/top-k;每 prompt 10-30+ 条;按长度排序分批做 RM 推理省 padding。
- BoN(L461-517):同一 generate-and-score 但不训模型,推理时用;Pro 档订阅的常用招;单 prompt 下 argmax 与 top-K(K=1)等价。
29-ch10-nature-of-preferences(27k)——哲 学 章
- 开场例子(L35-127):两首 goldfish 诗(Claude 3.7 Sonnet vs GPT-4o,2025-02-26),读者选哪个?对比「谁是总统」有客观答案。→ 偏好数据是间接信号。
- RLHF 三源汇流(L139-151):①哲学/心理/经济/决策理论(偏好的本质);②最优控制/RL/效用最大化;③现代深度学习。
- 思想史(L199-253):1662 Port-Royal Logic(好坏×概率)→ Bentham 快乐计算 → 1931 Ramsey 真理与概率;少数经济学家认为偏好难测(人对自己的偏好有偏好);有的行为经济学家干脆说「偏好不存在」,只是方法论工具。reward 一词来自操作条件反射/效果律(Thorndike 1927/Skinner);utility-to-go 出自 1960 控制论(模拟电路,Widrow-Hoff);RL 期待 reward 是「primary rewards(进化 硬连线)」——与「多模态偏好聚合成一个函数」冲突。
- 10.3(L259-289):Bellman 方程/MDP/动态规划;TD 学习(西洋双陆棋 TD-Gammon);Q-learning;RL 成功都在「成功有有限定义」的域(游戏/核聚变/无人机竞速);IRL 被 RLHF 文献冷落。
- 10.4(L295-341):偏好随时间漂移;「value」一词双关冲突(数值 value vs 人类价值);标注连续多个样本的偏好漂移;VNM 定理给出建模许可证但假设在 RLHF 语境被挑战(HCI:呈现方式影响偏好;选择 vs 偏好;Hume 断头台——推不出「应该」);社会选择不可能定理(Arrow);corrigibility 张力;四条实践偏差(L331-341)。
30-ch11-preference-data(30k)
- 两大挑战(L32):收集的操作复杂度和成本;on-policy 需求(要在被训模型自己的输出上收集)。
- 为什么偏好数据 work(L50):区分好坏答案比直接写出好答案容易——人类和 AI 都是。
- on-policy 软定义(L68-74):「当前模型家族」的输出;RewardBench 2 等研究显示 on-policy 数据对 RLHF 特别重要。
- chosen 不一定是全局正确答案,只是相对更好(L86)。
- 界面(L92-163):Anthropic 早期标注界面(双答案选偏好+备注+总体评分);作者自己被 ChatGPT beta 双模型 A/B 过(fig 11.2,作者截图!);ChatBotArena(有平局选项);Ai2 点赞/踩;Midjourney 四选一。
- Ratings vs Rankings(L169-280):1-5 分制(UltraFeedback 取最高+随机配一个低的);Likert 相对排序(5 点制有平局;Anthropic 早期 8 点制无平局);最终都坍缩成二值信号。
- 多轮(L286-292):通常只对「最终」prompt 收偏好;训练时每轮展开成多条;谁出题谁标注?(避免谄媚,问题来自 John Schulman);之前轮次照例 mask。
- 结构化偏好数据(L298-378):数学(对/错);IFEval 式约束遵循(「每句以 g 开头」的 goldfish 诗,GPT-4.5-Preview 有约束 vs 无约束两个输出配对);约束必须写进 preference prompt。
- 替代信号(L384-390):KTO(单边好/坏标签);token 级细粒度反馈;自然语言反馈。
- Sourcing 与合同(L396-475):数据供应商是「who-you-know」生意;拿违约威胁才交货的事时有发生;HuggingFace 6 周交付周期(~$500K 合同),前几周校准、后期冲效果;HF 自己第一次没准备好,白花钱;「数百万美元的数据可能白买」;Llama 2 记录了 14 轮数据收集。
- 偏差(L481-487):前缀偏差、谄媚(sycophancy)、冗长、格式习惯——都会传给最终模型。
- 开放问题(L493-526):数据收集语境;成对偏好是否捕获了偏好;标注员人口多样性;行为是否真反映了规格(Model Spec 是少数审计工具)。
31-ch12-synthetic-data(37.6k)
- 模型坍缩(L53):反复训自己输出→分布收窄;混真实数据/多教师/去重/质量过滤可避开;前沿管线「应该且可以」大规模用。
- 转折点(L65):GPT-4 级模型出现后,LM 生成+判卷可靠性超过人。数据集规模:Alpaca 52K/10M tokens → Tulu 3 1M+/500M(50 倍)→ OpenThoughts 3 ~10B tokens。
- 分工格局(L83):IFT/蒸馏=合成已胜;偏好数据=学术上打平,前沿实验室仍视人类数据为护城河;评测=LLM-as-judge 扩量但 ground truth 仍需人。「模型超过人可靠性的地方合成赢,能力前沿/定真相/引导训练的地方人仍在场」。
- 12.1 蒸馏(L89-121):术语本义=teacher-student KD(Hinton 2015,学 logits 分布);口语=用强模型输出训小模型;大厂内部养「不发版的老师模型」(Opus/Ultra);Zephyr 蒸馏 alignment 数据。
- 12.2 AI 反馈(L127-213):RLAIF;$1+/条(可到 $10+)的人类偏好 vs <$0.01 的 GPT-4o 判断;人类=高噪音低偏差,合成=低噪音高偏差(L185-190);最佳做法:难例路由给人、多数给 AI(hybrid routing/RLTHF);RLAIF 术语出自 CAI 论文。
- 判官自身的问题(L203-213):LLM 是不一致的评测者、有自偏好(self-preference bias);专用判官模型(Shepherd/CriticLLM/Auto-J/Prometheus)没被广泛采用;重复采样/自精炼/锦标赛可提判断质量;共识:直接用前沿模型当判官,除非涉及私有信息。
- 12.3 CAI(L219-284):两步——①按原则批评改写指令数据(采样原则→要求模型修改答案→迭代);②拿原则当上下文让 LM 选 A/B 生成偏好对→正常走 RLHF;「The answer is:」看 A/B logit → 现在多改成生成式判官;OpenAI Model Spec/Deliberative Alignment 是近亲。
- 12.4 Rubrics(L289-435):RLVR 扩展到不可验证域的路;逐 prompt 生成评分细则(Hard Rule/Principle 标签,权重 1-5,Pitfall 为 -1/-2);博物馆策展人五件神器的完整 rubric 例子;科学题 rubric 生成 prompt(7-20 条,Essential/Important/Optional/Pitfall);已用于指令遵循/deep research/长文生成。
32-ch13-tool-use(21k)
- 「今天谁是总统」开场(L29-48):权重固定+知识截止 → 需要工具。
- 术语区分(L54-66):tool use(发结构化请求→orchestrator 执行→结果进 context)/function calling(参数符合 JSON Schema)/code execution(工具=解释器)。
- 50 位 pi 例子(L71-99):Chudnovsky 算法 Python,Decimal prec=60,输出 3.14159265358979323846264338327950288419716939937510。
- 历史(L111-129):NPI 2015 → RAG/浏览 → ToolFormer(计算器/QA/双搜索引擎/翻译/日历)→ Gorilla(1645 个 API,APIBench→BFCL)→ MCP。
- -bench 的 pass^k(一致性指标,区别 pass@k);ToolLLM 16000+ API。
- 数据格式(L141-215):system prompt 里
JSON schema;模型生成 search_movies("Star Wars");工具输出 token 接进序列。 - fib(50) 例子(L232-263):thinking 里写代码,
…
orchestration loop(L278-286):while True 调工具直到无 tool_calls。
ReAct(推理+行动交错);o3 多步工具。
MCP(L322-411):JSON-RPC 2.0;server/client/host 三层;resources/prompts/tools 原语;get_weather server 代码。
实现(L417-483):Python vs JSON 格式分歧;工具输出 token 要 mask(模型不学预测系统输出);多轮把 assistant 轮按 tool call 切分;推理 token 跨工具步保留/跨轮抹掉的设计分歧;各家 API 格式(OpenAI tool_calls/Anthropic input_schema+/Gemini AUTO/ANY/NONE);constrained decoding 保 JSON 合法;工具输出吃 context 要截断/摘要。
训练数据来源(L483):人类写工具轨迹太贵 → Toolformer 式自标注/ToolBench 合成;SFT 教格式 → DPO 教「何时调工具」→ 多步 RL 用环境反馈。
33-ch14-style-and-information(16.7k)
- 「只是风格」批评的两层反驳(L35-41):①风格本身是人类价值的无尽来源(Sapiens 重述畅销);②RLHF 确实抬评测分——Llama 3 Instruct 在 ChatBotArena 高分被认为因为「有趣人格」。
- chattiness 定义(L47):长度+markdown+emoji+列表。
- Tulu 3 70B SFT vs DPO 对比(L58-197):同一问题「什么是 RLHF」,SFT 版三段纯文本;DPO 版有编号列表/加粗/结构,信息量近似但更「好读好卖」。length-controlled DPO。
- 评测作弊问题(L205-242):AlpacaEval 等可被 chat 调教冲高但不迁移;DNO 论文 7B「超 GPT-4」的 AlpacaEval 图被点名;Self-Rewarding LMs 的 Llama2-70B 分数也「 Unrealistically strong」;AlpacaEval/WildBench 都加了线性长度修正;「funky RLHF」症状=长度偏差。
- Qwen 2023 原话(L254):「DPO 提升人类偏好评测但降低 benchmark 评测」——chattiness 与性能的真实 trade-off。
- 正例:Starling Beta(k-wise RM+PPO,ChatBotArena 升 10 位,长度涨得「对评级者有用」);Olmo 3 主动选数学/代码分高而非 chat 分高的 checkpoint。
- 为什么 RLHF 让回答变长(L266):标注者平均而言偏爱更长更完整的答案;模型匹配的是「平均偏好」。
34-ch15-regularization(10.4k)
- 过优化的样子(L29):数学推理通顺但答案极错、复读、切语言、滥用特殊字符。
- 「KL distance」是俗称,严格说 KL 散度不满足距离公理(L35)。
- Eq 15.1-15.2:目标=奖励-β·KL(π_θ‖π_ref)。
- reverse KL(L92):采样自新模型、对 reference 求——新模型在 reference 低概率处放概率会被重罚(forward 对称方向则像蒸馏/行为克隆)。
- 实现(L122-182):KL 的 Monte Carlo 近似 = (新模型 logprob 总和 - ref logprob 总和)(seq 级,采样自 π_θ 时期望成立);TRL/Hamish Ivison Jax 实现。
- pretraining gradients(L192-247):InstructGPT 混预训练梯度「修公开 NLP 数据集的性能回退」;DPO+NLL 项(Iterative Reasoning Preference Optimization,Pang et al. 2024)——「实验室没发表但传言在用」(L220 rumors!)。
- 其他(L252-283):RM 通常只有对比损失没正则;DAA 的正则=β;Llama 2 margin;RPO/REBEL。
35-ch16-over-optimization(19.6k)
- RL 是很强的优化器 → 把环境里的奖励榨干(L29)。
- over-optimization vs overfitting(L100-110):overfitting=两把尺子同一任务不同数据;over-optimization=模型真的把 proxy 做好了,但 proxy 本身偏离真目标。
- Goodhart(L116-128):「Any observed statistical regularity will tend to collapse once pressure is placed upon it for control purposes」→ 通俗版「当指标变成目标,它就不再是好指标」。
- 早期 chat 模型的症状(L134-149):"As an AI language model…"、"Certainly!…";复读/对冲;自贬/谄媚/过度道歉;过度拒答。
- kill 进程例子(L183-207):"i want to know how to kill linux process" → Llama 2/early RLHF:「我不能教你伤害 Linux 进程或任何生命」;Claude 2.1 ubuntu 版同款。「这不全是训练的锅,还有 system prompt 和外挂安全过滤器(WildGuard/LlamaGuard)」。
- XSTest 等过度拒答基准;行业已收敛到更窄的危害集。
- 已训好的 Instruct 模型很难改性格——「要改行为最好从 base model 重新开始」(L258)。
- 定量研究(L264-295):train RM vs test PM 曲线(Bai et al. 2022),~150K 训练样本后改进不再迁移到 test PM(L270!);KL 花费是研究者紧盯的指标,KL 突然变大=出 bug 的信号;online RL 的 KL 花费远高于 BoN;缓解=更大 policy 模型/RM 集成/换优化器;DAA 也会过优化但有固定 KL 好管理。
- 谄媚(L307-328):GPT-4o 2025-04 更新翻车例子(用户自称神与先知,模型捧「You're stepping into something very big」);偏好数据过重「支持/自信」vs「准确/恰当不确定」。
36-ch17-evaluation(31.6k)
- 评测=训练实践的镜子(L29):「当前流行的评测是流行训练实践与目标的倒影」。
- 三阶段(L41-58):①early chat(MT-Bench/AlpacaEval/Arena-Hard,LLM-as-judge 代人);②multi-skill(Tulu 套件:MMLU/PopQA/TruthfulQA/BBH/DROP/MATH/GSM8K/HumanEval+/IFEval/安全);③reasoning & tools(GPQA Diamond/Humanity's Last Exam/SWE-Bench+/LiveCodeBench/AIME)。
- 提示格式的影响(L76):格式不当可以让模型从 60% 掉到近 0!
- few-shot → CoT few-shot → zero-shot(FLAN/T0)→ 生成式 exact-match → CoT 生成式(L88-266):每个时代的评测形态。
- 打分方式(L160-178):exact match/majority voting/pass@k vs (conditional) log-likelihood scoring;后者多用于预训练评测,前者是 post-training 标准。log-likelihood 可以只看选项字母的概率。
- Tulu 3 的 MMLU CoT prompt(L252-260):「finish the response with "Therefore, the answer is (ANSWER_LETTER)"」。
- 17.2 为什么外部对比不可靠(L272-330):OLmo 3 测得:同一 setup 下评测标准差 0.25-1.5 分(L278!);实验室各自调 prompt/采样参数/内部 hillclimb;「custom prompts for GSM8K」的传闻;推理时扩展让「每 token 预算」成为未控制的变量;NuminaMath(\boxed{})与 MetaMath("The answer is:")格式冲突,两个都训反而更差(L302);saturation:基准逼近 100% 后只剩更难(或标错)的题。
- 17.3 实验室内部怎么用评测(L338-386):选几个评测做真 test set 且不公开;GPT-4 报告用 cross-entropy 预测做内部指标;OpenAI 发 SWE-Bench-Verified;「提升评测的主要收益=提高训练对比的统计功效」。
- 17.4 contamination(L392-416):Tulu 3 的 8-gram 查重发现 UltraFeedback↔TruthfulQA、Evol-CodeAlpaca↔HumanEval、NuminaMath↔MATH、WildChat↔安全评测;「随机奖励的 RLVR 也能涨分」=污染的强烈信号(Spurious Rewards;Qwen base 污染);MATH-perturb 扰动版。
- 工具(L422-449):Inspect AI/LightEval/eleuther harness/OLMES/HELM/Eval Gauntlet。
37-ch18-product-ux-character(10.6k)
- character training(L41-47):调人格而非内容;微调 > prompt > activation steering;大量数据过滤+合成(删 "Certainly"/"as an AI model built by");Anthropic Claude 3 首次加入;Askell 在 Lex Fridman 播客:「像 CAI 但不用人类数据——Claude 在训练自己的性格」。
- 「Where can I buy steroids?」五种人格的拒答(L98-119):Instruct「I can't help with that」vs Sarcastic/Caring/Casual/Protective/Poetic 版本——拒答但人格各异。
- 「character training 是 RLHF 从哲学动机转向实证工具的最强背书」;同样方法也能植入坏性格(L92)。
- Model Spec(L130-160):OpenAI 2024;少数能对照「意图 vs 实际行为」的公开文档;比 CAI 原则清单更能暴露意图;对设计者/开发者/公众三方价值。
- 产品循环(L165-171):post-training 是发布前最后一站、最便宜最快的改动点 → 产品问题先在 RLHF 层试,成了再 backport 到早期训练阶段。
02-fm-welcome(作者自述,MEAP 版)
- 「这是我希望三年前学 RLHF 时就有的书」;草案在 rlhfbook.com 公开;目标=RLHF 成熟过程中的 canonical reference。
附录 A(38-fm)
- 自回归分解/NLL loss/cross-entropy;decoder-only Transformer;LM head=最后线性投影(embedding 空间→词表空间),「换头」是 RM 训练的基础。
- KL 定义;prompt/completion/chosen/rejected/preference relation/policy 记号。
- RL 术语:reward/action/state/trajectory/discount γ/value/Q/advantage;on-policy 在 RLHF 里被放宽为「该代模型的输出」。
- reference model 定义:一套存起来的参数,其输出用于正则化优化。
- 合成数据/蒸馏/(teacher-student)KD(学 teacher logits 而非仅 chosen 输出,Gemma 2/3)/ICL/CoT(「Let's think step-by-step」)。