Deep Reinforcement Learning
从行为克隆到 LLM 的 RLVR,把「让智能体自己学会做决策」这件事的每一层数学与工程拆开重建。这里是全 25 讲的中文精读文档 + 5 份作业的完整实现与解析。
0. 这门课在讲什么
监督学习问「给定输入,正确的输出是什么」;强化学习问的是另一个问题:没有人告诉你正确答案,只有一个稀疏、延迟、可能还带噪声的评价信号,你怎么学会行动?这个设定看起来只是把标签换成了奖励,实际上把整个机器学习的地基都改了——数据不再是独立同分布的,它由你自己的策略生成;你改变策略,数据分布就跟着变;而你要优化的目标,是一个对自己生成的数据分布求的期望。
几乎每一讲都在回答同一个问题的不同侧面:
$$ \theta^\star \;=\; \argmax_\theta\; \E_{\tau \sim p_\theta(\tau)}\!\left[\sum_{t} r(s_t, a_t)\right] $$难点全在期望下标的那个 $p_\theta(\tau)$ 上——它依赖于你正在优化的参数本身。分布漂移(第 2–3 讲)、高方差的梯度估计(第 5–6 讲)、自举带来的不收敛(第 7–8 讲)、信赖域(第 9–10 讲)、离线数据的分布外查询(第 17–18 讲),全都是这一个耦合在不同场景下的化身。
为什么值得完整读一遍
- 它是「动机链条」式的讲法。Levine 极少直接给算法,他总是先给一个朴素做法,演示它在哪里崩掉,再让下一个方法自然长出来。行为克隆 → DAgger、策略梯度 → baseline → actor-critic → 信赖域,每一步都有明确的「不这么做会怎样」。
- 推导不跳步。$O(\epsilon T^2)$ 的误差累积、最优 baseline、Bellman 算子的收缩性、性能差分引理、control as inference 的变分修正——这些是真正把 RL 和「调包」区分开的地方。
- 它已经接上了当下。第 14 讲把 RLHF、DPO、GRPO、RLVR 完整纳入同一个 MDP 框架;第 17–18 讲的离线 RL 正是当前具身智能与大模型后训练的公共地基。
预备知识
- 熟练的 Python 与 PyTorch(会写自定义
nn.Module和训练循环) - 概率论(条件期望、KL 散度、重要性采样)与线性代数
- 深度学习基础(反向传播、优化器、常见网络结构)
- 不需要:控制论、最优化理论、强化学习基础——这些课程内会从头讲
1. 全部讲义
端到端学习为什么重要、RL 与监督学习的本质分歧在哪、奖励究竟从哪来。同时把整门课的地图画出来:后面每一大块分别在补哪一块短板。
把决策当监督学习做,为什么会在几十步后偏出数据流形。核心是分布漂移的形式化:单步误差 $\epsilon$ 如何累积成 $O(\epsilon T^2)$ 的总代价,以及 DAgger 用什么代价把它压回 $O(\epsilon T)$。
就算数据够,专家行为本身也常常拟合不了——非马尔可夫(要看历史,却会引入因果混淆)与多模态(平均两个正确动作等于一个错误动作)。三条解法:隐变量模型、自回归离散化、扩散/流匹配策略。
全课的记号总纲。马尔可夫链 → MDP → POMDP;目标函数的有限步与平稳分布两种写法;为什么 RL 优化的是期望(于是即使奖励不连续,目标对参数仍是光滑的);以及四大类算法在同一个循环里各自站在哪一格。
全课最重要的一次推导:log-derivative trick 让未知的转移概率整项消掉,于是不需要模型也能求梯度。然后是与之相伴的高方差问题,以及两个正统解法——因果性(reward-to-go)与 baseline(含最优 baseline 的闭式解)。
用学到的 $V^\pi$ 替掉单样本回报,把方差再降一个量级,代价是引入偏差。折扣因子放在哪一项会得到不同的梯度、n-step 回报如何在偏差与方差之间连续插值,最后收束到 GAE 的指数加权形式。
干脆不要显式策略。从策略改进定理出发推出 policy/value iteration,证明 Bellman 最优算子是 $\infty$-范数下的 $\gamma$-收缩。然后是本讲真正的重点:为什么加上函数逼近后,这份漂亮的收敛保证会整个失效。
把上一讲的负面结论变成能跑的算法。replay buffer 与 target network 分别修的是哪一个病;$\E[\max]\ge\max[\E]$ 造成的系统性高估与 Double DQN;连续动作下 $\max_a$ 的三条出路;以及一份可以照着抄的调参清单。
想复用旧数据,就得付重要性采样的账——而轨迹级的 IS 权重是连乘,方差随 horizon 指数爆炸。这一讲讲清楚哪一项可以安全丢掉、丢掉之后的近似在什么条件下才成立,正好是下一讲信赖域的动机。
全课理论最硬的一讲。性能差分引理把「新策略好多少」写成对旧优势的期望;有界分布漂移引理把状态分布的偏差控制住;Pinsker 把 TV 换成 KL;二阶展开给出 Fisher 矩阵与自然梯度。TRPO 与 PPO 都是这条链的工程化落地。
后面三讲的数学地基。ELBO 的两种推导(Jensen 与 KL 恒等式分解)、摊销推断、重参数化技巧与 score function 估计的取舍——最后一点尤其值得留意:它和策略梯度是同一个数学工具的两次出场。
把变分工具搬进序列决策:隐状态与信念状态的表示学习、潜在动力学模型的联合训练、变分后验在时间上的因子分解。这是从像素学控制的标准做法。
引入最优性变量 $\mathcal{O}_t$,$p(\mathcal{O}_t|s_t,a_t)=\exp r(s_t,a_t)$,最优控制就变成图模型上的推断。直接做推断会得到过分乐观的解;用变分修正把动力学固定住,掉出来的正好是最大熵目标——SAC 就是它的算法形态。
学一个动力学模型再在里面规划,听上去样本效率能提一个数量级——但规划器会精准地找到模型出错的地方并加以利用。这一讲讲清楚 model exploitation 是怎么发生的,以及不确定性估计为什么是唯一的解药。
从版本 0.5 到 2.0 的递进:朴素做法 → DAgger 式数据回收 → MPC 重规划 → 反传进模型学策略。再加上高维观测下的隐空间模型,以及 Dyna 风格用模型生成短 rollout 增广无模型算法。
离线 RL 真正吸引人的地方不是省交互,而是「拼接」——从一堆平庸轨迹里组合出比任何一条都好的策略。困难同样明确:$\max_a Q$ 会系统性地挑中分布外动作,而没有环境交互来纠正这个错误。
四条技术路线逐个拆开:策略约束(为什么支撑集约束比分布匹配更合理)、保守值函数(CQL 的下界怎么来的)、隐式方法(IQL 用期望回归在不查询 OOD 动作的前提下逼近 max)、以及悲观模型。
$\epsilon$-greedy 在 Montezuma's Revenge 上等于随机游走。从老虎机的三类原则(UCB / Thompson / 信息增益)出发,看它们如何搬到高维 MDP 上:伪计数、哈希计数、RND、Bootstrapped DQN。
理论能给出什么、给不出什么。近似动态规划的误差传播为什么带 $(1-\gamma)^{-2}$、集中不等式如何转成样本复杂度、探索的 regret 界;以及这些结论在深度网络下失效之后,还剩下哪些有用的直觉。
前半程的例题与概念辨析:模仿学习、MDP、策略梯度、actor-critic、值函数方法。每道题给出完整解答与考点分析,配速查公式卡片。
全课最长的一讲(73 页)。按主题归类的大量习题与详解,是检验前 20 讲是否真的学懂的最好材料。
完全没有外部奖励时该学什么。以状态熵最大化做覆盖,以互信息 $I(s;z)$ 做技能发现(DIAYN 的目标分解),以及目标条件 RL 与自动课程如何让智能体自己给自己出题。
把多任务写成一个更大的 MDP 之后,为什么反而更难训(梯度冲突与任务干扰)。后半是元学习的三种视角与分层 RL:options 框架、option-critic 的梯度、以及下层策略非平稳带来的训练困难。
收官讲,Levine 谈他对整个领域的判断:样本效率、稳定性、奖励设计、泛化、安全性各自卡在哪里,以及「RL 应该像监督学习一样吃数据」这条路线意味着什么。末尾附全课回顾与继续深入的路径。
2. 五份作业:完整实现 + 编程解析
每份作业都做了两件事:把官方 starter code 里的 TODO 全部实现并跑通实验(代码在 homework/hwN/,含自写的数值测试与训练曲线),以及写一份逐段讲解的编程解析——不只是贴答案,而是讲清楚每个函数为什么要这样写、写错会怎样、怎么用一个断言把它验出来。
在 Push-T 上训练 action chunking 策略。先用 MSE 损失一次性预测动作块,再用流匹配(flow matching)学一个把噪声输运成动作块的向量场——正好用实验验证了第 3 讲的论点:单峰回归会把多模态数据平均成无效动作。
从零实现 REINFORCE 及其全部方差削减手段,并在 CartPole 上做完整消融:reward-to-go、优势标准化、大小 batch、neural baseline、GAE 各自贡献多少。第 5–6 讲的推导在这里变成可复现的曲线。
作业量最大的一份(51 处 TODO)。DQN 与 Double DQN 跑 CartPole / LunarLander / MsPacman;SAC 一侧要实现 tanh-squashed 高斯策略的 log-prob 修正、熵温度自动调节、以及 single / double / clipped double Q 三种目标的对比。
在 Qwen2.5-Math-1.5B 上用 LoRA 跑 REINFORCE 与 GRPO。核心是几个极易写错的细节:logits 与 label 的错位对齐、completion mask、k3 KL 估计,以及 GRPO 的组内相对优势与 clipped surrogate。
在 ogbench 数据集上实现 IQL、SAC+BC 与 FQL。重点是期望回归(expectile regression)——用一个不对称的加权平方损失,在完全不查询分布外动作的前提下把 $\max$ 逼出来。
3. 怎么用这份文档
三种读法,按你的目的选:
| 目的 | 路线 |
|---|---|
| 第一次系统学 RL | 按 1 → 25 顺序读。第 2、5、7、10、13、17 讲是六个关键节点,读不懂后面的说明前面某一节没吃透,回头补。 |
| 只想快速上手写代码 | 4 → 5 → 6 → 7 → 8 讲,配合 HW2、HW3 一起做。这五讲加两份作业就能覆盖绝大多数在线 RL 的实践。 |
| 做 LLM 后训练 | 4 → 5 → 9 → 10 → 14 讲,然后直接做 HW4。第 9、10 讲解释了 PPO/GRPO 里每一项裁剪与 KL 惩罚的来历,不读这两讲就只能照抄超参。 |
| 做具身智能 / 机器人 | 2 → 3 → 13 → 15 → 16 → 17 → 18 讲,配合 HW1 和 HW5。多模态策略与离线 RL 是目前机器人学习的两块主要地基。 |
全站公式用 MathJax 渲染,首次打开某一页时会有零点几秒的排版过程。所有页面共用一套记号,第 4 讲有完整的记号表,读到后面记号对不上时回去查那一节。
homework/ 下是完整可运行的实现,但它不是给你直接交上去的答案。真正有价值的是解析文档里「为什么这样写」和「写错会怎样」那部分——先自己写一遍,卡住了再来对照。
每份作业的正确性由自写的数值测试保证(HW1 7 项 / HW2 26 项 / HW3 18 项 / HW4 26 项 / HW5 26 项,全部通过),断言直接检验数学性质本身——比如期望回归在 $\tau=0.5$ 时的最优解必须等于样本均值、$\tau\to1$ 时必须逼近样本最大值。
训练则受本机算力限制:HW1、HW2、HW4 跑完了作业要求的全部实验并达标;HW3 的 MsPacman、Hopper clipped-Q、HalfCheetah 与 HW5 的 FQL 属于提前终止的短 run,未达到作业要求的最终分数,只能看出上升趋势。各解析文档里逐条标注了「跑到第几步 / 目标是多少 / 是否达标」,没有把截断结果说成达标。日志与曲线在各作业目录的 runs/ 与 figures/ 下。