6.2 Critic 训练
上一节定义了优势函数 ,并引出了 Critic 网络作为 的估计器。本节展开第 3 章速览过的 DP、MC、TD 三种方法在 Critic 训练中的具体实现。
本节会用到的前置知识
- DP/MC/TD 三种价值估计方法——三种方法的原理和对比
- 贝尔曼期望方程——DP 更新的理论基础
- TD Error ——TD 方法的核心信号
沿用第 3 章的三格走廊环境,固定策略 :在 和 均以 0.8 概率右走、0.2 概率左走。环境转移和奖励如下:
| 当前状态 | 动作 | 策略概率 | 下一状态 | 奖励 |
|---|---|---|---|---|
| $S$ | 左走 | 0.2 | $S$ | $-2$ |
| $S$ | 右走 | 0.8 | $M$ | $-1$ |
| $M$ | 左走 | 0.2 | $S$ | $-2$ |
| $M$ | 右走 | 0.8 | $G$ | $-1$ |
| $G$ | 结束 | 1.0 | 无 | $0$ |
取 。三种方法都估计同一张价值表,区别只在更新目标的来源。
DP:理论基准
如果完全知道环境的转移概率 和奖励函数 (回顾:MDP 五元组),可以直接用贝尔曼期望方程迭代 Critic:
这个式子的每个符号含义如下:
| 符号 | 含义 |
|---|---|
| $V_\phi(s)$ | Critic 对状态 的当前价值估计,参数为 $\phi$ |
| $a$ | 在状态 可以选择的动作(如左走、右走) |
| $\pi(a \mid s)$ | 当前策略在状态 选择动作 的概率 |
| $R(s,a)$ | 在状态 执行动作 后获得的即时奖励 |
| $s'$ | 执行动作 后可能到达的下一状态 |
| $P(s' \mid s,a)$ | 在状态 做动作 后转移到 的概率 |
| $V_\phi(s')$ | Critic 对下一状态 的当前价值估计 |
| $\gamma$ | 折扣因子,决定下一状态价值打多少折扣 |
对走廊的 展开。外层按策略对动作加权,内层按转移概率对下一状态加权。由于转移确定(右走必到右边、左走必撞墙或退回),内层 只有真正到达的下一状态概率为 1:
对 同理,右走到终点 、左走退回 :
反复对所有状态执行这个更新, 会收敛到 的精确值。下面从全 0 的初始表开始,逐轮代入数字。
第 1 轮——旧表全为 0,目标只剩下眼前动作代价的平均:
第 2 轮——把第 1 轮结果作为旧表:
第 3 轮——把第 2 轮结果作为旧表:
汇总每轮结果:
| 轮次 | $V(S)$ | $V(M)$ | $V(G)$ |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 1 | -1.2 | -1.2 | 0 |
| 2 | -2.4 | -1.44 | 0 |
| 3 | -2.832 | -1.68 | 0 |
| 收敛 | -3.375 | -1.875 | 0 |
每轮更新中, 和 的值都包含了"按当前策略行动的平均后果"——右走通常更好,但策略偶尔会左走,绕路和撞墙的代价也必须进入价值表。
在这个基础上,还可以进行策略改进——在状态 选择让 最大的动作(回顾:贪心最优策略)。"评估策略 → 改进策略 → 再评估"的循环就是策略迭代(Policy Iteration),理论上保证收敛到最优策略。
但在真实问题中,几乎不可能知道完整的 和 。DP 在 Actor-Critic 中的角色更多是理论基准——它告诉你"知道一切时 Critic 的最优答案"。
MC:用完整轨迹更新 Critic
跑完一个完整的 episode,用实际回报 来更新 Critic。Critic 的损失函数是均方误差:
这个式子中每个符号的含义:
| 符号 | 含义 |
|---|---|
| $L_{\text{Critic}}$ | Critic 的损失函数,衡量预测偏差的大小 |
| $G_t$ | 从时刻 开始到 episode 结束的实际折扣回报(MC 目标) |
| $V_\phi(s)$ | Critic 对状态 的当前价值预测 |
是 Critic 的预测误差——实际拿了 分,但之前预测是 分。损失是这个误差的平方。
具体数值例子
假设采样到一条轨迹:
取 ,从每次访问位置到终点,倒着累加得到 :
| 访问位置 | 状态 | 后续奖励 | 的计算 | MC 目标 $G_t$ |
|---|---|---|---|---|
| 第 1 步 | $S$ | $-2,-1,-2,-1,-1$ | $-2 + (-1) + (-2) + (-1) + (-1)$ | $-7$ |
| 第 2 步 | $S$ | $-1,-2,-1,-1$ | $-1 + (-2) + (-1) + (-1)$ | $-5$ |
| 第 3 步 | $M$ | $-2,-1,-1$ | $-2 + (-1) + (-1)$ | $-4$ |
| 第 4 步 | $S$ | $-1,-1$ | $-1 + (-1)$ | $-2$ |
| 第 5 步 | $M$ | $-1$ | $-1$ | $-1$ |
损失计算与梯度更新
假设 Critic 是一张简单的价值表,当前 、。以第 1 次访问 为例,MC 目标 :
梯度下降更新(学习率 ):
这里 ,但更常见的是将 吸收进学习率,直接写为
逐次访问的完整更新过程如下:
| 被更新的状态 | MC 目标 $G_t$ | 旧值 | 更新计算 | 新值 |
|---|---|---|---|---|
| 第 1 次 $S$ | $-7$ | 0 | $0 + 0.5 \times (-7 - 0) = -3.5$ | $-3.5$ |
| 第 2 次 $S$ | $-5$ | $-3.5$ | $-3.5 + 0.5 \times [-5 - (-3.5)] = -3.5 + 0.5 \times (-1.5) = -4.25$ | $-4.25$ |
| 第 1 次 $M$ | $-4$ | 0 | $0 + 0.5 \times (-4 - 0) = -2$ | $-2$ |
| 第 3 次 $S$ | $-2$ | $-4.25$ | $-4.25 + 0.5 \times [-2 - (-4.25)] = -4.25 + 0.5 \times 2.25 = -3.125$ | $-3.125$ |
| 第 2 次 $M$ | $-1$ | $-2$ | $-2 + 0.5 \times [-1 - (-2)] = -2 + 0.5 \times 1 = -1.5$ | $-1.5$ |
MC 方法(回顾:MC 价值更新 )给出无偏估计(用的是真实回报),但有两个限制:
- 必须等 episode 结束才能计算 ,不能边走边学
- 方差大——不同 episode 的 波动剧烈
在神经网络实现中,MC 方法等价于:跑完一个 episode,收集所有 对,然后用这些数据做一次梯度下降更新 Critic 的参数 。
TD:单步更新
用TD Error 来更新 Critic。Critic 的损失函数是:
这个式子中每个符号的含义:
| 符号 | 含义 |
|---|---|
| $L_{\text{Critic}}$ | Critic 的损失函数,衡量 TD Error 的大小 |
| $r$ | 当前步获得的即时奖励 |
| $\gamma$ | 折扣因子 |
| $V_\phi(s')$ | Critic 对下一状态 的当前价值预测 |
| $V_\phi(s)$ | Critic 对当前状态 的当前价值预测 |
| $\delta$ | TD Error,即 $r + \gamma V_\phi(s') - V_\phi(s)$ |
最小化 就是让 Critic 的预测越来越准确。 的含义是:走了一步之后,"实际拿到的奖励 + 下一步预测"与"当前预测"之间的差。 表示这一步比预期好, 表示比预期差。
具体数值例子
使用与 MC 相同的轨迹:
初始价值表全为 0,学习率 。TD 每走一步就更新一次,读取的是当前最新的表。
第 1 步:。当前 ,。
第 2 步:。当前 (已被上一步更新),。
说明"拿了 然后到了 的状态"恰好等于之前对 的估计 ,预测没有偏差。
第 3 步:。当前 ,。
注意这里 是第 1 步刚更新过的值——TD 立刻把刚学到的信息拿来用了。
第 4 步:。当前 ,。
第 5 步:。当前 ,。
,说明从 右走到终点的体验比 当前估计要好, 因此上调。
逐步汇总表
| 步骤 | 实际发生的一步 | 被更新的状态 | 旧 $V(s)$ | $r$ | $V(s')$ | TD 目标 $r + \gamma V(s')$ | $\delta$ | 新 $V(s)$ |
|---|---|---|---|---|---|---|---|---|
| 1 | $S \xrightarrow{-2} S$ | $S$ | 0 | $-2$ | 0 | $-2 + 0 = -2$ | $-2$ | $-1$ |
| 2 | $S \xrightarrow{-1} M$ | $S$ | $-1$ | $-1$ | 0 | $-1 + 0 = -1$ | $0$ | $-1$ |
| 3 | $M \xrightarrow{-2} S$ | $M$ | 0 | $-2$ | $-1$ | $-2 + (-1) = -3$ | $-3$ | $-1.5$ |
| 4 | $S \xrightarrow{-1} M$ | $S$ | $-1$ | $-1$ | $-1.5$ | $-1 + (-1.5) = -2.5$ | $-1.5$ | $-1.75$ |
| 5 | $M \xrightarrow{-1} G$ | $M$ | $-1.5$ | $-1$ | 0 | $-1 + 0 = -1$ | $0.5$ | $-1.25$ |
TD 损失计算
以第 3 步为例,:
梯度下降更新方向:
参数沿 方向移动,即 下降。实际更新中等效为 ,与上表一致。
TD 方法(回顾:TD(0) 更新 )的优势:
- 不需要等 episode 结束——每走一步就能更新
- 方差低—— 作为"锚点"稳定了估计
- 与 Actor 的更新节奏一致——两者都是走一步更新一次
代价是引入了偏差: 本身也是一个估计值,不是真实的价值。这叫做自举(Bootstrapping)——用自己的估计来更新自己的估计。但实际中,这个偏差远小于方差降低带来的好处。
三种方法的对比
| DP | MC | TD | |
|---|---|---|---|
| 用于 Critic 训练? | 理论基准 | 可以用 | 实际首选 |
| 需要 episode 结束? | 不需要 | 需要 | 不需要 |
| 无偏? | 是 | 是 | 否(有偏但方差低) |
| 方差 | 低 | 高 | 中 |
| 自举 | 是 | 否 | 是 |
MC 与 TD 的数值对比
同一条轨迹 ,初始表全 0,,。
MC——等整局结束后才更新。第 1 次访问 时目标为整条轨迹的完整回报:
MC 一次性用从起点到终点的全部信息来更新。
TD——走第 1 步后立刻更新。第 1 步只用到一步信息:
TD 目标 远小于 MC 目标 ,但 TD 不需要等整局结束。随着更多轨迹的积累,TD 的 也会逐步逼近真实值 。
两种方法最终收敛到同一个 ,但更新路径不同:MC 单次更新幅度大(),方差高;TD 单次更新幅度小(),但更频繁,方差低。
实际中,Actor-Critic 几乎都用 TD 方法来训练 Critic。在更高级的实现中(如第 7 章的 GAE),MC 和 TD 会被组合使用——通过参数 在两者之间插值,获得偏差和方差的最佳平衡。
Critic 训练的完整流程
将以上内容整合,Actor-Critic 的单步训练流程如下:
- 交互:在状态 下,Actor 选择动作 ,环境返回 和 $s'$
- 前向传播:Critic 计算当前预测 和下一步预测 $V_\phi(s')$
- 计算 TD Error:$\delta = r + \gamma V_\phi(s') - V_\phi(s)$
- 更新 Critic:用 作为损失更新 Critic 的参数 $\phi$
- 更新 Actor:用 作为优势估计更新 Actor 的参数 $\theta$
具体数值 walkthrough
假设当前 Critic 的价值表为 、、,,Critic 学习率 ,Actor 学习率 。
第 1 步:交互
在状态 ,Actor 以概率 0.8 选择右走、0.2 选择左走。假设这次采样到右走,环境返回 ,。
第 2 步:前向传播
第 3 步:计算 TD Error
,说明从 右走到 的体验比当前预测要差——实际拿到 加上 的估计 ,总共 ,低于对 的估计 。
第 4 步:更新 Critic
参数更新(以价值表为例):
Critic 降低了 ——因为这次体验表明 的价值比之前估计的还要低。
第 5 步:更新 Actor
表示这次动作(右走)的表现不如预期。Actor 的更新方向是:降低这个动作的概率。以策略梯度为例:
使得参数沿 的反方向移动,即降低 的概率。
如果 ,则表示这个动作比预期好,Actor 会增加该动作的概率。
Critic 的参数 沿着"让 更小"的方向更新——预测越来越准。Actor 的参数 沿着"让正 的动作概率更高"的方向更新——选择越来越好。两者形成良性循环:Critic 的评分越准,Actor 的进步就越快;Actor 尝试的新动作越多,Critic 看到的数据就越丰富,评分也越准。