7.1 优势函数
第 6 章末尾我们发现:减掉基线 可以降低策略梯度的方差,而不改变梯度的方向。本节将深入这个关键洞察,引出优势函数——它是连接 Actor 和 Critic 的桥梁。
本节会用到的前置知识
- REINFORCE 策略梯度 ——基线要加在哪里
- 状态价值 ——最好的基线是什么
- 动作价值 ——优势函数的定义依赖 和 的差
- TD Error ——优势函数的实用估计方法
从基线到优势函数
回忆第 6 章 REINFORCE 的策略梯度:
是从当前步到 episode 结束的总回报(回顾:折扣累积回报)。问题在于 波动巨大——同一个策略、同一个状态,跑两次可能拿到完全不同的 。
减掉基线 后:
括号里的 就是优势函数(Advantage Function) 的一种估计。优势函数的正式定义是:
| 符号 | 含义 |
|---|---|
| 优势函数:在状态 做动作 ,比"平均水平"好了多少。 | |
| 动作价值函数:在状态 先做动作 ,之后按策略 行动的期望折扣回报。 | |
| 状态价值函数:在状态 按策略 行动的期望折扣回报。 | |
| 当前策略,决定在每个状态下各动作的概率。 |
两者的差恰好是"因为做了动作 ,多拿了多少分"。
优势函数的含义是:做了这个动作,比"平均能拿多少分"好了多少。
- :这个动作比预期好,应该多选
- :这个动作比预期差,应该少选
- :这个动作和预期差不多
用下棋类比: 是"这个棋局整体胜率 60%", 是"走车之后胜率 75%"。优势 ,说明走车比平均水平好了 15%,是个好选择。
用一个具体的 3 步 episode 来看优势函数是怎么算出来的。假设折扣因子 ,某次采样得到如下轨迹:
从每个时刻开始计算折扣累积回报 :
再假设 Critic 已经给出了各状态的价值估计:
| 状态 | |
|---|---|
| 3.0 | |
| 2.5 | |
| 0.8 |
把 和 代入 ,得到每个时刻的优势估计:
| 时刻 | 状态 | 含义 | |||
|---|---|---|---|---|---|
| 0 | 比预期好了 | ||||
| 1 | 比预期好了 | ||||
| 2 | 比预期好了 |
三个时刻的优势都是正数,说明这次轨迹上的每个动作都比平均水平表现更好。 是用 MC 回报对优势函数的估计;它无偏但方差高(不同的轨迹会给出差异很大的 )。
优势函数与累积回报
优势函数之所以能降低方差,核心在于它减掉了"本来就能拿到的分",只保留"因为做了这个动作多拿的分"。
构造一个更完整的例子。假设某状态 下,策略的平均回报是 。采样 4 条轨迹,回报分别是 、、、。
先看用 作梯度信号的情况:
| Episode | 梯度信号 | 含义 | |
|---|---|---|---|
| 1 | 18 | 大正数,强推该动作 | |
| 2 | 15 | 正数,推该动作 | |
| 3 | 7 | 正数,推该动作 | |
| 4 | 4 | 正数,推该动作 |
四次都是正数。策略会认为"在这个状态下,不管怎样这个动作都是好的"——但 episode 3 和 4 的回报实际上低于平均水平。
再看用 的情况:
| Episode | 梯度信号 | 含义 | |||
|---|---|---|---|---|---|
| 1 | 18 | 10 | 比平均好很多,强推 | ||
| 2 | 15 | 10 | 比平均好,推 | ||
| 3 | 7 | 10 | 比平均差,抑制 | ||
| 4 | 4 | 10 | 比平均差很多,强抑制 |
用 时,四个 episode 都给出正的梯度信号,策略无法区分"真的好"和"碰巧碰上了高回报"。用 时,信号被校准了:高于平均的给正信号,低于平均的给负信号。
量化看方差变化。用 时,四个信号的均值为 ,方差为 。用 时,四个信号的均值为 ,方差为 。
四个样本的方差相同,但 的均值更接近零。当样本量增大时, 的波动范围由整条轨迹的随机性决定(可能从 0 到几十),而 的波动范围被 中心化,正负抵消使得梯度的期望方向更稳定。这正是"减掉基线降低方差"的机制。
用 TD Error 估计优势
优势函数的理论定义是 ,但实际中通常不直接计算 。从定义出发,经过一步展开就能得到一个更实用的形式。
从 开始。动作价值函数的定义是:
这个期望的含义:在状态 做了动作 之后,拿到的即时奖励加上下一状态的价值。如果只取一次采样(不走完整个 episode,也不对所有可能转移求平均),就得到 的一步估计:
其中 是这一步实际拿到的奖励, 是这一步实际到达的下一状态。把这个近似代入优势函数定义:
右边就是TD Error:
| 符号 | 含义 |
|---|---|
| 这一步实际拿到的即时奖励。 | |
| 折扣因子,控制未来价值被打多少折扣。 | |
| Critic 对下一状态 的价值估计。 | |
| Critic 对当前状态 的价值估计。 | |
| TD Error:走了一步之后,实际结果比预测好了多少。 |
用 TD Error 替代 作为策略梯度的信号,有两个好处:
- 不需要等 episode 结束——每走一步就能更新( 需要跑完一整局,这是MC 方法的限制)
- 方差更低—— 只涉及一步的随机性( 涉及整条轨迹的随机性)
用一个具体的数值例子走一遍。假设 ,在某一步中:
- 当前状态 ,Critic 估计
- 智能体做了某个动作,拿到即时奖励
- 到达下一状态 ,Critic 估计
代入 TD Error 公式:
,说明这一步比 Critic 的预测好了 。用这个 作为优势估计,策略梯度会轻微推动该动作的概率上升。
换一组数字。假设同一次转移中 :
,说明这一步比预测差了很多。策略梯度会推动该动作的概率下降。
再看 的情况。如果 ,,:
:这一步的实际结果和 Critic 的预测完全一致,策略梯度信号为零,该动作的概率不变。
现在把三个时刻连起来看。假设一个 3 步 episode,:
| 时刻 | 状态 | 动作 | 下一状态 | ||||
|---|---|---|---|---|---|---|---|
| 0 | 2.0 | 4.0 | |||||
| 1 | 4.0 | 1.0 | |||||
| 2 | 1.0 | 0.0 |
三步的 分别是 、、。时刻 0 的动作远超预期,策略应增加 的概率;时刻 1 的动作低于预期,策略应降低 的概率;时刻 2 略好于预期,轻微鼓励 。
对比用 MC 回报 的情况(同一条轨迹):
对应的 MC 优势估计:
| 时刻 | |||
|---|---|---|---|
| 0 | 5.52 | 2.0 | |
| 1 | 2.8 | 4.0 | |
| 2 | 2 | 1.0 |
两种估计给出的方向一致(正、负、正),但数值不同。TD 优势 只看一步,MC 优势 看到终点。 的方差更低(只含一步随机性),但有偏差(依赖 的准确性); 无偏但方差高(包含整条轨迹的随机性)。
这是 MC → TD 的演进在策略空间的再现:REINFORCE 用 (MC),Actor-Critic 用 (TD)。
| REINFORCE (MC) | Actor-Critic (TD) | |
|---|---|---|
| 优势估计 | (需要完整轨迹) | (走一步就更新) |
| 更新时机 | episode 结束后 | 每走一步 |
| 方差 | 高 | 低 |
| 代价 | 无 | 需要训练 Critic |
Critic 网络实现
要计算 ,你需要知道 和 。但在真实问题中, 是未知的——需要一个网络来估计它。这个网络就是 Critic。
Actor(策略网络) Critic(价值网络)
输入:状态 s 输入:状态 s
输出:π_θ(a|s) 概率分布 输出:V_φ(s) 标量
作用:选动作 作用:评估状态价值
参数:θ 参数:φActor 和 Critic 共享输入(状态 ),但输出不同:Actor 输出动作概率分布,Critic 输出价值标量。它们通过优势函数 协作:Critic 给出评估,Actor 根据评估调整行为。
但 Critic 怎么训练?它怎么学会准确估计 ?下一节将展开第 3 章速览过的 DP、MC、TD 三种方法在 Critic 训练中的具体应用。Critic 训练方法