我正在重现 Andrychowicz 等人的 Hindsight Experience Replay 的结果。人。在原始论文中,他们展示了下面的结果,其中代理训练了 200 个 epoch。
200 个 epochs * 800 episodes * 50 个时间步长 = 8,000,000 个总时间步长。
我尝试重现结果,但不是使用 8 个 CPU 内核,而是使用 16 个 CPU 内核。
获取推送
我训练了FetchPush80 个 epoch,但每个 epoch 只有 50 集。因此 80 * 50 * 50 = 200,000 次迭代。我呈现下面的曲线,使用两个随机种子生成。
在 20 epochs = 50,000 次迭代之后,我们解决了这个环境。在上面的论文中,原作者花费了 100 集 = 4,000,000 次迭代。
我的算法如何收敛快 50 倍?
拾取和放置
我训练了FetchPickAndPlace80 个 epoch,但每个 epoch 只有 50 集。因此 80 * 50 * 50 = 200,000 次迭代。我呈现下面的曲线,使用三个随机种子生成:
并记录前两个时期的输出,表明我确实每个时期有 50 集:
现在,从我的张量板图中可以看出,在 40 个 epoch 之后,我们获得了稳定的成功率,接近 1. 40 epochs * 50 episodes * 50 time step = 100,000 次迭代。因此,算法花了大约 100,000 个时间步来学习这个环境。
原始论文大约花费了 50 * 800 * 50 = 2,000,000 个时间步来实现相同的目标。
就我而言,环境的解决速度如何快了近20 倍?我上面的工作有什么缺陷吗?我肯定做错了什么,对吧?
结果也比另一篇也使用 19 个 MPI 工作人员的论文更快:
如本文所述:“我们训练了 50 个 epoch(一个 epoch 包含 19 2 50 = 1 900 个完整的情节),总计 4.75 x10^6 时间步长。” 大约需要 2,000,000 个时间步才能达到 0.9 的中值成功率。
概括
任何关于我可能做错的建议将不胜感激。
编辑 - 记录
记录过程显示排名 0 的工作人员正在报告结果。内her.py)
if rank == 0:
logger.dump_tabular()
负责编写所有诊断的函数dumpkvs()在里面logger.py:
def dumpkvs():
"""
Write all of the diagnostics from the current iteration
"""
Logger.CURRENT.dumpkvs()
代码可以在这里找到:
https://github.com/openai/baselines/blob/master/baselines/logger.py





