0Pricing
Learn AI with Python · 课时

近端策略优化(PPO)

裁剪替代目标、GAE 优势估计,以及使用 stable-baselines3 实现 PPO。

近端策略优化(PPO) 是 CoddyKit 上的免费 Learn AI with Python 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Learn AI with Python 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Learn AI with Python 课程共包含 4 节课。

为什么选择 PPO

PPO 是如今默认的 RL 算法:稳定、样本效率高且易于调参。它通过限制每次更新时策略的变化幅度,解决了策略梯度的一个核心问题:更新幅度过大而破坏策略。

大幅更新的危险

一次过大的策略更新就可能导致性能崩溃,而且由于 RL 是同策略方法,恢复起来很困难。PPO 会让每次更新都保持接近当前策略,从而保证安全。

概率比率

PPO 会跟踪新旧动作概率的比率:ratio = pi_new(a|s) / pi_old(a|s)。比率接近 1 表示策略几乎没有变化;远离 1 则表示发生了较大改变。

ratio = torch.exp(new_log_prob - old_log_prob)

裁剪目标

PPO 的标志是裁剪代理目标。它将比率与优势相乘,但会将比率裁剪到 [1-eps, 1+eps],从而消除将策略移动得过远的动机。

clipped = torch.clamp(ratio, 1 - eps, 1 + eps)
objective = torch.min(ratio * adv, clipped * adv)
loss = -objective.mean()

裁剪阈值 ε

eps(通常为 0.2)是裁剪阈值。它限制比率偏离 1 的幅度,因此即使优势很大,策略更新仍会保持有界且稳定。

eps = 0.2  # allow at most +/-20% change in probability

为什么 min() 和裁剪有效

对裁剪目标和未裁剪目标取 min,会使这个界限变得更加保守:超出裁剪范围的改进不会带来额外奖励,因此优化器没有理由继续过冲。

广义优势估计

PPO 使用 GAE 估计优势,它通过参数 gamma 和 lambda 混合多步回报。GAE 在偏差与方差之间进行权衡,从而得到平滑且可靠的优势估计。

def gae(rewards, values, gamma=0.99, lam=0.95):
    adv, gae_acc = [], 0
    for t in reversed(range(len(rewards))):
        delta = rewards[t] + gamma * values[t+1] - values[t]
        gae_acc = delta + gamma * lam * gae_acc
        adv.insert(0, gae_acc)
    return adv

每个批次执行多轮优化

与 REINFORCE 不同,PPO 会对每批收集的数据执行多轮优化。裁剪机制使这种做法安全得多,从而显著提高样本效率。

for _ in range(n_epochs):
    # recompute ratio and clipped loss on the same batch
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

使用 Stable-Baselines3 实现 PPO

在实践中,您很少需要手动编写 PPO。Stable-Baselines3 提供了经过测试的实现。请使用策略类型、环境和详细程度创建它,然后调用 learn。

from stable_baselines3 import PPO

model = PPO("MlpPolicy", env, verbose=1)
model.learn(total_timesteps=100_000)

使用训练好的智能体

训练完成后,使用 predict 为新的观测获取动作。评估时将 deterministic=True,即可选择最可能的动作,而不是进行采样。

obs, _ = env.reset()
action, _ = model.predict(obs, deterministic=True)
model.save("ppo_agent")

PPO 为何占据主导地位

PPO 将稳定的裁剪更新、GAE 优势和数据复用结合起来,形成了一种稳健且通用的算法,只需极少调参就能适用于许多任务,因此从机器人技术到 RLHF 都在使用它。

快速检查

请测试您对 PPO 的理解。

回顾:PPO

您学会了 PPO 如何使用概率比率和裁剪阈值 eps 来限制更新的裁剪代理目标,如何使用 GAE 估计优势,以及如何在多个轮次中复用数据。您还了解了如何在 Stable-Baselines3 中使用 PPO("MlpPolicy", env, verbose=1) 轻松运行它。

常见问题解答

「近端策略优化(PPO)」课时是免费的吗?

是的 — 「近端策略优化(PPO)」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Learn AI with Python 课程的其余内容,请升级到 CoddyKit PRO。 Learn AI with Python 课程共包含 4 节课。

「近端策略优化(PPO)」这节课中我会学到什么?

裁剪替代目标、GAE 优势估计,以及使用 stable-baselines3 实现 PPO。 你通过在浏览器中直接运行的动手代码来练习 Learn AI with Python,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Learn AI with Python 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Learn AI with Python 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「近端策略优化(PPO)」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Learn AI with Python 课中编写并运行代码吗?

能。每节 Learn AI with Python 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 策略梯度方法:REINFORCE
  2. Actor-Critic 方法(A2C)
  3. 近端策略优化(PPO)
  4. 自定义 Gymnasium 环境
← 返回 Learn AI with Python