跳转至

【LLM 对齐系列】(三):强化学习的优化目标与策略梯度定理

上一篇文章中,我们介绍了强化学习的三个重要概念:策略(Policy)是智能体的行动指南,奖励(Reward)是评价行动好坏的标尺,而轨迹(Trajectory)则是智能体与环境交互的全过程。

有了这些概念,我们就可以正式进入强化学习的核心问题:如何训练智能体?换句话说,我们已经有了“运动员”(策略)和“裁判”(奖励函数),现在的任务是:如何调整运动员的动作参数 \(\theta\),让他的得分越来越高?

本文作为 LLM 对齐系列的第三篇,将介绍强化学习需要优化的目标函数,并推导出指导优化目标函数的策略梯度定理。

1763749183306

强化学习的优化目标

上一篇文章中,我们介绍了轨迹 \(\tau\) 及其概率 \(p(\tau; \theta)\) 的概念。我们知道,对于任意一条轨迹,环境都会反馈一个回报 \(R(\tau)\)。由于策略 \(\pi_\theta\) 的随机性,每次交互产生的轨迹可能都不相同,获得的回报自然也会有波动。因此,要衡量一个策略到底“好不好”,我们不能只看单次结果,而应该看它在统计意义上的平均表现,即期望回报。

强化学习的优化目标,就是要找到一组参数 \(\theta\),使得策略 \(\pi_{\theta}\) 的期望回报最大化。数学上,我们将优化目标函数 \(J(\theta)\) 定义为:

\[ \begin{aligned} J(\theta) &= \underbrace{\mathbb{E}_{\tau \sim p(\tau; \theta)}[R(\tau)]}_{\text{期望回报}}\\ &= \sum_{\tau} \underbrace{p(\tau; \theta)}_{\text{轨迹出现的概率}} \cdot \underbrace{R(\tau)}_{\text{轨迹回报}} \end{aligned} \]

直观上看,如果我们希望 \(J(\theta)\) 变大,则需要调整参数 \(\theta\),使得那些获得高回报 \(R(\tau)\) 的轨迹 \(\tau\) 出现的概率 \(p(\tau; \theta)\) 变大,而低回报轨迹出现的概率变小。

如何最大化目标?——梯度上升

为了最大化 \(J(\theta)\),最直接的方法是梯度上升(Gradient Ascent)。我们需要计算目标函数关于参数 \(\theta\) 的梯度 \(\nabla_\theta J(\theta)\),然后沿着梯度的方向更新参数:

\[ \theta \leftarrow \theta + \alpha \nabla_\theta J(\theta) \]

其中 \(\alpha\) 是学习率。

然而,计算 \(J(\theta)\) 梯度并不容易。让我们试着直接对目标函数求导,看看会发生什么:

\[ \nabla_\theta J(\theta) = \nabla_\theta \sum_{\tau} p(\tau; \theta) R(\tau) \]

由于求和与求导是线性的,我们可以把梯度符号移到求和符号内部:

\[ \nabla_\theta J(\theta) = \sum_{\tau} \nabla_\theta p(\tau; \theta) R(\tau) \]

这里我们遇到了一个棘手的问题:现在的公式变成了所有轨迹的“概率梯度”乘以“回报”的总和。但是,在强化学习中,我们无法遍历所有可能的轨迹 \(\tau\),只能通过通过环境交互来采样。为了利用采样来近似计算,我们必须把公式凑成“期望”的形式,也就是 \(\mathbb{E}_{p}[\dots] = \sum p(\tau) \times (\dots)\) 的形式。遗憾的是,上面的公式里只有 \(\nabla_\theta p(\tau; \theta)\),缺少了关键的概率项 \(p(\tau; \theta)\)

为了解决这个问题,我们需要做一个巧妙的恒等变换:在公式中人为地乘以并除以 \(p(\tau; \theta)\),这样就能获得 \(p(\tau; \theta)\) 这一项。这个操作并不改变原式的值:

\[ \nabla_\theta p(\tau; \theta) = p(\tau; \theta) \frac{\nabla_\theta p(\tau; \theta)}{p(\tau; \theta)} \]

此时,我们观察到分数部分 \(\frac{\nabla_\theta p(\tau; \theta)}{p(\tau; \theta)}\) 正好符合对数求导法则(Log-Derivative Rule),即 \((\log x)' = x' / x\)。所以:

\[ \frac{\nabla_\theta p(\tau; \theta)}{p(\tau; \theta)} = \nabla_\theta \log p(\tau; \theta) \]

将这个替换代回原公式:

\[ \nabla_\theta J(\theta) = \sum_{\tau} p(\tau; \theta) \nabla_\theta \log p(\tau; \theta) R(\tau) \]

现在,公式开头出现了 \(p(\tau; \theta)\),这正是我们想要的期望形式:

\[ \nabla_\theta J(\theta) = \mathbb{E}_{\tau \sim p(\tau; \theta)} [\nabla_\theta \log p(\tau; \theta) R(\tau)] \]

至此,我们将难以计算的梯度,成功转化为了“对数概率梯度的期望”。这意味着我们可以通过采样轨迹,计算 \(\nabla_\theta \log p(\tau; \theta) R(\tau)\) 的平均值来近似真正的梯度。

策略梯度定理(Policy Gradient Theorem)

