来源书籍:
TENSORFLOW REINFORCEMENT LEARNING QUICK START GUIDE
《TensorFlow强化学习快速入门指南-使用Python动手搭建自学习的智能体》
著者:[美]考希克·巴拉克里希南(Kaushik Balakrishnan)
译者:赵卫东
出版社:Packt 机械工业出版社
代码:https://github.com/x45w/TensorFlow-Reinforcement-Learning-Quick-Start-Guide-master/tree/main/PPOhttps://github.com/x45w/TensorFlow-Reinforcement-Learning-Quick-Start-Guide-master/tree/main/PPO
目录
1.信任区域策略优化和近端策略优化
1.1 学习TRPO
1.2 学习PPO
2.思考题
1.信任区域策略优化和近端策略优化
第6章介绍了A3C和A2C的使用,前者是异步的,后者是同步的。本章将介绍另外的关于同步策略强化学习算法。准确地讲,这两个算法在数学上有很多相似之处,但在解决方法上却有所不同。一种称为信任区域策略优化(Trust Region Policy Optimization, TRPO),由OpenAI和加州大学伯克利分校的研究人员于2015年提出的。该算法在数学上很难求解,因为其涉及共轭梯度算法。请注意,一阶优化方法,如建立良好的Adam和随机梯度下降(SGD),不能用于求解TRPO方程。本章还介绍如何将求解策略优化方程合并为一个,从而产生近端策略优化(Proximal Policy Optimization, PPO)算法,并且可以使用一阶优化算法,如Adam或SGD。
1.1 学习TRPO
TRPO方程
TRPO涉及当前策略分配比例与旧策略分配比例(ji即较早的时间步长)的期望值的最大化,乘以优势函数,约束条件是新老策略分布的Kullback-Leibler(KL)散度的期望值不大于用户指定值
第一个方程是策略目标,第二个方程是一个附加约束。为了确保策略更新是渐进的,并且不会进行大的策略更新,从而将策略带到参数空间非常远的区域。
由于有两个需要联合优化的方程,Adam和SGD等一阶优化算法将不起作用。相反,用共轭梯度算法求解方程,对第一个方程进行线性逼近,对第二个方程进行二次逼近。然而,这涉及很多数学知识,所以不在本书中介绍。本书将使用PPO算法,它相对容易编程实现。
1.2 学习PPO
PPO是TRPO的扩展,由OpenAI的研究人员于2017年引入。PPO也是一种同步策略算法,可以应用于离散动作问题和连续动作问题。它使用与TRPO中相同的策略分布比率,但不使用KL散度约束。具体来说,PPO使用三个损失函数,将它们合二为一。下面介绍三个损失函数。
PPO损失函数
第一个损失函数称为裁剪替代目标。用表示新旧策略概率分布的比率:
裁剪替代目标由以下方程给出,其中是优势函数,是超参数,通常使用ε=0.1或0.2:
clip()函数将比率限制在1-ε和1+ε之间,从而使比率保持在范围内。min()函数是确保目标是未裁剪目标下限的最小化函数。
第二个损失函数是状态值函数的L2范数:
第三个损失函数是策略分布的香农熵, 来源于信息论:
把这三个损失函数组合起来。注意, 要最大化 和, 但是要最小化 。其中 c1 和 c2 是用于缩放的常数将PPO 。总的损失函数定义为如下方程,
注意,如果在策略和价值网络之间共享神经网络参数,那么前面损失函数就可以最大化。另一方面,如果对策略和价值有单独的神经网络,那么就可以有单独的损失函数,那么就可以有单独的损失函数,如下面的方程所示,其中最大化,最小化:
注意,常量在后一种设置中是不需要的,这里为策略和值提供了单独的神经网络。神经网络参数通过一批数据点上的多个迭代步骤进行更新,其中更新步骤的数量由用户指定为超参数。
2.思考题
(1)可以在TRPO中应用Adam或SGD优化吗?
答:信任区域策略优化(TRPO)具有目标函数和约束。因此,它需要二阶优化,例如共轭梯度。SGD和Adam不适用于TRPO。
(2)熵项在策略优化中的作用是什么?
答:熵项有助于正则化。它允许agent探索更多机会。
(3)为什么要削减策略比率?如果裁减参数很大会发生什么?
答:缩减策略比率以限制一个更新步骤更改策略的量。如果裁剪参数很大,则每次更新时策略都会发生巨大变化,这可能导致次优策略,因为agent的策略噪声较大且波动太多。
(4)为什么对mu使用激活函数tanh,而对sigma使用激活函数softplus?能用激活函数tanh来计算sigma吗?
答:这个动作被限制在负值和正值之间,因此激活函数tanh被用于mu。softplus用作sigma,并且总是正的。激活函数tanh不能用于sigma,因为tanh会导致sigma的负值,这是没有意义的。
(5)奖励在训练中总是有帮助吗?
答:奖励重新设计通常有助于训练。但是,如果做得不好,也无益于训练。必须确保完成奖励,以保持奖励功能的密集以及在适当的范围内。
(6)当测试一个已经训练好的agent时需要奖励吗?
答:不,奖励重新设计仅用于训练。