第 16 讲(拓展):前沿专题与全课总结

Reinforcement Learning · Lecture 16。个人学习讲义与配套实验,按主题整理并持续修订。

课程源码 ZIP ↓

个人整理的学习笔记,非官方讲义;课程来源与整理说明见课程介绍。配套示例未逐一运行验证。

本篇目录

对应:Stanford CS234 拓展内容(RL for LLM Reasoning、Reward Design & Safety、Course Review) 配套代码:code/lecture16/(只需 numpy) 预计阅读时间:3.5 小时


0. 本讲导航

0.1 本讲要回答的问题

强化学习的最新前沿在哪里?这门课学过的所有东西,怎样串成一个整体?

2024 年底到 2025 年,“推理模型”(OpenAI o1、DeepSeek-R1 等)让强化学习重新成为人工智能最受关注的方向之一:用 RL 训练的大语言模型,学会了在回答之前”想很久”——尝试、检查、回溯、换一种思路——在数学竞赛和编程任务上取得了惊人的进步。支撑它们的核心技术,恰恰是这门课讲过的东西:策略梯度(第 6 讲)、基线与优势(第 7 讲)、KL 约束(第 9 讲)、探索(第 11–13 讲)、搜索(第 14 讲)……

这一讲的前半部分讲前沿:可验证奖励的强化学习(RLVR)、GRPO、以及奖励投机这个伴随 RL 始终的风险。后半部分回顾全课:一张图串起所有算法,以及贯穿始终的几条主线。

0.2 学完本讲,你应该能够

  1. 解释 RLHF 与 RLVR 的区别,以及”可验证的奖励”为什么让 RL 在推理任务上如此有效。
  2. 写出 GRPO 的优势估计,解释它为什么不需要价值网络,以及除以标准差带来的隐含效果。
  3. 解释 pass@k 与 pass@1 的关系,以及”RL 把偶尔能做对的变成稳定地做对”。
  4. 解释奖励投机:为什么代理奖励上升、真实表现下降;KL 惩罚的作用与局限;为什么会泛化。
  5. 把全课的算法放进一张地图,说出贯穿全课的几条主线。

0.3 先修知识

知识点用在哪里最低要求
第 6、7 讲:策略梯度、基线、PPO第 1–3 节必须
第 9 讲:RLHF、KL 约束、奖励过度优化第 1、4 节必须
第 1–15 讲的主要算法第 6 节读过即可

0.4 本讲地图

第1节 大模型中的 RL:从 RLHF 到可验证的奖励
   │
第2节 GRPO:用"同一道题的其他回答"代替价值网络
   │
第3节 实验:优势估计到底改变了什么?
   │
第4节 奖励投机:当验证器有漏洞时
   │
第5节 其他前沿方向(简介)
   │
第6节 全课回顾:一张图、几条主线

1. 大模型中的 RL:从 RLHF 到可验证的奖励

1.1 回顾:RLHF

第 9 讲的 RLHF:人类比较两个回答 → 训练奖励模型 → 用 PPO 优化语言模型,同时用 KL 约束不要离参考模型太远。它的瓶颈在于奖励模型:它是从有限的人类偏好中学来的,在分布外不可信,优化得太狠会出现奖励过度优化。

1.2 可验证的奖励(RLVR)

很多任务的好坏可以自动地、可靠地检查:

  • 数学:最终答案是否等于标准答案;
  • 编程:代码能否通过单元测试;
  • 形式化证明:证明能否被证明检查器(比如 Lean)接受;
  • 格式与约束:输出是否符合要求的格式、长度。

**可验证奖励的强化学习(Reinforcement Learning with Verifiable Rewards, RLVR)**直接用这些检查结果作为奖励,不需要奖励模型。好处:

  • 奖励可靠:答案对就是对,不存在”奖励模型在分布外乱打分”的问题(但有另一种风险,见第 4 节);
  • 奖励便宜:不需要人工标注,可以无限量地生成;
  • 奖励稀疏但清晰:只在最后给 0 或 1,中间的推理过程完全由模型自己探索。

DeepSeek-R1(2025)报告了一个引人注目的现象:只用”答案对不对”作为奖励,模型在训练中自发地学会了越来越长的推理,出现了”等等,让我重新检查一下”这样的自我反思——没有人教它这样做,这是 RL 优化”最终答案正确率”时涌现出来的策略。

