📑 本页目录(点开跳转)
03 · 价值函数与贝尔曼方程
⏱ 30 分钟 | ⭐⭐ 整个强化学习就建立在这一章上
🎯 一句话
价值函数 = 「从这个局面出发,往后总共能拿多少分」。 它一举解决了第 1 章那个信用分配难题 —— 因为有了它,你不用等到结局,就能判断当前这一步好不好。
💰 一、两个价值函数
V:状态有多好
$$V^\pi(s) = \mathbb{E}_\pi\big[G_t \mid s_t = s\big]$$
💡 人话:按策略 π 走下去,从状态 s 出发,未来累积奖励的期望。
Q:在这个状态做这个动作有多好 ⭐
$$Q^\pi(s,a) = \mathbb{E}_\pi\big[G_t \mid s_t = s,\ a_t = a\big]$$
💡 人话:在 s 先做 a(哪怕不是策略推荐的),之后再按 π 走。
🔑 为什么 Q 比 V 有用得多
有 V:知道每个局面值多少钱
→ 但要选动作,还得知道【做了这个动作会到哪】
→ 需要环境模型 P 💀
有 Q:直接查表 —— 哪个动作的 Q 大就选哪个
→ 完全不需要知道环境规则 ⭐⭐
⭐ 这就是为什么 Q-learning(第 6 章)能在完全不懂环境的情况下学会玩游戏。 V 告诉你"这里好不好",Q 告诉你"该怎么办"。
两者的换算关系:
$$V^\pi(s) = \sum_a \pi(a\mid s)\, Q^\pi(s,a)$$
💡 人话:状态的价值 = 各个动作价值的加权平均(按策略的选择概率加权)。
⭐⭐ 二、贝尔曼方程:整个领域的地基
$$V^\pi(s) = \sum_a \pi(a|s)\Big[R(s,a) + \gamma\sum_{s'}P(s'|s,a)V^\pi(s')\Big]$$
别被吓到,它只说了一句话:
- =
- 马上能拿到的奖励
- +
- γ × 下一个状态的价值
💡 人话翻译:
「这里值多少钱」= 「立刻到手多少」+ 打了折的「下一站值多少钱」。
🎯 为什么这个递归关系是革命性的
❌ 没有贝尔曼方程:
要算 V(s),得把从 s 出发的【所有可能未来】都展开
→ 分支指数爆炸,算不动
✅ 有贝尔曼方程:
V(s) 只依赖【它的邻居】V(s')
→ 变成一个方程组,可以迭代求解 ⭐
→ 复杂度从指数降到多项式
🔑 这就是第 1 章「信用分配」的答案: 你不需要知道"80 步棋里哪一步错了", 你只需要知道每个局面值多少钱,然后比较相邻两个局面的差。
📐 方程怎么来的(想看再点,就三步)
从回报的定义出发:
$$G_t = r_{t+1} + \gamma r_{t+2} + \gamma^2 r_{t+3}+\cdots$$
第一步:把 γ 提出来
$$G_t = r_{t+1} + \gamma\underbrace{(r_{t+2} + \gamma r_{t+3}+\cdots)}_{= \;G_{t+1}} = r_{t+1} + \gamma G_{t+1}$$
⭐ 整个推导的关键就是这一步 —— 回报本身就是递归的。
第二步:两边取期望
$$V^\pi(s) = \mathbb{E}[G_t\mid s_t=s] = \mathbb{E}[r_{t+1} + \gamma G_{t+1}\mid s_t=s]$$
第三步:把期望按「先选动作、再转移」拆开
$$= \sum_a \pi(a|s)\Big[R(s,a) + \gamma\sum_{s'}P(s'|s,a)\,\mathbb{E}[G_{t+1}|s_{t+1}=s']\Big]$$
而最里面那个期望就是 $V^\pi(s')$。得证。
🏆 三、贝尔曼最优方程
上面是「给定策略 π 有多好」。现在问:最好能有多好?
$$V^*(s) = \max_a\Big[R(s,a) + \gamma\sum_{s'}P(s'|s,a)V^*(s')\Big]$$
$$Q^*(s,a) = R(s,a) + \gamma\sum_{s'}P(s'|s,a)\,\underbrace{\max_{a'}Q^*(s',a')}_{\text{下一步选最好的}}$$
和上面唯一的区别:
贝尔曼期望方程: Σ π(a|s) · [...] ← 按策略【平均】
贝尔曼最优方程: max_a [...] ← 直接取【最好的】⭐
💎 最优策略怎么来
$$\pi^*(s) = \arg\max_a Q^*(s,a)$$
💡 人话:知道了每个动作值多少钱,最优策略就是「每步都选最贵的那个」。
🔑 这句话的分量: 求解强化学习问题 = 求出 Q*。 拿到 Q* 之后,策略是「免费」的 —— 直接 argmax 就行。
⭐ 所以第 4–8 章全部都在做同一件事:用不同办法逼近 Q*。
🧮 四、亲手算一遍(用第 2 章那个 MDP)
简化版:只有两个状态,γ = 0.9
[上课] --学(+2)--> 0.8 回上课 / 0.2 去睡觉(终止, V=0)
[上课] --玩(+1)--> 1.0 去刷手机
[刷机] --学(-1)--> 0.6 去上课 / 0.4 留刷手机
[刷机] --玩(+1)--> 0.9 留刷手机 / 0.1 去睡觉(V=0)
先算「一直学」这个策略的价值:
V(上课) = 2 + 0.9 × (0.8·V(上课) + 0.2·0)
= 2 + 0.72·V(上课)
→ V(上课)·(1 − 0.72) = 2
→ V(上课) = 2 / 0.28 = 7.14 ⭐
V(刷机) = −1 + 0.9 × (0.6·V(上课) + 0.4·V(刷机))
= −1 + 0.9 × (0.6×7.14 + 0.4·V(刷机))
= −1 + 3.86 + 0.36·V(刷机)
→ V(刷机)·0.64 = 2.86
→ V(刷机) = 4.46
再算「一直玩」这个策略:
V(刷机) = 1 + 0.9 × (0.9·V(刷机) + 0.1·0)
= 1 + 0.81·V(刷机)
→ V(刷机) = 1 / 0.19 = 5.26
V(上课) = 1 + 0.9 × V(刷机) = 1 + 4.74 = 5.74
四个纯策略全部算出来(代码实跑,非估算):
| 上课的动作 | 刷机的动作 | V(上课) | V(刷机) |
|---|---|---|---|
| 学 | 学 | 7.14 | 4.46 |
| 学 | 玩 | 7.14 ⭐ | 5.26 ⭐ |
| 玩 | 学 | −1.69 💀 | −2.99 💀 |
| 玩 | 玩 | 5.74 | 5.26 |
再用价值迭代求出 Q*:
V*(上课) = 7.1429 V*(刷机) = 5.2632
上课: Q*(学) = 7.143 Q*(玩) = 5.737 → 最优 =【学】
刷机: Q*(学) = 4.752 Q*(玩) = 5.263 → 最优 =【玩】⭐
💡 看出什么了吗: 在「上课」该学,在「刷手机」反而该玩。 因为从刷手机状态"学"的即时代价是 −1,而爬回上课的概率只有 0.6 —— 期望上不划算。
⭐ 这就是最优策略不是"处处都选看起来正确的动作"的原因, 也是为什么必须算而不能猜。
💀 再看「上课就玩」那一行:V 直接掉到负数。 一个状态上的错误决策,会顺着贝尔曼方程污染整张价值表 —— 这也是为什么它是递归的。
📊 五、四个方程的关系(一张表理清)
| 方程 | 问的问题 | 用在哪 |
|---|---|---|
| 贝尔曼期望方程 V^π | 这个策略有多好? | 策略评估(第 4 章) |
| 贝尔曼期望方程 Q^π | 这个策略下,这个动作有多好? | SARSA(第 6 章) |
| 贝尔曼最优方程 V* | 最好能多好? | 价值迭代(第 4 章) |
| 贝尔曼最优方程 Q* ⭐ | 最优情况下这个动作值多少? | Q-learning、DQN(第 6、8 章)⭐ |
⭐ 最后一行是重点:Q* 的贝尔曼方程就是 Q-learning 的更新公式的来源, 也是 DQN 损失函数的来源。第 6 章和第 8 章你会看到它原封不动地出现。
⚠️ 六、三个常见误解
| 误解 | 真相 |
|---|---|
| 「V 是这次能拿多少分」 | 是期望值,单次结果会波动 |
| 「Q(s,a) 里的 a 必须是策略选的」 | 不必。Q 允许你先做任意动作,之后再按 π —— 这正是它能用来比较动作的原因 ⭐ |
| 「γ 只是个超参数」 | γ 改变最优策略本身。γ 小 → 短视;γ 大 → 长远。它是问题定义的一部分 |
💡 关于第三点的一个例子:
γ = 0.5 时,10 步后的奖励只剩 0.5¹⁰ ≈ 0.001 的权重
→ 模型基本看不见 10 步之后的事
同一个迷宫,γ=0.5 可能学出「原地打转吃眼前的糖」,
γ=0.99 才会学出「绕远路去终点」
⭐ 学不出长期行为时,先检查 γ,再怀疑算法
🔗 七、和站内其他章的关系
| 相关的地方 | 这里的位置 |
|---|---|
| 第 1 章的信用分配问题 | 价值函数就是它的答案 ⭐ |
| 第 1 章的折扣因子 γ | 这里给了它精确的作用 |
| 数学原理 01 期望 | V 和 Q 都是期望 |
| 动态规划(算法课) | 第 4 章会用它解贝尔曼方程 |
✅ 检查点
- V 和 Q 分别是什么?为什么说 Q 比 V 有用得多?
- 贝尔曼方程用一句话说是什么?
- 为什么这个递归关系是革命性的?(对比没有它的情况)
- 推导的关键一步是什么?
- 贝尔曼期望方程和最优方程唯一的区别是什么?
- 有了 Q* 之后,最优策略怎么得到?这句话为什么重要?
- 手算那个例子:为什么在「刷手机」状态最优动作反而是「玩」?Q* 的两个数各是多少?
- Q(s,a) 里的动作 a 必须是策略选的吗?为什么这一点关键?
- 学不出长期行为时该先检查什么?
👀 答案
- V(s)=从状态 s 出发的期望累积奖励;Q(s,a)=在 s 先做 a、之后按 π 走的期望累积奖励。Q 更有用因为直接 argmax 就能选动作,不需要知道环境模型 P;用 V 选动作还得知道"做了这动作会到哪"。
- V(现在) = R(马上) + γ · V(下一步)。这个状态的价值 = 立刻到手的奖励 + 打折的下一状态价值。
- 没有它要展开所有可能未来,分支指数爆炸;有了它 V(s) 只依赖邻居 V(s'),变成方程组可迭代求解,复杂度从指数降到多项式。
- G_t = r_{t+1} + γG_{t+1} —— 把 γ 提出来,发现回报本身就是递归的。
- 期望方程按策略加权平均
Σπ(a|s)·[...];最优方程直接取 max_a [...]。 - π*(s) = argmax_a Q*(s,a)。重要是因为:求解 RL = 求出 Q*,拿到 Q* 后策略是免费的。第 4-8 章全都在用不同办法逼近 Q*。
- 因为从刷手机"学"的即时代价是 −1,而爬回上课的概率只有 0.6,期望上不划算。Q*(刷机,学)=4.752,Q*(刷机,玩)=5.263。说明最优策略不是处处选看起来对的动作,必须算不能猜。
- 不必。Q 允许先做任意动作再按 π 走 —— 这正是它能用来比较不同动作的原因。
- 先检查 γ。γ 太小(如 0.5)时 10 步后奖励只剩 0.001 权重,模型根本看不见远处。有效视野 ≈ 1/(1−γ)。
🛑 可以停在这里
⚡ 走神救援
⭐⭐整个RL建立在这一章。V(s)=从s出发的期望累积奖励;Q(s,a)=先做a再按π走。⭐Q比V有用得多——直接argmax就能选动作,不需要环境模型P(V选动作还得知道"做了会到哪")。这就是Q-learning能在完全不懂环境时学会玩游戏的原因。⭐⭐贝尔曼方程一句话:V(现在)=R(马上)+γ·V(下一步)。革命性在于:没它要展开所有未来(指数爆炸),有它 V(s) 只依赖邻居 → 变成方程组可迭代解。这就是信用分配的答案——不用知道哪步错了,只要知道每个局面值多少钱。推导关键一步:G_t = r_{t+1} + γG_{t+1}(回报本身递归)。最优方程只把 Σπ(a|s) 换成 max_a。⭐⭐π*(s)=argmax Q*(s,a) → 求解RL就是求Q*,拿到后策略免费;第4-8章全在用不同办法逼近Q*。手算例子:上课该学、刷手机反而该玩(学的即时代价−1、爬回去概率只有0.6,不划算)——最优策略必须算不能猜。⚠️学不出长期行为先检查γ(γ=0.5时10步后只剩0.001权重)。
下一节 👉 04-动态规划.md