我正在构建一个非常简单的实验,让代理从左下角移动到右上角网格世界。
我打算使用 DQN 来做到这一点。我在处理起点时遇到了麻烦:如果 Q 网络的预测告诉代理在开始时向下(或向左)移动怎么办?
我应该对环境进行编程以立即给出一个奖励并结束这一集?即使向左移动是一种可能的选择,这个惩罚是否会让智能体“害怕”将来再次向左移动?
有什么建议?
我正在构建一个非常简单的实验,让代理从左下角移动到右上角网格世界。
我打算使用 DQN 来做到这一点。我在处理起点时遇到了麻烦:如果 Q 网络的预测告诉代理在开始时向下(或向左)移动怎么办?
我应该对环境进行编程以立即给出一个奖励并结束这一集?即使向左移动是一种可能的选择,这个惩罚是否会让智能体“害怕”将来再次向左移动?
有什么建议?
在玩具环境中,这是您可以相对自由地做出的选择,具体取决于您希望通过学习挑战实现的目标。
如果您仔细考虑在您的环境中做出“错误”举动的实际后果是什么,这可能会有所帮助。有几个自洽选项:
此举根本无法进行,也不能算作按预期进行游戏。在这种情况下,不允许代理做出该选择。您可以通过过滤允许代理做出的选择列表来实现这一点。在 DQN 中,这意味着根据状态向代理提供一个动作掩码,因此它不包括它做出选择的阶段的动作。这种“可用操作”功能通常被编码为环境的一部分。
可以尝试移动,但不会改变状态(例如,代理撞到墙上)。如果目标是在尽可能短的时间内达到某个状态,那么您通常会获得 0 奖励和折扣因子,或者对于每个尝试的操作都将获得负奖励。无论哪种方式,代理都应该知道移动是浪费的,并在几次迭代后避免它。
可以尝试移动,但会导致灾难(例如代理掉下悬崖)。在这种情况下,大的负奖励加上结束这一集是合适的。但是,不要使用无限的奖励,无论是正面的还是负面的,因为这会导致数值稳定性出现重大问题。只要足够大以抵消与该方向相关的任何临时积极奖励就足够了。对于一个简单的目标寻求环境,除了达到目标之外没有其他积极的奖励,尽早结束这一集就足够了。
如果您没有可以做出决定的玩具环境,那么上面的三个基本场景仍然可以提供帮助。例如,在大多数棋盘游戏中,当环境已经提供了有效动作的规则时,我们对让代理学习规则不感兴趣,因此第一种情况适用 - 仅从环境提供的有效动作中选择动作。