引言

PPO(Proximal Policy Optimization,近端策略优化)算法是一种在强化学习中广泛应用的优化方法,其核心思想是通过限制策略更新的幅度来提高训练的稳定性和效率。本文将详细探讨 PPO 算法的优化策略及其在不同应用场景中的表现。
在这里插入图片描述

一、PPO 算法的核心机制

1. 剪辑代理目标函数

剪辑代理目标函数 是 PPO 算法中的一项关键技术,旨在限制策略更新的幅度,从而提高训练的稳定性和可靠性。具体来说,PPO 使用一个剪辑函数来限制新旧策略比率(即概率比),确保其在一定范围内(例如 [ 1 − ϵ , 1 + ϵ ] ) [1-\epsilon, 1+\epsilon]) [1ϵ,1+ϵ]),从而防止策略更新幅度过大或过小。
PPO算法

具体实现

剪辑代理目标函数 ( L C L I P ( θ ) ) ( L_{CLIP}(\theta) ) (LCLIP(θ)) 定义为:
L C L I P ( θ ) = E s [ min ⁡ ( r t ( θ ) A t , clip ( r t ( θ ) , 1 − ϵ , 1 + ϵ ) A t ) ] L_{CLIP}(\theta) = E_s \left[\min\left(r_t(\theta) A_t, \text{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon) A_t\right)\right] LCLIP(θ)=Es[min(rt(θ)At,clip(rt(θ),1ϵ,1+ϵ)At)]
其中:

  • ( r t ( θ ) = π θ ( a t ∣ s t ) π θ o l d ( a t ∣ s t ) ) ( r_t(\theta) = \frac{\pi_\theta(a_t|s_t)} {\pi_{\theta_{old}}(a_t|s_t)} ) (rt(θ)=πθold(atst)πθ(atst)) 是新策略与旧策略之间的比率。
  • ( A t ) ( A_t ) (At) 是优势函数的估计值。
  • ( ϵ ) ( \epsilon ) (ϵ) 是一个超参数,用于控制剪辑的幅度,通常取值在 0.1 到 0.2 之间。
效果评估

通过限制策略更新的幅度,PPO 算法能够更稳定地进行训练,避免了过大的策略更新导致的性能下降。此外,多周期梯度上升的方法使得 PPO 能够在每个训练迭代中从数据中榨取更多价值,减少了样本效率的损失。

2. 重要性采样

重要性采样 是 PPO 算法中用于解决行为策略与目标策略之间差异问题的关键技术。这种方法允许算法在不同策略之间进行平滑过渡,确保训练数据的有效利用。具体来说,PPO 通过比较当前策略下动作的概率与旧策略下动作的概率,避免了因当前策略下动作概率过高而导致的梯度步长过大问题。
Proximal Policy Optimization(PPO)算法原理

公式表示

重要性采样的权重 ( ρ t ) ( \rho_t) (ρt)定义为:
ρ t = π θ ( a t ∣ s t ) π θ o l d ( a t ∣ s t ) \rho_t = \frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_{old}}(a_t|s_t)} ρt=πθold(atst)πθ(atst)

3. KL 散度惩罚

为了进一步提高训练的稳定性,PPO 引入了 KL 散度惩罚项,通过自适应调整惩罚系数来控制新旧策略之间的差异。这种方法可以有效避免策略更新幅度过大,从而提高算法的鲁棒性。
Proximal Policy Optimization (PPO) 算法理解:从策略梯度开始 | AI技术聚合

公式表示

KL 散度 D K L ( π θ o l d ∥ π θ ) D_{KL}(\pi_{\theta_{old}} \| \pi_\theta) DKL(πθoldπθ) 表示为:
D K L ( π θ o l d ∥ π θ ) = E s [ ∑ a π θ o l d ( a ∣ s ) log ⁡ π θ o l d ( a ∣ s ) π θ ( a ∣ s ) ] D_{KL}(\pi_{\theta_{old}} \| \pi_\theta) = E_s \left[\sum_a \pi_{\theta_{old}}(a|s) \log \frac{\pi_{\theta_{old}}(a|s)}{\pi_\theta(a|s)}\right] DKL(πθoldπθ)=Es[aπθold(as)logπθ(as)πθold(as)]

4. 广义优势估计(GAE)

PPO 算法使用 广义优势估计(GAE) 来计算优势函数,这有助于更准确地评估每个状态-动作对的价值,从而提高策略优化的效果。GAE 通过引入衰减因子 ( λ ) ( \lambda) (λ),在单步 TD 误差和多步 TD 误差之间取得平衡,减少了方差并提高了估计的稳定性。
OpenAI默认算法-PPO:近端策略优化算法

公式表示

广义优势估计 A ^ t λ \hat{A}_t^{\lambda} A^tλ表示为:
A ^ t λ = ∑ l = 0 T − t − 1 ( γ λ ) l δ t + l \hat{A}_t^{\lambda} = \sum_{l=0}^{T-t-1} (\gamma \lambda)^l \delta_{t+l} A^tλ=l=0Tt1(γλ)lδt+l
其中:

  • δ t = r t + γ V ( s t + 1 ) − V ( s t ) \delta_t = r_t + \gamma V(s_{t+1}) - V(s_t) δt=rt+γV(st+1)V(st) 是时序差分误差。
  • γ \gamma γ是折扣因子。
  • λ \lambda λ 是 GAE 的权衡参数,通常设置为接近 1 的值。

