1 min read 364 words Updated May 15, 2026 Created Jun 17, 2026

为了解决 High Variance 和 High bias 之间的矛盾,可以把它们结合在一起,利用value based 和 policy based 两类方法各自的优势,还顺带把它们的短板都补上了。于是就有了集大成的 Actor-Critic 类方法。 具体来说,就是构造一个全能型的 agent,既能直接输出策略,又能通过 value function 来实时评价当前策略的好坏。所以我们需要两个网络,一个负责生成策略的 Actor 和一个负责评价策略的 Critic。这就有点类似一个演员在表演,而同时一个评论家在随时纠正他的表现,而且两者都还在不断更新,这种互补式的训练方式会比单独的策略网络或者值函数网络更有效。

├─→ Actor-Critic (A2C/A3C)
│   └── 引入 Critic 网络估计 V(s) 替代 G_t 作为 baseline
│   └── 解决:PG 高方差(你之前问的 baseline 机制在此成熟)
│   └── 问题:需要同时训练 Actor + Critic,步长敏感

没想到吧,AC 框架也有一万种变体

Q-Actor-Critic

on-policy

回顾 REINFORCE 算法 的核心损失:

$$\nabla J(\theta) = {\mathbb E}_{\tau \sim \pi_\theta} \left[ \sum_{t = 0}^T G_{\tau, t} \nabla \log \pi_\theta(a_t|s_t) \right] $$

那么如果说,让 $G_{\tau, t}$ 由该模型一同计算呢?这不就是 DQN 中的 $Q$ 网络吗。

所以还需要加上拟合 $Q$ 的损失:

$$J_{critic}(\omega) = \frac 1 2\sum_{t = 0}^T (r_t + \gamma Q_\omega(s_{t + 1}, a_{t + 1}) - Q_\omega(s_t, a_t))^2 $$

为什么不直接使用 DQN?如果说动作空间不是离散的,那么我们就没法做:${\rm softmax}_a Q(s, a)$ 的操作,得到最优的策略。

那既然我们有 $Q(s, a)$ 了,真的需要这个 Policy Gradient 吗?其实没必要,直接定义:

$$J_{actor}(\theta) = - {\mathbb E}_{s \sim D} [Q(s, \pi_{\theta}(s))] $$

损失也很简单了。

所以训练流程就是:

  • 采样轨迹,更新 $Q$ 网络(需要引入经验回放,和 DQN 一样,用于减少随时间传播的偏差)
  • 利用更新后的 $Q$ 网络更新 $actor$ 即可。

https://github.com/datawhalechina/easy-rl/blob/master/notebooks/A2C.ipynb


V-Actor-Critic

对于 Q-Actor-Critic 来说,构建的是 $Q(s, a)$,能不能直接构建 $V(s) = {\mathbb E}[Q(s, a)]$ 之类的东西?

$$J_{critic}(\omega) = \frac 1 2\sum_{t = 0}^T (r_t + \gamma V(s_{t + 1}) - V(s_t))^2 $$

那么策略函数就要和 REINFORCE 算法 函数一致了,因为这里没有 $Q(s, a)$ 的东西来指导下一步的动作了。

$$\nabla J(\theta) = {\mathbb E}_{\tau \sim \pi_\theta} \left[ \sum_{t = 0}^T (r_t + \gamma V(s_{t+1})) \nabla \log \pi_\theta(a_t|s_t) \right] $$

但是别忘了我们还有一个问题,方差大,怎么办?减去 baseline 就好了:

$$\nabla J(\theta) = {\mathbb E}_{\tau \sim \pi_\theta} \left[ \sum_{t = 0}^T (r_t + \gamma V(s_{t+1}) - V(s_t)) \nabla \log \pi_\theta(a_t|s_t) \right] $$

为什么可以减少方差但是不引入偏差?(这和归一化有点像啊)

https://zhuanlan.zhihu.com/p/98506549

注意到 $V(s_t)$ 是一个只与 $s_t$ 相关的一个量,那么引入的损失部分是:

$$\begin{aligned} {\mathbb E}_{\tau} \left[ \sum V(s_t) \nabla \log \pi_\theta \right] &= \sum_{\tau} {\mathbb E}[V(s_t) \nabla \log \pi_\theta] \\ {\mathbb E}_{\tau} [V(s_t) \nabla \log \pi_\theta] &= {\mathbb E}_{s_t} [V(s_t) {\mathbb E}_{a_t} [\nabla \log \pi_\theta(a_t | s_t)] ] \\ &= {\mathbb E}_{s_t}[V(s_t) \cdot 0] \\ &= 0 \end{aligned} $$

其中:

$$\begin{aligned} {\mathbb E}_{a_t} [\nabla \log \pi_\theta(a_t | s_t)] &= \int_a \pi_\theta(a_t|s_t) \frac {\nabla \pi_\theta(a_t | s_t)} {\pi_\theta(a_t|s_t)} {\rm d} a_t \\ &= \int_a \nabla \pi_\theta(a_t | s_t) {\rm d} a_t \\ &= \nabla \int_a \pi_\theta(a_t | s_t) {\rm d} a_t \\ &= \nabla 1 \\ &= 0 \end{aligned} $$

如果说 $\pi_\theta$ 关于 $\theta$,对只有可数个 $a$ 不可微,且 $\nabla \pi_\theta$ 关于 $\theta$ 有界,那么就可以交换 $\nabla$$\int$。哦,我逝去的淑芬 QwQ

  • 那方差呢?