仍旧是玩平衡杆游戏,不过这次用了更为强大的PPO2,看完之后不经感叹里面的思想真的是太奇妙了!相较于朴素的策略网络,多了好多新的trick,不敢想象发明这个算法的人是有多聪明。
代码参考自龙良曲的tensorflow2开源书籍。
|
|
网络train起来不太稳定,可能需要试个几次效果才会好。(RL和GAN都是出了名的难train)
不过相较于上一篇的朴素的策略网络,这次的训练速度要快许多,因为上次是得到一个轨迹后train一次,得到一个轨迹后train一次。。。这是因为train过一次后,模型就变了。现在是得到一把轨迹放到缓存池里,然后从缓存池里每次捞batch_size个出来train。这也正是PPO算法的优势之一,其中的关键思想就是重要性采样:如何从另一个分布来估计原分布的期望(从这也可以看出统计学的威力),使得旧数据得到复用。
和之前另一个不同点是这次代码中加入了Critic,用来估计值网络,作为基准,计算Advantage function (收益reward减去基准baseline) ,上一篇中曾提到 当回报是正的,就提高做过的动作的概率,反之就降低
,其实上一篇的代码没有做到这句话,因为没有减去基准,所以不管回报好坏,做过的动作的概率都是提高的(这对没做过的动作其实是不公平的),现在就没有这个问题了。
最后一点trick是PPO2算法中对于损失函数的定义。由于用了另一个分布去近似近似原分布,自然不希望二者差的太多,所以在PPO 算法中就用KL Divergence去度量两个分布之间的差距。PPO2则没有计算KL散度,而用了clip裁剪的方法做到了同样的事。