Hindsight Experience Replay (HER) 结果比原始论文快 50 倍?

数据挖掘 机器学习 Python 神经网络 强化学习
2021-10-15 21:19:51

我正在重现 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 的中值成功率。


概括

在此处输入图像描述


任何关于我可能做错的建议将不胜感激。

代码 Reddit 线程


编辑 - 记录

记录过程显示排名 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

1个回答

我正在错误地阅读结果。

1 epoch = 50 episodes = 2500 timesteps
50 epochs = 2500 episodse = 125,000 timesteps
125,000*16 CPU cores = 2 million time steps.

稍后会给出更详细的答案。