跳转至

【LLM 对齐系列】(五):Actor-Critic 架构与优势函数

上一篇文章中,我们介绍了 REINFORCE 算法——策略梯度定理的最简实现。REINFORCE 使用蒙特卡洛回报 \(G_t\) 作为学习信号,因此通常需要先采样完整轨迹,才能在时刻 \(t\) 得到对应的回报估计,这会带来较高的采样成本和较大的方差。

针对 REINFORCE 需要完整轨迹才能得到回报信号、从而带来信号延迟和高方差的问题,Actor-Critic 的核心改进是引入 Critic(价值函数近似器),用模型去估计 \(V_\pi(s)\)\(Q_\pi(s,a)\),并结合一步回报对价值进行递推估计,从而提供更及时的学习信号,而不必总是等到整条轨迹结束。进一步地,为了降低策略梯度方差,可以在更新中引入基线(Baseline);当使用价值函数 \(V(s)\) 作为基线并以优势函数进行更新时,就得到 Advantage Actor-Critic(A2C)。

本文作为 LLM 对齐系列的第五篇,将介绍价值函数、优势函数以及 Actor-Critic 架构的工作原理。这些概念是对 REINFORCE 的直接改进,更是理解 TRPO、PPO 等高级算法的必要基础。

cover

回顾:REINFORCE 的高方差问题

让我们先回顾一下 REINFORCE 算法的梯度估计公式:

\[ \nabla_\theta J(\theta) \approx \frac{1}{N} \sum_{i=1}^{N}\sum_{t=0}^{T-1}\nabla_\theta \log \pi_\theta(a_t^{(i)}|s_t^{(i)}) \cdot G_t^{(i)} \]

其中 \(G_t^{(i)}=\sum_{k=t}^{T-1}\gamma^{k-t}r_k^{(i)}\) 是从时刻 \(t\) 开始的回报。

这个公式的问题在于:\(G_t\) 的方差很大。即使在相同的状态 \(s_t\) 采取相同的动作 \(a_t\),由于后续轨迹的随机性,最终得到的回报 \(G_t\) 可能差异很大。这种高方差会导致:

  • 梯度估计不准确,参数更新方向不稳定;
  • 需要大量样本才能得到可靠的估计;
  • 训练过程震荡,收敛缓慢。

举个例子:你在某次考试中使用了一种答题策略。第一次使用时,恰好考到的都是你熟悉的题型,最终得了 100 分;第二次使用时,考到的都是偏题难题,只得了 20 分。如果直接用这些分数来评估你的答题策略,结论会非常不稳定。这就是为什么我们需要引入基线:用相对表现代替绝对分数。

引入基线:保持无偏的梯度估计

一个自然的想法是:能否引入一个参考值,让我们关注“比平均水平好多少”,而不是绝对的回报值?

数学上,我们可以在梯度公式中减去一个基线 \(b(s_t)\)

\[ \nabla_\theta J(\theta) \approx \frac{1}{N} \sum_{i=1}^{N}\sum_{t=0}^{T-1}\nabla_\theta \log \pi_\theta(a_t^{(i)}|s_t^{(i)}) \cdot (G_t^{(i)} - \color{red}{b(s_t^{(i)})}) \]

关键问题:这样做会改变梯度的期望值(引入偏差)吗?

证明目标:为了证明引入基线是无偏(unbiased)的,我们只需证明被减去的那一项的期望为零即可。也就是:

\[ \mathbb{E}_{\tau}\left[\nabla_\theta \log \pi_\theta(a_t|s_t) \cdot b(s_t)\right] = 0 \]

如果这个等式成立,那么引入基线后的梯度期望就等于原始梯度期望:

\[ \mathbb{E}_{\tau}\left[\nabla_\theta \log \pi_\theta(a_t|s_t) \cdot (G_t - b(s_t))\right] = \mathbb{E}_{\tau}\left[\nabla_\theta \log \pi_\theta(a_t|s_t) \cdot G_t\right] - 0 \]

下面让我们逐步证明这一点。对于任意不依赖动作 \(a\) 的基线函数 \(b(s)\),我们有:

第一步:展开轨迹期望

首先,我们将对轨迹 \(\tau\) 的期望展开为对状态 \(s_t\) 和动作 \(a_t\) 的期望。根据期望的定义,这等价于对所有可能的 \((s_t, a_t)\) 对进行加权求和:

