跳转到正文

7.2 Critic 训练

上一节定义了优势函数 ,并引出了 Critic 网络作为 的估计器。本节展开第 3 章速览过的 DP、MC、TD 三种方法在 Critic 训练中的具体实现。

本节会用到的前置知识

沿用第 3 章的三格走廊环境,固定策略 :在 均以 0.8 概率右走、0.2 概率左走。环境转移和奖励如下:

当前状态动作策略概率下一状态奖励
左走0.2
右走0.8
左走0.2
右走0.8
结束1.0

。三种方法都估计同一张价值表,区别只在更新目标的来源。

理论基准

如果完全知道环境的转移概率 和奖励函数 (回顾:MDP 五元组),可以直接用贝尔曼期望方程迭代 Critic:

这个式子的每个符号含义如下:

符号含义
Critic 对状态 的当前价值估计,参数为
在状态 可以选择的动作(如左走、右走)
当前策略在状态 选择动作 的概率
在状态 执行动作 后获得的即时奖励
执行动作 后可能到达的下一状态
在状态 做动作 后转移到 的概率
Critic 对下一状态 的当前价值估计
折扣因子,决定下一状态价值打多少折扣

对走廊的 展开。外层按策略对动作加权,内层按转移概率对下一状态加权。由于转移确定(右走必到右边、左走必撞墙或退回),内层 只有真正到达的下一状态概率为 1:

同理,右走到终点 、左走退回

反复对所有状态执行这个更新, 会收敛到 的精确值。下面从全 0 的初始表开始,逐轮代入数字。

第 1 轮——旧表全为 0,目标只剩下眼前动作代价的平均:

第 2 轮——把第 1 轮结果作为旧表:

第 3 轮——把第 2 轮结果作为旧表:

汇总每轮结果:

轮次
0000
1-1.2-1.20
2-2.4-1.440
3-2.832-1.680
收敛-3.375-1.8750

每轮更新中, 的值都包含了"按当前策略行动的平均后果"——右走通常更好,但策略偶尔会左走,绕路和撞墙的代价也必须进入价值表。

在这个基础上,还可以进行策略改进——在状态 选择让 最大的动作(回顾:贪心最优策略)。"评估策略 → 改进策略 → 再评估"的循环就是策略迭代(Policy Iteration),理论上保证收敛到最优策略。

但在真实问题中,几乎不可能知道完整的 。DP 在 Actor-Critic 中的角色更多是理论基准——它告诉你"知道一切时 Critic 的最优答案"。

用完整轨迹更新 Critic

跑完一个完整的 episode,用实际回报 来更新 Critic。Critic 的损失函数是均方误差:

这个式子中每个符号的含义:

符号含义
Critic 的损失函数,衡量预测偏差的大小
从时刻 开始到 episode 结束的实际折扣回报(MC 目标)
Critic 对状态 的当前价值预测

是 Critic 的预测误差——实际拿了 分,但之前预测是 分。损失是这个误差的平方。

具体数值例子

假设采样到一条轨迹:

,从每次访问位置到终点,倒着累加得到

访问位置状态后续奖励 的计算MC 目标
第 1 步
第 2 步
第 3 步
第 4 步
第 5 步

损失计算与梯度更新

假设 Critic 是一张简单的价值表,当前 。以第 1 次访问 为例,MC 目标

梯度下降更新(学习率 ):

这里 ,但更常见的是将 吸收进学习率,直接写为

逐次访问的完整更新过程如下:

被更新的状态MC 目标 旧值更新计算新值
第 1 次 0
第 2 次
第 1 次 0
第 3 次
第 2 次

MC 方法(回顾:MC 价值更新 )给出无偏估计(用的是真实回报),但有两个限制:

  1. 必须等 episode 结束才能计算 ,不能边走边学
  2. 方差大——不同 episode 的 波动剧烈

在神经网络实现中,MC 方法等价于:跑完一个 episode,收集所有 对,然后用这些数据做一次梯度下降更新 Critic 的参数

单步更新

TD Error 来更新 Critic。Critic 的损失函数是:

这个式子中每个符号的含义:

符号含义
Critic 的损失函数,衡量 TD Error 的大小
当前步获得的即时奖励
折扣因子
Critic 对下一状态 的当前价值预测
Critic 对当前状态 的当前价值预测
TD Error,即

最小化 就是让 Critic 的预测越来越准确。 的含义是:走了一步之后,"实际拿到的奖励 + 下一步预测"与"当前预测"之间的差。 表示这一步比预期好, 表示比预期差。

具体数值例子

使用与 MC 相同的轨迹:

初始价值表全为 0,学习率 。TD 每走一步就更新一次,读取的是当前最新的表

第 1 步。当前

第 2 步。当前 (已被上一步更新),

说明"拿了 然后到了 的状态"恰好等于之前对 的估计 ,预测没有偏差。

第 3 步。当前

注意这里 是第 1 步刚更新过的值——TD 立刻把刚学到的信息拿来用了。

第 4 步。当前

第 5 步。当前

,说明从 右走到终点的体验比 当前估计要好, 因此上调。

逐步汇总表

步骤实际发生的一步被更新的状态TD 目标
100
20
30
4
50

TD 损失计算

以第 3 步为例,

梯度下降更新方向:

参数沿 方向移动,即 下降。实际更新中等效为 ,与上表一致。

TD 方法(回顾:TD(0) 更新 )的优势:

  1. 不需要等 episode 结束——每走一步就能更新
  2. 方差低—— 作为"锚点"稳定了估计
  3. 与 Actor 的更新节奏一致——两者都是走一步更新一次

代价是引入了偏差 本身也是一个估计值,不是真实的价值。这叫做自举(Bootstrapping)——用自己的估计来更新自己的估计。但实际中,这个偏差远小于方差降低带来的好处。

三种方法的对比

DPMCTD
用于 Critic 训练?理论基准可以用实际首选
需要 episode 结束?不需要需要不需要
无偏?否(有偏但方差低)
方差
自举

MC 与 TD 的数值对比

同一条轨迹 ,初始表全 0,

MC——等整局结束后才更新。第 1 次访问 时目标为整条轨迹的完整回报:

MC 一次性用从起点到终点的全部信息来更新。

TD——走第 1 步后立刻更新。第 1 步只用到一步信息:

TD 目标 远小于 MC 目标 ,但 TD 不需要等整局结束。随着更多轨迹的积累,TD 的 也会逐步逼近真实值

两种方法最终收敛到同一个 ,但更新路径不同:MC 单次更新幅度大(),方差高;TD 单次更新幅度小(),但更频繁,方差低。

实际中,Actor-Critic 几乎都用 TD 方法来训练 Critic。在更高级的实现中(如第 5 章的 GAE),MC 和 TD 会被组合使用——通过参数 在两者之间插值,获得偏差和方差的最佳平衡。

Critic 训练的完整流程

将以上内容整合,Actor-Critic 的单步训练流程如下:

  1. 交互:在状态 下,Actor 选择动作 ,环境返回
  2. 前向传播:Critic 计算当前预测 和下一步预测
  3. 计算 TD Error
  4. 更新 Critic:用 作为损失更新 Critic 的参数
  5. 更新 Actor:用 作为优势估计更新 Actor 的参数

具体数值 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 看到的数据就越丰富,评分也越准。

参考文献

现代强化学习实战课程