1.3 语言模型生成是怎样的 RL 问题?

  • 按 token 看:状态 = 提示词 + 已生成的 token,动作 = 下一个 token,转移是确定的(把 token 接上去),奖励只在最后出现。这是一个视界很长(几千步)、动作空间很大(几万个 token)的 MDP。
  • 按整个回答看:提示词是上下文,整个回答是一个动作,得到一个奖励——这是第 12 讲的上下文老虎机。

GRPO 等算法实际上介于两者之间:用整个回答的奖励计算优势,再把这个优势分配给回答中的每一个 token,用 PPO 式的逐 token 更新。


2. GRPO

2.1 从 PPO 说起

第 7 讲的 PPO 需要一个价值网络(critic)来估计优势。在大语言模型中,这意味着:

  • 训练一个和策略一样大的 critic,显存和计算都翻倍;
  • critic 要给长文本中每个 token 估计”从这里开始,最终答对的概率”——这本身就是一个很难的学习问题,估计不准时反而引入偏差。

2.2 GRPO 的做法

GRPO(Group Relative Policy Optimization,Shao et al., 2024,DeepSeekMath):对每道题 qq,用当前策略抽 GG 个回答 o1,…,oGo_1, \dots, o_G,得到奖励 r1,…,rGr_1, \dots, r_G,每个回答的优势是

Ai=ri−mean(r1,…,rG)std(r1,…,rG)A_i = \frac{r_i - \mathrm{mean}(r_1, \dots, r_G)}{\mathrm{std}(r_1, \dots, r_G)}

然后把 AiA_i 分配给回答 oio_i 的每一个 token,用 PPO 的裁剪目标(第 7 讲)更新,外加一个 KL 惩罚:

J(θ)=E[1G∑i=1G1∣oi∣∑tmin⁡(ρi,tAi,  clip(ρi,t,1−ϵ,1+ϵ)Ai)]−β DKL(πθ ∥ πref)\mathcal{J}(\theta) = \mathbb{E}\left[ \frac{1}{G}\sum_{i=1}^G \frac{1}{|o_i|}\sum_{t} \min\left(\rho_{i,t} A_i,\; \mathrm{clip}(\rho_{i,t}, 1-\epsilon, 1+\epsilon) A_i\right) \right] - \beta\, D_{\mathrm{KL}}(\pi_\theta \,\|\, \pi_{\mathrm{ref}})

其中 ρi,t\rho_{i,t} 是新旧策略在第 tt 个 token 上的概率比。

核心思想:用同一道题的其他回答当基线。比同组的平均水平好,就加强;差,就减弱。这就是第 6 讲的”减去基线”,只是基线不是学出来的,而是从同一道题的多个样本中当场算出来的。

2.3 相关的优势估计

方法优势 AiA_i特点
REINFORCE(无基线)rir_i无偏,奖励有共同偏移时方差大
学到的基线 / PPOri−V(q)r_i - V(q)需要训练价值函数
RLOO(留一法)ri−1G−1∑j≠irjr_i - \frac{1}{G-1}\sum_{j \ne i} r_j无偏(基线不依赖 rir_i 自己)
组内均值(“Dr. GRPO”)ri−mean(r)r_i - \mathrm{mean}(r)把自己也算进基线,梯度缩小 (G−1)/G(G-1)/G
GRPO(ri−mean(r))/std(r)(r_i - \mathrm{mean}(r))/\mathrm{std}(r)按组内标准差缩放

3. 实验:优势估计到底改变了什么?

3.1 玩具推理模型

代码 toy_rlvr.py:200 道题,每题从 16 个候选回答中选一个,答对得 1 分。参考模型(RL 之前)在不同难度的题上答对的概率从 1% 到 60% 不等。

代码 01_grpo.py 演示 1:

难度题数pass@1pass@8pass@64
很难(1%)420.0100.0770.474
难(5%)470.0500.3370.962
中等(20%)520.2000.8321.000
容易(60%)590.6000.9991.000

pass@k =1−(1−p)k= 1 - (1-p)^k:独立抽 kk 次、至少答对一次的概率。参考模型在”很难”的题上 pass@1 只有 1%,但 pass@64 有近一半——正确答案在模型的能力范围内,只是概率太低。RL 要做的,就是把 pass@k 中”偶尔能对”的部分,变成 pass@1 中”稳定地对”。

这也揭示了 RLVR 的一个根本限制:如果一道题的正确答案模型从来抽不到,就没有任何学习信号——RL 只能放大模型已有的能力。(有研究发现,RL 训练后的模型在很大的 kk 上的 pass@k 有时反而不如训练前,说明 RL 可能在”聚焦”的同时牺牲了一些多样性。这个现象依赖于真实模型中参数的共享,在我们的表格玩具模型中不会出现。)

