深度强化学习(DRL)算法 2 —— PPO 之 GAE 篇

在之前的文章里介绍了 深度强化学习(DRL)算法 2 ------ PPO 之 Clipped Surrogate Objective 篇 - 掘金 (juejin.cn),提出了现有方法存在方差较大的缺点,今天我们介绍一下如何使用 GAE(Generalized Advantage Estimation)进行改进。

回顾

上文提到的 Surrogate Objective

<math xmlns="http://www.w3.org/1998/Math/MathML"> R ˉ θ ≈ E τ ∼ q θ ′ ( τ ) [ p θ ( a t ∣ s t ) q θ ′ ( a t ∣ s t ) R ( τ ) ] \bar{R}{\theta} \approx E{\tau\sim q_{\theta'}(\tau)}[\frac{p_\theta(a_{t}|s_{t})}{q_\theta'(a_{t}|s_{t})}R(\tau)] </math>Rˉθ≈Eτ∼qθ′(τ)[qθ′(at∣st)pθ(at∣st)R(τ)]

我们的目标是使得这个期望回报最大。

算法描述

如果一次 rollout 的回报均值是 100,一次的是 90,我们就能说这两次 rollout 的效果都不错嘛?当然不能,如果理论上的最大期望回报是 1w,那么这两次 rollout 都有很大的提升空间,所以我们需要引入基准来做参考。

优势估计(AE)

如何引入基准呢?由深度强化学习(DRL)算法 附录1 ------ 贝尔曼公式 - 掘金 (juejin.cn),期望回报实际上就是 Q,每次 rollout 是对 Q 的一次采样,那么我们可以定义优势 A = Q - V(Advantage)。 由于现在的 Q 使用的 MC 方法表示,所以方差大,可以引入 bootstrap 的方法减小方差,如 TD,那么对 Advantage 的一次采样为:

<math xmlns="http://www.w3.org/1998/Math/MathML"> a d v a n t a g e = r + γ v ( s t + 1 ) − v ( s t ) advantage = r + γv(s_{t+1})- v(s_t) </math>advantage=r+γv(st+1)−v(st)

那么通过 PG 的方法,可以使得 advantage 大的 <math xmlns="http://www.w3.org/1998/Math/MathML"> p θ ( a t ∣ s t ) p_\theta(a_{t}|s_{t}) </math>pθ(at∣st) 增大,从而改进策略。但是注意这里 <math xmlns="http://www.w3.org/1998/Math/MathML"> p θ ( a t ∣ s t ) p_\theta(a_{t}|s_{t}) </math>pθ(at∣st) 使用的是神经网络,我们还需要一个神经网络来表示 v。所以 ppo 里有两个神经网络,一个扮演 actor 的角色决定 action,一个扮演 critic 的角色估计 v 值,来判定 actor 的好坏。 所以除了 Surrogate Objective 的 loss,我们还需要 critic 网络的 loss(使用最小二乘估计),直觉上我们希望模型的探索性得到提升,那么可以借助 actor 网络输出的交叉熵。 那么我么可以假设采样一次的 loss 是:pgloss - c1v_loss + c2 entropy_loss,为了让 loss 最大,我们需要提高 pgloss,减小 v_loss,增大 entropy_loss,满足我们希望 A 越大 <math xmlns="http://www.w3.org/1998/Math/MathML"> p θ ( a t ∣ s t ) p_\theta(a_{t}|s_{t}) </math>pθ(at∣st) 越大,使得 v 值越来越准确,模型的探索性得到提升的视觉,实际上如果把 AE 替换成 GAE,那么这就是 PPO 论文里的 Loss function: <math xmlns="http://www.w3.org/1998/Math/MathML"> L t C L I P + V F + S ( θ ) = E ^ t [ L t C L I P ( θ ) − c 1 L t V F ( θ ) + c 2 S [ π θ ] ( s t ) ] L_t^{C L I P+V F+S}(\theta)=\hat{\mathbb{E}}t\left[L_t^{C L I P}(\theta)-c_1 L_t^{V F}(\theta)+c_2 S\left[\pi\theta\right]\left(s_t\right)\right] </math>LtCLIP+VF+S(θ)=E^t[LtCLIP(θ)−c1LtVF(θ)+c2S[πθ](st)]

广义优势估计(GAE)

上面的 AE 算法采用 one-step TD 来描述 advantage,我们都知道 TD 算法虽然会减小方差,但是也增大了偏差,所以这就像两个极端,MC 方差最大,one-step TD 偏差最大,有没有一种方法,可以提供一种 trade-off,而且可以很方便的调节这种 trade-off 呢? 我们具体来看,用一些数学技巧: one-step advantage: <math xmlns="http://www.w3.org/1998/Math/MathML"> δ t = r t + γ v ( s t + 1 ) − v ( s t ) \delta_t = r_t + γv(s_{t+1})- v(s_t) </math>δt=rt+γv(st+1)−v(st)

