PPO算法解析

前言

PPO(Proximal Policy Optimization)目前是强化学习(RL)领域的state-of-the-art算法,适用于连续空间和离散动作空间。与DQN(Deep Q-Network)相比,PPO通过限制策略更新的幅度,使得学习过程更加平滑。

PPO是对TRPO(Trust Region Policy Optimization)算法的改进,因此我们先来了解一下TRPO。

TRPO

首先明确这是Actor-critic method,存在两个神经网络:

  • 第一个是policy策略网络,接受状态state输出动作action的概率分布,计作:πθ(a|s)
  • 第二个是value价值网络,从状态 s 开始并按照策略 π \pi π 采取所有后续行动所期望的总回报,计作:Vπ(s)

目标

maximize θ E π θ old [ π θ ( a ∣ s ) π θ old ( a ∣ s ) A π θ old ( s , a ) ] \text{maximize}{\theta} \quad \mathbb{E}{\pi_{\theta_{\text{old}}}} \left[ \frac{\pi_{\theta}(a|s)}{\pi_{\theta_{\text{old}}}(a|s)} A^{\pi_{\theta_{\text{old}}}}(s, a) \right] maximizeθEπθold[πθold(as)πθ(as)Aπθold(s,a)]
同时满足约束:
D KL ( π θ old ∥ π θ ) ≤ δ D_{\text{KL}}(\pi_{\theta_{\text{old}}} \| \pi_{\theta}) \leq \delta DKL(πθoldπθ)δ
其中:
θ \theta θ 是策略的参数。
π θ \pi_{\theta} πθ是参数为 θ \theta θ 的策略。
θ old \theta_{\text{old}} θold 是上次更新的策略参数。
A π θ old ( s , a ) A^{\pi_{\theta_{\text{old}}}}(s, a) Aπθold(s,a) 是在旧策略 π θ old \pi_{\theta_{\text{old}}} πθold 下的优势函数

优势函数

