使用Tensorflow无法使用LSTM图层获取我的A3C

时间:2017-07-05 12:41:52

标签: asynchronous tensorflow deep-learning reinforcement-learning

我最近尝试使用我自己版本的 Asynchronous Advantage Actor-Critic(A3C)方法进行深度强化学习,因为我无法让网络中的其他A3C实现正常工作。问题是我的版本也没有融合......所以,我真的很感激任何帮助来确定问题。代码位于此处:https://github.com/MatheusMRFM/A3C-LSTM-with-Tensorflow。我正在使用来自Open AI健身房环境的Pong游戏训练该方法。这是我做的:

  • 我的实施主要基于以下A3C实施:Arthur Juliani的版本,Open AI的A3C和andreimuntean's version。我选择这些实现是因为它们的清晰度,因为根据最初的A3C论文,一切看起来都是正确的;
  • 我正在使用如下网络:一组卷积层,一个完全连接的层,一个LSTM层,以及两个完全连接的层(一个用于策略,另一个用于值函数)。我已经测试了其他几种架构(更改了卷积层,删除了第一个隐藏层,更改了隐藏层和LSTM层的输出,等等。这些配置都不起作用....
  • 我尝试了3种不同的优化器: RMSPropOptimizer AdadeltaOptimizer AdamOptimizer 。我也尝试了不同的学习率。没有运气;
  • 我已根据我查看的实现尝试了几个参数。

我的代码总是会收敛到一个策略,其中paddle总是向上移动或总是向下移动(而不是两者)。必须有一些我错过的愚蠢细节,但我找不到它。欢迎任何帮助!

1 个答案:

答案 0 :(得分:0)

我实际上发现了问题所在。就像我想的那样,只是一个简单的细节搞砸了所有内容:在我的代码和我在帖子中提到的所有其他代码中,策略丢失函数使用网络输出的策略的softmax日志。为了避免Nan结果(如果策略的0与至少一个动作相关联),我在策略中添加了一个小值(在我的代码中,这是在Network.py的第180行中完成的)。似乎这个小的价值(1e-8)毕竟不是那么小,而且它正在搞乱政策损失功能。我最终使用1e-13然后工作了。我在VizDoom环境中进行了测试(在Arthur Juliani的版本中使用了相同的地图),它在大约6k集中融合。

希望它可以帮助任何有类似问题的人。我很快就会在GitHub帐户中更新我的代码。