在之前的文章里介绍了 深度强化学习(DRL)算法 2 —— PPO 之 Clipped Surrogate Objective 篇 - 掘金 (juejin.cn),提出了现有方法存在方差较大的缺点,今天我们介绍一下如何使用 GAE(Generalized Advantage Estimation)进行改进。
回顾
上文提到的 Surrogate Objective:
我们的目标是使得这个期望回报最大。
算法描述
如果一次 rollout 的回报均值是 100,一次的是 90,我们就能说这两次 rollout 的效果都不错嘛?当然不能,如果理论上的最大期望回报是 1w,那么这两次 rollout 都有很大的提升空间,所以我们需要引入基准来做参考。
优势估计(AE)
如何引入基准呢?由深度强化学习(DRL)算法 附录1 —— 贝尔曼公式 - 掘金 (juejin.cn),期望回报实际上就是 Q,每次 rollout 是对 Q 的一次采样,那么我们可以定义优势 A = Q - V(Advantage)。 由于现在的 Q 使用的 MC 方法表示,所以方差大,可以引入 bootstrap 的方法减小方差,如 TD,那么对 Advantage 的一次采样为:
那么通过 PG 的方法,可以使得 advantage 大的 增大,从而改进策略。但是注意这里 使用的是神经网络,我们还需要一个神经网络来表示 v。所以 ppo 里有两个神经网络,一个扮演 actor 的角色决定 action,一个扮演 critic 的角色估计 v 值,来判定 actor 的好坏。 所以除了 Surrogate Objective 的 loss,我们还需要 critic 网络的 loss(使用最小二乘估计),直觉上我们希望模型的探索性得到提升,那么可以借助 actor 网络输出的交叉熵。 那么我么可以假设采样一次的 loss 是:pgloss - c1v_loss + c2entropy_loss,为了让 loss 最大,我们需要提高 pgloss,减小 v_loss,增大 entropy_loss,满足我们希望 A 越大 越大,使得 v 值越来越准确,模型的探索性得到提升的视觉,实际上如果把 AE 替换成 GAE,那么这就是 PPO 论文里的 Loss function:
广义优势估计(GAE)
上面的 AE 算法采用 one-step TD 来描述 advantage,我们都知道 TD 算法虽然会减小方差,但是也增大了偏差,所以这就像两个极端,MC 方差最大,one-step TD 偏差最大,有没有一种方法,可以提供一种 trade-off,而且可以很方便的调节这种 trade-off 呢? 我们具体来看,用一些数学技巧: one-step advantage:
two-step advantage:
-step advantage: 加下来我们尝试构造权重: one-step 权重: two-step 权重: (1 - ) three-step 权重: (1-) 然后进行加权平均则有 advantage 的 GAE 表示: (ppo 使用时, 变成 T) 当 = 0 时,advantage 的 GAE 表示退化成 one-step TD 当 = 1 时,advantage 的 GAE 表示退化成 MC 所以当 在 (0,1)区间时,表示在偏差和方差之间做出折衷。
总结
到这里,PPO 算法相关的细节就讲完了,但是 PPO 的代码实现上还有许多细节,可以参考 cleanrl 是目前我看过的可读性最好的 ppo 代码实现,对具体实现感兴趣的可以看下这个 repo。接下来的文章会介绍 DRL 其他的常用算法,如 DDPG、SAC 等。 感谢阅读。