Policy Gradient
沿期望回报对策略参数的梯度直接更新策略。
学习目标
- 用动作对数概率的导数提高好于预期行为的概率,而无需环境动力学可微。
- 独立复核“一个 Bernoulli logit 的策略上升更新”的输入、计算和解释。
- 更新的是 logit,概率变化由 sigmoid 决定。
为什么重要
用动作对数概率的导数提高好于预期行为的概率,而无需环境动力学可微。
学习前需要掌握
背景与问题
动作采样后环境可能返回一个离散胜负分数,无法直接对“赢了这局”做普通监督反向传播。策略梯度利用被采样动作的概率变化,把回报转换成策略参数方向,适用于不可微或未知动力学环境。
概念定义
策略梯度优化参数化策略的期望回报。score-function 形式将采样动作的对数概率梯度乘以回报或优势估计;环境转移不依赖策略参数时,推导中不需要对转移函数求导。严格目标还需对齐折扣占用分布或相应时间权重。
直观理解
一次动作比预期好,就增加在相似条件下选它的倾向;比预期差就减小。信号是相对好坏,不是“奖励为正就永远加概率”,因为一个得 2 分的动作可能低于 5 分的基线。
核心原理
对两动作 sigmoid 策略,选中动作 1 时 log 概率对 logit 的导数是 1−p;选中动作 0 时是 −p。方向来自概率参数化,而非直接把奖励加到概率上,否则容易破坏概率归一化。
只依赖状态的基线,其 score-function 期望贡献为零,因此可降低方差而不改变理想梯度。若基线依赖采样动作,或在 actor 更新中不恰当地穿过优势反向传播,需要额外修正,不能直接宣称无偏。
有限批次梯度很嘈杂,策略又会改变未来数据分布。记录熵、优势尺度与更新幅度比只看最后一批奖励更能诊断训练;局部改进方向也不构成全局最优保证。
数学表达
Policy Gradient
优势为正时提升所选动作概率。
变量含义
G_t从时刻 t 开始的折扣累计回报。R_{t+1}执行动作后收到的下一步奖励。γ折扣因子,通常位于 [0,1)。
计算步骤
- 1score 导数为 1−0.25=0.75。
- 2logit 增量为 0.1×2×0.75=0.15。
- 3将新 logit 经 sigmoid 得到约 0.279164。
代码对应位置
示例 1一个 Bernoulli logit 的策略上升更新:好于预期的动作 1 概率从 0.250000 提高到约 0.279164。
变量解释
| 变量 | 含义 |
|---|---|
G_t | 从时刻 t 开始的折扣累计回报。 |
R_{t+1} | 执行动作后收到的下一步奖励。 |
γ | 折扣因子,通常位于 [0,1)。 |
完整数值示例
一个 Bernoulli logit 的策略上升更新
已知条件
- 选动作 1 的概率 p=0.25,对应 logit 为 log(1/3)。
- 本次选中动作 1,优势为 2,学习率 0.1。
计算步骤
- score 导数为 1−0.25=0.75。
- logit 增量为 0.1×2×0.75=0.15。
- 将新 logit 经 sigmoid 得到约 0.279164。
计算结果
好于预期的动作 1 概率从 0.250000 提高到约 0.279164。
处理前后对比
- 更新的是 logit,概率变化由 sigmoid 决定。
- 单样本方向有噪声,不能保证一次更新后真实回报必涨。
计算与实现步骤
- 采样轨迹
- 估计 G 或 A
- 累加 logπ×A
- 梯度上升
代码实现
示例 1
一个 Bernoulli logit 的策略上升更新
example_01.py用途:好于预期的动作 1 概率从 0.250000 提高到约 0.279164。
import math
p, advantage, learning_rate = 0.25, 2.0, 0.1
logit = math.log(p / (1 - p))
logit += learning_rate * advantage * (1 - p)
new_p = 1 / (1 + math.exp(-logit))
print(f"old_probability={p:.6f}, new_probability={new_p:.6f}")代码解析
解析始终位于完整代码下方,并按实际代码段逐项对应。
输入数据与任务
好于预期的动作 1 概率从 0.250000 提高到约 0.279164。
Step 1 · 1–6 行
导入当前步骤需要的数值计算、预处理、模型或评价工具。依赖集中写在代码开头,便于复现。
import math
p, advantage, learning_rate = 0.25, 2.0, 0.1
logit = math.log(p / (1 - p))
logit += learning_rate * advantage * (1 - p)
new_p = 1 / (1 + math.exp(-logit))
print(f"old_probability={p:.6f}, new_probability={new_p:.6f}")预期输出或运行结果
old_probability=0.250000, new_probability=0.279164
常见错误 · 3 条
- 直接将奖励加到概率,破坏参数与归一化关系。
- 让 actor 梯度任意穿过未分离的价值目标。
- 忽略折扣目标与采样时间权重的约定。
实际应用
- 序贯决策
- 控制与资源分配
常见错误
- 直接将奖励加到概率,破坏参数与归一化关系。
- 让 actor 梯度任意穿过未分离的价值目标。
- 忽略折扣目标与采样时间权重的约定。
扩展内容说明
本页数值均为解释机制的构造案例,不能解读为真实训练或基准性能。定义和适用条件参见 Sutton 与 Barto《Reinforcement Learning: An Introduction》(第 13 章)。
算法属性与数据边界
失败模式、风险与性能
失败模式
- 直接将奖励加到概率,破坏参数与归一化关系。
- 让 actor 梯度任意穿过未分离的价值目标。
- 忽略折扣目标与采样时间权重的约定。
风险
- 奖励函数与真实目标不一致会诱发奖励黑客。
- 部署策略的行动权限必须由环境和应用层约束。
性能考虑
- 样本效率、墙钟时间和显存占用需要分别报告。
- 应使用多个随机种子、置信区间和固定评测策略。
常见问题
环境不可微还能算梯度吗?
可以对策略动作概率求 score-function 梯度,不要求对环境本身求导;但需要从策略分布采样,并使用正确回报与数据权重。
网页是否会训练模型?
不会。所有图表使用固定种子或解析公式在浏览器本地计算,不执行页面中的示例代码。
推荐学习资料
Spinning Up in Deep RL
从术语、数学背景和算法分类进入 VPG、TRPO、PPO、DDPG、TD3 与 SAC。
OpenAI · OpenAI
资料笔记
Hugging Face Deep Reinforcement Learning Course
从 Q-Learning、DQN、Policy Gradient 和 Actor-Critic 逐步进入 PPO 与多智能体。
Hugging Face · Hugging Face
资料笔记
David Silver Reinforcement Learning Course
沿 MDP、动态规划、价值函数、TD、策略梯度和函数近似讲解经典强化学习。
David Silver · Google DeepMind / YouTube