PPO(Proximal Policy Optimization)是一种广泛使用的强化学习算法,它通过优化策略来训练智能体,旨在提升训练过程的稳定性和效率。
PPO 的核心思想是通过在优化过程中限制策略更新的幅度,以避免策略更新过大导致训练不稳定。这是通过引入一个“目标函数”来实现的,该函数对策略的更新施加约束,使得新的策略与旧策略之间的变化保持在一个较小的范围内。具体而言,PPO 使用了一个剪切目标(clipped objective)和一个保守策略迭代(CPI)的框架,从而在训练过程中平衡探索和稳定性。
PPO 的工作原理:
策略优化:PPO 是基于策略梯度的算法,目标是最大化预期的累积回报。它通过梯度下降来优化一个策略参数化模型(如神经网络)。
-
目标函数的设计:PPO 通过修改传统的目标函数,引入了“剪切”操作。这是为了防止策略更新过大,从而保证训练的稳定性。具体来说,它限制了新的策略和旧策略的概率比率变动过大。
- 剪切目标函数:目标函数在优化过程中,会限制策略更新的幅度,通常是通过对概率比(即新策略和旧策略的比率)进行裁剪,防止其偏离太远。
- 这样做的目的是让优化过程在不会导致大幅度策略更新的情况下仍然能够有效地提升智能体的表现。
优势估计:在 PPO 中,优势(Advantage)用于估计某个动作相对于平均表现的好坏。PPO 使用的是广泛应用的“广义优势估计”(GAE),来减少估计的方差并提高效率。
采样与更新:PPO 是一个基于“演员-评论员”(actor-critic)的算法。在每次迭代中,PPO 从环境中采样一批轨迹(状态、动作、奖励等),然后通过这些采样数据来计算损失函数并进行策略优化。
PPO 的优势:
- 高效性:PPO 是一种高效且易于实现的算法,它不需要复杂的二阶优化(如TRPO),并且可以在多种不同的任务中表现出色。
- 稳定性:通过约束策略更新的幅度,PPO 在保持较大步长的同时,确保了训练过程的稳定性。
- 通用性:PPO 可以处理连续和离散动作空间,适用于各种强化学习问题。
伪代码:
简化的 PPO 伪代码如下:
for iteration in range(total_iterations):
# 采样数据
trajectories = collect_trajectories()
# 计算优势估计和奖励
advantages = compute_advantages(trajectories)
# 计算当前策略的目标函数
for data in trajectories:
ratio = π_θ(a|s) / π_θ_old(a|s) # 概率比
clipped_ratio = clip(ratio, 1 - ε, 1 + ε) # 剪切操作
objective = min(ratio * advantage, clipped_ratio * advantage)
# 最大化目标函数
update_θ = optimize(objective)
# 更新旧策略
π_θ_old = π_θ
目标函数:
取了剪裁和未剪裁目标的最小值,也就是最终的目标是未剪裁目标的一个下界。

补充知识点:
- 策略梯度
策略梯度方法,是利用一个策略评估器,将策略放入一个随机梯度提升算法中,最常用的梯度估计器是:

πθ 是一个随机策略,Aˆ_t 是在时间步 t 上优势函数的估计值。这里,期望 ˆE_t[ . . . ] 表示在一个在采样和优化之间交替进行的算法中,对有限样本批次的经验平均值。
向上面这样,已经有了梯度估计器之后,通过这个公式就可以构造一个目标函数,目标函数的梯度就是这个策略梯度估计器,也就是说估计器 ˆg是 通过对 目标函数进行微分得到的(也就是求导)。得到下面的策略梯度公式(2)

-
概率比
假概率比记为rt(θ),公式如下:
probability ratio rt(θ) -
TRPO
TRPO最大化代理目标( “surrogate” objective),L_CPI(下面公式6),CPI指的是保守策略迭代(Conservative Policy Iteration)。在公式6中,没有约束项,最大化 L_CPI 会导致策略更新过大;因此,需要考虑如何修改目标,来惩罚那些使 rt(θ) 偏离 1 的策略变化。基于以上考虑提出了公式(7).
Conservative Policy Iteration -
KL惩罚有没有用
PPO论文中提出,KL惩罚虽然在多个实验中表现不如clip,但是KL却可以作为baseline用。
ppo compare other
值得注意的是,没有加惩罚和clip的目标函数,比随机初始化的效果还差!
- 上问公式截图全部来源于: Proximal Policy Optimization Algorithms


