上一篇结尾用全期望公式把 \(V^\pi(s)\) 按"下一个 State"分组展开了。Markov Property 那篇讨论了为什么 Bellman Equation 需要 Markov Property 作为前提。
数学工具准备齐了,我打算正式跟一遍 Bellman Equation 的推导。
然后就卡住了。
一个看起来不对的替换#
先回顾。前面那篇定义了 Return 的递归分解:
$$ G_t = R_{t+1} + \gamma\, G_{t+1} $$State Value Function 是给定当前 State 时 Return 的条件期望:
$$ V^\pi(s) = \mathbb{E}_\pi[G_t \mid S_t = s] $$把 Return 的递归形式代进去:
$$ V^\pi(s) = \mathbb{E}_\pi[R_{t+1} + \gamma\, G_{t+1} \mid S_t = s] $$到这里都没问题——只是代数变换。
但 Bellman Equation 的最终形式长这样:
$$ V^\pi(s) = \mathbb{E}_\pi[R_{t+1} + \gamma\, V^\pi(S_{t+1}) \mid S_t = s] $$\(G_{t+1}\) 变成了 \(V^\pi(S_{t+1})\)。
我第一反应是:这不对吧?
\(G_{t+1}\) 是从时刻 \(t+1\) 开始一路走到底的实际 Return——它是一个随机变量,同一个起点走不同的后续轨迹会得到不同的值。而 \(V^\pi(S_{t+1})\),一旦知道下一 State 是什么,就是一个确定的数。
$$ G_{t+1} \neq V^\pi(S_{t+1}) $$这两个不是同一个随机变量,不能直接替换。
后来我发现,Bellman Equation 没有做变量替换。它做的事情更精细——替换的是整个条件期望,而不是期望里面的随机变量:
$$ \mathbb{E}_\pi[G_{t+1} \mid S_t = s] = \mathbb{E}_\pi[V^\pi(S_{t+1}) \mid S_t = s] $$左右两个随机变量不同,但它们的条件期望相等。
为什么会这样?为了搞清楚,我用一个具体的数字例子从头算一遍。
先按下一 State 分组算一遍#
设当前 State 为 A。为了把注意力集中在条件期望的逻辑上,先做两个简化:令即时 Reward \(R_{t+1} = 0\),折扣因子 \(\gamma = 1\)。这样 \(G_t = G_{t+1}\),问题退化为"从 A 出发,未来 Return 的期望是多少"。后面推导 Bellman Equation 时会恢复一般形式。
从 A 出发,有两种可能的下一 State:
- 70% 的概率进入 B。
- 30% 的概率进入 C。
进入 B 之后,后续 Return \(G_{t+1}\) 有两种可能结果:80 或 120,各 50% 概率。进入 C 之后,后续 Return 有两种可能结果:0 或 40,各 50% 概率。
整理成表格:
| 下一 State | 到达概率 | 实际 Return | 组内条件概率 | 联合概率 |
|---|---|---|---|---|
| B | 70% | 80 | 50% | 35% |
| B | 70% | 120 | 50% | 35% |
| C | 30% | 0 | 50% | 15% |
| C | 30% | 40 | 50% | 15% |
“组内条件概率"是在已知下一 State 的前提下,该 Return 出现的概率。“联合概率"是"到达该 State 且获得该 Return"的概率,等于到达概率乘以组内条件概率——这用到了上一篇建立的乘法规则。四个联合概率加起来等于 1,覆盖了所有可能的结果。
直接算法: 把所有结果按联合概率加权:
$$ 80 \times 0.35 + 120 \times 0.35 + 0 \times 0.15 + 40 \times 0.15 = 28 + 42 + 0 + 6 = 76 $$分组算法: 先在每组内部按条件概率求平均,再按组的到达概率加权。
B 组内部平均:
$$ 80 \times 0.5 + 120 \times 0.5 = 100 $$C 组内部平均:
$$ 0 \times 0.5 + 40 \times 0.5 = 20 $$按组加权:
$$ 100 \times 0.7 + 20 \times 0.3 = 70 + 6 = 76 $$两种算法得到完全相同的结果。这和上一篇用 100 人奖金例子推导的全期望公式是同一个道理——分组求期望再加权,和直接对所有结果加权求期望,在数学上完全等价。
但分组算法里出现的 100 和 20,到底是什么?我卡在了这个地方。
条件期望到底保留了什么#
100 是"已知下一 State 是 B 时"Return 的条件期望。20 是"已知下一 State 是 C 时"Return 的条件期望。
给它一个名字。定义:
$$ H = \mathbb{E}_\pi[G_{t+1} \mid S_t, S_{t+1}] $$这个定义需要解释一下。\(S_t\) 和 \(S_{t+1}\) 都没有固定为某个具体取值——它们仍然是随机变量。\(H\) 的含义是:已知当前 State 和下一 State 时,对未来 Return 求条件期望。
因为 \(S_{t+1}\) 还没有确定,\(H\) 本身也是一个随机变量——\(S_{t+1}\) 取不同的值,\(H\) 就给出不同的条件期望。这一点容易滑过去:\(\mathbb{E}_\pi[G_{t+1} \mid S_t = A, S_{t+1} = B] = 100\) 是一个确定的数,但 \(\mathbb{E}_\pi[G_{t+1} \mid S_t, S_{t+1}]\) 不是——后者的值随着 \(S_{t+1}\) 的取值而变化。
在这个例子中,固定 \(S_t = A\):
$$ H = \begin{cases} 100, & S_{t+1} = B \\ 20, & S_{t+1} = C \end{cases} $$现在把 \(G_{t+1}\)(实际 Return)和 \(H\)(条件期望)放在一起看:
| 情况 | 概率 | \(G_{t+1}\) | \(H\) |
|---|---|---|---|
| B,Return = 80 | 35% | 80 | 100 |
| B,Return = 120 | 35% | 120 | 100 |
| C,Return = 0 | 15% | 0 | 20 |
| C,Return = 40 | 15% | 40 | 20 |
\(G_{t+1}\) 和 \(H\) 在具体取值上几乎处处不同。一个是实际走出来的 Return,一个是已知下一 State 后的组内均值。
但它们有一个共同点:
$$ \mathbb{E}_\pi[G_{t+1} \mid S_t = A] = 80 \times 0.35 + 120 \times 0.35 + 0 \times 0.15 + 40 \times 0.15 = 76 $$$$ \mathbb{E}_\pi[H \mid S_t = A] = 100 \times 0.7 + 20 \times 0.3 = 76 $$总体条件期望相等。
为什么?
看 B 组。\(G_{t+1}\) 在 B 组内取 80 或 120,波动很大。\(H\) 在 B 组内恒等于 100——条件期望把 80 和 120 用组内平均压成了同一个值。
用偏差来验证。B 组内部:
$$ (80 - 100) \times 0.5 + (120 - 100) \times 0.5 = -10 + 10 = 0 $$C 组内部:
$$ (0 - 20) \times 0.5 + (40 - 20) \times 0.5 = -10 + 10 = 0 $$每一组内部,\(G_{t+1}\) 相对于 \(H\) 的偏差期望为零。于是:
$$ \mathbb{E}_\pi[G_{t+1} - H \mid S_t = A] = 0 $$条件期望消除了组内的随机波动,但保留了组内的平均值。 波动消失了,平均值没变,所以再按各组概率加权平均时,总体期望不会改变。
上一篇推导了全期望公式的无条件形式:
$$ \mathbb{E}[X] = \mathbb{E}_Y[\mathbb{E}[X \mid Y]] $$但 Bellman Equation 的起点不是无条件期望 \(\mathbb{E}[G_{t+1}]\),而是已经有 \(S_t = s\) 作为给定条件的条件期望 \(\mathbb{E}[G_{t+1} \mid S_t = s]\)。所以需要的是全期望公式的条件版本:
$$ \mathbb{E}[X \mid Z] = \mathbb{E}_Y[\mathbb{E}[X \mid Y, Z] \mid Z] $$在 Bellman Equation 的语境下,\(X\) 对应 \(G_{t+1}\),\(Y\) 对应 \(S_{t+1}\),\(Z\) 对应 \(S_t\):
$$ \mathbb{E}_\pi[G_{t+1} \mid S_t = s] = \mathbb{E}_\pi[\,\mathbb{E}_\pi[G_{t+1} \mid S_{t+1}, S_t = s]\, \mid S_t = s\,] $$外层固定了 \(S_t = s\)。内层在此基础上再引入 \(S_{t+1}\) 作为额外的已知条件——先对 \(S_{t+1}\) 的每个取值算条件期望(组内平均),再对 \(S_{t+1}\) 的分布加权(组间加权)。
这和无条件版本的逻辑完全一样,只是所有操作都在”\(S_t = s\) 已知"这个前提下进行。
为什么可以先拆开再合并#
理解了条件期望之后,还有一个我之前跳过的地方。
从 \(\mathbb{E}_\pi[R_{t+1} + \gamma\, G_{t+1} \mid S_t = s]\) 到 Bellman Equation 的过程中,有一步是把期望拆成两部分:
$$ \mathbb{E}_\pi[R_{t+1} + \gamma\, G_{t+1} \mid S_t = s] = \mathbb{E}_\pi[R_{t+1} \mid S_t = s] + \gamma\,\mathbb{E}_\pi[G_{t+1} \mid S_t = s] $$很多教材直接跳过这一步。我最初也觉得理所当然,后来意识到这里用到了期望的线性性质。
先看最简单的情况。三个人的成绩分别是 60、70、80,每人的成绩由语文和数学两部分组成(60 = 30 + 30,70 = 40 + 30,80 = 50 + 30)。平均总分 = 平均语文分 + 平均数学分:
$$ \frac{60 + 70 + 80}{3} = \frac{30 + 40 + 50}{3} + \frac{30 + 30 + 30}{3} = 40 + 30 = 70 $$原因就是乘法分配律——求和符号可以分别作用于加法的各个部分。
推广到期望:
$$ \mathbb{E}[aX + bY] = a\,\mathbb{E}[X] + b\,\mathbb{E}[Y] $$这个性质不要求 \(X\) 和 \(Y\) 独立。 它成立的原因是求和(或积分)的线性性质,和变量之间有没有相关性无关。
条件期望同样具有线性性质:
$$ \mathbb{E}[aX + bY \mid Z] = a\,\mathbb{E}[X \mid Z] + b\,\mathbb{E}[Y \mid Z] $$需要注意的边界:期望对加法可以拆分,但对乘法一般不能。 \(\mathbb{E}[XY]\) 通常不等于 \(\mathbb{E}[X] \cdot \mathbb{E}[Y]\)——只有当 \(X\) 和 \(Y\) 不相关时才成立。后面推导中的"拆开"和"合并"都只涉及加法和常数倍,不碰乘法,所以线性性质始终适用。
不跳步地推导 Bellman Equation#
前面三节准备的工具:分组求期望的全期望公式(条件版本)、条件期望保留组内均值的 insight、期望的线性性质。现在回到一般情况(恢复 Reward 和折扣因子),把 Bellman Equation 完整推一遍。
第一步。 从定义出发:
$$ V^\pi(s) = \mathbb{E}_\pi[G_t \mid S_t = s] $$State Value Function 的定义,只要期望存在就成立。
第二步。 把 Return 的递归形式代入。\(G_t = R_{t+1} + \gamma\, G_{t+1}\) 是 Return 定义中的代数恒等式,不需要任何额外假设:
$$ V^\pi(s) = \mathbb{E}_\pi[R_{t+1} + \gamma\, G_{t+1} \mid S_t = s] $$第三步。 用期望的线性性质拆开。不要求 \(R_{t+1}\) 和 \(G_{t+1}\) 独立:
$$ V^\pi(s) = \mathbb{E}_\pi[R_{t+1} \mid S_t = s] + \gamma\,\mathbb{E}_\pi[G_{t+1} \mid S_t = s] $$第四步。 对第二项使用全期望公式的条件版本,把 \(S_{t+1}\) 作为分组变量引入:
$$ \mathbb{E}_\pi[G_{t+1} \mid S_t = s] = \mathbb{E}_\pi\bigl[\,\mathbb{E}_\pi[G_{t+1} \mid S_t = s, S_{t+1}]\, \bigm| S_t = s\,\bigr] $$外层固定 \(S_t = s\),内层对 \(S_{t+1}\) 的每个取值算条件期望,再按 \(S_{t+1}\) 的分布加权。这一步不需要 Markov Property——全期望公式是概率论的基本性质。
第五步。 利用 Markov Property 简化内层的条件期望。
当 \(S_{t+1} = s'\) 已知时,\(\mathbb{E}_\pi[G_{t+1} \mid S_t = s, S_{t+1} = s']\) 能不能简化?
之前那篇讨论了 Markov Property 的含义:给定当前状态,未来的统计行为不再依赖更早的历史。在这里,\(S_{t+1} = s'\) 已经是"下一步的当前状态”。如果环境满足 Markov Property,且 Policy 也只依赖当前 State(Markov Policy),那么从 \(s'\) 出发的后续一切——包括 State 转移和 Reward——不再需要知道之前是从哪个 \(s\) 转移过来的。
因此:
$$ \mathbb{E}_\pi[G_{t+1} \mid S_t = s, S_{t+1} = s'] = \mathbb{E}_\pi[G_{t+1} \mid S_{t+1} = s'] = V^\pi(s') $$第一个等号去掉了 \(S_t = s\) 这个条件——Markov Property 保证它不再提供额外信息。第二个等号是 Value Function 的定义。
这一步是整个推导中唯一需要 Markov Property 的地方。
第六步。 把第五步的结论代回第四步:
$$ \mathbb{E}_\pi[G_{t+1} \mid S_t = s] = \mathbb{E}_\pi[V^\pi(S_{t+1}) \mid S_t = s] $$注意这里发生了什么——左边是对 \(G_{t+1}\) 求条件期望,右边是对 \(V^\pi(S_{t+1})\) 求条件期望。替换的是整个条件期望表达式中被取期望的对象,不是在等式内部做逐点的变量替换。
用前面的例子来说:左边对 80、120、0、40 四个值加权平均得到 76,右边对 100、20 两个值加权平均也得到 76。结果相同,但操作的随机变量完全不同。
现在第三步变成:
$$ V^\pi(s) = \mathbb{E}_\pi[R_{t+1} \mid S_t = s] + \gamma\,\mathbb{E}_\pi[V^\pi(S_{t+1}) \mid S_t = s] $$第七步。 再次用期望的线性性质,把两项合并:
$$ \boxed{V^\pi(s) = \mathbb{E}_\pi\bigl[R_{t+1} + \gamma\, V^\pi(S_{t+1}) \mid S_t = s\bigr]} $$这就是 Bellman Expectation Equation。
回头看整个推导,最容易产生误解的地方在第六步。如果直接看最终形式,很像是把 \(G_{t+1}\) 替换成了 \(V^\pi(S_{t+1})\)。但实际上中间经历了五个步骤:线性拆开 → 全期望公式展开 → Markov 简化 → 条件期望整体替换 → 线性合并。
再强调一次:
$$ G_{t+1} \neq V^\pi(S_{t+1}) $$但在 Markov Property 和 Markov Policy 的假设下:
$$ \mathbb{E}_\pi[G_{t+1} \mid S_t = s] = \mathbb{E}_\pi[V^\pi(S_{t+1}) \mid S_t = s] $$这两个事实完全不矛盾。
从 Bellman Equation 联想到概率 DP#
推导做完之后,我盯着 Bellman Equation 看了一会儿,越看越觉得熟悉。
回忆一下经典 DP 的状态转移方程。一个 Agent 在 State \(s\) 选择 Action \(a\),转移到唯一确定的下一 State \(f(s, a)\),获得确定的 Reward \(r(s, a)\):
$$ dp(s) = \max_a\bigl[r(s, a) + dp(f(s, a))\bigr] $$下一 State 唯一确定,直接取最优 Action。
现在把环境改成随机的。选了 Action \(a\) 之后,下一 State 不再确定,而是按概率 \(P(s' \mid s, a)\) 转移到不同的 \(s'\)。一条确定的路径变成了多条可能的路径,需要用概率加权。
如果 Policy 已经固定(不需要取 max),就是 Bellman Expectation Equation——用期望代替了确定性转移:
$$ V^\pi(s) = \mathbb{E}_\pi\bigl[R_{t+1} + \gamma\, V^\pi(S_{t+1}) \mid S_t = s\bigr] $$如果要在所有 Action 中找最优,就得到 Bellman Optimality Equation:
$$ V^*(s) = \max_a\, \mathbb{E}\bigl[R_{t+1} + \gamma\, V^*(S_{t+1}) \mid S_t = s, A_t = a\bigr] $$三者的对比:
| 状态转移 | 递归结构 | |
|---|---|---|
| 确定性 DP | \(f(s,a)\) 唯一确定 | \(dp(s) = \max_a[r + dp(f(s,a))]\) |
| 固定策略 | \(P(s' \mid s,a)\) 概率转移 | \(V^\pi(s) = \mathbb{E}_\pi[R + \gamma V^\pi(S')]\) |
| 最优策略 | \(P(s' \mid s,a)\) 概率转移 | \(V^*(s) = \max_a \mathbb{E}[R + \gamma V^*(S')]\) |
几个需要区分的地方。
Bellman Equation 是一个递归关系,不是一种算法。 Value Iteration、Policy Iteration 是利用 Bellman Equation 求解的具体方法。就像 DP 的状态转移方程描述的是子问题之间的关系,怎么求解(递推、记忆化搜索、拓扑排序)是另一回事。
max 和 E 的顺序不能交换。 \(\max_a \mathbb{E}[\cdots]\) 是"先算每个 Action 的期望收益,再选最好的"。如果写成 \(\mathbb{E}[\max_a \cdots]\),意思变成了"先看到未来的随机结果,再挑最好的 Action"——后者假设了可以看到未来之后再做选择,在实际决策中不成立。
Markov Property 对应 DP 的无后效性。 之前那篇已经详细讨论了这个联系。Markov Property 保证"给定当前状态,未来不依赖更早的历史"——这正是确定性 DP 中无后效性的概率版本。没有这个性质,Value Function 就无法只用当前状态表达,递归分解不成立。
写在最后#
回到最初的困惑:\(G_{t+1}\) 是怎么变成 \(V^\pi(S_{t+1})\) 的?
推导走完之后,我觉得值得记住三件事。
条件期望是一种保留均值的信息压缩。 按下一 State 分组之后,组内的随机波动消失了,但每组的平均值没变。用组内均值代替组内的实际值,再按各组概率加权,不会改变总体期望。
Bellman Equation 替换的是整个期望,不是随机变量。 \(G_{t+1}\) 和 \(V^\pi(S_{t+1})\) 是不同的随机变量。但在 Markov Property 的假设下,它们的条件期望相等。推导中被替换的是条件期望表达式里的被积变量,不是在等式内部做逐点替换。
Bellman Equation 把长期随机收益的期望转化成了递归的 State Value。 确定性 DP 把子问题的最优值拼成当前问题的最优值,Bellman Equation 把下一 State 的期望 Value 拼成当前 State 的 Value。区别在于确定性转移变成了概率加权,而 Markov Property 保证了递归分解的合法性。
之前总觉得 Bellman Equation 里有什么不熟悉的新技巧。现在看来,它用到的数学工具——条件期望、全期望公式、期望的线性性质——都是概率论的基础操作。真正把它们串起来的,是一个清晰的推导链条,以及 Markov Property 在关键的那一步提供的简化。
参考资料#
- 从 Return 到 Q-Function:强化学习如何评价一个尚未发生的决策 — Return、V、Q 的定义
- 从条件概率到贝叶斯定理:再理解全概率与全期望 — 条件概率和全期望公式
- 从马尔可夫性质出发:DP 无后效性、HMM 与 VAE 的知识联想 — Markov Property 与 DP 无后效性
- Sutton & Barto, Reinforcement Learning: An Introduction (2nd edition), Chapter 3.5
- MIT 6.S191: Introduction to Deep Learning — https://introtodeeplearning.com/