\[ \mathbb{E}_{\tau}\left[\nabla_\theta \log \pi_\theta(a_t|s_t) \cdot b(s_t)\right] = \mathbb{E}_{s_t}\left[\sum_{a_t} \pi_\theta(a_t|s_t) \nabla_\theta \log \pi_\theta(a_t|s_t) \cdot b(s_t)\right] \]

这一步运用了期望的展开:在给定状态 \(s_t\) 下,对所有可能动作求和,每个动作按其选择概率 \(\pi_\theta(a_t|s_t)\) 加权。

第二步:应用对数梯度技巧

接下来,我们利用一个重要的数学恒等式——对数梯度技巧(Log-Derivative Trick)

\[ \nabla_\theta \log f(\theta) = \frac{\nabla_\theta f(\theta)}{f(\theta)} \quad \Rightarrow \quad f(\theta) \cdot \nabla_\theta \log f(\theta) = \nabla_\theta f(\theta) \]

将这个技巧应用到我们的公式中,\(\pi_\theta(a_t|s_t) \nabla_\theta \log \pi_\theta(a_t|s_t) = \nabla_\theta \pi_\theta(a_t|s_t)\),于是:

\[ = \mathbb{E}_{s_t}\left[\sum_{a_t} \nabla_\theta \pi_\theta(a_t|s_t) \cdot b(s_t)\right] \]

第三步:提取不依赖动作的项

由于基线 \(b(s_t)\) 只依赖状态 \(s_t\),不依赖动作 \(a_t\),在对动作求和时,它就像一个常数,可以提取到求和符号外面:

\[ = \mathbb{E}_{s_t}\left[b(s_t) \sum_{a_t} \nabla_\theta \pi_\theta(a_t|s_t)\right] \]

这一步的关键在于:基线的选择必须与动作无关,这是保持无偏性的核心条件。

第四步:交换求和与梯度算子

梯度算子 \(\nabla_\theta\) 与求和算子 \(\sum_{a_t}\) 可以交换顺序:

\[ = \mathbb{E}_{s_t}\left[b(s_t) \cdot \nabla_\theta \sum_{a_t} \pi_\theta(a_t|s_t)\right] \]

第五步:利用概率的归一化性质

\(\pi_\theta(a_t|s_t)\) 是一个概率分布,它必须满足概率的基本性质:所有可能动作的概率和为 1。这是一个恒等式,无论参数 \(\theta\) 如何变化,这个性质永远成立:

\[ = \mathbb{E}_{s_t}\left[b(s_t) \cdot \nabla_\theta \underbrace{\sum_{a_t} \pi_\theta(a_t|s_t)}_{=1}\right] \]

第六步:常数的梯度为 0

既然 \(\sum_{a_t} \pi_\theta(a_t|s_t) = 1\) 是一个常数,而常数对任何参数的梯度都是 0:

\[ = \mathbb{E}_{s_t}\left[b(s_t) \cdot \nabla_\theta 1\right] = \mathbb{E}_{s_t}\left[b(s_t) \cdot 0\right] = 0 \]

证明完成!

直观理解

这个证明告诉我们:只要基线 \(b(s_t)\) 不依赖当前动作 \(a_t\),减去它不会改变梯度的期望值,即保持无偏性

为什么会是这样的?直观理解:

  • 概率归一化是数学证明的关键一步:因为所有动作的概率和恒为 1,所以“对所有动作的策略梯度求和”会得到 0;
  • 基线改变的是参考系:就像温度从摄氏度换算成华氏度,水的沸点和冰点的相对差异不变;在期望意义下,梯度方向不变;
  • 保持相对优劣关系:给所有动作都加上/减去同样的分数,不会改变哪个动作“相对更好”,而梯度更新本质上是在调整不同动作之间的相对概率。

这意味着我们可以放心地使用基线来降低方差,而不引入梯度偏差;但是,合理选择的基线才能真正显著降低方差。

那么,什么是“好”的基线呢?直觉上,如果 \(b(s_t)\) 能够准确反映“在状态 \(s_t\) 下的平均表现”,那么 \(G_t - b(s_t)\) 就能准确衡量“这次表现比平均水平好/差多少”。这就引出了价值函数的概念。

价值函数:评估状态的好坏

在强化学习中,有两个重要的价值函数:

状态价值函数 \(V_\pi(s)\)

状态价值函数 \(V_\pi(s)\) 表示:在策略 \(\pi\) 下,从状态 \(s\) 出发,未来能获得的期望回报。

