Policy Gradient算法存在两个问题,一是蒙特卡罗只能回合更新,二是on-policy采集的数据只能使用一次。
对于第一个更新慢的问题,改用时序差分方法,引入critic网络估计V值,就能实现单步更新。
对于第二个数据利用率低的问题,引入重要性采样,就能用一个不同于当前策略的固定策略去采样很多的数据并反复利用。
总的来说,PPO(Proximal Policy Optimization)就是采用Actor-Critic架构和重要性采样对PG进行改进的算法,也是OpenAI默认的强化学习算法。
1. 重要性采样(Importance Sampling)
重要性采样是一种通过从分布q中采集数据,来估计分布p中数据期望的方法。公式中的p(x)/q(x)称为重要性系数,用于修正两个分布的差异。
通过重要性采样就可以把on-policy转变为off-policy,提高数据利用率。
2. PPO-Penalty或PPO-Clip
但重要性采样中两个分布的差别不能太大,否则需要非常多的采样才能得到近似的结果。PPO就提出了两种控制两个分布间差异的方法。
PPO-Penalty:前身是TRPO(Trust Region Policy Optimization信任区域策略优化)。二者区别在于TRPO把KL散度作为一个约束,不容易求解;而PPO-Penalty直接把KL作为目标函数的一项(类似正则化)。PPO-Clip:用clip函数裁剪掉过大或过小的重要性系数,易于实现。