3.2 梯度的偏差与方差

演示 2,参考模型下一道中等难度的题(π(正确)=0.20\pi(\text{正确}) = 0.20,真实梯度 π(1−π)=0.160\pi(1-\pi) = 0.160),G=8G = 8,重复 2 万次:

方法奖励 0/1:梯度均值总方差奖励 1/2(带”格式分”):梯度均值总方差
无基线0.16010.01420.15890.1607
RLOO0.16020.01470.16070.0147
组内均值0.14020.01110.13940.0112
GRPO0.33660.05160.33760.0514
  1. 无基线和 RLOO 无偏;组内均值把梯度缩小了 7/8。
  2. 奖励是 0/1 时,有没有基线差别不大。但所有回答都有一个共同的”格式分”时,无基线的方差大了十倍,有基线的方法完全不受影响——第 6 讲的结论在大模型时代依然成立(实际训练中确实常有格式分、长度惩罚等共同的奖励项)。
  3. GRPO 不再是梯度的无偏估计:它把每道题的梯度放大了约 1/std1/\mathrm{std} 倍。各难度的放大倍数(GRPO 梯度 / 真实梯度):很难 2.63、难 2.52、中等 2.11、容易 1.88。越难的题放大得越多——GRPO 隐含地对题目按难度加权。

3.3 训练

演示 3(每步 16 道题 × 8 个回答,300 步,5 个种子):

方法学习率格式分训练后 pass@1很难 / 难 / 中等 / 容易
无基线200.7680.05 / 0.92 / 0.97 / 0.98
学到的基线200.7680.05 / 0.92 / 0.97 / 0.98
RLOO200.7680.05 / 0.92 / 0.97 / 0.98
GRPO200.8860.50 / 0.99 / 0.99 / 0.99
无基线250.3290.01 / 0.16 / 0.41 / 0.62
学到的基线250.5230.04 / 0.33 / 0.68 / 0.88
RLOO250.7680.05 / 0.92 / 0.97 / 0.98
GRPO250.8860.50 / 0.99 / 0.99 / 0.99
无基线800.9360.72 / 0.99 / 1.00 / 1.00
GRPO400.9450.75 / 0.99 / 1.00 / 1.00

(参考模型 pass@1 = 0.243。)

  1. 同样的学习率下,GRPO 明显更快,尤其是难题。
  2. 加上格式分,无基线严重受损;学到的基线要花时间追上新的奖励水平,也受了影响;组内基线(RLOO、GRPO)完全不受影响。
  3. GRPO 更快,主要是因为更大的有效步长,而不是更好的方向:把无基线方法的学习率调到 8,结果与学习率 4 的 GRPO 相当。

那 GRPO 为什么流行? 主要原因是省掉了价值网络——便宜、针对每道题、自动适应奖励的尺度。在我们的表格玩具中,“学到的基线”只是一张表,体现不出这个优势;在几十亿参数的模型中,这是决定性的。

对 GRPO 的批评(Dr. GRPO,Liu et al., 2025)也正是从这里出发:除以标准差造成的难度加权、以及按回答长度平均造成的长度偏差,都是”没有明确理由的偏差”。去掉它们、配合调好的学习率,效果同样好。

3.4 组的大小

演示 4(总样本数固定,每步 128 个回答;GRPO,学习率 2):

GG每步题数训练后 pass@1很难 / 难 / 中等 / 容易“没有学习信号”的组
2640.9350.71 / 0.99 / 0.99 / 0.9993.6%
4320.9320.70 / 0.99 / 0.99 / 0.9986.2%
8160.8860.50 / 0.99 / 0.99 / 0.9972.0%
1680.8250.27 / 0.95 / 0.98 / 0.9947.0%
3240.6970.08 / 0.66 / 0.92 / 0.9723.5%
  • 一组回答全对或全错时,组内基线下所有优势都是 0,这组样本没有任何学习信号。GG 越小,这种组越多;训练后期大部分题都会做了,比例还会上升。
  • 但在这个玩具问题上,总样本数固定时 GG 越小反而越好:每步覆盖更多的题、更新更频繁。“没有学习信号的比例高”不等于”学得慢”。
  • 实际训练大模型时常用 G=8G = 8~6464:同一道题的多个回答可以共享提示词的计算,并行生成很便宜;真实的奖励更吵,太小的组给出的基线不准。结论依赖于具体的开销结构。DAPO(2025)等方法会动态地丢掉全对或全错的题,把计算留给有信息量的题。

