问题描述:
我已经训练了一个智能体在网格世界中执行一个简单的任务(向上移动到网格顶部,同时避免碰到障碍物),但总是会遇到以下情况。它发现自己处于状态空间的一个简单部分(没有障碍物),因此持续获得强烈的正强化信号。然后,当它发现自己处于状态空间的困难部分(被两个障碍物夹住)时,它只是选择之前相同的动作,毫无效果(它向上移动并撞到障碍物)。最终,这个动作的Q值与负奖励相匹配,但此时其他动作的Q值由于在状态空间的简单部分无用而变得更低,因此错误信号降为零,并且仍然总是选择错误的动作。
如何防止这种情况发生?我考虑了一些解决方案,但似乎都不太可行:
- 使用始终重视探索的策略。 由于绕过障碍物需要大约5个动作,偶尔进行一次随机动作似乎效果不佳。
- 设计奖励函数,使重复的错误动作的惩罚更大。 这会破坏马尔可夫属性。也许这不是坏事,但我完全不知道该怎么做。
- 只在完成任务时奖励智能体。 完成任务需要超过一千个动作,因此训练信号会非常微弱。
任务背景:
我为尝试强化学习算法创建了一个小型测试平台——类似于Sutton书中描述的更复杂的网格世界。世界是一个大型的二进制网格(300 x 1000),由随机大小的矩形1填充,背景是0。一圈1环绕世界的边缘。
智能体占据这个世界中的一个空间,只能看到周围固定的窗口(以智能体为中心的41 x 41窗口)。智能体的动作包括在四个基本方向上移动一个空间。智能体只能通过标记为0的空间移动,1是不可通过的。
当前在该环境中要执行的任务是从底部随机位置开始向上移动到网格世界的顶部。成功向上移动会获得+1的奖励。任何会撞到障碍物或世界边缘的移动会获得-1的奖励。所有其他状态的奖励为0。
智能体使用基本的SARSA算法和神经网络值函数近似器(如Sutton书中所讨论)。在策略决策中,我尝试了e-greedy和softmax两种方法。
回答:
通常教授此类任务的方法是每一步给智能体一个负奖励,然后在完成任务时给予大额奖励。你可以通过使用资格迹和最初将智能体放置在靠近目标的位置,然后靠近它已经探索过的区域来补偿长时间的延迟。