A π ( s , a ) = Q π ( s , a ) − V π ( s ) A^{\pi}(s, a) = Q^{\pi}(s, a) - V^{\pi}(s) Aπ(s,a)=Qπ(s,a)Vπ(s)
已知条件 s s s,可由policy网络得到 a a a
Q π ( s , a Q^{\pi}(s, a Qπ(s,a): 在策略 π \pi π 下,从状态 s 开始执行动作 a 并继续按照策略 π \pi π 采取后续行动所期望的总回报。
V π ( s ) V^{\pi}(s) Vπ(s): 在策略 π \pi π下,从状态 s 开始并按照策略 π \pi π 采取所有后续行动所期望的总回报。
解释:
Q π ( s , a ) Q^{\pi}(s, a) Qπ(s,a) 表示在状态 s 下选择动作 a 后,未来所有可能得到的回报的期望值。
V π ( s ) V^{\pi}(s) Vπ(s) 表示在状态 s 下不考虑任何特定动作的情况下,期望的回报值(即平均行为的回报值)。
所以优势函数 A ( s , a ) A(s, a) A(s,a) 反映了选择特定动作 a 相对于平均策略所带来的增益

动作价值函数 Q π ( s , a ) Q^{\pi}(s, a) Qπ(s,a) 的计算

Q π ( s , a ) = r ( s , a ) + γ E s ′ ∼ P ( ⋅ ∣ s , a ) [ V ( s ′ ) ] Q^{\pi}(s, a) = r(s, a) + \gamma \mathbb{E}_{s{\prime} \sim P(\cdot|s, a)}[V(s{\prime})] Qπ(s,a)=r(s,a)+γEsP(s,a)[V(s)]

  • r ( s , a ) r(s,a) r(s,a)表示即时奖励,通过自己定义的reward_shaping函数得到
  • 𝛾是折扣因子,0~1,用于折扣未来的回报,表示未来回报的重要性随时间衰减。
  • E s ′ ∼ P ( ⋅ ∣ s , a ) [ V ( s ′ ) ] \mathbb{E}_{s{\prime} \sim P(\cdot | s, a)}[V(s{\prime})] EsP(s,a)[V(s)], 整体表示期望,下标表示 s ′ s' s满足一个概率分布,称为转移概率 P ( s ′ ∣ s , a ) P(s{\prime}|s, a) P(ss,a) ,这个概率分布是在 s , a s,a s,a的条件下 s ′ s' s的概率分布,该过程不通过显示的计算,而是智能体通过与环境交互采样得到的结果(说实话这里我有点模糊)
  • [ V ( s ′ ) ] [V(s{\prime})] [V(s)]
    1. 在计算 Q(s, a) 或进行策略评估时,虽然我们知道 s ′ s{\prime} s 是按照某个分布生成的,但在使用 value network 时,通常是通过采样的方法来处理。例如,我们可以从 P ( s ′ ∣ s , a ) P(s{\prime}|s, a) P(ss,a) 分布中采样一个具体的 s ′ s{\prime} s ,然后将这个采样到的状态 s ′ s{\prime} s 作为输入传递给 value network,计算 V ( s ′ ) V(s{\prime}) V(s)
    2. 如果想得到更精确的期望值,可以进行多次采样,然后对这些样本的 value 进行平均。

公式就是这么多🙂‍↕️

PPO

目标函数:
minmize L P P O ( θ ) = E t [ min ⁡ ( r t ( θ ) A t , clip ( r t ( θ ) , 1 − ϵ , 1 + ϵ ) A t ) ] \text{minmize}\quad L^{PPO}(\theta) = \mathbb{E}_{t} \left[ \min\left( r_t(\theta) A_t, \text{clip}(r_t(\theta), 1 - \epsilon, 1 + \epsilon) A_t \right) \right] minmizeLPPO(θ)=Et[min(rt(θ)At,clip(rt(θ),1ϵ,1+ϵ)At)]
r t ( θ ) = π θ ( a t ∣ s t ) π θ old ( a t ∣ s t ) r_t(\theta) = \frac{\pi_\theta(a_t | s_t)}{\pi_{\theta_{\text{old}}}(a_t | s_t)} rt(θ)=πθold(atst)πθ(atst)
就相当于原来使用了KL散度去限制了更新的幅度,现在使用了 ϵ \epsilon ϵ来简单的限制,如果概率比 r t ( θ ) r_t(\theta) rt(θ) 超出了 [ 1 − ϵ , 1 + ϵ ] [1 - \epsilon, 1 + \epsilon] [1ϵ,1+ϵ] 的范围,目标函数就会被“剪切”,以防止策略更新过大。这样就解决了TRPO无法高效使用神经网络的问题,
⚠️注意:
当 ratio < 1 - ϵ \epsilon ϵ 时:

•	这意味着新策略的概率比旧策略小得多(远小于 1),即在这些状态下,新策略选择的动作的概率大幅降低。
•	这里的 adv[indices] 表示的是在这些状态下采取的动作相对于平均策略的优势。如果 adv 是正值,意味着这个动作是有利的;如果是负值,意味着这个动作是不利的。

为什么选择 ratio 而不是 1 - ϵ \epsilon ϵ

•	当 adv > 0 时:
	如果 ratio 已经非常小(小于 1 - \epsilon),意味着新策略极大地降低了选择这些动作的概率。
	选择 ratio 可以反映出这种概率降低的实际效果,PPO 将通过这种方式惩罚新策略,因为新策略过分偏离了旧策略的选择。
•	当 adv < 0 时:
	如果 ratio 小于 1 - \epsilon,这说明新策略减少了选择不利动作的概率,这其实是有利的(因为减少了对不利动作的依赖)。
	在这种情况下,选择 1 - \epsilon 作为更新值反而可能会抑制这个有利的改变。为了避免这种情况,PPO 会选择 ratio,允许新策略继续减少对这些不利动作的选择。

PPO 的设计哲学

PPO 通过 torch.min(surr1, surr2) 的设计,确保:

•	当新策略偏离旧策略过远时,裁剪操作(torch.clamp)会限制更新的幅度,避免过度更新。
•	当新策略对不利动作进行大幅调整时,允许这些调整直接反映在损失函数中,以便更快地改善策略。

最终,PPO 选择 ratio 是为了忠实地反映新策略相对于旧策略的真实变动,而裁剪操作只是作为一种保障机制,防止极端的策略更新。

  • 12
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值