\[ V_\pi(s) = \mathbb{E}_{\tau \sim \pi}\left[G_t \mid s_t = s\right] = \mathbb{E}_{\tau \sim \pi}\left[\sum_{k=t}^{\infty}\gamma^{k-t}r_k \mid s_t = s\right] \]

直观理解:\(V_\pi(s)\) 回答的是“从这个状态开始,按照当前策略行动,平均能得多少分?”

动作价值函数 \(Q_\pi(s, a)\)

动作价值函数 \(Q_\pi(s, a)\) 表示:在状态 \(s\) 执行动作 \(a\) 后,再按照策略 \(\pi\) 行动,未来能获得的期望回报。

\[ Q_\pi(s, a) = \mathbb{E}_{\tau \sim \pi}\left[G_t \mid s_t = s, {\color{red}{a_t = a}}\right] \]

\(V_\pi(s)\) 相比,\(Q_\pi(s, a)\) 多了一个额外条件:不仅固定状态 \(s\),还固定当前动作必须是 \(a\)

直观理解:\(Q_\pi(s, a)\) 回答的是“在这个状态下执行动作 \(a\),然后继续按策略行动,平均能得多少分?”

两者的关系

状态价值函数是动作价值函数对所有可能动作的期望:

\[ V_\pi(s) = \mathbb{E}_{a \sim \pi(\cdot|s)}\left[Q_\pi(s, a)\right] = \sum_a \pi(a|s) Q_\pi(s, a) \]

这个关系很直观:在状态 \(s\) 的价值,就是在这个状态下,按照策略 \(\pi\) 选择各个动作的概率加权平均。

优势函数:这个动作比平均水平好多少?

有了价值函数的概念,我们可以定义一个更精细的评估指标:优势函数(Advantage Function)

\[ A_\pi(s, a) = Q_\pi(s, a) - V_\pi(s) \]

直观含义:优势函数衡量的是“在状态 \(s\) 执行动作 \(a\) 比该状态下的平均表现好/差多少”。

  • 如果 \(A_\pi(s, a) > 0\),说明这个动作比平均水平好,应该增加它的概率;
  • 如果 \(A_\pi(s, a) < 0\),说明这个动作比平均水平差,应该减少它的概率;
  • 如果 \(A_\pi(s, a) = 0\),说明这个动作就是平均水平。

为什么优势函数比单纯的回报更好?

回顾 REINFORCE 的更新规则:

\[ \nabla_\theta \log \pi_\theta(a_t|s_t) \cdot G_t \]

这个公式的问题是:\(G_t\) 的绝对值可能很大,且不同状态之间的回报范围差异很大

举个例子:假设一个学期中,期中测验的平均分是 10 分(满分 15 分),期末考试的平均分是 100 分(满分 120 分)。

  • 在期中测验使用了一个不错的学习策略,得到 15 分,更新幅度是 \(\nabla_\theta \log \pi \cdot 15\)
  • 在期末考试使用了一个糟糕的学习策略,得到 95 分,更新幅度是 \(\nabla_\theta \log \pi \cdot 95\)

即使期中的学习策略更值得鼓励,但因为期末分数的基数大,期末的糟糕策略反而得到了更大的权重!

如果改用优势函数:

  • 期中策略的优势:\(A = 15 - 10 = +5\)(好策略);
  • 期末策略的优势:\(A = 95 - 100 = -5\)(坏策略)。

现在评估更合理了:好动作得到正反馈,坏动作得到负反馈,权重大小也更相称。

Actor-Critic 与 A2C

Actor-Critic(AC)是一类在策略梯度框架下,同时学习策略函数 \(\pi_\theta(a \mid s)\) 与价值函数 \(V_\phi(s)\)\(Q_\phi(s,a)\) 的算法结构。

  • Q 形式

$$ g_t^{Q}=\nabla_\theta\log\pi_\theta(a_t|s_t)\,Q_\pi(s_t,a_t) $$

  • A2C 形式(工程实践常见)

$$ g_t^{A}=\nabla_\theta\log\pi_\theta(a_t|s_t)\,A_\pi(s_t,a_t) $$

其中

$$ A_\pi(s,a)=Q_\pi(s,a)-V_\pi(s) $$

两种写法在期望梯度上等价;A2C 形式引入了状态基线 \(V_\pi(s)\),由前文的数学证明可知,引入与动作无关的状态基线 \(V_\pi(s)\) 不会改变梯度的期望值,且通常能降低估计方差。

