无法使用 Tensorflow 使我的带有 LSTM 层的 A3C 工作
Can't get my A3C with LSTM layer using Tensorflow to work
我最近尝试实现我自己版本的 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 层的输出等。None 这些配置有效....
- 我尝试了 3 种不同的优化器:RMSPropOptimizer、AdadeltaOptimizer 和 AdamOptimizer。我还为每个人尝试了不同的学习率。运气不好;
- 我已经根据我看过的实现尝试了几个参数。
我的代码总是最终收敛到一个策略,即桨总是向上移动或总是向下移动(不是两者)。一定有一些愚蠢的细节我错过了,但我找不到。欢迎任何帮助!
其实我已经找到问题所在了。正如我所想,只是一个简单的细节把一切都搞砸了:在我的代码和我在 post 中提到的所有其他代码中,策略损失函数使用输出的策略的 softmax 日志网络。为了避免 Nan 结果(如果策略有一个 0 关联到至少一个操作),我向策略添加了一个小值(在我的代码中,这是在 Network.py 的第 180 行中完成的)。看起来这个小值(1e-8)毕竟不是那么小,而且它在扰乱策略损失函数。我最终使用了 1e-13 然后它起作用了。我在 VizDoom 环境(与 Arthur Juliani 的版本中使用的地图相同)中进行了测试,它在大约 6k 集内收敛。
希望对遇到类似问题的人有所帮助。我将很快更新我的 GitHub 帐户中的代码。
我最近尝试实现我自己版本的 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 层的输出等。None 这些配置有效....
- 我尝试了 3 种不同的优化器:RMSPropOptimizer、AdadeltaOptimizer 和 AdamOptimizer。我还为每个人尝试了不同的学习率。运气不好;
- 我已经根据我看过的实现尝试了几个参数。
我的代码总是最终收敛到一个策略,即桨总是向上移动或总是向下移动(不是两者)。一定有一些愚蠢的细节我错过了,但我找不到。欢迎任何帮助!
其实我已经找到问题所在了。正如我所想,只是一个简单的细节把一切都搞砸了:在我的代码和我在 post 中提到的所有其他代码中,策略损失函数使用输出的策略的 softmax 日志网络。为了避免 Nan 结果(如果策略有一个 0 关联到至少一个操作),我向策略添加了一个小值(在我的代码中,这是在 Network.py 的第 180 行中完成的)。看起来这个小值(1e-8)毕竟不是那么小,而且它在扰乱策略损失函数。我最终使用了 1e-13 然后它起作用了。我在 VizDoom 环境(与 Arthur Juliani 的版本中使用的地图相同)中进行了测试,它在大约 6k 集内收敛。
希望对遇到类似问题的人有所帮助。我将很快更新我的 GitHub 帐户中的代码。