MDP:把 RL 装进一个五元组
上一课你用自然语言拿下了六个词。这课把它们装进一个数学框架——马尔可夫决策过程(MDP)。这是 RL 的“标准坐标系”:后面推导策略梯度、写 PPO、讲 GRPO,全都在 MDP 上做。本课还会引出优势函数 $A$——它是 PPO 和 GRPO 共同优化的量,请记住它。
一、MDP 五元组
一个 MDP 是五个东西的集合:
| $\mathcal{S}$ | 状态空间。所有可能的状态。LLM:所有可能的 prompt。 |
| $\mathcal{A}$ | 动作空间。所有可能的动作。LLM:所有可能的回答。 |
| $P(s'\mid s,a)$ | 转移概率:在状态 $s$ 做动作 $a$ 后,跳到 $s'$ 的概率。环境的规则。 |
| $r(s,a)$ | 奖励函数:在 $s$ 做 $a$ 得到的即时奖励(标量)。 |
| $\gamma \in (0,1]$ | 折扣因子:越远的奖励权重越小。 |
用这五个东西,第 2 课的“循环”就能写成一条确定的概率链:给定策略 $\pi$,轨迹 $\tau=(s_0,a_0,r_0,s_1,a_1,r_1,\ldots)$ 的每一步都由 $\pi(a_t\mid s_t)$ 和 $P(s_{t+1}\mid s_t,a_t)$ 采样生成。
二、马尔可夫性:为什么 $\pi(a\mid s)$ 只看当前状态
MDP 的核心假设是马尔可夫性:下一步只依赖当前状态和动作,与历史无关:
$$ P(s_{t+1}\mid s_0,a_0,\ldots,s_t,a_t) \;=\; P(s_{t+1}\mid s_t,a_t) $$
这条假设的“分红”:策略 $\pi(a\mid s)$ 只需条件于当前状态 $s$ 就够了,不必把整段历史塞进去。这是为什么第 2 课里 $\pi$ 写成 $\pi(a\mid s)$ 而不是 $\pi(a\mid s_0,\ldots,s_t)$。注意:LLM 严格说不是完全马尔可夫的(prompt 含历史信息),但只要把“完整 prompt”当作当前状态 $s$,MDP 框架仍适用——这是 LLM 接入 RL 的标准做法。
三、价值函数:$V$ 与 $Q$
回报 $G_t$ 是一次采样轨迹上的累计奖励,随机。我们要的是它的期望,这期望就是价值函数。
状态价值:从状态 $s$ 出发、按策略 $\pi$ 走到底,期望回报:
$$ V^\pi(s) \;=\; \mathbb{E}\!\left[\, G_t \;\middle|\; s_t=s,\; \pi \,\right] $$
动作价值:在状态 $s$ 先做动作 $a$,之后按 $\pi$ 走到底,期望回报:
$$ Q^\pi(s,a) \;=\; \mathbb{E}\!\left[\, G_t \;\middle|\; s_t=s,\; a_t=a,\; \pi \,\right] $$
两者的关系很直观:$V^\pi(s)$ 是“在 $s$ 平均能拿多少分”,$Q^\pi(s,a)$ 是“在 $s$ 特意做 $a$ 能拿多少分”。把 $Q$ 按策略求平均就回到 $V$:
$$ V^\pi(s) \;=\; \sum_{a} \pi(a\mid s)\, Q^\pi(s,a) $$
(它们都满足贝尔曼方程的递归结构,例如 $V^\pi(s)=\sum_a \pi(a|s)\sum_{s'}P(s'|s,a)[r+\gamma V^\pi(s')]$。本课只点到为止——策略梯度路线主要用 $V,Q,A$ 三个量,不深入解贝尔曼方程。)
四、优势函数 $A$:本课的主角
把动作价值减去状态价值,就得到优势:
$$ A^\pi(s,a) \;=\; Q^\pi(s,a) - V^\pi(s) $$
读法:$A>0$ 表示“动作 $a$ 比平均好,该多做”;$A<0$ 表示“比平均差,该少做”。$V^\pi(s)$ 在这里充当基线(baseline)——它把“绝对好坏”换成“相对好坏”,大幅降低梯度估计的方差。这一点,是第 4 课推导策略梯度时“为什么加 baseline 能降方差”的根源。
动手感受:调策略,看 $V$ 和 $A$ 怎么动
下面是一道数学题(状态 $s$)。三个候选动作(三种解法)的质量 $Q$ 固定;你拖动滑块改策略 $\pi$,看基线 $V$ 和每个动作的优势 $A$ 实时变化。柱顶在 $V$ 线之上 → 优势为正(绿,应加强);之下 → 负(红,应削弱)。
五、代码演示:把 MDP 写成可运行代码
同样三个量 $V,Q,A$,在代码里就是三个函数。下面是与上面柱状图同一个例子的 Python 实现,符号一一对应:
| 数学符号 | 代码 | 类型 |
|---|---|---|
| $\mathcal{A}$ 动作空间 | A | 列表 |
| $Q^\pi(s,a)$ 动作价值 | Q | 字典 |
| $\pi(a\mid s)$ 策略 | pi | 字典 |
| $V^\pi(s)=\sum_a \pi\,Q$ | state_value() | 函数 |
| $A^\pi(s,a)=Q-V$ | advantage() | 函数 |
本地运行:python lessons/code/0003_mdp_value_advantage.py(零依赖,复制即跑)。完整版含"贪心策略对照"。
浏览器里直接“跑”:拖上面的三个滑块,下面实时打印
这段输出和你在终端 python 跑出来的逐行一致——改 $\pi$ 即重算 $V$ 与每个 $A$。
六、把 RL 目标正式写出来
第 2 课的目标 $\max_\pi \mathbb{E}_{\tau\sim\pi}[G]$,现在可以等价写成:
$$ J(\pi) \;=\; \mathbb{E}_{s_0\sim d_0}\!\left[\, V^\pi(s_0) \,\right] $$
其中 $d_0$ 是初始状态分布。RL 就是调 $\pi$ 使 $J(\pi)$ 最大。下一课我们就从这个 $J(\pi)$ 出发,推导出策略梯度定理——第一个真正的“怎么调 $\pi$”的公式。
七、自测
问题 1:在 MDP 中,$P(s'\mid s,a)$ 代表什么?
问题 2:优势 $A^\pi(s,a)=Q^\pi(s,a)-V^\pi(s)$ 的直观含义?
八、推荐资源
读 Spinning Up · Part 1 的 Formalism 小节(如果你第 2 课已读过,这次带着 MDP 五元组再过一遍)。想看权威定义可翻 Sutton & Barto 第 3 章关于 MDP 与价值函数的部分。
(1) $\mathbb{E}[\,G_t \mid s_t=s\,]$ 这个条件期望到底在对什么取平均?
(2) 为什么 $V=\sum_a \pi(a|s)Q(s,a)$?
(3) 优势减 baseline 为什么能降方差(直觉即可)?
这是第 3 课。下一课预告:第 4 课 · 策略梯度定理:第一个“怎么调 π”的推导——从 $J(\pi)$ 出发,完整推出 $\nabla_\pi J = \mathbb{E}[\nabla_\theta\log\pi\cdot A]$,并用上本课的 $A$ 与 baseline。
任何不懂的词,直接问老师。