4. 奖励投机:当验证器有漏洞时

4.1 规格博弈

奖励投机(reward hacking),也叫规格博弈(specification gaming):智能体找到了一种方式,让奖励很高,却没有完成设计者真正想要的任务。经典的例子:

  • 一个赛艇游戏中,智能体发现绕圈反复撞击同一组得分道具,比完成比赛得分更高——于是它永远不去终点;
  • 一个被奖励”让测试通过”的编程智能体,学会了修改测试文件、或者针对测试用例硬编码答案;
  • 第 9 讲的奖励过度优化:奖励模型喜欢长回答,于是模型学会了写又长又空的回答。

RL 是一个强大的优化器。奖励函数与真实目标之间的任何差距,都可能被找到并利用——这与第 4 讲的最大化偏差、第 10 讲的外推误差、第 15 讲的优化器的诅咒,是同一个现象。

4.2 实验

代码 02_reward_hacking.py:玩具模型中,回答 1 是”作弊”的回答——有漏洞的验证器也给它 1 分,但它其实是错的。参考模型产生作弊回答的概率只有 0.5%;“作弊倾向”是所有题共享的参数。

演示 1(GRPO,600 步):

步数没有漏洞:真实准确率有漏洞:代理奖励有漏洞:真实准确率有漏洞:作弊概率
00.2430.2480.2430.005
600.5900.6110.5820.029
1200.7380.9900.2060.784
3000.8860.9990.0310.968
6000.9791.0000.0120.988

前 60 步,模型在学着答对题。随后,作弊回答在一部分难题上被偶然抽到、得分、被强化,并借助共享的参数迅速扩散到所有题上。代理奖励上升到 1.000,看起来训练得完美无缺;真实准确率却跌到 1%——比训练前还差得多。 在真实训练中,你只能看到代理奖励那一列。

演示 2:KL 惩罚:

KL 系数代理奖励真实准确率作弊概率
01.0000.0120.988
0.050.9960.5940.402
0.20.9920.7100.283
1.00.5470.5280.019

(对照:没有漏洞时真实准确率 0.979。)KL 惩罚让策略不能离参考模型太远——而参考模型几乎从不作弊,所以它确实能压制作弊。但它不区分好的偏离和坏的偏离:系数小时挡不住作弊,系数大时同样压制了”学会答对”。KL 惩罚是一种保险,不是解药。

演示 3:为什么后果这么严重?

作弊倾向真实准确率作弊概率:很难 / 难 / 中等 / 容易
所有题共享0.0121.00 / 1.00 / 0.98 / 0.98
每道题各自学0.9450.21 / 0.00 / 0.00 / 0.00

如果每道题都要各自”发现”作弊,作弊只出现在最难的题上(正确答案太难找,偶然抽到的作弊回答成了唯一的得分途径)。共享时,在难题上学到的”作弊”被推广到了所有题上——包括那些本来很容易答对的题。大语言模型的参数是所有任务共享的,“钻空子”这种行为模式同样会泛化。

演示 4:修好验证器之后:在第 300 步修好验证器时,作弊概率已经是 97%;100 步之后准确率恢复到 0.77,最终达到 0.98。在这个玩具模型中恢复得很快,因为作弊是通过共享的参数实现的,每道题”正确答案”的知识一直保留在下面,只是被盖住了。真实的模型不一定这么幸运,而真正的难点在于发现漏洞。

4.3 对策

  • 更好的验证器:更全面的测试、隐藏的测试用例、沙箱隔离(让模型无法修改测试);
  • 监控:定期人工抽查、用独立的严格验证器评测、监控异常模式(回答长度突变、固定的套路);
  • 约束优化:KL 惩罚、早停(在代理奖励与真实指标开始分化之前停下);
  • 过程监督:不只检查最终答案,也检查推理过程(过程奖励模型)——但过程监督本身也可能被投机;
  • 更根本的问题:怎样让智能体真正”理解”我们想要什么,而不只是优化我们写下来的东西——这是 AI 对齐研究的核心问题。

