在使用强化学习算法进行训练时默认的都是使用同步的游戏环境,即agent手段environment的一个observation后environment是不继续向下执行的而是等待agent返回执行动作后再继续执行的,这种agent和environment在运行时保持着同步串行方式的运行模式则是同步游戏环境,而如果environment发送给agent当前observation后不进入阻塞状态等待agent返回动作而是继续向下执行的方式则是异步游戏环境模式。
本文讨论的就是异步游戏环境下该如何使用强化学习算法进行训练。
异步游戏环境对强化学习算法的训练有着较高的难度,因为游戏环境不等待agent的动作返回而agent在进行action计算的时候会有一定的时间延迟,这样必然导致agent难以获得连续时间下的observation,由此必然导致强化学习算法收敛上的困难,这种困难程度和agent计算action时所造成的与环境交互的时延长短正相关;因为我们知道在gym环境下会在游戏环境过于确定的情况下通过加入frame skip和sticky action的方式增加随机性,由此可见agent和environment交互时适当的随机性是有利于强化学习算法训练的,但是如果这个时延过长造成过大随机性,那么必然影响算法训练的性能。
对于游戏环境异步所导致的训练困境更像是一种刻舟求剑的现象。
不过由于很多游戏环境本身就存在着一定的时序连贯性,如赛车游戏等等,同时由于强化学习训练本身也是可以接受一定的随机性的,因此只要这种情况下agent返回action的时延不是过大那么对算法训练造成的影响就不会很大;如果要减少这种时延,或许提高agent的action计算速度是最为直接的方法,但是这个方法往往是最难实现的,即使尽量减少这个过程中由于计算数据迁移所形成的耗时也难以明显改善这个问题。
对于on-line的强化学习算法,不论是on-policy的还是off-policy的强化学习算法,这种异步的游戏环境都对算法的训练造成了极大的挑战。为此,off-line的强化学习算法或许是解决该问题的一个有前途的选项,我们可以使用一些简单模型(比如遗传算法的neat算法或3层MLP神经网络)来收集环境数据,或者结合model-based的RL算法,或许也是可以有更好的表现的,总之,该种问题对于on-line的强化学习是难以克服的调整,我们在难以直接减少agent返回action时的时延,那么我们可以适当的考虑使用off-line的强化学习算法。当然,如果这种异步游戏环境造成的时延是算法可用接受的,那么对于on-line的on-policy的A2C算法还是off-policy的DQN算法,其实也都是可以解决的。
本文对于异步游戏环境问题的解决提出了一个设想,那就是使用off-line的强化学习算法来进行解决,此时进行数据采样的方法可以使用简单的模型进行(比如3层MLP的AC算法),同时这个过程中也可以对进行数据采样的on-line算法进行适当的训练,以此提高数据收集的质量,在环境数据收集好后就可以使用on-line的算法进行解决了,同时这个过程也是可以循环迭代的,也就是说这个on-line转off-line的过程也可以是不断循环的,比如在每次循环结束时都使用off-line获得的模型来反向优化on-line模型,以此进一步提高算法训练性能。
强化学习算法library库:(集成库)
https://github.com/Denys88/rl_games
https://github.com/Domattee/gymTouch
个人github博客地址:
https://devilmaycry812839668.github.io/