two-step advantage: <math xmlns="http://www.w3.org/1998/Math/MathML"> δ t + γ δ t + 1 = r t + γ r t + 1 + γ 2 v ( s t + 2 ) − v ( s t ) \delta_t + \gamma \delta_{t+1} = r_t + \gamma r_{t+1} +γ^2v(s_{t+2})- v(s_t) </math>δt+γδt+1=rt+γrt+1+γ2v(st+2)−v(st)

<math xmlns="http://www.w3.org/1998/Math/MathML"> ∞ \infty </math>∞ -step advantage: <math xmlns="http://www.w3.org/1998/Math/MathML"> ∑ l = 0 ∞ γ l δ t + l = ∑ l = 0 ∞ γ l r t + l − v ( s t ) \sum_{l=0}^{\infty} \gamma^l \delta_{t+l} = \sum_{l=0}^{\infty} \gamma^l r_{t+l} - v(s_t) </math>∑l=0∞γlδt+l=∑l=0∞γlrt+l−v(st) 加下来我们尝试构造权重: one-step 权重: <math xmlns="http://www.w3.org/1998/Math/MathML"> 1 − λ 1 - \lambda </math>1−λ two-step 权重: <math xmlns="http://www.w3.org/1998/Math/MathML"> λ \lambda </math>λ (1 - <math xmlns="http://www.w3.org/1998/Math/MathML"> λ \lambda </math>λ) three-step 权重: <math xmlns="http://www.w3.org/1998/Math/MathML"> λ 2 λ^2 </math>λ2 (1- <math xmlns="http://www.w3.org/1998/Math/MathML"> λ \lambda </math>λ) 然后进行加权平均则有 advantage 的 GAE 表示: <math xmlns="http://www.w3.org/1998/Math/MathML"> a d v a n t a g e G A E = ∑ l = 0 ∞ ( γ λ ) l δ t + l \begin{aligned} advantage^{\mathrm{GAE}} = & \sum_{l=0}^{\infty}(\gamma \lambda)^l \delta_{t+l} \end{aligned} </math>advantageGAE=l=0∑∞(γλ)lδt+l (ppo 使用时, <math xmlns="http://www.w3.org/1998/Math/MathML"> ∞ \infty </math>∞ 变成 T) 当 <math xmlns="http://www.w3.org/1998/Math/MathML"> λ \lambda </math>λ= 0 时,advantage 的 GAE 表示退化成 one-step TD 当 <math xmlns="http://www.w3.org/1998/Math/MathML"> λ \lambda </math>λ= 1 时,advantage 的 GAE 表示退化成 MC 所以当 <math xmlns="http://www.w3.org/1998/Math/MathML"> λ \lambda </math>λ在 (0,1)区间时,表示在偏差和方差之间做出折衷。

总结

到这里,PPO 算法相关的细节就讲完了,但是 PPO 的代码实现上还有许多细节,可以参考 cleanrl 是目前我看过的可读性最好的 ppo 代码实现,对具体实现感兴趣的可以看下这个 repo。接下来的文章会介绍 DRL 其他的常用算法,如 DDPG、SAC 等。 感谢阅读。

参考

  1. github.com/DLR-RM/stab...
  2. arxiv.org/abs/1707.06...
  3. arxiv.org/abs/1506.02...
相关推荐
lijianhua_97125 天前
先进制造aps专题二十六 基于强化学习的人工智能ai生产排程aps模型简介
人工智能·强化学习·aps
Gaoshu1019 天前
《强化学习的数学原理》(2024春)_西湖大学赵世钰 Ch10 Actor-Critic 方法 » P2
笔记·强化学习
Nicolas89313 天前
【算法业务】基于Multi-Armed Bandits的个性化push文案自动优选算法实践
强化学习·推荐算法·多臂老虎机·个性化推送系统·push系统·用户激活·文案优选
机器白学16 天前
【强化学习系列】Gym库使用——创建自己的强化学习环境3:矢量化环境+奖励函数设计
强化学习
荒野火狐24 天前
【FreeRL】我的深度学习库构建思想
人工智能·深度学习·强化学习·dqn
Nicolas8931 个月前
【大模型理论篇】强化学习RL与大模型智能体
大模型·llm·强化学习·策略梯度·dqn·rl·智能体
我是陈扣题2 个月前
使用RKNN在Orange Pi 5 (RK3588s) 上部署推理PPO深度学习模型
人工智能·深度学习·rk3588·强化学习·模型部署·ppo·orangep
Nicolas8932 个月前
【大模型理论篇】GPT系列预训练模型原理讲解
gpt·chatgpt·大模型·sft·强化学习·rlhf·人类反馈
kuan_li_lyg2 个月前
MATLAB - 强化学习(Reinforcement Learning)
开发语言·人工智能·机器学习·matlab·机器人·自动驾驶·强化学习
恋上钢琴的虫2 个月前
基于强化学习算法玩CartPole游戏
强化学习