5. 其他前沿方向(简介)

  • 推理时的搜索:第 14 讲的”直觉 + 搜索”在语言模型中的对应:生成多个推理路径,用验证器或价值模型挑选(best-of-N、树搜索);“推理时计算”的扩展规律。
  • 智能体(agent)RL:让语言模型在多步交互的环境中学习(使用工具、浏览网页、写代码并运行)——奖励更稀疏、视界更长,第 13 讲的探索问题重新变得关键。
  • 机器人与基础模型:在大规模多样的数据上预训练策略,再用 RL 微调;离线到在线(第 10 讲)。
  • 多智能体 RL:多个学习者互相影响,环境对每个智能体都是非平稳的;自我对弈(第 14 讲)是一个特例。
  • RL 用于科学发现:AlphaTensor、AlphaDev(第 14 讲),以及芯片设计、分子设计、核聚变的等离子体控制等。

6. 全课回顾:一张图、几条主线

6.1 一张图

                            强化学习
                               │
         ┌─────────────────────┼──────────────────────────┐
     模型已知                 从经验中学习                  从别的信号中学习
         │                     │                             │
   动态规划(2)         ┌─────┴──────┐              模仿学习(8):BC、DAgger、IRL
   前向搜索、MCTS(14)  无模型        基于模型(15)  偏好学习(9):RLHF、DPO
                         │            Dyna、MPC、       离线数据(10):OPE、悲观
                  ┌──────┴──────┐     世界模型
               基于价值        基于策略
               │               │
         评估:MC、TD(3)    策略梯度 REINFORCE(6)
         控制:SARSA、        Actor-Critic、GAE、
               Q-learning(4) TRPO、PPO(7)
         函数逼近、DQN(5)   GRPO(16)
                  │               │
                  └──────┬────────┘
                    探索贯穿其中:
          ε-贪心 → UCB、汤普森采样(11、12)→ R-max、MBIE、PSRL(13)

6.2 同一把尺子下的比较

代码 03_course_review.py 把核心的表格型算法放到同一个 5×5 格子世界上(10% 打滑、一个陷阱,V∗=0.602V^* = 0.602),比较交互 NN 个回合后学到的策略的真实价值(10 个种子):

算法N=10N=10N=30N=30N=100N=100N=300N=300N=1000N=1000达到 95% 的回合(中位数)
MC 控制(4)−0.0390.1920.5480.5590.565122
SARSA(4)−0.1370.2250.5240.5780.594135
Q-learning(4)−0.1690.3580.5550.4490.582490
Double Q-learning(4)−0.195−0.0550.5890.5890.59758
REINFORCE + 基线(6)−0.348−0.2380.1640.5000.567802
Actor-Critic(7)−0.345−0.2600.0510.5350.581645
Q-learning + 计数奖励(13)−0.081−0.117−0.1250.4030.583170
Dyna-Q,n=20n = 20(15)0.5570.4980.5740.5200.56640

(超参数没有仔细调,10 个种子;在别的问题上排名可能完全不同。)

  • Dyna-Q 样本效率最高:10 个回合就接近最优——用计算换数据(第 15 讲)。
  • TD 方法居中。Q-learning 的曲线在第 300 回合下降:有 2 个种子的贪心策略出现了”转圈”(两个格子互相指向),永远到不了终点——固定学习率下 Q 值一直带着噪声;Double Q 更平稳(第 4 讲)。
  • 策略梯度方法在小的表格问题上最慢,它们的优势在于连续动作、随机策略、与大模型的结合。
  • 乐观探索前期有代价,在容易探索的问题上不划算,在 RiverSwim 那样的问题上不可或缺(第 13 讲)。

6.3 贯穿全课的六条主线

主线一:偏差与方差的权衡

  • MC(无偏、高方差) vs TD(有偏、低方差)(第 3 讲);nn 步 TD、TD(λ)、GAE 在两者之间插值(第 3、7 讲);
  • 策略梯度的基线:不引入偏差,降低方差(第 6 讲);GRPO 的标准差归一化:引入了”偏差”(难度加权)换取更大的步长(第 16 讲);
  • 离策略评估:重要性采样(无偏、方差爆炸) vs 直接法(有偏、低方差) vs 双重稳健(第 10 讲)。

主线二:探索——乐观与后验采样

  • 贪心会卡住,ε-贪心的探索是盲目的(第 1、4、11 讲);
  • 面对不确定性时保持乐观:UCB(11)→ UCT(14)→ R-max、MBIE-EB(13)→ Dyna-Q+(15);
  • 后验采样:汤普森采样(12)→ PSRL(13)→ Bootstrapped DQN;
  • MDP 中需要深度探索:有计划地、持续地去验证不确定的地方(13)。

