复现结果
在 PointGoal1、CarGoal1、Velocity-Walker2d 三个任务上测试了 RCPO,CRPO 以及 Safe-Policy-Optimization 中实现的 CPO,PPO-Lag 算法。
CarGoal

PointGoal

PointGoal1 和 CarGoal1 任务相对比较困难,在探索初期就很容易违反约束。
PPO-Lag 和 TRPO-Lag 都不能得到满足约束的解,故没有在途中画出。
使用 RCPO 将拉格朗日乘子初值设置为 2 之后,可以跑出可行解,但是 reward 不高,且仍然会出现震荡的现象。
使用 CRPO 可以跑出可行解,reward 与 RCPO 持平,后面会对其进行修改。
另外尝试使用 CPO,发现虽然 reward 最高,但是得不到可行解。
Walker2d
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6jjGDce1-1689530625453)(results.assets/wk.png)]](https://i-blog.csdnimg.cn/blog_migrate/57d1a5529d1df659768b0bd386f36326.png)
在 Velocity-Walker2d 中使用 ppo-lag 会产生周期性的震荡。原因是 KaTeX parse error: Undefined control sequence: \part at position 7: \frac{\̲p̲a̲r̲t̲ ̲L}{\part\lambda…,而 λ\lambdaλ 增大又会使得 EpCosts 减小。如果 λ\lambdaλ 更新过快,就会导致这两个过程的时间差较长,从而产生周期较大的波动。
这个任务比较简单,其他的算法差别不大。
对CRPO的改进
在PointGoal1 和 CarGoal1中发现 CRPO 训练过程中不稳定,而且训练到一定程度的时候 reward 难以继续提高。因为这两个任务的约束比较强,即使在没有充分探索的前期就很容易违反约束。CRPO 在违反约束时立即转向,导致很容易被束缚住而探索不到好的策略。同时,cost 负梯度和 reward 梯度的方向一般是相反的,就会导致参数发生震荡。
因此做了两点改进:
- 减小学习率。
- 在违反约束时参数更新方向不再是单一的减小 cost 的方向,而是 cost 的负梯度 * alpha + reward 的梯度 * (1-alpha)
第 2 点中的 alpha 尝试了固定值(0.7,0.85)以及自适应值(类似 PDO 更新拉格朗日乘子),发现自适应的更新 alpha 效果更好,与改进前相比,前期训练表现提升较快,也能得到满足约束的解,并且 reward 有较大提高。当然,与标准的 CRPO 相比这会导致训练过程中存在违反约束的时间增加。
CarGoal
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zTJMjRj3-1689530625454)(results.assets/cg2.png)]](https://i-blog.csdnimg.cn/blog_migrate/92d0cd70e4619aaae4b39ffc39b4f255.png)
PointGoal
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vJCGPaD4-1689530625454)(results.assets/pg2.png)]](https://i-blog.csdnimg.cn/blog_migrate/d93b77900b05264adb2ff86946efb1f0.png)
思考
构造拉格朗日函数:
L(θ,λ)=JRπθ−λ⋅(JCπθ−d) L(\theta, \lambda)=J_R^{\pi_\theta} - \lambda\cdot(J_C^{\pi_\theta}-d) L(θ,λ)=

文章对比了RCPO、CRPO和CPO在PointGoal1、CarGoal1、Velocity-Walker2d任务上的性能,发现RCPO和CRPO能得出满足约束的解,但存在稳定性问题。CPO虽然奖励最高,但无法得到可行解。针对CRPO的不稳定性,文章提出了降低学习率和自适应调整α的改进方法,提升了训练效率和奖励。

429

被折叠的 条评论
为什么被折叠?



