什么是 Actor-Critic?

Actor-Critic 是一种结合策略梯度和价值函数的强化学习算法。

生活类比:足球教练与球员

想象一个足球训练场景:球员(Actor)在场上踢球,尝试各种传球和射门方式;教练(Critic)在场边观察,告诉球员"这脚传得好"或"那次跑位不对"。球员根据教练的反馈改进自己的踢球方式,教练也在观察中不断提升自己的判断力。两个角色协同进步——这就是 Actor-Critic 的核心思想。

两个角色的分工:

  • Actor(球员):负责选择动作——"在当前状态下,我该怎么做?"
  • Critic(教练):评估动作价值——"这个动作做得好不好?"

为什么比纯策略梯度更好?

  • 纯策略梯度像没有教练的球员——必须踢完一整场比赛(高方差)才知道表现如何
  • Actor-Critic 有实时反馈——每一脚都有教练点评,学得更快更稳定

适用场景

  • 复杂控制任务:机器人操作、自动驾驶、游戏AI
  • 需要稳定训练:对训练稳定性要求高的生产环境
  • 连续与离散动作:两种动作空间都能处理
  • 样本效率要求高:相比纯策略梯度,样本利用率更高
  • 大规模分布式训练:A3C等变体支持并行训练

历史渊源

问题背景:REINFORCE 有个严重问题:必须等一整个 episode 结束才能更新策略,而且回报的方差很大(同一个好动作,因为后续随机性不同,可能得到截然不同的回报)。高方差导致学习极不稳定,需要大量样本才能收敛。

关键突破:2000年,Konda 和 Tsitsiklis 正式提出 Actor-Critic 框架:用一个 Critic 网络实时估计状态价值,为 Actor 提供低方差的梯度信号。Actor 不再依赖完整 episode 的回报,而是用 Critic 的 TD 误差("比预期好多少")来更新——这让每一步都能学习,大幅提高了样本效率。

深远影响:Actor-Critic 成为现代强化学习的主流框架。A3C(2016)用异步并行加速训练;PPO(2017)用裁剪目标函数保证稳定更新,成为 OpenAI 的默认算法;SAC(2018)引入最大熵原则鼓励探索。ChatGPT 背后的 RLHF 本质上也是 Actor-Critic:语言模型是 Actor,奖励模型是 Critic。

趣闻:Actor-Critic 的思想其实可以追溯到1980年代 Barto 等人的工作,但当时没有深度网络来做函数逼近,效果有限。深度学习的崛起让这个30年前的想法焕发新生——有时候,好想法只是需要等待技术追上来。

发展脉络

2000
Actor-Critic
基础框架
并行训练
→
2016
A3C
异步并行
稳定优化
→
2017
PPO
剪切目标
最大熵
→
2018
SAC
柔性策略

局限性

  • 实现复杂:需要同时维护和训练两个网络,代码复杂度高
  • 需要调很多参数:Actor学习率、Critic学习率、折扣因子等需要仔细调节
  • Critic偏差:如果Critic估计不准,会影响Actor的学习方向
  • 训练不稳定:两个网络相互影响,可能出现震荡或发散
  • 计算量大:相比单一网络方法,计算资源需求更高

这些局限催生了:PPO(简化调参)、A2C(同步版本更稳定)、SAC(自动调节熵系数)、TD3(解决Q值过估计)

工业界地位

现代RL主流方法

Actor-Critic 是现代强化学习的核心框架:

  • ChatGPT/LLM:RLHF 训练中广泛使用 PPO(Actor-Critic变体)
  • 机器人:最先进的机器人控制普遍使用 SAC、TD3 等方法
  • 游戏AI:OpenAI Five、AlphaStar 都基于 Actor-Critic 架构
  • 推荐系统:淘宝、抖音等平台的序列推荐使用 Actor-Critic

工业首选:PPO 因其稳定性和易用性,是目前最广泛使用的 Actor-Critic 变体;SAC 在连续控制任务中表现优异。

交互式可视化

观察 Actor 和 Critic 如何协同工作

Actor 网络输出

Critic 价值估计

算法步骤:

点击"运行一步"开始学习
试一试:
  • 点击「运行一步」,观察 Actor 和 Critic 如何同时更新
  • 连续点击多步,观察 TD 误差是否逐渐变小(Critic 越来越准)
  • 注意 Actor 的策略分布如何随着 Critic 的反馈而变化
0.10
0.10
0.90

数学原理

直觉引入:想象一个演员(Actor)在舞台上表演,一个评委(Critic)在台下打分。演员根据评委的反馈调整表演——评委说"这个动作比预期好",演员就多做;评委说"比预期差",演员就少做。两者同时学习,互相促进。

Critic 更新——学习"打分"(TD 误差):

$$\delta_t = r_t + \gamma V_\phi(s_{t+1}) - V_\phi(s_t)$$

$\delta_t$ 是 TD 误差(Temporal Difference error):实际获得的回报 $r_t + \gamma V(s_{t+1})$ 与预期 $V(s_t)$ 的差距。$\delta_t > 0$ 表示"比预期好",$\delta_t < 0$ 表示"比预期差"。

Critic 用 TD 误差更新自己的参数 $\phi$:

$$\phi \leftarrow \phi + \alpha_c \cdot \delta_t \cdot \nabla_\phi V_\phi(s_t)$$

Actor 更新——根据"评分"调整策略:

$$\theta \leftarrow \theta + \alpha_a \cdot \delta_t \cdot \nabla_\theta \log \pi_\theta(a_t|s_t)$$

关键:用 $\delta_t$(TD 误差)代替 REINFORCE 中的 $G_t$(完整回报)。好处是每一步都能更新,不用等到 episode 结束。

符号总结:

  • $\pi_\theta$:Actor 网络(策略),参数 $\theta$,输出动作概率
  • $V_\phi$:Critic 网络(价值函数),参数 $\phi$,输出状态价值
  • $\alpha_a, \alpha_c$:Actor 和 Critic 各自的学习率
  • $\gamma$:折扣因子,衡量未来回报的重要性
Actor-Critic 的演化:A2C(同步版本)→ A3C(异步多线程)→ PPO(近端策略优化,限制更新幅度)→ SAC(最大熵框架)。现代 RL 算法(如 ChatGPT 的 RLHF)几乎都基于 Actor-Critic 架构。