UC Berkeley  /  Spring 2026
CS 185/285

Deep Reinforcement Learning

从行为克隆到 LLM 的 RLVR,把「让智能体自己学会做决策」这件事的每一层数学与工程拆开重建。这里是全 25 讲的中文精读文档 + 5 份作业的完整实现与解析。

讲师:Sergey Levine 课程主页 作业仓库

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. 全部讲义

Unit 1 · 从模仿到强化:问题是怎么被提出来的
Unit 2 · 无模型 RL:策略梯度与值函数两条主线
LECTURE 05
策略梯度

全课最重要的一次推导:log-derivative trick 让未知的转移概率整项消掉,于是不需要模型也能求梯度。然后是与之相伴的高方差问题,以及两个正统解法——因果性(reward-to-go)与 baseline(含最优 baseline 的闭式解)。

REINFORCE · reward-to-go · 最优 baseline · 重要性采样
LECTURE 06
Actor-Critic 算法

用学到的 $V^\pi$ 替掉单样本回报,把方差再降一个量级,代价是引入偏差。折扣因子放在哪一项会得到不同的梯度、n-step 回报如何在偏差与方差之间连续插值,最后收束到 GAE 的指数加权形式。

优势函数 · 自举 · $\gamma$ 的两种放法 · n-step · GAE
LECTURE 07
基于值的强化学习

干脆不要显式策略。从策略改进定理出发推出 policy/value iteration,证明 Bellman 最优算子是 $\infty$-范数下的 $\gamma$-收缩。然后是本讲真正的重点:为什么加上函数逼近后,这份漂亮的收敛保证会整个失效。

策略改进定理 · 收缩映射 · fitted Q-iteration · 不收敛的原因
LECTURE 08
Q-Learning 的工程实践

把上一讲的负面结论变成能跑的算法。replay buffer 与 target network 分别修的是哪一个病;$\E[\max]\ge\max[\E]$ 造成的系统性高估与 Double DQN;连续动作下 $\max_a$ 的三条出路;以及一份可以照着抄的调参清单。

DQN · target network · 过估计 · Double DQN · 连续动作
LECTURE 09
Off-Policy 策略梯度

想复用旧数据,就得付重要性采样的账——而轨迹级的 IS 权重是连乘,方差随 horizon 指数爆炸。这一讲讲清楚哪一项可以安全丢掉、丢掉之后的近似在什么条件下才成立,正好是下一讲信赖域的动机。

IS 权重连乘 · 方差爆炸 · 一阶近似 · ESS
LECTURE 10
高级策略梯度:自然梯度与信赖域

全课理论最硬的一讲。性能差分引理把「新策略好多少」写成对旧优势的期望;有界分布漂移引理把状态分布的偏差控制住;Pinsker 把 TV 换成 KL;二阶展开给出 Fisher 矩阵与自然梯度。TRPO 与 PPO 都是这条链的工程化落地。

性能差分引理 · KL 约束 · Fisher / 自然梯度 · TRPO · PPO
Unit 3 · 概率视角:把控制问题变成推断问题
Unit 4 · 序列模型与大语言模型
Unit 5 · 基于模型的强化学习
Unit 6 · 离线强化学习
Unit 7 · 探索与理论
Unit 8 · 期中复习
Unit 9 · 前沿:无监督、多任务与开放问题

2. 五份作业:完整实现 + 编程解析

每份作业都做了两件事:把官方 starter code 里的 TODO 全部实现并跑通实验(代码在 homework/hwN/,含自写的数值测试与训练曲线),以及写一份逐段讲解的编程解析——不只是贴答案,而是讲清楚每个函数为什么要这样写、写错会怎样、怎么用一个断言把它验出来。

HOMEWORK 01
模仿学习:动作分块与流匹配策略

在 Push-T 上训练 action chunking 策略。先用 MSE 损失一次性预测动作块,再用流匹配(flow matching)学一个把噪声输运成动作块的向量场——正好用实验验证了第 3 讲的论点:单峰回归会把多模态数据平均成无效动作。

Push-T · action chunking · MSE policy · flow matching · Euler 积分
HOMEWORK 02
策略梯度

从零实现 REINFORCE 及其全部方差削减手段,并在 CartPole 上做完整消融:reward-to-go、优势标准化、大小 batch、neural baseline、GAE 各自贡献多少。第 5–6 讲的推导在这里变成可复现的曲线。

REINFORCE · reward-to-go · baseline · GAE · 消融实验
HOMEWORK 03
Q-Learning 与 Actor-Critic

作业量最大的一份(51 处 TODO)。DQN 与 Double DQN 跑 CartPole / LunarLander / MsPacman;SAC 一侧要实现 tanh-squashed 高斯策略的 log-prob 修正、熵温度自动调节、以及 single / double / clipped double Q 三种目标的对比。

DQN · Double DQN · SAC · tanh log-prob · 熵自动调温 · clipped double Q
HOMEWORK 04
大语言模型的强化学习

在 Qwen2.5-Math-1.5B 上用 LoRA 跑 REINFORCE 与 GRPO。核心是几个极易写错的细节:logits 与 label 的错位对齐、completion mask、k3 KL 估计,以及 GRPO 的组内相对优势与 clipped surrogate。

LoRA · REINFORCE · GRPO · 组内优势 · k3 KL · clip
HOMEWORK 05
离线强化学习

在 ogbench 数据集上实现 IQL、SAC+BC 与 FQL。重点是期望回归(expectile regression)——用一个不对称的加权平方损失,在完全不查询分布外动作的前提下把 $\max$ 逼出来。

IQL · expectile regression · AWR 抽取 · SAC+BC · FQL

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/ 下。