\(\nabla_\theta J(\theta)\) 的公式看起来已经很简洁了,但在实际计算中,我们仍然面临一个障碍:\(\nabla_\theta \log p(\tau; \theta)\) 到底怎么算?

上一篇文章中,我们知道,一条特定的轨迹 \(\tau\) 的发生概率 \(p(\tau; \theta)\) 是由环境和策略这两个对象共同决定的。

\[ \begin{aligned} p(\tau; \theta) &= p(\{s_0, a_0, r_0, s_1, a_1, r_1, \cdots, s_{T-1}, a_{T-1}, r_{T-1}, s_T \}; \theta) \\ &= \underbrace{p(s_0)}_{\text{初始状态概率}} \cdot \prod_{t=0}^{T-1} \left( \underbrace{\pi_\theta(a_t \mid s_t)}_{\text{动作选择概率}} \cdot \underbrace{P(s_{t+1} \mid s_t, a_t)}_{\text{状态转移概率}} \right) \end{aligned} \]

\(p(\tau; \theta)\) 是一个累乘的形式。因此,对于 \(\nabla_\theta J(\theta)\) 中的 \(\log p(\tau; \theta)\) 这一项,在取对数后就变成了累加的形式:

\[ \log p(\tau; \theta) = \log p(s_0) + \sum_{t=0}^{T-1} \log \pi_\theta(a_t|s_t) + \sum_{t=0}^{T-1} \log p(s_{t+1}|s_t, a_t) \]

我们需要求 \(\log p(\tau; \theta)\) 关于 \(\theta\) 的梯度,可以逐个分析这三部分对 \(\theta\) 求梯度的结果。

  1. 初始状态分布 \(p(s_0)\) 来源于环境,与 \(\theta\) 无关,因此第一项的梯度为 0。

  2. 对第二项直接添加梯度符号,变成 \(\sum_{t=0}^{T-1} \nabla_\theta \log \pi_\theta(a_t|s_t)\)

  3. 状态转移概率 \(p(s_{t+1}|s_t, a_t)\) 取决于客观环境,也与 \(\theta\) 无关,因此第三项的梯度也为 0。

因此,公式中所有涉及环境的项在求梯度后全部消失!只剩下与策略有关的项:

\[ \nabla_\theta \log p(\tau; \theta) = \sum_{t=0}^{T-1} \nabla_\theta \log \pi_\theta(a_t|s_t) \]

这就是策略梯度定理的基础形式。它告诉我们:即使我们完全不知道客观的环境模型(Model-free),只要我们能计算策略网络的梯度,就可以对智能体进行优化。

最后,将这个结果代回我们的目标函数梯度公式中:

\[ \nabla_\theta J(\theta) = \mathbb{E}_{\tau \sim p(\tau; \theta)} \left[ \left( \sum_{t=0}^{T-1} \nabla_\theta \log \pi_\theta(a_t|s_t) \right) \cdot R(\tau) \right] \tag{1}\label{1} \]

策略梯度定理的直观解释

公式 \(\eqref{1}\) 的直觉含义十分朴素,可以用一句话概括:动作带来的期望回报越高,越要增大这个动作出现的概率。

  1. \(\nabla_\theta \log \pi_\theta(a_t|s_t)\) 告诉我们如何调整参数 \(\theta\),才能让智能体在状态 \(s_t\) 下更有可能选出动作 \(a\),即“增加当前动作出现概率”的梯度方向。

  2. \(R(\tau)\) 则充当了一个方向和权重系数的角色。

    • 如果 \(R(\tau)\) 是一个很大的正数,说明这个策略得到的轨迹的回报很高。我们就会沿着“增加当前动作出现概率”的梯度方向迈出一大步。这意味着我们要大幅增加这条轨迹中所有动作出现的概率。即:“刚才这么做既然得分了,下次遇到这种情况,还要这么做!”

    • 如果 \(R(\tau)\) 是一个很小的负数,说明这个策略得到的轨迹的回报很低。将 \(\nabla_\theta \log \pi_\theta(a_t|s_t)\) 乘以一个负数后,原本“增加当前动作出现概率”的方向就会变成“减少当前动作出现概率”的方向。这意味着我们要抑制这些动作再次出现。即:“刚才这么做扣分了,下次千万别这么干了!”

这就是策略梯度定理最核心的思想:通过不断地试错(采样),利用最终的回报 \(R(\tau)\) 作为参考,去放大那些导致高回报的动作的概率,同时抑制导致低回报的动作。即使我们不知道客观的环境模型,只要盯着“回报”这个指挥棒,智能体就能一步步学会正确的策略。

总结

本文介绍了强化学习的优化目标——最大化期望回报,并推导出了著名的策略梯度定理。

这一定理的推导过程展示了一个精妙的变换:通过对数导数技巧,我们将难以直接计算的目标函数梯度,转化为可以通过采样近似的“对数概率梯度的期望”。更重要的是,推导结果证明了我们不需要知道环境模型(状态转移概率),只需要根据策略网络的梯度和采样得到的轨迹回报,就能指导智能体不断进化。这为 Model-free 强化学习奠定了坚实的理论基础。

策略梯度定理是现代强化学习算法的基石。在接下来的文章中,我们将基于这一理论,介绍具体的算法实现,从最基础的 REINFORCE 算法开始,一步步走进 PPO 等在大模型对齐中广泛应用的高级算法。

评论