贝尔曼方程——递归地计算"这个局面值多少分"
本节导读
核心内容
- 掌握贝尔曼方程的核心递归:当前价值由即时奖励和下一状态价值共同决定。
- 理解贝尔曼期望方程、贝尔曼最优方程分别用于策略评估和最优控制。
- 学会用 TD Error 衡量当前价值估计和贝尔曼目标之间的差距。
核心公式
为什么需要这些公式
前面定义了 ,但定义还不等于会计算。要真按定义算,似乎得把从现在开始所有可能的未来都列出来,这对任何稍微真实一点的任务都不可能。贝尔曼方程的好处是把"看完整个未来"换成"只看一步,再相信下一状态已经有一个价值"。贝尔曼期望方程是在固定策略下算账,贝尔曼最优方程是在每一步都选更好的路。TD Error 则像老师批改作业:你原来猜 是多少,现在看到 这个更接近现实的一步目标,差值就是该改多少。学到这里会发现,RL 很多更新其实都是在不断修正自己的预判。
上一节我们定义了价值函数 和 。但当你真正坐下来想计算 的时候,会遇到一个计算上的困难:
这个公式要求你把从现在到永远的所有奖励都加起来——你需要知道未来每一步会发生什么。对于只有 1 个状态的老虎机,你也许还能硬算。但 CartPole 有无限多个状态,大模型有天文数字的 token 序列——穷举未来是不可能的。
贝尔曼方程(Bellman Equation)提供了一个优雅的解决方案。但在看公式之前,让我们先玩一个游戏——你可能已经在不知不觉中"发明"了这个方程。
先动手:手画一张宝藏地图
假设你在一个 1×5 的走廊里寻宝:
┌───┬───┬───┬───┬───┐
│ S │ │ │ │ 🏆 │
└───┴───┴───┴───┴───┘规则:
- 每走一步 扣 1 分(消耗体力)
- 到达宝藏 🏆 处 不扣分(游戏结束)
- 只能往右走
请你拿笔(或在脑子里)把每个格子的价值填进去。 从最右边开始,往左推。
……
想好了吗?
┌────┬────┬────┬────┬───┐
│ -4 │ -3 │ -2 │ -1 │ 0 │
└────┴────┴────┴────┴───┘
S 🏆你是怎么填的?大概率是这样想的:
- 🏆 那格:到了,不扣分,价值 0
- 🏆 左边那格:走一步就到宝藏,扣 1 分,价值 -1
- 再左边:走两步,扣 2 分,价值 -2
- ……依次类推
现在问你:第 2 格(值 -2)和第 3 格(值 -1)之间有什么关系?
答案是:
也就是 。每一格的价值,都等于"这一步的即时奖励"加上"下一格的价值"。
你刚才的思路就是贝尔曼方程。 你没有看到未来所有的步骤——你只看了一步(即时奖励)加上"下一格值多少"(下一步的价值),就推出了整条走廊上所有格子的价值。这一步的信息,递归地决定了整个未来的价值。
如果有岔路呢?
上面的走廊只有一条路,你可能会问:如果某个格子有岔路呢?比如走到第 3 格时,有 60% 概率走到宝藏所在的上层走廊(额外价值 +5),40% 概率走到下层的陷阱(价值 -3)。
答案很简单:你把两种可能性的价值按概率加权平均就行了。第 3 格的价值 = 这一步的即时奖励 + 0.6 × 上层走廊的价值 + 0.4 × 下层陷阱的价值。这就是完整版贝尔曼方程中 那一项的含义——对所有可能的下一状态按概率加权。
现实世界很少是一条直路。贝尔曼方程的强大之处在于:不管岔路有多少条、概率分布多复杂,"当前价值 = 即时奖励 + 未来价值的期望"这个递归结构始终成立。
贝尔曼期望方程
刚才的手画经验可以写成精确的数学公式。贝尔曼方程由美国数学家理查德·贝尔曼在 1957 年提出 [1],核心洞察就是:你不需要"看到未来",只需要看一步就够了。
假设策略是确定性的——在状态 下永远只选动作 。那么贝尔曼期望方程可以写成:
让我们逐项拆解: 是我们想求的"状态 在策略 下值多少分"; 是这一步拿到的即时奖励; 是折扣因子,意思是"未来的 1 分只值 分"; 是在状态 执行动作 后,环境变成 的概率; 是下一状态的价值。 对所有可能的下一状态求和,因为你不知道一定会走到哪个 。
一句话:当前状态的价值 = 这一步的即时奖励 + 未来所有奖励的折扣总和。
为什么这个递归结构如此重要?因为它把一个看起来不可能的计算——穷举未来无穷多步——降维成了一步的计算。你只需要知道两样东西:这一步的即时奖励 ,以及下一步的价值 。至于 是怎么算出来的?它本身就是另一个贝尔曼方程的解。这种"大问题拆成相同结构的小问题"的思想,正是计算机科学中"分治"和"动态规划"的精髓——这也是贝尔曼当年把这个方法命名为"动态规划"的原因。
上面的公式假设策略只选一个固定的动作。但实际上,策略 可能以不同的概率选择不同的动作——比如"70% 选 A,30% 选 B"。把所有动作都考虑进来,完整的贝尔曼期望方程是:
多了一个外层的加权求和 ,就是"策略选各动作的概率"。整体翻译:当前状态的价值 = 策略选各动作的概率 ×(每个动作带来的即时奖励 + 折扣后的下一状态价值)。
回看宝藏地图的例子:每一格的价值 = 这步的代价(-1)+ 下一格的价值。那就是最简单的贝尔曼方程——确定性环境,只有一个可能的下一状态,。
用老虎机亲手验证
理论讲完了,让我们用老虎机来验证这个方程确实成立。
设定:A 台出奖率 60%,策略是"永远选 A",折扣因子 。
因为策略固定选择 A,外层的 只有一项。而且老虎机是单状态的——不管选择多少轮,每一轮面对的情况完全一样,所以 在每一轮都相同。
代入贝尔曼方程:
注意这里的巧妙之处:因为每一轮的 MDP 结构完全相同,所以"下一状态的价值"就等于"当前状态的价值"——。这让方程变成了一个关于 的一元方程!
解它:
让我们感受一下 的影响:当 (只看眼前)时,;当 (中等远见)时,;当 (重视未来)时,——未来还有很长,价值很高;当 时,——无限期游戏中累积奖励发散。
你可以自己快速验证 的情况:方程变成 ,解出来 ,。确实如此——只看一半远的未来,价值只有 时的五分之一。 每增加 0.1, 值就会有显著的增长,因为公式中 的分母在迅速缩小。这就是为什么实践中 的选择对训练效果影响巨大—— 太小会导致短视策略, 太大则可能导致价值估计不稳定。
贝尔曼最优方程
贝尔曼期望方程评估的是某个给定策略 的价值——它告诉你"如果你按这个策略行动,能拿多少分"。但我们的终极目标不是评估策略,而是找到最优策略 ——让价值最大的那个策略。
贝尔曼最优方程只做了一个改动:把"对所有动作取策略加权平均"换成"选最好的那个动作":
两个方程的区别就在于一个用 (加权平均),一个用 (取最大值)。贝尔曼期望方程问的是"如果我按规矩走,能拿多少分?"贝尔曼最优方程问的是"如果我每步都选最优,能拿多少分?"
思考题:贝尔曼最优方程里为什么没有 π?
因为在最优方程中,策略被 替代了——它直接选价值最高的动作,而不需要显式地定义"以多大概率选哪个动作"。换句话说,只要你知道了最优价值函数 或 ,最优策略就直接确定了:。
但这里有一个陷阱: 看起来简单,实际上要求你对所有动作都计算一遍再取最大。当动作空间很大(比如大模型有 5 万个 token 作为动作)时,这个"取最大"操作本身就是一件很难的事。
TD Error:预测与现实的落差
贝尔曼方程告诉我们价值应该是多少。但在实际训练中,我们对价值的估计往往是不准确的——就像天气预报不会每次都准一样。
TD Error(时序差分误差,Temporal Difference Error)由安德鲁·巴托和理查德·萨顿在 1988 年引入 RL 领域 [2],他们称之为"RL 的核心新想法"。TD Error 衡量的是一个简单而深刻的问题:你当前的预测和实际经历的结果差了多少?
想象你是个天气预报员,今天预测明天有 80% 概率下雨()。第二天实际没下雨(),而且你观察到后天也不太会下雨()。用 TD Error 来计算:
:实际结果比你的预测差了 0.53,所以下次你会下调降雨概率的预测。
一个关键直觉:TD Error 在训练过程中是从大到小变化的。 训练刚开始时,你的预测 还是随机初始化的,和真实值相差很远,所以 的绝对值通常很大。随着训练的推进, 逐渐逼近真实值, 也相应地缩小。当训练充分收敛后, 的期望值趋近于 0——这意味着你的预测已经足够准确,学习基本完成。这就是为什么在很多 RL 实验中,你会在训练曲线上看到 TD Error 从高值逐步下降到接近零的过程——它就像一个"剩余学习量"的指示器。
形式化地,TD Error 的定义是:
其中 叫做 TD Target——实际结果加上对未来估计,也就是你"本该"预测的值。 是你之前的预测。所以 TD Error = TD Target - 之前的预测 = 预测与现实的落差。
当 时,实际情况比预想的好,价值被低估了,应该上调 ;当 时,实际情况比预想的差,价值被高估了,应该下调 ;当 时,预测完美,不需要调整,学习完成。
TD Error 不仅仅是一个误差指标——它在 RL 中承担着三重关键角色,贯穿后续几乎所有算法。第一,它是 Critic 网络的学习信号——Critic 直接用 来更新价值估计,偏高就往下调,偏低就往上调(第 5 章 Actor-Critic)。第二,TD Error 本身就是最简单的"优势函数"——,衡量"做了这个动作比预期好多少"(第 6 章 PPO / GAE)。第三,GAE(广义优势估计)是多个 TD Error 的指数加权和(第 6 章 GAE)。
TD Error 与贝尔曼方程的关系
这里是最关键的连接:贝尔曼方程说 应该等于 。TD Error 衡量的就是"当前的 离这个理想值有多远":
当 时,贝尔曼方程成立,价值估计完美。当 时,你的估计和理想值有偏差,需要继续调整。RL 算法的核心就是在不断缩小这个落差。
回到宝藏地图的例子:如果你猜第 2 格值 -1(低估了,实际是 -2),走一步到第 3 格,TD Error = -1 + 1×(-1) - (-1) = -1。这个负值告诉你"价值猜高了,往下调"。
思考题:TD Error 能不能永远为 0?
在确定性环境中,理论上可以:只要所有状态的 值都精确满足贝尔曼方程,TD Error 就处处为 0。但在随机环境和函数逼近(神经网络)的情况下,TD Error 通常不会精确为 0。因为环境的随机性导致每次采样到的 不同,TD Target 本身在波动;而神经网络的参数有限,无法精确表示所有状态的价值。所以在实际训练中,我们追求的不是 TD Error = 0,而是它的期望值趋近于 0。
贝尔曼方程给了我们计算价值的工具,TD Error 告诉我们怎么修正价值的误差。但这里有一个前提:你能把每个状态的 值存在一张表格里。如果状态空间太大了呢?
事实上,即使状态空间不大,你也面临一个更根本的问题:你不知道环境的 和 。贝尔曼方程里用到了 和 ,但现实中这些通常是未知的。那怎么从实际的交互数据中估计价值?
这两个问题——"不知道环境模型"和"状态空间太大"——驱动了 RL 发展历程中的三代经典方法。下一节,让我们看看研究者们是怎么一步步把贝尔曼方程和 TD Error 变成能跑的算法的。经典方法与路线图。