- 参考链接:
PPO
PPO的训练技巧
为什么说PPO算法是on-policy的?
首先引入一个其他博主的理解:
PPO:依赖于importance sampling实现的off-policy算法在面对太大的策略差异时将无能为力(正在训练的policy与实际与环境交互时的policy差异过大),所以学者们认为PPO其实是一种on-policy的算法,这类算法在训练时需要保证生成训练数据的policy与当前训练的policy一致,对于过往policy生成的数据难以再利用,所以在sample efficiency这条衡量强化学习(Reinforcement Learning, RL)算法的重要标准上难以取得优秀的表现。
在推导TRPO和PPO的过程中
- 在将新策略\(\pi\)上的状态访问频率\(\rho_{\pi}(\bf{s})\)替换成旧策略的状态访问频率\(\rho_{\pi_{old}}(\bf{s})\)时,要求\(\pi\)与\(pi_{old}\)相聚不能太远,这就要求采样的样本不能是太早的策略,详情见《强化学习精要》P247(注意:此处\(\pi\)表达与书中相反)
- 在将新策略\(\pi\)上的动作采样替换为就策略\(\pi_{old}\)上的动作采样时,需要进行Importance Sampling,这要求了采样到的数据应该都是来源于同一个旧策略\(\pi_{old}\)
- 来源于同一个旧策略说明:最好是更新一次参数清空一次Buffer,根据本人对一些PPO实现的观察,实际实现时做不到这样,一般一个episode更新一次Buffer,而当Batch Size小于episode的步数时,在一次episode中可能会进行多次更新,一种理解是,同一个episode中的多次更新策略不会变化太大,实际上分布也比较接近,可以看做是同一个?
TRPO和PPO均是从较新的策略中采样样本,然后通过Importance Sampling将数据分布误差进行修正,从而对当前策略进行更新,本质上可以看做是
PPO策略原本是需要当前策略采样的样本的,但是使用了Importance Sampling来减少on-policy方法的采样要求,但是PPO实际上还是需要当前策略产生的数据才能进行有效学习,为此,我们一般会使用一个Clip方法来限制PPO当前策略和旧策略的偏差,以保证数据的有效性
一些其他off-policy的方法也会使用Importance Sampling,但这些策略往往是从固定策略\(\mu\)采样的
- 这些方法的损失函数中会将样本权重按照\(\frac{\pi}{\mu}\)来进行修正动作的概率分布
- 这些off-policy方法与PPO方法最大的不同在于这些方法不需要限制当前策略与行为策略的距离(KL散度)
- 问题:为什么这些off-policy方法不需要保证行为策略下的状态访问频率\(\rho_{\mu}(\bf{s})\)和目标策略下的状态访问频率\(\rho_{\pi}(\bf{s})\)一致?
TD3
- TD3是对DDPG的改进,全称为Twin Delayed Deep Deterministic Policy Gradient Algorithm
- 有两个改进包含在名字中,Twin和Delayed
- 其他改进是在Actor 的target网络输出中,增加噪声
改进1:Twin
- 采用双Critic网络(训练网络和target网络均为双网络),缓解Q值高估问题
改进2:Delayed
- Actor的目标是在Q值更新时,寻找最优的策略,如果Q值更新太快,容易波动,可以让Q值比较稳定了再更新Actor网络
- 具体做法,Critic网络更新\(d\)次再更新一次Actor
改进3:增加噪声
- 在Actor 的target网络输出中,增加噪声,可以缓解Q值高估问题
其他扩展
- TD3+BC,在TD3的基础上,增加策略模仿,即对策略进行迭代时,损失函数中增加\(loss_{BC} = (\pi_{\theta}(s) - a)^2\)