RL 学习笔记(三):基于策略的强化学习
2025-12-19 · Qi Lu · Views:
在上一篇文章中,我们介绍了 Value-Based 方法:先学习 $Q^*$,再通过 $\arg\max$ 导出策略。这种方法在离散动作空间中效果很好,但遇到以下问题时会遇到困难:
如果动作空间是连续的(如机器人关节角度),如何计算 $\arg\max_a Q(s,a)$?
如果最优策略是随机的(如石头剪刀布),如何用确定性策略表示?
Policy-Based 方法提供了一种更直接的思路:直接参数化策略 $\pi_\theta(a|s)$,通过梯度上升最大化期望回报。
1. 为什么需要 Policy-Based 方法?
1.1 Value-Based 方法的局限性
- 连续动作空间困难:$\max_a Q(s,a)$ 需要枚举或优化所有动作
- 函数逼近不稳定(Deadly Triad):函数逼近 + Bootstrapping + Off-policy 可能发散
- 优化目标间接:最小化 TD 误差,而非直接优化期望回报 $J(\pi)$
- 只能学习确定性策略:$\arg\max$ 输出确定动作,但某些环境中随机策略更优
1.2 参数化策略
Policy-Based 方法直接参数化策略 $\pi_\theta(a|s)$:
\[J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta} \left[ G_0 \right] = \mathbb{E}_{\tau \sim \pi_\theta} \left[ \sum_{t=0}^{T} \gamma^t r_t \right]\]策略参数化的常见形式:
-
离散动作空间:Softmax 输出 Categorical 分布 \(\pi_\theta(a|s) = \frac{\exp(f_\theta(s,a))}{\sum_{a'} \exp(f_\theta(s,a'))}\)
-
连续动作空间:输出高斯分布的参数 $(\mu_\theta(s), \sigma_\theta(s))$ \(\pi_\theta(a|s) = \mathcal{N}(a \mid \mu_\theta(s), \sigma_\theta^2(s))\)
Policy-Based 方法的优势:
- 处理连续动作:直接输出动作分布,无需 $\arg\max$
- 学习随机策略:可以输出动作的概率分布
- 直接优化目标:梯度上升直接最大化 $J(\theta)$
- 更好的收敛性质:策略参数的小变化导致策略的小变化(光滑)
2. Policy Gradient 定理
Policy Gradient 定理是 Policy-Based RL 的理论基础,它给出了目标函数 $J(\theta)$ 关于参数 $\theta$ 的梯度表达式。
2.1 Log-Derivative Trick
计算 $\nabla_\theta J(\theta)$ 的关键技巧是 Log-Derivative Trick:
\[\nabla_\theta p(x|\theta) = p(x|\theta) \nabla_\theta \log p(x|\theta)\]证明:由对数的求导法则,$\nabla_\theta \log p(x|\theta) = \frac{\nabla_\theta p(x|\theta)}{p(x|\theta)}$,两边同乘 $p(x|\theta)$ 即得。
Log-Derivative Trick 的妙处:将对 $p(x|\theta)$ 的求导转化为对 $\log p(x|\theta)$ 的求导,后者往往更容易计算,特别是当 $p$ 是乘积形式时。
2.2 Policy Gradient 定理
定理 (Policy Gradient Theorem):
\[\nabla_\theta J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta} \left[ \sum_{t=0}^{T} \nabla_\theta \log \pi_\theta(a_t|s_t) \cdot G_t \right]\]其中 $G_t = \sum_{k=0}^{T-t} \gamma^k r_{t+k}$ 是从时刻 $t$ 开始的 reward-to-go。
证明思路:
Step 1:应用 Log-Derivative Trick
\[\begin{aligned} \nabla_\theta J(\theta) &= \nabla_\theta \int p(\tau|\theta) R(\tau) d\tau \\ &= \int p(\tau|\theta) \nabla_\theta \log p(\tau|\theta) R(\tau) d\tau \\ &= \mathbb{E}_{\tau \sim \pi_\theta} \left[ \nabla_\theta \log p(\tau|\theta) \cdot R(\tau) \right] \end{aligned}\]Step 2:展开 $\nabla_\theta \log p(\tau|\theta)$
回顾轨迹概率分解:$p(\tau|\theta) = p(s_0) \prod_{t} \pi_\theta(a_t|s_t) P(s_{t+1}|s_t,a_t)$
取对数并求梯度:
\[\nabla_\theta \log p(\tau|\theta) = \sum_{t=0}^{T-1} \nabla_\theta \log \pi_\theta(a_t|s_t)\]关键观察:$p(s_0)$ 是环境的初始状态分布,$P(s_{t+1}|s_t,a_t)$ 是环境的动力学模型,它们都与策略参数 $\theta$ 无关,因此梯度为零!
这意味着:即使不知道环境动力学 $P$,我们也能计算 Policy Gradient——这是 Policy Gradient 方法能够 Model-Free 的根本原因。
Step 3:引入 Reward-to-go(因果性)
动作 $a_t$ 只影响未来奖励,不影响过去。因此可以用 reward-to-go $G_t$ 替代完整回报 $R(\tau)$。
Policy Gradient 定理的直观理解:
- $\nabla_\theta \log \pi_\theta(a_t|s_t)$ 是”增加动作 $a_t$ 概率”的方向
- $G_t$ 是该动作之后获得的累积奖励
- 如果 $G_t > 0$:沿梯度方向更新,增加 $a_t$ 的概率
- 如果 $G_t < 0$:反向更新,减少 $a_t$ 的概率
简言之:好的动作更可能被选择,坏的动作更少被选择。
3. REINFORCE 算法
REINFORCE 是最简单的 Policy Gradient 算法,直接使用蒙特卡洛采样来估计梯度。
REINFORCE 是无偏估计:$\mathbb{E}[\hat{g}] = \nabla_\theta J(\theta)$
但方差很大:
- $G_t$ 累积了从 $t$ 到终止的所有随机性
- 轨迹越长,方差越大
- 奖励稀疏时,大部分轨迹的 $G_t \approx 0$
4. Baseline 与方差降低
4.1 Baseline 技巧
一个巧妙的技巧是:从 $G_t$ 中减去一个 baseline $b(s_t)$,可以降低方差而不引入偏差。
定理 (Baseline 不改变期望):对于任意只依赖于状态 $s$(不依赖于动作 $a$)的函数 $b(s)$:
\[\mathbb{E}_{a \sim \pi_\theta(\cdot|s)} \left[ \nabla_\theta \log \pi_\theta(a|s) \cdot b(s) \right] = 0\]证明:由于 $b(s)$ 不依赖于 $a$,可以提出期望外:
\[b(s) \cdot \mathbb{E}_{a \sim \pi_\theta} \left[ \nabla_\theta \log \pi_\theta(a|s) \right] = b(s) \cdot \nabla_\theta \sum_a \pi_\theta(a|s) = b(s) \cdot \nabla_\theta 1 = 0\]因此,Policy Gradient 可以写成:
\[\nabla_\theta J(\theta) = \mathbb{E} \left[ \sum_t \nabla_\theta \log \pi_\theta(a_t|s_t) \cdot (G_t - b(s_t)) \right]\]4.2 为什么 Baseline 能降低方差?
- $G_t$ 可能总是正的(如奖励都是正数),导致所有动作概率都被增加
- 减去 $b(s)$(如平均回报),使得 $G_t - b(s_t)$ 有正有负
- 好于平均的动作被增强,差于平均的动作被削弱
4.3 最优 Baseline
定理:在不改变期望的前提下,使方差最小的 baseline 是状态价值函数:$b^*(s) = V^\pi(s)$
当 $b(s) = V^\pi(s)$ 时,$G_t - V^\pi(s_t)$ 的期望正是 advantage 函数!
5. Advantage Function 与 Actor-Critic
5.1 Advantage 的定义与直觉
\[A^\pi(s,a) = Q^\pi(s,a) - V^\pi(s)\]当使用 $V^\pi(s)$ 作为 baseline 时:
\[\mathbb{E}_\pi \left[ G_t - V^\pi(s_t) \mid s_t, a_t \right] = Q^\pi(s_t, a_t) - V^\pi(s_t) = A^\pi(s_t, a_t)\]因此,Policy Gradient with Advantage:
\[\nabla_\theta J(\theta) = \mathbb{E} \left[ \sum_t \nabla_\theta \log \pi_\theta(a_t|s_t) \cdot A^\pi(s_t, a_t) \right]\]Advantage $A(s,a)$ 的直觉:
- $V(s)$:在状态 $s$ 的”平均”表现
- $Q(s,a)$:在状态 $s$ 选择动作 $a$ 的表现
- $A(s,a) = Q(s,a) - V(s)$:动作 $a$ 比平均好多少
$A > 0$:这个动作好于平均,应该增加其概率 $A < 0$:这个动作差于平均,应该减少其概率
5.2 Advantage 的估计方法
-
Monte Carlo 估计:$\hat{A}_t^{\text{MC}} = G_t - \hat{V}(s_t)$(无偏但高方差)
-
TD 估计(1-step):$\hat{A}_t^{\text{TD}} = r_t + \gamma \hat{V}(s_{t+1}) - \hat{V}(s_t) = \delta_t$(低方差但有偏)
-
n-step 估计:介于两者之间
-
GAE:通过 $\lambda$ 参数灵活权衡偏差和方差
5.3 Actor-Critic 架构
为了估计 $\hat{V}(s)$,我们引入一个 Critic 网络。Actor-Critic 方法同时学习:
- Actor:策略网络 $\pi_\theta(a|s)$,输出动作分布
- Critic:价值网络 $\hat{V}_\phi(s)$,估计状态价值
A2C (Advantage Actor-Critic) 的核心更新规则:
Actor 更新(Policy Gradient with Advantage): \(\theta \leftarrow \theta + \alpha_\theta \sum_t \nabla_\theta \log \pi_\theta(a_t|s_t) \cdot \hat{A}_t\)
Critic 更新(Value Function Regression): \(\phi \leftarrow \phi - \alpha_\phi \nabla_\phi \sum_t \left( \hat{V}_\phi(s_t) - \text{target} \right)^2\)
为什么需要 Critic?
- 提供 $\hat{V}(s)$ 来计算 advantage $\hat{A}_t$
- 比纯 MC(使用 $G_t$)方差更小
- 可每步更新,不用等 episode 结束
6. Generalized Advantage Estimation (GAE)
GAE 提供了一种在偏差和方差之间灵活权衡的 advantage 估计方法,是现代 Policy Gradient 算法(如 PPO)的核心组件。
6.1 从 n-step Advantage 到 GAE
回顾 n-step advantage 估计:
\[\hat{A}_t^{(n)} = \sum_{k=0}^{n-1} \gamma^k r_{t+k} + \gamma^n \hat{V}(s_{t+n}) - \hat{V}(s_t)\]- $n=1$:TD advantage,$\hat{A}_t^{(1)} = \delta_t$(低方差,高偏差)
- $n=\infty$:MC advantage,$\hat{A}_t^{(\infty)} = G_t - \hat{V}(s_t)$(高方差,低偏差)
自然的问题:能否组合不同 $n$ 的估计,取得更好的权衡?
答案是 GAE——通过对所有 n-step advantage 进行指数加权平均,用一个参数 $\lambda$ 灵活控制偏差-方差的平衡点。
6.2 GAE 的定义
定义 (Generalized Advantage Estimation):
\[\hat{A}_t^{\text{GAE}(\gamma, \lambda)} = \sum_{l=0}^{\infty} (\gamma \lambda)^l \delta_{t+l}\]其中 $\delta_t = r_t + \gamma \hat{V}(s_{t+1}) - \hat{V}(s_t)$ 是 TD 残差,$\lambda \in [0,1]$ 是衰减参数。
定理:GAE 等价于 n-step Advantage 的加权和:
\[\hat{A}_t^{\text{GAE}} = (1-\lambda) \sum_{n=1}^{\infty} \lambda^{n-1} \hat{A}_t^{(n)}\]6.3 $\lambda$ 参数的偏差-方差权衡
| $\lambda$ 值 | 等价形式 | 偏差 | 方差 |
|---|---|---|---|
| $\lambda = 0$ | $\delta_t$(TD) | 高(依赖 $\hat{V}$) | 低 |
| $\lambda = 1$ | $G_t - \hat{V}(s_t)$(MC) | 低 | 高 |
| $\lambda \in (0,1)$ | 加权平均 | 中等 | 中等 |
实践中,$\lambda = 0.95$ 或 $\lambda = 0.97$ 是常用的选择。
GAE 的直觉理解:
- $\delta_t$ 是”一步后用 Critic 估计剩余价值”的 advantage
- GAE 把多步 $\delta$ 加权求和,$(\gamma\lambda)^l$ 让远处的 $\delta$ 权重指数衰减
- $\lambda$ 越小,越依赖 Critic 估计(偏差大但方差小)
- $\lambda$ 越大,越依赖实际回报(偏差小但方差大)
6.4 GAE 的实际计算
GAE 可以通过递推高效计算:
\[\hat{A}_t^{\text{GAE}} = \delta_t + \gamma\lambda \hat{A}_{t+1}^{\text{GAE}}\]边界条件:$\hat{A}_T^{\text{GAE}} = 0$。从后往前计算,复杂度为 $O(T)$。
7. 重要性采样与 Off-Policy Policy Gradient
7.1 On-Policy 的问题
Policy Gradient 是 on-policy 的:每次更新 $\theta$ 后,旧数据的分布就与新策略不同了。这导致:
- 数据只能用一次,样本效率低
- 每次更新都需要重新采样
重要性采样(Importance Sampling, IS)允许我们复用旧数据。
7.2 重要性采样原理
用分布 $q(x)$ 的样本估计 $p(x)$ 下的期望:
\[\mathbb{E}_{x \sim p}[f(x)] = \mathbb{E}_{x \sim q}\left[ \frac{p(x)}{q(x)} f(x) \right]\]其中 $\rho(x) = \frac{p(x)}{q(x)}$ 称为重要性权重。
应用到 Policy Gradient,单步的重要性权重:
\[\rho_t(\theta) = \frac{\pi_\theta(a_t|s_t)}{\pi_{\text{old}}(a_t|s_t)}\]Off-policy Policy Gradient:
\[\nabla_\theta J(\theta) = \mathbb{E}_{(s,a) \sim \pi_{\text{old}}} \left[ \rho_t(\theta) \nabla_\theta \log \pi_\theta(a_t|s_t) \hat{A}_t \right]\]7.3 严格的 Off-Policy 梯度与状态分布修正
上面的公式省略了一个重要细节。严格的 off-policy policy gradient 不仅需要修正动作概率,还需要修正状态分布:
\[\nabla_\theta J(\theta) = \mathbb{E}_{s \sim d_{\pi_{\text{old}}}} \left[ \frac{d_{\pi_\theta}(s)}{d_{\pi_{\text{old}}}(s)} \cdot \mathbb{E}_{a \sim \pi_{\text{old}}(\cdot\|s)} \left[ \rho_t(\theta) \nabla_\theta \log \pi_\theta(a\|s) \hat{A}(s,a) \right] \right]\]其中 $d_\pi(s)$ 是策略 $\pi$ 诱导的状态分布(也称为 discounted state visitation distribution)。
为什么需要状态分布修正?
直观理解:用旧策略 $\pi_{\text{old}}$ 采样时,不仅动作的分布变了,连访问到的状态分布也变了。例如:
- 新策略可能更倾向于进入某些状态
- 旧数据中这些状态的样本可能较少
因此严格的 off-policy 梯度需要同时修正这两个偏差。
PPO/TRPO 的隐式近似
然而,计算状态分布比 $\frac{d_{\pi_\theta}(s)}{d_{\pi_{\text{old}}}(s)}$ 非常困难——它依赖于整条轨迹的累积效应,无法像动作概率那样直接计算。
PPO/TRPO 的 surrogate objective 实际上做了一个关键近似:
\[\frac{d_{\pi_\theta}(s)}{d_{\pi_{\text{old}}}(s)} \approx 1\]即假设新旧策略诱导的状态分布相同。这个近似在什么条件下合理?
Trust Region 的作用:当 $\pi_\theta$ 与 $\pi_{\text{old}}$ 足够接近时(KL 散度小),状态分布的差异也会很小。TRPO 的 KL 约束和 PPO 的 clip 机制正是为了保证这一点。
总结:PPO/TRPO 使用的 surrogate objective
\[L(\theta) = \mathbb{E}_{(s,a) \sim \pi_{\text{old}}} \left[ \rho_t(\theta) \hat{A}_t \right]\]实际上隐式地做了两件事:
- 用 $\rho_t = \frac{\pi_\theta(a|s)}{\pi_{\text{old}}(a|s)}$ 修正动作概率偏差
- 假设 $\frac{d_{\pi_\theta}(s)}{d_{\pi_{\text{old}}}(s)} \approx 1$,忽略状态分布偏差
这解释了为什么 PPO/TRPO 能直接使用 token-level 的 $\rho_t$ 而不需要额外的状态分布修正——前提是 trust region 约束成立。
7.4 方差问题
当 $\rho_t$ 偏离 1 太多时,方差会急剧增大。需要限制策略更新幅度,保持 $\rho_t \approx 1$。
8. Trust Region 方法:TRPO 与 PPO
8.1 动机:限制策略更新幅度
重要性采样允许复用旧数据,但如果 $\pi_\theta$ 与 $\pi_{\text{old}}$ 差异太大,估计就不可靠。Trust Region 方法通过限制策略更新幅度来解决这个问题。
核心思想:每次更新只在”信任区域”内进行,保证新策略与旧策略足够接近。
8.2 TRPO:KL 约束优化
TRPO 通过 KL 散度约束限制策略更新:
\[\begin{aligned} \max_\theta \quad & L(\theta) = \mathbb{E}_{(s,a) \sim \pi_{\text{old}}} \left[ \rho_t(\theta) \hat{A}_t \right] \\ \text{s.t.} \quad & \bar{D}_{\text{KL}}(\pi_{\text{old}} \| \pi_\theta) \leq \delta \end{aligned}\]TRPO 理论上保证单调改进,但需要计算 KL 散度的 Hessian,实现复杂。
8.3 PPO:简化的 Trust Region
PPO 通过更简单的方式近似 TRPO 的效果。
PPO-Clip 目标:
\[L^{\text{CLIP}}(\theta) = \mathbb{E} \left[ \min \left( \rho_t \hat{A}_t, \, \text{clip}(\rho_t, 1-\epsilon, 1+\epsilon) \hat{A}_t \right) \right]\]其中 $\text{clip}(x, a, b) = \max(a, \min(x, b))$,$\epsilon$ 通常取 0.1 或 0.2。
PPO-Clip 的直觉:
- 当 $\hat{A}_t > 0$(好动作):目标是增加概率,但当 $\rho_t > 1+\epsilon$ 时截断,防止过度增加
- 当 $\hat{A}_t < 0$(坏动作):目标是减少概率,但当 $\rho_t < 1-\epsilon$ 时截断,防止过度减少
PPO-KL(可选变体):
PPO 的另一个变体使用 KL 惩罚项而非 clip:
\[L^{\text{KL}}(\theta) = \mathbb{E} \left[ \rho_t \hat{A}_t \right] - \beta \cdot \text{KL}(\pi_{\text{old}} \| \pi_\theta)\]其中 $\beta$ 是自适应调整的系数:
- 如果 KL 太大,增大 $\beta$
- 如果 KL 太小,减小 $\beta$
实践中 PPO-Clip 更常用,因为它更简单且效果相当。
8.4 Entropy Bonus
为了鼓励探索,PPO 通常还会加入 entropy bonus:
\[L^{\text{total}}(\theta) = L^{\text{CLIP}}(\theta) + c_1 \cdot H(\pi_\theta)\]其中 $H(\pi_\theta) = -\mathbb{E}[\log \pi_\theta(a|s)]$ 是策略的熵,$c_1$ 是权重系数(通常 0.01)。
Entropy bonus 的作用:
- 鼓励策略保持一定的随机性,避免过早收敛到确定性策略
- 促进探索,防止陷入局部最优
- 熵越大,策略越”均匀”,对各动作的概率分布越平坦
8.5 PPO 完整算法
PPO 的成功原因:
- 简单高效:只需一阶优化,不需要计算 Hessian
- 样本效率:可多次复用同一批数据($K$ 次更新)
- 稳定性:clip 机制防止策略剧烈变化
- 鲁棒性:对超参数不敏感,适用于多种任务
PPO 是目前最常用的 Policy Gradient 算法,也是 RLHF 中的标准选择。
本章小结
核心内容:
- Policy Gradient 定理
- 给出了目标函数梯度的解析形式:$\nabla_\theta J = \mathbb{E}[\sum_t \nabla \log \pi \cdot G_t]$
- Log-Derivative Trick 是推导的关键
- 环境动力学与 $\theta$ 无关,实现了 Model-Free
- 方差降低技术
- Baseline 技巧:减去 $b(s)$ 不改变期望但降低方差
- 最优 baseline 是 $V^\pi(s)$
- 使用 Advantage $A = Q - V$ 替代 $G_t$
- Actor-Critic 架构
- Actor(策略网络)+ Critic(价值网络)
- Critic 提供 $\hat{V}(s)$ 来估计 advantage
- GAE
- $\hat{A}^{\text{GAE}} = \sum_l (\gamma\lambda)^l \delta_{t+l}$
- $\lambda$ 控制偏差-方差权衡
- Trust Region 方法
- 重要性采样允许复用旧数据,但需要限制策略变化
- TRPO:KL 约束优化,实现复杂
- PPO:clip 机制,简单高效,是实践中的首选
下一篇文章将介绍 Model-Based RL 与多智能体学习,包括 MCTS 和 AlphaGo/Zero。
Comments