☰
策略梯度算法与 REINFORCE:基于策略的强化学习入门(Awesome-ML-SYS-Tutorial 系列笔记)
2026/9/29 3:34:42 网站建设 项目流程
  • 文档
  • 教程
  • 人工智能
  • 大模型
  • RLHF

【免费下载链接】Awesome-ML-SYS-Tutorial

My learning notes for ML SYS.

项目地址:https://gitcode.com/gh_mirrors/aw/Awesome-ML-SYS-Tutorial
点击查看免费下载

策略梯度(Policy Gradient)是基于策略(policy-based)强化学习方法的基础,与 Q-learning、DQN 等基于价值(value-based)的方法形成鲜明对比:前者直接显式地学习一个参数化策略,后者则是学习价值函数后再隐式导出策略。本篇技术指南以 rlhf/rl-walk-through/part-6.md 为核心,系统讲解策略梯度的目标函数构造、策略梯度定理的推导过程、其在线策略(on-policy)的本质属性,以及最经典的蒙特卡洛策略梯度算法 REINFORCE 的完整流程与优缺点。读完本文,你将掌握策略梯度从数学原理到伪代码实现的完整脉络,并理解它为何方差大、为何是 on-policy 算法,以及它如何演进为现代 RLHF(如 PPO、GRPO)的算法基石——这也是本仓库 rlhf 系列学习笔记(从 part-1 多臂老虎机到 part-7 Actor-Critic)承上启下的关键一环。

从价值方法到策略方法:为什么需要显式策略

在强化学习的经典分类中,part-1 已经给出了完整的算法谱系:

  • Value-Based(基于价值):通过学习价值函数(如 $V(s)$、$Q(s,a)$)来做决策,策略是隐式的——选择价值最高的动作即可。典型代表是 Q-learning 和 DQN。Q-learning 适合有限状态,DQN 通过神经网络拟合 $Q$ 值解决了连续状态的问题,但依然只能处理离散动作(因为 $Q$ 更新中有 $\max_a$ 操作)。
  • Policy-Based(基于策略):直接学习一个策略,即从状态到动作(概率分布)的映射。策略可以是显式的,比如"在状态 $s$ 下,80% 概率选择动作 $a_1$,20% 概率选择动作 $a_2$"。典型代表是 REINFORCE。
  • Actor-Critic:同时学习策略(Actor)和价值函数(Critic),结合两者优点,PPO 是常见代表。
  • Model-Based / Model-Free:按是否显式建模环境(状态转移 + 奖励)划分。

这两条技术路线在学习目标上有本质差异:

类型学什么策略优点缺点
Value-Based价值函数(间接推导策略)隐式简单,样本效率高策略可能不灵活
Policy-Based策略显式策略灵活,可处理连续动作样本效率低,训练不稳定

Q-learning、DQN 及其改进算法都是基于价值的方法,其学习过程中并不存在一个显式的策略对象;而基于策略的方法则直接显式地学习一个目标策略,策略梯度(Policy Gradient)正是这条路线的基础。

策略参数化与目标函数

基于策略的方法首先要将策略参数化。假设目标策略 $\pi_{\theta}$ 是一个随机化策略(stochastic policy),我们可以用一个线性模型或者神经网络来表示这个策略模型:输入某个状态 $s$,输出一个动作的概率分布 $\pi_{\theta}(a|s)$。这样的设计天然支持连续动作空间——这也是 Policy-Based 方法相比 DQN 的一个重要优势。

我们的目标是更新策略,使其在环境中的期望回报最大化。将策略梯度算法的目标函数定义为:

$$ J(\theta) = \mathbb{E}_{s_0}\left[V^{\pi_{\theta}}(s_0)\right] $$

其中,$s_0$ 表示初始状态。有了目标函数之后,将目标函数对策略参数 $\theta$ 求梯度,就可以用梯度上升(gradient ascent)方法来最大化这个目标函数,从而得到更优的策略。注意这里是"上升"而非"下降",因为我们的优化方向是让期望回报 $J(\theta)$ 变大。

策略梯度定理的推导

对 $J(\theta)$ 求梯度,可以得到策略梯度定理(Policy Gradient Theorem)的核心形式:

