引入裁剪代理目标函数
回顾:策略目标函数
让我们回顾一下在 Reinforce 中需要优化的目标是什么
其思想是,通过对该函数进行梯度上升步骤(等效于对该函数的负值进行梯度下降),我们将**推动我们的智能体采取导致更高奖励的动作并避免有害的动作**。
然而,问题来自步长
- 太小,**训练过程太慢**
- 太大,**训练中存在过多的变异性**
使用 PPO,其思想是使用一个名为“裁剪代理目标函数”的新目标函数来约束我们的策略更新,该函数**将使用裁剪将策略变化限制在较小的范围内**。
这个新函数**旨在避免破坏性的大权重更新**
让我们研究每个部分以了解它是如何工作的。
比率函数
该比率计算如下
它是采取动作的概率在状态下的当前策略,除以先前策略中的相同概率。
正如我们所看到的,表示当前策略和旧策略之间的概率比率
- 如果, 则**在状态下的动作在当前策略中比在旧策略中更有可能**。
- 如果在 0 和 1 之间,则**当前策略的动作可能性低于旧策略**。
因此,这个概率比率是一种**估计旧策略和当前策略之间差异的简单方法**。
裁剪代理目标函数的未裁剪部分
此比率**可以替换我们在策略目标函数中使用的对数概率**。这为我们提供了新目标函数的左侧部分:将比率乘以优势。
然而,如果没有约束,如果在当前策略中采取的动作比在之前策略中更有可能,**这将导致策略梯度出现大幅更新**,从而导致**策略更新过度**。
裁剪后的代理目标函数的裁剪部分
因此,我们需要约束这个目标函数,通过惩罚导致比率偏离1(在论文中,比率只能在0.8到1.2之间变化)的改变。
通过裁剪比率,我们确保不会出现过大的策略更新,因为当前策略不能与旧策略有太大差异。
为了做到这一点,我们有两个解决方案
- TRPO(信任区域策略优化)在目标函数之外使用KL散度约束来约束策略更新。但这种方法**实现起来比较复杂,并且需要更多计算时间**。
- PPO使用其**裁剪后的代理目标函数**直接在目标函数中裁剪概率比率。
这部分裁剪版本是在之间裁剪.
使用裁剪后的代理目标函数,我们有两个概率比率,一个未裁剪,另一个在之间裁剪,epsilon是一个超参数,它帮助我们定义这个裁剪范围(在论文中.).
然后,我们取裁剪和未裁剪目标的最小值,**因此最终目标是未裁剪目标的下界(悲观界)**。
取裁剪和未裁剪目标的最小值意味着**我们将根据比率和优势情况选择裁剪或未裁剪目标**。
< > GitHub上的更新