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