问题与目标
策略梯度直接提高高回报动作的概率,但采样噪声大,一次过强更新还可能破坏已有策略。本篇用双动作环境观察优势函数和 PPO 裁剪怎样限制更新幅度。
核心概念
REINFORCE 用采样回报加权 log π(a|s);加入状态价值 Baseline 后,权重变成优势 A = G - V(s),通常能降低方差。Actor-Critic 用 Actor 表示策略、Critic 估计价值。
PPO 比较新旧策略对已采样动作的概率比:
text
ratio = π_new(a|s) / π_old(a|s)
objective = min(ratio × A, clip(ratio, 1-ε, 1+ε) × A)
裁剪限制目标函数从过大策略变化中获益,但不等于绝对保证更新距离。
可运行实现
python
def ppo_term(old_probability: float, new_probability: float,
advantage: float, epsilon: float = 0.2) -> dict:
ratio = new_probability / old_probability
clipped = min(max(ratio, 1 - epsilon), 1 + epsilon)
raw = ratio * advantage
clipped_value = clipped * advantage
return {
"ratio": round(ratio, 3),
"clipped_ratio": round(clipped, 3),
"objective": round(min(raw, clipped_value), 3),
}
samples = [
# 好动作的概率从 0.5 猛增到 0.9,收益被上限裁剪
(0.5, 0.9, 2.0),
# 坏动作的概率增加,负优势会产生惩罚
(0.5, 0.8, -1.0),
# 小幅更新保持原始目标
(0.5, 0.55, 2.0),
]
for sample in samples:
print(ppo_term(*sample))
这个程序验证 PPO 单样本目标,不是完整训练器。完整实验还需要采样批次、优势标准化、多轮 Mini-batch 更新、价值 Loss、熵奖励和梯度裁剪。
在 CartPole 上评估时,使用与随机基线相同的 Seed 集合,分别画训练 Episode 回报和独立评估回报,避免只展示训练过程中最幸运的一局。
常见问题与排查
优势全部为正
检查价值估计、回报计算和标准化。错误的终止处理也会污染 Bootstrap 目标。
PPO Clip 后仍然崩溃
检查学习率、更新轮数、优势尺度、价值 Loss 和 KL。Clip 不是无需调参的稳定性保证。
训练回报提高,评估回报不提高
区分采样策略与确定性评估策略,固定评估环境,并检查是否过拟合少量 Seed。
把 Actor-Critic 和 PPO 当互斥方法
PPO 通常本身使用 Actor 与 Critic。Actor-Critic 是架构思想,PPO 是限制策略更新的一类算法。
小结
策略梯度告诉策略朝哪个方向更新,Critic 提供降低方差的价值基线,PPO 用概率比裁剪控制更新幅度。三者是递进关系,不是孤立名词。
License: CC BY-NC 4.0
Updated 2 hours ago
Was this article helpful? Give it a like.
0 comments