$$ \begin{aligned} \nabla_{\theta}J(\theta) &\propto \sum_{s \in S} \nu^{\pi_{\theta}}(s) \sum_{a \in A} Q^{\pi_{\theta}}(s, a) \nabla_{\theta} \pi_{\theta}(a|s) \ &= \sum_{s \in S} \nu^{\pi_{\theta}}(s) \sum_{a \in A} \pi_{\theta}(a|s) Q^{\pi_{\theta}}(s, a) \frac{\nabla_{\theta} \pi_{\theta}(a|s)}{\pi_{\theta}(a|s)} \ &= \mathbb{E}{\pi{\theta}}\left[Q^{\pi_{\theta}}(s, a) \nabla_{\theta} \log \pi_{\theta}(a|s)\right] \end{aligned} $$

这个推导过程值得逐行拆解:

  1. 第一行:梯度被分解为对状态 $s$ 的求和与对动作 $a$ 的求和,其中 $\nu^{\pi_{\theta}}(s)$ 是策略 $\pi_{\theta}$ 下的状态访问分布(on-policy 状态分布),$Q^{\pi_{\theta}}(s, a)$ 是动作价值函数。这里用 $\propto$(正比于)而非等号,是因为策略梯度定理的完整形式还包含一项对状态价值的梯度项,该项期望为零,故可省略。
  2. 第二行:通过分子分母同乘 $\pi_{\theta}(a|s)$,将 $\nabla_{\theta} \pi_{\theta}(a|s)$ 改写为 $\pi_{\theta}(a|s) \cdot \frac{\nabla_{\theta} \pi_{\theta}(a|s)}{\pi_{\theta}(a|s)}$,为引入对数技巧做准备。
  3. 第三行:利用 $\nabla_{\theta} \log \pi_{\theta}(a|s) = \frac{\nabla_{\theta} \pi_{\theta}(a|s)}{\pi_{\theta}(a|s)}$ 将对数梯度引入,整个式子化成一个关于状态动作对 $(s,a)$ 的期望。这个"对数似然比 × 奖励"的形式,被称为似然比技巧(likelihood ratio trick)或分数函数(score function)技巧,它是策略梯度方法能够用采样数据估计梯度的关键。

策略梯度的直观理解

从公式可以直观理解策略梯度的工作机制:在每一个状态下,梯度的修改会让策略更多地去采样带来高 $Q$ 值的动作,更少地去采样带来较低 $Q$ 值的动作。也就是说,$Q$ 值充当了"方向信号"——高价值动作的概率被推高,低价值动作的概率被压低,整个策略分布沿期望回报增大的方向移动。

on-policy 的本质:为什么策略梯度必须用当前策略采样

推导中有一个容易被忽视却至关重要的细节:第三行期望的下标是 $\pi_{\theta}$,这意味着期望是在当前策略 $\pi_{\theta}$ 生成的分布上求的。因此,策略梯度算法是在线策略(on-policy)算法——必须使用当前策略 $\pi_{\theta}$ 采样的数据来计算梯度。

