发布时间:2024-01-14 14:30
PPO算法提出了新的目标函数可以在多个训练步骤实现小批量的更新,解决了策略梯度算法中步长难以确定的问题。如果步长太小,训练时间就会过长。如果步长过大,有用信息会被噪音掩盖(因为每个数据影响都很大),或者令性能灾难性的下降,难以收敛。
on-policy的意思是个体在学习过程中优化的策略与自己的行为策略是同一个策略,如sarsa算法;off-policy的意思是个体在学习过程中有花的策略与自己的行为策略是不同的策略,如q-learning算法。关于PPO算法到底是on-policy的还是off-policy在这里有个很好的解释。
常见的梯度估计形式如下:
在这里的策略是随机策略,A为优势函数。
这是优势函数的一个定义式。其表达了在状态s下,选择动作a有多好。如果action比average要好,那么优势函数就是一个正数,否则,就是负的。
先解释下什么是KL散度,KL-divergence又叫相对熵(relative entropy),衡量两个概率分布之间的不同程度,如果新策略与旧的策略相差过大,KL散度就会大,这里对KL散度做了一个约束,让更新不会过于发散。
在这里是把约束条件作为一个负的值,相当于是一个惩罚。我们的初衷是不希望新的策略与旧的策略相差太多的。
此为新旧策略的比例,在一开始,由于操作:
所以
上标CPI的意思是保守策略迭代,如果不对其加以限制,就会导致一个非常大的策略更新。在这里我们希望新旧策略之比不要偏离1太远。
上式加上clip操作。在这里解释一下什么是clip。
若有:clip(a,a_min,a_max),其中:
a:输入;
a_min:被限定的最小值,所有比a_min小的数都会强制变为a_min;
a_max:被限定的最大值,所有比a_max大的数都会强制变为a_max。
那么也就是说我们的rt被限制在此范围内:
A>0时,说明此动作比平均动作要好,此时就应该增大选择该动作的概率,但是也不能过激,因此在1+epsilon处截断;A<0时,说明此动作比平均动作要差,此时应该减少选择此动作的概率,但是同样不能过激,在1-epsilon处截断。
这是提出的另一个方法,可以替代clipped,也可以两者一起用。在实验中发现其实KL惩罚方法比clipped方法要差一些,但是它是一种很重要的baseline。
下面是步骤:
在这里,SGD是随机梯度下降的意思。当两者的KL散度过低时,就要减小惩罚系数,让策略可以更新地稍微激进一些,但是当策略过分激进时,也就是KL散度过大时,就需要加大惩罚系数,使得策略的更新变得保守些。
把前面提到的两个loss函数进行了一个简单的组合来替代原始的loss,其中S是entropy奖励,在这里加上是为了保证足够的探索,这里是关于熵的解释。
下面是OpenAI PPO 论文里给出的算法,只有寥寥的几行。
下面是DeepMind给出的PPO算法的伪代码,稍微详细了一些。
在这里actor更新使用的loss函数是采用了自适应KL惩罚系数的loss函数。critic还是跟平常一样用TD-error更新。
参考:
https://mofanpy.com/tutorials/machine-learning/reinforcement-learning/DPPO/
https://zhuanlan.zhihu.com/p/74213847
vue3实现 TodoList 运用到的点 组件传值props, ref, onMounted, reactive, toRefs, watch
苹果无线网服务器改什么速度快,iPhone网速慢怎么办?苹果手机如何配置DNS?
【H5微信授权】简单实现H5页面微信授权功能,微信开发者工具报错 系统错误,错误码-1,undefined解决办法【详细】
stm32单片机+amg8833+红外热成像/单片机红外测温成像/stm32 amg8833红外热成像
麒麟操作系统 (kylinos) 从入门到精通 - 研发环境 - 第二十一篇 C++/C语言开发环境搭建