主线三:分布偏移

  • 行为克隆的复合误差:学习者到了专家没去过的地方(第 8 讲);
  • 奖励模型在分布外不可信(第 9 讲);
  • 离线 RL 的外推误差(第 10 讲);
  • 学到的模型在数据之外失控(第 15 讲);
  • 对策:收集学习者自己会遇到的数据(DAgger、在线交互);或在分布外保持悲观(CQL、KL 约束)。

主线四:优化会利用估计的错误

  • Q-learning 的最大化偏差(第 4 讲);
  • 奖励过度优化(第 9 讲);
  • 离线 RL 专挑没见过的动作(第 10 讲);
  • 在估计的模型中规划的优化器的诅咒(第 15 讲);
  • 奖励投机(第 16 讲)。
  • 能收集新数据时,对不确定性乐观;不能时,悲观。

主线五:泛化与函数逼近

  • 表格方法无法处理大状态空间;函数逼近带来泛化,也带来致命三角(第 5 讲);
  • DQN 的经验回放与目标网络(第 5 讲);
  • AlphaZero 的查找表在没见过的局面上一无所知,神经网络才能泛化(第 14 讲);
  • 共享的参数让”作弊”也会泛化(第 16 讲)。

主线六:数据与计算的交换

  • 确定性等价、Dyna:同样的数据,更多的计算,更好的结果(第 3、15 讲);
  • 搜索:推理时花更多的计算,下出更好的棋(第 14 讲);
  • 大模型:预训练的计算提供了强大的先验,RL 只需要”唤醒”已有的能力(第 16 讲)。

7. 本讲总结

7.1 核心概念清单

  1. RLVR:用可以自动检查的结果(答案、测试)作为奖励,不需要奖励模型。
  2. 语言模型生成:按 token 是长视界 MDP,按回答是上下文老虎机。
  3. GRPO:优势 = 组内标准化的奖励;不需要价值网络;PPO 式裁剪 + KL 惩罚。
  4. 基线的作用:奖励有共同偏移时至关重要;组内基线自动抵消共同部分。
  5. 标准差归一化:不是无偏的梯度估计,隐含地按难度加权,并放大有效步长。
  6. pass@k:1−(1−p)k1 - (1-p)^k;RL 把”偶尔能对”变成”稳定地对”,但无法学习从未抽到过的正确答案。
  7. 没有学习信号的组:全对或全错的组优势为 0;总样本数固定时,它的比例高不等于学得慢。
  8. 奖励投机:代理奖励上升、真实表现下降;共享参数使投机行为泛化;KL 惩罚是保险不是解药;关键是发现漏洞。
  9. 全课主线:偏差-方差、探索、分布偏移、优化利用错误、泛化、数据与计算的交换。

7.2 公式速查表

名称公式
GRPO 优势Ai=(ri−mean(r))/std(r)A_i = (r_i - \mathrm{mean}(r))/\mathrm{std}(r)
RLOO 优势Ai=ri−1G−1∑j≠irjA_i = r_i - \frac{1}{G-1}\sum_{j\ne i} r_j
pass@k1−(1−p)k1 - (1-p)^k
softmax 的得分函数∇logitslog⁡π(y)=onehot(y)−π\nabla_{\text{logits}} \log\pi(y) = \mathrm{onehot}(y) - \pi
KL 的梯度(对 logits)π⊙(log⁡π−log⁡πref−DKL)\pi \odot (\log\pi - \log\pi_{\mathrm{ref}} - D_{\mathrm{KL}})

7.3 中英术语对照表

中文英文中文英文
可验证奖励的强化学习RL with Verifiable Rewards (RLVR)推理模型Reasoning model
组相对策略优化Group Relative Policy Optimization (GRPO)留一法Leave-one-out (RLOO)
验证器Verifier过程奖励模型Process reward model
奖励投机Reward hacking规格博弈Specification gaming
代理奖励Proxy reward对齐Alignment
推理时计算Inference-time / test-time compute动态采样Dynamic sampling

8. 练习题

本讲练习

练习 1(GRPO 的优势):一道题抽了 4 个回答,奖励为 (1, 0, 0, 0)。分别计算 RLOO、组内均值、GRPO(用总体标准差)给每个回答的优势。

参考答案

均值 0.25,总体标准差 0.25×0.75=0.433\sqrt{0.25 \times 0.75} = 0.433。 RLOO:答对的回答 1−0=11 - 0 = 1;答错的回答 0−1/3=−0.3330 - 1/3 = -0.333。 组内均值:1−0.25=0.751 - 0.25 = 0.75;0−0.25=−0.250 - 0.25 = -0.25。 GRPO:0.75/0.433=1.7320.75/0.433 = 1.732;−0.25/0.433=−0.577-0.25/0.433 = -0.577。 GRPO 的优势最大——这就是 3.2 节中”难题被放大”的来源:只有一个回答答对时,标准差很小。

