Xiaohei's Blog
headpicBlur image

前言#

需要说明的是,这个系列的博客是由我的幕布笔记转化而来,如果你更喜欢图文并茂的阅读,你可以去我的幕布空间进行阅读,受限于篇幅的原因,第十二章幕布笔记在这。如果你发现有哪些地方由逻辑错误,可以通过评论告知我,十分感谢!

开始#

策略梯度的痛点我们在第 4、5 章已经感受过:它能学,但方差大、抖得像心电图。

Actor-Critic 的出发点很朴素:

  • actor(演员)负责策略 πθ(as)\pi_\theta(a|s)
  • critic(评论员)负责价值 V(s)V(s)Q(s,a)Q(s,a)

文档在这一章给了一个非常工程友好的总结:借助价值函数,actor-critic 可以做单步更新,不必等回合结束。

actor 与 critic 各自做什么#

文档里写得很清楚:

  • actor:学习一个策略以得到尽可能高的回报
  • critic:估计当前策略的价值,评估 actor 的好坏

这是一种“分工协作”的结构:actor 负责决定怎么做,critic 负责告诉它做得对不对。

为什么 actor-critic 更稳定:用优势降低方差#

文档提到了优势演员-评论员(A2C)。优势的核心就是:

  • 不是用原始回报 GtG_t(方差大)
  • 而是用优势 AtA_t(相对基线的改变量)

常见的优势形式:

At=rt+1+γV(st+1)V(st)A_t = r_{t+1} + \gamma V(s_{t+1}) - V(s_t)

这其实就是 TD residual。

A2C 的实现闭环(按我写代码的顺序)#

如果把 A2C 写成一段你真正会维护的训练循环,它通常长这样:先用 actor 从当前策略里采样动作并与环境交互,然后让 critic 给出 V(s)V(s) 的估计;接着你用 TD 或 GAE 把优势 AtA_t 算出来,把它当成权重去更新 actor(loss 形如 logπ(as)A-\log\pi(a|s)\cdot A),同时 critic 也做一个回归,把 V(s)V(s) 拟合到 bootstrap 目标(loss 形如 V(s)target2\|V(s) - \text{target}\|^2)。最后很多实现都会顺手加一个 entropy bonus,目的不是“更聪明”,而是别让策略太早坍缩到一个几乎确定的输出。

文档提到一个技巧:探索机制可以通过对策略分布的熵加约束,保证 entropy 不要太小。

文档提到的一个风险:两个网络都可能估不准#

文档说 A2C 的缺点是要估计两个网络,风险变成两倍。这话一点不夸张:

  • critic 估错,优势就错,actor 会被带跑
  • actor 乱跑,critic 的分布也在漂

工程上常见的缓解策略:

  • value loss 加权(value_coef)别太大,避免 critic 主导训练
  • 归一化优势(advantage normalization)
  • 梯度裁剪(clip grad norm)

本章小结:Actor-Critic 是深度 RL 的“通用骨架”#

后面很多大名鼎鼎的连续控制算法(DDPG/TD3/SAC)都是 actor-critic 的不同实现:

  • critic 学 Q
  • actor 负责给出(近似)最优动作

而在稀疏奖励、模仿学习等更“难的任务”里,actor-critic 也常常作为底座出现。

下一章我们会谈稀疏奖励:当环境几乎不给反馈时,你要怎么让智能体继续学习?

RL 学习笔记(9):Actor-Critic
https://xiaohei94.github.io/blog/rl-learning-9
Author 红鼻子小黑
Published at May 10, 2025
Comment seems to stuck. Try to refresh?✨