在深度学习中,我们所获得的期望奖励可由下图描述:
在图中有强化学习的三要素:actor,environment,reward function。
让机器玩 video game 时,
除了以上几个因素,奖励函数是根据在某一个state采取的某个action得到的奖励,我们要做的事情就是调整actor内部的参数使R越大越好。实际上Reward不是一个张量,而是一个随机变量,能够计算的是R的期望,具体的期望计算如上图的表达式。
最大化R的方法是采取梯度上升。梯度上升需要计算R的梯度
在很多时候,每一个行为被给予的奖励都是正的,如果直接应用公式的话会导致不论什么行为都会被认为是正确的行为,而在实际计算的过程中由于我们是通过采样的方式来进行计算,有些没有被采样到的行为可能会被认为是不正确的而导致错误,所以解决方法是奖励函数减去一个基准值,减掉之后会变成有正有负,会得到更好的效果。
假定一场游戏网名取得了胜利,获得的奖励自然是正的,但是在取得游戏的中间步骤中,我们可能会做出了错误的选择,此时依据最终的胜利来确定中间行为的正确性是不妥的,所以我们希望给所有的行为添加一定的权重,来反应这个行为是好还是不好。
这个系数即为折扣系数
时序差分强化学习能够在知道一个小step后就进行学习,相比于蒙特卡洛强化学习,其更加快速、灵活。
基于on-policy的policy gradient效率较低的原因:经典policy gradient的大部分时间花在sample data处,即当我们的agent与环境做了交互后,我们就要进行policy model的更新。但是对于一个回合我们仅能更新policy model一次,更新完后我们就要花时间去重新collect data,然后才能再次进行如上的更新。
所以我们的可以自然而然地想到,使用off-policy方法使用另一个不同的policy和actor,与环境进行互动并用collect data进行原先的policy的更新。这样等价于使用同一组data,在同一个回合,我们对于整个的policy model更新了多次,这样会更加有效率。
important sampling(重要性采样): 使用另外一种数据分布,来逼近所求分布的一种方法,在强化学习中通常和蒙特卡罗方法结合使用,公式如下:
虽然理论上你可以把 p 换成任何的 q。但是在实现上, p 和 q 不能差太多,主要原因依旧是由于采样的缘故,如果碰巧在p与q相差太多的地方采样较多,会导致最后关于p的期望和关于q的期望差距较大。
使用off-policy的importance sampling后,我们不用θ 去跟环境做互动,假设有另外一个 policy θ′,去跟环境做互动,借此来训练θ。让θ′做互动 sample 一大堆的data,θ 可以update 参数很多次。然后一直到θ train到一定的程度,update 很多次以后,θ′再重新去做 sample,这就是 on-policy 换成 off-policy 的妙用。
在上文已经指出θ和θ′的分布不能差太多,避免这两个差很多的方法就是PPO,具体实现就是在优化的函数加上一项用来衡量θ和θ′的相似程度的KL散度,类似于正则化方法。PPO的前身叫做TRPO。两者的主要区别是TRPO将KL散度放在了限制条件里,而PPO直接将其作为一个需要优化的项。
adaptive KL penalty :类似于正则化中的w参数,计算KL散度也需要一个β,以下为动态调整β的方法,其中KL散度的最大可以接受的值和最小可以接受的值需要自己设定。
以上应用KL散度的方法为PPO1,如果认为KL散度难以计算,可以使用PPO2方法。这个算法实现起来很简单,比较并输出括号里较小的一项。括号中的第二项有一个clip()函数,该函数的作用第一项小于第二项的话,那就输出1-ε 。第一项如果大于第三项的话,那就输出 1+ε,第一项介于第二项和第三项之间则直接输出第一项。ε是一个超参数可以自己设置。
这个式子的主要作用依旧是保证θ和θ′的差距不会过大。