对比本系列 part-4 中引入的概念可以加深理解:

  • 在线策略学习:要求使用在当前策略下采样得到的样本进行学习,一旦策略被更新,当前的样本就被放弃。Sarsa 是 on-policy 的典型:它必须用当前 $\epsilon$-贪婪策略选择真实的 $A_{t+1}$ 来更新。
  • 离线策略学习:可以反复利用采集到的经验,能更好地利用历史数据,具有更小的样本复杂度(达到收敛所需的环境采样数量)。Q-learning 是 off-policy 的典型:它的 TD 目标中用的是 $\arg\max_a Q(s_{t+1}, a')$,与行为策略无关。

策略梯度的期望建立在当前策略分布之上,因此一旦 $\theta$ 更新,旧策略采样的数据在统计意义上就"过期"了。这个性质对工程实践有直接影响:策略梯度训练中每一次参数更新后都需要重新采样(重新 rollout),数据利用率低,这正是后续 Actor-Critic、PPO 等算法试图改善的工程问题之一。

REINFORCE 算法

REINFORCE 是策略梯度乃至强化学习的典型代表算法,其流程如下:

  • 初始化策略模型参数 $\theta$
  • for $e = 1 \to E$(迭代 $E$ 个回合):
    1. 用当前策略 $\pi_{\theta}$ 采样轨迹 ${s_1, a_1, r_1, s_2, a_2, r_2, \ldots, s_T, a_T, r_T}$
    2. 计算当前轨迹每个时间点往后的回报 $\sum_{t'=t}^{T} \gamma^{t'-t} r_{t'}$ 记为 $\psi_t$
    3. 对 $\theta$ 进行更新:$\theta = \theta + \alpha \sum_{t} \psi_t \nabla_{\theta} \log \pi_{\theta}(a_t|s_t)$
  • end for

对算法细节做进一步剖析:

  • 步骤 1(采样轨迹):REINFORCE 使用蒙特卡洛方法,让智能体以当前策略 $\pi_{\theta}$ 与环境完整交互,得到一整条轨迹直到终止状态 $T$。注意这里的策略是随机策略,因此每个时间步的动作都是从概率分布 $\pi_{\theta}(\cdot|s_t)$ 中采样得到的。
  • 步骤 2(计算回报):$\psi_t = \sum_{t'=t}^{T} \gamma^{t'-t} r_{t'}$ 是从时间步 $t$ 开始的折扣回报(discounted return),即从当前时刻往后所有奖励的折扣累加。它替代了策略梯度定理中的 $Q^{\pi_{\theta}}(s_t, a_t)$——因为在实际交互中我们无法预知真实的 $Q$ 值,只能用采样到的实际回报作为它的无偏估计。这里 $\gamma$ 是折扣因子(取值范围 $[0,1)$,含义见 part-2),控制远期奖励的打折程度。
  • 步骤 3(参数更新):$\alpha$ 是学习率,$\nabla_{\theta} \log \pi_{\theta}(a_t|s_t)$ 是对数策略梯度。整个求和把所有时间步的"回报 × 对数似然梯度"累加起来,再沿梯度上升方向更新 $\theta$。这与策略梯度定理的期望形式 $\mathbb{E}{\pi{\theta}}[Q^{\pi_{\theta}}(s, a) \nabla_{\theta} \log \pi_{\theta}(a|s)]$ 完全对应——蒙特卡洛采样把期望替换成了样本均值。

REINFORCE 的定位:从交互中直接学习

REINFORCE 智能体根据当前策略直接和环境交互,通过采样得到的轨迹数据直接计算出策略参数的梯度,进而更新当前策略,使其向最大化策略期望回报的目标靠近。这种学习方式是典型的从交互中学习,并且有两点值得强调:

  1. 优化目标更直接:REINFORCE 优化的目标(策略期望回报)正是最终所使用策略的性能本身,这比基于价值的强化学习算法的优化目标(一般是时序差分误差的最小化)更加直接、与最终目标对齐。
  2. 理论保证:REINFORCE 算法理论上是能保证局部最优的——它借助蒙特卡洛方法采样轨迹来估计动作价值,这种做法的一大优点是可以得到无偏的梯度(unbiased gradient)。

REINFORCE 的方差问题与演进方向

正是因为使用了蒙特卡洛方法,REINFORCE 算法的梯度估计方差很大,可能会造成一定程度上的训练不稳定。方差来源的本质在于:每一步的未来转移都可能存在不确定的转移方向,单条轨迹只是所有可能轨迹中的一次抽样,用它估计 $Q$ 值天然伴随较大的随机波动。

后续算法正是围绕"减小方差、保持无偏/低偏差"这一主线演进的,part-7 给出了完整的解决思路。在策略梯度的一般形式

$$ g = \mathbb{E} \left[ \sum_{t=0}^{T} \psi_t \nabla_{\theta} \log \pi_{\theta}(a_t|s_t) \right] $$

中,$\psi_t$ 可以有多种选择:

  1. $\sum_{t'=0}^{T} \gamma^{t'} r_{t'}$:轨迹的总回报(即 REINFORCE 的变体);
  2. $\sum_{t'=t}^{T} \gamma^{t'-t} r_{t'}$:动作 $a_t$ 之后的回报(即本文 REINFORCE 伪代码中的 $\psi_t$);
  3. $\sum_{t'=t}^{T} \gamma^{t'-t} r_{t'} - b(s_t)$:基线改进(baseline),用基线函数 $b(s_t)$ 减小方差;
  4. $Q^{\pi_{\theta}}(s_t, a_t)$:用动作价值函数代替采样回报,即Actor-Critic的思路;
  5. $A^{\pi_{\theta}}(s_t, a_t)$:优势函数(advantage function),用 $Q$ 减去状态价值 $V$,是 PPO、GRPO 等现代算法的核心;
  6. $r_t + \gamma V^{\pi_{\theta}}(s_{t+1}) - V^{\pi_{\theta}}(s_t)$:时序差分残差,允许算法在每一步之后更新,不依赖完整轨迹。

从工程实现角度看,REINFORCE 依赖蒙特卡洛样本、只能在序列结束后才进行更新,这同时要求任务有明确的步数;而 Actor-Critic 算法则可以在每一步之后都进行更新,并且不对任务的步数做假设。更进一步,TRPO 引入信任区域(trust region,用 KL 散度约束策略更新幅度)保证性能单调性,PPO 用截断(clip)或惩罚(penalty)两种简化方式实现了同样的约束——这些内容在 part-7 中有完整推导。

从 REINFORCE 到 RLHF:策略梯度家族在 LLM 中的应用

这条从 REINFORCE 出发的演进线,正是现代 LLM 对齐技术(RLHF)的算法根源。本仓库的 rlhf 目录收录了大量相关实践:例如 OpenRLHF 框架围绕 PPO 等策略梯度类算法实现 RLHF 训练流水线,veRL 则提供了大规模 rollout 与训练编排的工程实现,GRPO 文档详细对比了 GRPO 与 PPO/GRPO 的关系(见 rlhf/sppo/compare_with_ppo_grpo.md)。这些框架中的 PPO、GRPO 都属于基于策略的在线强化学习方法,其核心都是对策略梯度目标函数的工程化改造:

  • 在线采样:沿袭 REINFORCE 的 on-policy 特性,每次更新都要用当前 LLM 策略生成新的响应数据(rollout),这对推理引擎的吞吐提出了极高要求,正是 sglang 等推理系统与 RL 训练框架深度结合的原因;
  • 优势估计:用优势函数 $A$($\psi_t$ 的形式 5)替代原始回报,大幅压缩梯度方差,使大规模语言模型的策略更新稳定可行;
  • 约束更新:PPO 用截断系数 $\epsilon$ 限制新旧策略概率比,避免单次更新步子过大导致训练崩溃。

从这个角度看,本文的策略梯度与 REINFORCE 是理解整个 RLHF 技术栈的第一块基石:只有先理解"为什么策略梯度必须是 on-policy"、"为什么蒙特卡洛回报方差大",才能理解 PPO 为什么需要 clip、GRPO 为什么用群体基线做优势归一化,也才能理解为什么 RL 训练系统需要把 rollout 与训练尽可能重叠以摊薄采样成本。

小结

策略梯度算法确立了"直接参数化并优化策略"这一范式:目标函数 $J(\theta) = \mathbb{E}{s_0}[V^{\pi_{\theta}}(s_0)]$ 衡量策略的期望回报,策略梯度定理通过似然比技巧将梯度化为 $\mathbb{E}{\pi_{\theta}}[Q^{\pi_{\theta}}(s, a) \nabla_{\theta} \log \pi_{\theta}(a|s)]$ 这一可采样的形式,而期望下标 $\pi_{\theta}$ 决定了它必须是 on-policy 算法。REINFORCE 用蒙特卡洛回报 $\psi_t$ 替换 $Q$ 值,得到无偏但高方差的梯度估计——这一方差问题直接催生了基线、Actor-Critic、TRPO 与 PPO 的整条演进链。理解 REINFORCE,就是理解从经典强化学习到现代 RLHF 的一把钥匙;后续请继续阅读本系列的 part-7(Actor-Critic、TRPO 与 PPO),以及仓库 rlhf 目录下的工程框架文档,把算法原理与实际训练系统打通。

  • 文档
  • 教程
  • 人工智能
  • 大模型
  • RLHF

【免费下载链接】Awesome-ML-SYS-Tutorial

My learning notes for ML SYS.

项目地址:https://gitcode.com/gh_mirrors/aw/Awesome-ML-SYS-Tutorial
点击查看免费下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询