JamesB 发表于 2021-12-2 08:32

强化学习笔记(五)--PPO

2017年7月20日,OpenAI 刚刚通过自己的研究博客介绍了一种新的优化算法 Proximal Policy Optimization(近端策略优化,PPO)。据介绍,这种算法用在强化学习中时表现能达到甚至超过现有算法的顶尖水平,同时还更易于实现和调试。所以 OpenAI 已经把PPO作为自己强化学习研究中首选的算法。
现有算法

近期的策略梯度的一类方法让深度神经网络在控制任务中取得了明显进步,电脑游戏、三维运动、围棋都是很好的例子。但是用策略梯度的方法取得好的结果也有一些难度,因为这类方法对迭代步骤数非常敏感:如果选得太小,训练过程就会慢得令人绝望;如果选得太大,反馈信号就会淹没在噪声中,甚至有可能让模型表现雪崩式地下降。这类方法的采样效率也经常很低,学习简单的任务就需要百万级至十亿级的总迭代次数。
为了解决方法中的这些问题,研究人员们已经找到了 TRPO(Trust Region Policy Optimization,信任区域策略优化)和 ACER(Sample Efficient Actor-Critic with Experience Replay,能高效采样的带有经验回放的表演者-评论者算法) 这样的方法,对策略更新的大小做出限制或者另外的优化。达到了这样的效果,这些方法也就在别的方面付出了代价:ACER 比 PPO复杂得多,需要额外的代码用于策略外的纠正以及一个回放缓冲区,在 Atari 测试中的具体表现却只比 PPO 勉强好一点点;TRPO 虽然在连续控制任务中很有用,但是对策略函数和价值函数或者辅助损失之间有共享参数的算法较难兼容,比如 Atari 和其它一些视觉输入占据主要部分的任务就是这样。
PPO

在监督学习中,实现损失函数、在上面做梯度下降都很容易,而且基本上不费什么功夫调节超参数就肯定能够得到很好的结果。但是在强化学习中想要获得好结果就没有这么简单了,算法中有许多变化的部分导致难以 debug,而且需要花很大的精力在调试上才能得到好结果。PPO 则在实现的难易程度、采样复杂度、调试所需精力之间取得了新的平衡,它在每一步迭代中都会尝试计算新的策略,这样可以让损失函数最小化,同时还能保证与上一步迭代的策略间的偏差相对较小。
之前 OpenAI 就详细介绍过 PPO的一个变种 (NIPS 2016 论文视频:通过策略优化进行深度强化学习),其中用一个自适应 Kullback–Leibler 惩罚项控制每次迭代中的策略变化程度。现在介绍的这种新变种则使用了一种其它算法中罕见的全新的目标函数:


信任区域更新的功能就可以通过这种目标函数得到实现,它与随机梯度下降兼容,而且移除了Kullback–Leibler 惩罚项及它的自适应升级功能差,从而简化了算法。在测试中,PPO 算法在连续控制任务中取得了最好的效果,而且在 Atari 游戏测试中的表现几乎与 ACER 持平;考虑到 PPO 的简便性,这样的结果真是令人惊喜万分。

PPO   算法很好地权衡了实现简单性、样本复杂度和调参难度,它尝试在每一迭代步计算一个更新以最小化成本函数,在计算梯度时还需要确保与先前策略有相对较小的偏差。

PPO (TRPO,PPO2)
原因:policy gradient为on-policy,sample一次更新完actor之后,actor就变了,不能使用原来的数据了,必须重新与Env互动收集新数据,这导致训练需要大量互动,降低效率。
Important sampling:使用其他分布q获得数据,来估计基于分布p的函数期望,用户不能直接从p中采样的情况。需要注意的是p与q不能差太多,因为函数期望虽然无偏,但是方差可能很大,当然如果sample数据足够多也没这个问题。
目标:使用θ'采样的数据,训练θ这个actor,过程中θ'是fixed的所以可以重复使用用θ'的数据训练θ许多次,增加数据利用率,提高训练速度,为openAI的default方法。显然,此方法转为了off-policy。
注意:因为θ' 是与环境交互的actor,所以advantage function 的估计需要使用θ'的数据。



此为跟新需要的gradient,其中假设在不同actor中看到的s概率一样,则可以简化。通过gradient可以反推出目标函数。


约束:由于θ'与θ不能差别太大,所以需要有个约束,比如在目标函数后加-βKL(θ,θ')作为约束(PPO);或者外面引入KL(θ,θ') < δ.(TRPO,PPO前身,用constraint计算上不好处理)
说明:因为可能参数小的变化,行为变化很大,衡量无意义。所以。KL(θ,θ')不是参数上的距离,而是行为上的距离!π(a|s)的分布接近!
tip:adaptive KL Penalty,权衡β。定义KLmin和KLmax,当KL > KLmax,说明penalty作用没发挥,则增加β的值,反之亦然。

PPO2:不用计算KL,同样可以控制θ与θ'之间差距。





说明:当A>0,也就是a是好的,我们希望增加Pθ的概率,但是,Pθ不能弄得太大,太大也就会使与Pθ'差距大,导致效果不好。反之亦然。


另外这篇文章也将的很好,直接贴链接:

参考:

Ylisar 发表于 2021-12-2 08:35

好像看过英文版。。不过还是赞一个

pc8888888 发表于 2021-12-2 08:44

请教一下,PPO和PPO2是不是不需要经验回放了?

ChuanXin 发表于 2021-12-2 08:48

对,因为ppo/trpo是on policy,不会用以前老actor产生的样本

BlaXuan 发表于 2021-12-2 08:56

请教下,ppo是on-policy还是off-policy,我看很多都说她是on-policy,但是李宏毅老师视频和您的回答都认为是off-policy

Doris232 发表于 2021-12-2 09:06

是on-policy,用过去的样本或其他探索策略不能保证策略提升的单调性
页: [1]
查看完整版本: 强化学习笔记(五)--PPO