直接优化策略:策略梯度、Actor-Critic、Advantage 与重要性采样

📅 发布时间:2026/7/31 16:58:00
直接优化策略:策略梯度、Actor-Critic、Advantage 与重要性采样
值函数方法的基本套路是先学 或再根据它们诱导出策略。而策略梯度方法走的是另一条路直接把策略写成带参数的可导函数然后直接优化它。这在连续动作、复杂策略结构以及需要随机策略的场景里尤其重要。适合读者已经理解 DQN但还不清楚 policy gradient、Actor-Critic、baseline / advantage 与 off-policy 校正如何连起来的人。预计阅读10 分钟。关键词策略梯度、Actor-Critic、优势函数、重要性采样。值函数方法的基本套路是先学V或Q再根据它们诱导出策略。而策略梯度方法走的是另一条路直接把策略写成带参数的可导函数然后直接优化它。这在连续动作、复杂策略结构以及需要随机策略的场景里尤其重要。1. 策略梯度直接优化动作概率设参数化策略为强化学习目标则写成也就是策略诱导的轨迹其期望回报要尽可能大。策略梯度定理给出一个极为关键的公式图 1 的直觉可以概括成一句话如果某个动作带来的回报更高就提高它在该状态下的概率如果某个动作效果更差就降低它的概率。其中提供“怎样改概率”的方向而提供“这个动作值不值得鼓励”的信号。2. Actor-Critic让 Critic 为 Actor 提供学习信号策略梯度公式里虽然写着但这个量通常并不好直接得到。一个自然办法是再训练一个价值估计器来帮助策略学习。这就得到 Actor-Critic。Actor负责根据状态选择动作更新策略参数Critic负责估计价值函数评价当前行为好不好。在最常见的 TD 型 Actor-Critic 里Critic 会计算 TD 误差然后Critic 用它来更新自己的价值估计Actor 则把它当作优势信号更新策略所以Actor-Critic 的精髓就在于一个负责做决策一个负责打分TD error 把二者连接成闭环。3. Baseline 与 Advantage只看“相对好坏”直接用回报或动作价值做策略梯度往往方差较大。一个常见技巧是减去 baseline只要b(S)只依赖状态、不依赖动作它不会改变策略梯度的期望方向但通常能显著降低方差。最常用的 baseline 就是状态价值函数于是得到优势函数图 3 说明了 advantage 的核心直觉不要只看动作本身好不好而要看它是否“比这个状态下的平均水平更好”。这样一来学习信号会更加聚焦于“相对优势”噪声通常更小。在 A2C 一类方法里优势函数常用一步 TD 误差近似这也是为什么 TD error 在 Actor-Critic 里如此核心它既能更新价值又能充当策略更新的 advantage 近似。4. on-policy 与 off-policy数据从哪里来真的很重要标准策略梯度大多是 on-policy 的也就是说更新策略时所用的数据要由当前策略自己采样得到。但在很多实际场景里我们又希望复用旧数据、日志数据或者由另一个行为策略产生的数据。此时就会面临一个分布不一致的问题数据来自行为策略我们真正想优化的是目标策略。如果直接拿这些数据更新会产生偏差。重要性采样就是用来做这个校正的。5. 重要性采样用权重纠正分布偏差重要性权重定义为它衡量的是在状态 st下当前样本动作在目标策略下相对行为策略有多“合理”。这张图可以这样理解如果和接近那么也接近 1如果某个样本动作在目标策略下更常见那么它的权重会更大如果它在目标策略下很罕见那么它的贡献会被压低。通过把样本贡献乘上我们就能在一定条件下用行为策略生成的数据去近似目标策略下的梯度。但重要性采样并不是“免费午餐”。它最大的副作用是方差可能会变大尤其当很大时更新会非常不稳定。因此实践中常会配合截断或裁剪权重更稳定的 surrogate objective像 V-trace、Retrace 这样的分布校正技巧。6. 把 day6 的主线串起来如果把本篇压缩成一条逻辑链那就是策略梯度告诉我们可以直接优化策略Actor-Critic告诉我们可以让 Critic 估计价值为 Actor 提供低方差学习信号baseline / advantage告诉我们学习时应尽量只保留“相对好坏”重要性采样告诉我们如果想复用行为策略的数据就必须对分布偏差做校正。你会发现这些方法虽然名字很多但围绕的始终还是同一个问题怎样稳定而高效地提升长期回报。到这里整套连载的主线也就基本闭环了前半部分用 Bellman 思想估计长期价值中间部分用 TD / Q-learning / DQN 学会控制后半部分则直接优化策略并让 Critic 帮助策略学习。以后再读强化学习论文时可以先问三个问题它优化的是价值还是直接优化策略学习信号来自完整回报、TD target还是 advantage数据是 on-policy 还是 off-policy如果是后者如何做分布校正很多看起来复杂的方法往往都能被这三问很快定位。