维度 Q 形式 A2C 形式
策略学习信号 \(Q(s,a)\) \(A(s,a)=Q(s,a)-V(s)\)
梯度估计方差 较高 较低
训练稳定性 一般 较好
工程应用 常用于理论推导 主流实现

后续推导与算法流程默认采用 A2C 这一实现形态。

A2C 的更新机制

在 A2C 中,Actor 的更新目标为:

\[ \nabla_\theta J(\theta) \approx \frac{1}{N} \sum_{i=1}^{N}\sum_{t=0}^{T-1}\nabla_\theta \log \pi_\theta(a_t^{(i)}|s_t^{(i)}) \cdot {\color{red}{A_\pi(s_t^{(i)}, a_t^{(i)})}} \]

由于真实的 \(A_\pi(s,a)\) 不可直接观测,实践中采用 Critic 对价值函数进行近似,再由 TD 误差构造优势估计。

估计优势函数(TD 误差)

一阶 TD 近似写为:

\[ A_t \approx r_t + \gamma V_\phi(s_{t+1}) - V_\phi(s_t) \]

其推导关系为:

\[ \begin{aligned} A_\pi(s_t, a_t) &= Q_\pi(s_t, a_t) - V_\pi(s_t)\\ &= \mathbb{E}[r_t + \gamma V_\pi(s_{t+1})] - V_\pi(s_t)\\ &\approx r_t + \gamma V_\phi(s_{t+1}) - V_\phi(s_t) \end{aligned} \]

含义如下:

  • \(V_\phi(s_t)\):状态 \(s_t\) 的价值预测;
  • \(r_t+\gamma V_\phi(s_{t+1})\):一步回报与下一状态价值的引导目标;
  • 二者差值:该动作在当前状态下的相对改进量(优势估计)。

TD Error

参数更新

1. Critic 更新(用实际获得的回报更新对价值的估计)

\[ y_t=r_t+\gamma V_\phi(s_{t+1}),\qquad L_\phi = \mathbb{E}\left[\left(V_\phi(s_t) - y_t\right)^2\right] \]

其中 \(y_t\) 为一步 TD 目标。

2. Actor 更新(优势加权策略梯度)

\[ \nabla_\theta J(\theta) \approx \frac{1}{N}\sum_{i=1}^{N}\sum_{t=0}^{T-1} \nabla_\theta \log \pi_\theta(a_t|s_t) \cdot \left(r_t + \gamma V_\phi(s_{t+1}) - V_\phi(s_t)\right) \]

A2C 算法流程

Actor-Critic 算法流程图

LLM 场景下的 A2C 算法流程

LLM 场景下 Actor-Critic 一次迭代流程图

REINFORCE 与 A2C 的对比

REINFORCE A2C
网络数量 策略网络 策略网络 + 价值网络(可共享骨干)
学习信号 蒙特卡洛回报 \(G_t\) 优势估计 \(A_t\)
方差
训练稳定性 较差 较好
样本效率 中等
计算开销 较大(需训练两个网络)
实现复杂度 简单 中等

A2C 的主要局限

尽管 A2C 相比 REINFORCE 有显著改进,但仍存在以下局限:

  1. 策略更新幅度难以控制

    每次更新后,新策略 \(\pi_{\theta_{\text{new}}}\) 可能与旧策略 \(\pi_{\theta_{\text{old}}}\) 偏离过大。若某批样本产生异常高的优势估计,策略更新幅度可能过大,进而破坏既有行为模式。

  2. 样本效率仍然不高

    A2C 仍然是 On-policy(同策略) 算法:优势估计是基于当前策略 \(\pi_\theta\) 采样的轨迹计算的,一旦策略更新为 \(\pi_{\theta'}\),之前的样本就不再适用,必须用新策略重新采样。这导致样本效率不高。

总结

本文介绍了 Actor-Critic 架构,并重点说明了它的工程化主流形态 Advantage Actor-Critic(A2C)。A2C 将策略优化、价值估计与优势更新整合为统一训练闭环,是从基础策略梯度走向 TRPO、PPO 等现代算法的关键过渡。

A2C 的一个主要局限是样本效率问题:每次更新后都必须用新策略重新采样。这引出一个自然的问题:已经采集的数据能否继续利用?这需要一个关键的数学理论工具——重要性采样(Importance Sampling),我们将在下一篇文章中介绍它。

评论