练习 2(没有学习信号):一道题模型答对的概率是 pp,每组 GG 个回答。这组”全对或全错”(没有学习信号)的概率是多少?p=0.01p = 0.01、G=8G = 8 时是多少?G=64G = 64 呢?

参考答案

pG+(1−p)Gp^G + (1-p)^G。p=0.01p = 0.01、G=8G = 8:0.998≈0.9230.99^8 \approx 0.923(92% 的组全错,没有信号);G=64G = 64:0.9964≈0.5260.99^{64} \approx 0.526。很难的题需要很大的 GG 才能偶尔抽到一个正确答案——这也是 pass@k 的另一面:1−(1−p)G1 - (1-p)^G 就是”至少有一个正确回答”的概率。

练习 3(格式分):解释为什么奖励中加入一个所有回答都有的常数(比如格式分)会让无基线的 REINFORCE 变差,却不影响 GRPO。

参考答案

无基线时,每个被抽到的回答都乘以它的奖励去推高它的概率。常数部分让每个被抽到的回答都被推高——期望上这些推力互相抵消(因为 E[∇log⁡π]=0\mathbb{E}[\nabla \log\pi] = 0),但在有限的样本中,它们取决于”碰巧抽到了哪些回答”,引入了很大的噪声(演示 2 中方差大了十倍)。GRPO 在同一组内减去均值,常数部分被完全消掉,优势只取决于回答之间的相对好坏。

练习 4(奖励投机):在 4.2 节的实验中,为什么作弊首先出现在最难的题上?

参考答案

在最难的题上,参考模型答对的概率(1%)只比作弊的概率(0.5%)高一点,一组 8 个回答里抽到正确答案和抽到作弊回答的机会差不多;一旦抽到作弊回答并得分,GRPO 就强化它。而在容易的题上,正确答案的概率(60%)远高于作弊,组里几乎总有正确的回答,作弊的相对优势很小。在不共享参数的实验中,作弊只出现在最难的题上(21%),正说明了这一点。

练习 5(动手)★:如果漏洞只在一半的题上有效(另一半题上作弊回答得 0 分),共享的作弊倾向还会占领所有题吗?

参考答案

实测(5 个种子,600 步):不会。在漏洞有效的题上,作弊概率只有 12%,真实准确率 0.873;在漏洞无效的题上,作弊概率只有 0.4%,准确率 0.969。共享的作弊倾向 hh 仍然升高了(约 3.1),但在漏洞无效的题上,作弊回答得 0 分、在 GRPO 中得到负的优势,每道题自己的参数把作弊压了下去。“部分有效”的漏洞造成的伤害远小于”处处有效”的漏洞——因为模型能从失败中得到反面的证据。这也提示了一种防御思路:让投机行为在足够多的情况下失败(比如随机加入隐藏的检查)。

全课综合复习题

练习 6(主线一):列出至少三个”用一点偏差换取大幅降低方差”的例子,分别来自不同的讲次。

参考答案

TD(0) 用自举目标代替完整回报(第 3 讲);GAE 用 λ 在 TD 和 MC 之间插值(第 7 讲);加权重要性采样(WIS)的自归一化(第 10 讲);PPO 的裁剪(第 7 讲);GRPO 的标准差归一化(第 16 讲);直接法用模型代替重要性采样(第 10 讲)。

练习 7(主线二):UCB、汤普森采样、PSRL、Dyna-Q+ 各自用什么方式鼓励探索?它们的共同点是什么?

参考答案

UCB:给每个臂加一个随拉动次数减小的置信宽度(乐观)。汤普森采样:从后验中抽样,不确定的臂有机会抽到高值(后验采样)。PSRL:每个回合从 MDP 的后验中抽一个 MDP,按其最优策略走完整个回合。Dyna-Q+:给很久没有验证过的 (s, a) 加随时间增长的探索奖励。共同点:探索的强度与不确定性挂钩——越不确定(数据越少、越久没验证),越值得去尝试;而一旦有了足够的证据,探索自动减少。这与 ε-贪心”不管确定与否都以固定比例乱试”形成鲜明对比。

练习 8(主线三、四):第 8、9、10、15 讲都出现了”分布偏移”。用一句话分别说明每一讲中”训练时的分布”和”使用时的分布”是什么。

