我正在尝试实现我自己版本的 Asynchronous Advantage Actor-Critic 方法,但它无法学习Pong游戏。我的代码主要受Arthur Juliani's和OpenAI Gym的A3C版本的启发。该方法适用于简单的Doom环境(Arthur Juliani的代码中使用的环境),但是当我尝试Pong游戏时,该方法会转向一个策略,它总是执行相同的操作(总是向下移动,或者总是向上移动,或者总是执行no-op动作)。我的代码位于我的GitHub repository。
我已经将我的网络调整为类似于OpenAI Gym的A3C版本所使用的架构,即:
我已经尝试过不同的网络配置(通过尝试几种不同的卷积层配置,包括不同的激活功能),其他优化器( RMSPropOptimizer 和 AdadeltaOptimizer )不同参数配置和BATCH_SIZE的不同值。但它几乎最终会分散到一个政策,它始终只执行一个动作。我的意思是总是因为某些配置中代理维护了一个类似于几个剧集的随机策略的策略,没有明显的改进(在这些情况下我放弃了62k集之前)。
因此,我想知道是否有人在使用带有LSTM层的A3C在Pong游戏中训练代理人方面取得了成功。如果是这样,使用的参数是什么?任何帮助将不胜感激!
[编辑] 正如我在评论中所说,我设法通过在计算梯度之前提供正确的LSTM状态来部分地解决问题(而不是提供初始化的LSTM状态)。这使得该方法在PongDeterministic环境中学得相当好。但是当我尝试Breakout-v0时问题仍然存在:代理在大约65k集中达到平均分40,但是在此之后它似乎停止学习(它保持这个分数一段时间)。我已多次检查OpenAI启动器代理,但我发现我的实现与他们的实现之间没有任何显着差异。任何帮助都将非常感谢!