DQN 究竟是如何学习的?

数据挖掘 机器学习 Python 强化学习 dqn 开放式健身房
2021-10-07 00:29:00

我在gym迷宫中创建了我的自定义环境。我使用DQN带有BoltzmannQPolicy. 它使用以下变量训练良好:

  • 代理人的地位
  • 到终点的距离
  • 端点位置
  • 它可以移动到哪些方向

所以我不给它图像或任何东西。如果我在相同的环境(相同的迷宫,不改变墙壁的位置)中训练和测试它,它可以很容易地解决它。但是如果我在没有经过培训的情况下将它引入一个完全不同的环境(迷宫),那么它就不知道该怎么做了。我不知道问题出在我的代码上,还是DQN只是为了解决相同的环境。

我应该改用哪种算法?

2个回答

按照您设置 DQN 的方式,它旨在一次仅解决一个迷宫。一般来说,它没有(也不能)学习解决迷宫问题,因为它无法访问有关迷宫布局的数据,并且基本的 DQN 代理无法记忆迄今为止看到的布局。

可以将训练过程视为“解决迷宫”的通用算法。也就是说,给定一个新的迷宫,您可以使用您的书面代理,在训练模式下运行一段时间,它会产生解决该迷宫的策略。您可以调整或调整算法,使其在时间或步数方面最有效。它不能像硬编码的迷宫求解算法那样做到这一点,因为 DQN 和 Q-learning 是一种非常通用的学习算法,它没有利用迷宫中的一致逻辑。

如果你想训练一个更通用的迷宫解决代理,这将成为使用强化学习来解决的一个更难的问题,但它是可以实现的。Q 学习背后的理论有两个关键且相互关联的假设,您需要先解决这些假设,然后才能制作一个通用的迷宫求解器,以应对诸如移动墙壁等变化,但无需重新训练:

  • 假设状态变量具有马尔可夫属性,这意味着状态描述包含有关未来状态转换和奖励的所有相关信息。如果没有办法知道墙在哪里,或者至少记下它以前见过的墙的位置,代理就无法访问具有马尔可夫属性的状态表示。

  • 至少存在一种确定性最优策略。如果您打算从代理中提取信息(而不是赋予它诸如记忆之类的能力以构建缺失的信息),那么可能没有确定性的最优策略。

因此,可以使用强化学习来教代理解决一般的迷宫问题,并获得尝试走出一个新的未知迷宫的能力。如果您对此感兴趣,您需要首先确定代理可以观察的环境的哪些能力和知识。例如,您对编写迷宫求解器有什么特别的兴趣?

您可以使用哪些方法来制作更通用的迷宫求解器,这主要取决于您要如何构建问题。例如,如果您希望智能体以类似于人类解决打印拼图的方式学习解决迷宫,则向求解器提供迷宫图像作为输入是完全有效的。

训练一个更通用的迷宫求解器需要一个共同因素 - 您将希望在从所有可能的迷宫中提取的许多示例迷宫上进行训练。仅以一个迷宫为例进行训练通常与在一个示例上训练监督分类器或回归任务一样成功。添加更多的迷宫,或者更好的迷宫生成器,并对其中的许多进行训练,可能会使训练时间比以前长得多。

您唯一需要做的就是在随机(非重叠)位置启动您的代理和目标/结束。您最初可以使用空网格(无墙)尝试您的设置。如果 DQN 学会了,你的设置是好的,你可以开始在网格中引入障碍。逐渐地,代理将开始将终端位置输入关联为有益的东西,并将学习导航。

要考虑的事情(因此我建议首先在具有随机初始位置的 10x10 空网格中运行您的算法):

  • 输入特征空间:最好是相同的尺度。
  • 玻尔兹曼的策略温度应该在整个训练过程中退火,以便在开始时进行探索(DQN 将在内存缓冲区中收集它)并稍后利用。
  • 在迷宫场景中,随机位置,尤其是代理和目标在空间上非常接近的位置,将有助于 DQN 尽快“实现”奖励目标。因此,从 0/few 开始,网格上所有实体的随机初始位置的障碍物将作为您的代理的一种课程学习形式。