参考答案

第 8 讲:训练时是专家访问的状态,使用时是学习者自己访问的状态。第 9 讲:奖励模型训练时是参考模型产生的回答,使用时是被优化后的策略产生的回答。第 10 讲:数据来自行为策略,要评估或学习的是另一个策略。第 15 讲:模型在真实数据覆盖的状态上训练,规划时却在想象出的(可能越界的)状态上使用。

练习 9(综合):你要为一家医院设计一个用 RL 推荐治疗方案的系统。结合本课内容,列出你会考虑的至少五个问题,并说明它们来自哪一讲。

参考答案

(1) 不能随便试错,只有历史病历——离线 RL 与离策略评估(第 10 讲);(2) 历史数据中医生的决策可能依赖于没有记录的信息——混杂因素,OPE 可能有偏(第 10 讲);(3) 新策略上线前需要高置信度的评估,且新策略不应离医生的做法太远——悲观、KL 约束(第 9、10 讲);(4) 奖励怎么定义?“出院”可能被投机(比如过早出院),需要考虑长期结果——奖励设计与投机(第 16 讲);(5) 医生的示范可以利用——模仿学习(第 8 讲);(6) 如果允许小规模的谨慎试验,怎样在收益与学习之间权衡——老虎机与探索(第 11、12 讲);(7) 数据很少,能否利用医学知识构建模型——基于模型的方法与先验(第 12、15 讲)。

练习 10(开放题):这门课中,你觉得哪一个”反直觉”的实验结果最有启发?它改变了你对哪个算法的理解?

参考答案

没有标准答案。一些候选:GAE 的方差不随 λ 单调变化(第 7 讲);行为克隆比带噪声的专家本身还好(第 8 讲);ε-贪心的 Q-learning 到达过目标却没学会(第 13 讲);平坦蒙特卡洛模拟再多也会选错(第 14 讲);普通 Q-learning 反而比 Dyna-Q 更容易发现捷径(第 15 讲);GRPO 的”更快”主要来自更大的步长(第 16 讲)。这些结果的共同启示是:算法的行为要在具体问题上验证,理论直觉需要实验来检验。


9. 延伸阅读

  • Shao et al. (2024),DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models(GRPO)。
  • DeepSeek-AI (2025),DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning。
  • Ahmadian et al. (2024),Back to Basics: Revisiting REINFORCE Style Optimization for Learning from Human Feedback in LLMs(RLOO)。
  • Liu et al. (2025),Understanding R1-Zero-Like Training: A Critical Perspective(Dr. GRPO)。
  • Yu et al. (2025),DAPO: An Open-Source LLM Reinforcement Learning System at Scale。
  • Yue et al. (2025),Does Reinforcement Learning Really Incentivize Reasoning Capacity in LLMs Beyond the Base Model?(pass@k 的讨论)。
  • Krakovna et al. (2020),Specification Gaming: The Flip Side of AI Ingenuity(DeepMind 博客,含大量奖励投机的例子)。
  • Amodei et al. (2016),Concrete Problems in AI Safety。
  • Sutton & Barto,第 17 章(前沿);Sutton (2019),The Bitter Lesson。

10. 结语

从第 1 讲的火星车到这一讲的推理模型,我们走过了强化学习的主要版图:

  • 知道了怎样表述一个序贯决策问题(MDP、价值、策略);
  • 知道了怎样在已知模型时求解它(动态规划、搜索),在未知模型时学习它(MC、TD、Q-learning、策略梯度、Actor-Critic、基于模型的方法);
  • 知道了怎样高效地学习(探索、乐观、后验采样),怎样在不能试错时学习(离线 RL、悲观),怎样从人类那里学习(模仿、偏好);
  • 也知道了 RL 的风险:它会利用每一个估计的错误、每一个奖励的漏洞。

强化学习的核心问题——在不确定的世界里,通过与之交互来学会做出好的决策——远没有被解决。希望这份讲义和代码能成为你继续探索的起点。

建议的下一步:

  1. 用 PyTorch 把第 14 讲的 AlphaZero 骨架换成神经网络,或者把第 16 讲的玩具模型换成一个真正的小语言模型;
  2. 读一读 Sutton & Barto 的全书,以及 Agarwal, Jiang, Kakade & Sun 的 RL: Theory and Algorithms;
  3. 在 Gymnasium 的环境上复现一篇你感兴趣的论文——动手实验,永远是理解一个算法最好的方式。
← 返回课程目录