优势函数(Advantage function)回答一个问题:在当前状态下,做某个动作,比在这个状态下"按常规发挥"好多少? 写成公式就是 A(s, a) = Q(s, a) − V(s)。
用考试打个比方
假设两个学生都考了 90 分。A 在平均分 80 的班里,B 在平均分 95 的火箭班。只看绝对分数,两人一样;但 A 是超常发挥,B 是拖了后腿。
状态价值 V(s) 就是"这个班的平均水平"——即无论接下来具体怎么做,长期能拿到的期望回报。动作价值 Q(s, a) 是"在这个班里选了某条具体路线(比如每天刷两小时题)能拿到的回报"。两者相减,得到的就是优势:这条路比班里的平均路线值多少。
为什么需要它?因为强化学习里的原始回报(return)是个绝对值,不同状态的回报基线差别极大:有的局面天生能拿 100 分,有的局面怎么打都只有 10 分。直接拿回报去更新策略,噪声巨大,模型学到的往往是"这个状态好"而不是"这个动作好"。减去基线 V(s) 之后,信号变成了相对量,而且只要基线只依赖状态、不依赖动作,期望上的无偏性仍然保持。这就是策略梯度(policy gradient)里"基线与优势"这一整套设计的由来。
GAE:把偏差和方差拧成一个旋钮
实际训练中不可能精确算出 Q 和 V,只能用采样估计。于是有了广义优势估计(Generalized Advantage Estimation, GAE),思路是把每一步的时序差分误差(TD error)加权求和:
```
δ_t = r_t + γ·V(s_{t+1}) − V(s_t)
A_t ≈ δ_t + (γλ)·δ_{t+1} + (γλ)²·δ_{t+2} + ...
```
这里 λ 就是那个旋钮:
| λ 取值 | 效果 | 偏差 | 方差 |
|---|---|---|---|
| λ = 0 | 只看一步,等价于单步 TD 优势 | 大(依赖价值网络是否准) | 小 |
| λ = 1 | 一直看到回合结束,接近蒙特卡洛回报减基线 | 小 | 大 |
| 0 < λ < 1 | 折中,实践中常用 | 中 | 中 |
另外 γ 是折扣因子,决定多看重远期回报。
和相邻概念的区别
- 回报 / 奖励:绝对值,衡量"结果多好"。
- V 值:状态有多好,与具体动作无关。
- Q 值:在某状态下做某个动作有多好,仍是绝对值。
- 优势 A:相对量,衡量"这个动作比该状态的平均水平好多少",最适合直接拿去做策略更新。
对从业者的实际意义
如果你在做 PPO 这类算法,优势估计基本就是训练稳定性的命门:价值网络估得不准,优势就带系统性偏差,策略会被带偏;λ 调得太小,模型容易短视,调得太大,梯度噪声又会淹没有效信号。工程上通常还会对优势做标准化(减均值除标准差),进一步压住尺度问题。至于具体实现里 γ、λ 的默认取值和推荐范围,各框架不一,以官方文档和原论文为准。