5. 熵项

为了鼓励探索行为,PPO 在目标函数中加入了 熵项,以保证策略的多样性。这有助于防止算法陷入局部最优解,并提高其在复杂环境中的表现。
Proximal Policy Optimization(PPO)算法原理

公式表示

熵项 H ( π ) H(\pi) H(π) 表示为:
H ( π ) = − E s [ ∑ a π θ ( a ∣ s ) log ⁡ π θ ( a ∣ s ) ] H(\pi) = -E_s \left[\sum_a \pi_\theta(a|s) \log \pi_\theta(a|s)\right] H(π)=Es[aπθ(as)logπθ(as)]

6. 自适应学习率

PPO 算法通过设定 KL 值的阈值来动态调整学习率。当 KL 值超过阈值时,增加学习率以加速收敛;反之,减少学习率以避免过度优化。这种机制提高了训练效率和稳定性。
强化学习15——Proximal Policy

实现代码示例
import torch
import torch.nn.functional as F
from torch.distributions import Categorical

def ppo_loss(old_log_probs, advantages, new_log_probs, entropy, clip_param):
    ratio = (new_log_probs - old_log_probs).exp()
    surr1 = ratio * advantages
    surr2 = torch.clamp(ratio, 1.0 - clip_param, 1.0 + clip_param) * advantages
    actor_loss = -torch.min(surr1, surr2).mean()
    critic_loss = F.mse_loss(new_value, returns)
    entropy_loss = -entropy.mean()
    
    total_loss = actor_loss + 0.5 * critic_loss - 0.01 * entropy_loss
    
    return total_loss

7. 多周期梯度上升

PPO 算法允许在每个训练迭代中运行多个随机梯度上升周期(K个周期),以逐步优化策略,从而减少样本效率的损失并提高训练的稳定性。这种多周期梯度上升的方法使得 PPO 能够充分利用每一批数据的价值,提高训练效果。

公式表示

每次训练迭代中执行 K 次梯度上升:
θ ← θ + α ∇ θ J ( θ ) \theta \leftarrow \theta + \alpha \nabla_\theta J(\theta) θθ+αθJ(θ)
其中 α \alpha α 是学习率, J ( θ ) J(\theta) J(θ) 是目标函数。

二、PPO 算法的应用场景

1. 单智能体任务

PPO 算法广泛应用于自然语言处理(NLP)、游戏 AI 和机器人控制等领域。例如,在 InstructGPT 中,PPO 通过人类反馈优化文本生成质量,减少偏见内容和有毒输出。

2. 多智能体任务

PPO 算法可以迁移到多智能体强化学习(MARL)中,如 IPPO 和 MAPPO,通过并行处理提高训练效率和样本利用率。应用案例包括:

  • 粒子世界环境:PPO 算法在多智能体系统中展现出惊人的性能。
  • StarCraft 多智能体挑战赛:有效协调各个智能体的行动,实现团队目标。
  • Google Research 足球:通过中心化的 Critic 和去中心化的 Actor 结构,实现了高效的协同训练。
  • Hanabi 挑战赛:展示了强大的协作能力。
  • 无关平行机调度:通过经验共享和中心化-分布式训练,提高了样本效率和学习效果。

三、改进版本

PPO 算法有多个改进版本,如 PPO-PenaltyPPO-Clip,分别通过拉格朗日乘数法和剪辑方法来优化策略更新过程,进一步提升算法性能。

PPO-Penalty 示例代码

def ppo_penalty_loss(old_log_probs, advantages, new_log_probs, kl_divergence, penalty_coefficient):
    ratio = (new_log_probs - old_log_probs).exp()
    surr1 = ratio * advantages
    surr2 = torch.clamp(ratio, 1.0 - clip_param, 1.0 + clip_param) * advantages
    actor_loss = -torch.min(surr1, surr2).mean()
    penalty_term = penalty_coefficient * kl_divergence.mean()
    
    total_loss = actor_loss + penalty_term
    
    return total_loss

四、结论

PPO 算法通过多种技术手段实现了在强化学习中的高效和稳定策略优化,适用于各种复杂任务和环境。这些优化策略不仅提高了数据利用效率,还增强了算法的鲁棒性和泛化能力。未来,随着更多创新技术的引入,PPO 算法有望继续推动强化学习领域的进步和发展。


参考文献

[1] “Proximal Policy Optimization Algorithms,” Schulman et al.
[2] “InstructGPT: Training Language Models to Follow Instructions with Human Feedback,” OpenAI Blog
[3] “TruthfulQA: Measuring How Models Mimic Human Factual Responses,” Lin et al.
[4] “RealToxicityPrompts: Evaluating Neural Toxic Degeneration in Language Models,” Gururangan et al.


未觉池塘春草梦,阶前梧叶已秋声。

在这里插入图片描述
学习是通往智慧高峰的阶梯,努力是成功的基石。
我在求知路上不懈探索,将点滴感悟与收获都记在博客里。
要是我的博客能触动您,盼您 点个赞、留个言,再关注一下。
您的支持是我前进的动力,愿您的点赞为您带来好运,愿您生活常暖、快乐常伴!
希望您常来看看,我是 秋声,与您一同成长。
秋声敬上,期待再会!

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