在强化学习中如何处理无效动作?


20

我想创建一个可以玩五行/五子棋的AI。正如我在标题中提到的那样,我想为此使用强化学习。

我将策略渐变方法(即REINFORCE)与基线一起使用。对于价值和政策函数的近似,我使用了神经网络。它具有卷积和完全连接的层。除输出外,所有层都是共享的。该策略的输出层具有8×8=64(单板的大小)输出单元,并在其上具有softmax。因此它是随机的。但是,如果网络产生无效移动的可能性很高,该怎么办?无效的举动是当代理要检查其中有一个“ X”或“ O”的正方形时。我认为它可能会停留在该游戏状态中。

您能为这个问题推荐任何解决方案吗?

我的猜测是使用演员批评方法。对于无效的举动,我们应该给予负奖励,并将转牌转移给对手。

Answers:


10

只是忽略无效的举动。

为了进行探索,您可能不只是以最高的概率执行移动,而是根据输出的概率随机选择移动。如果您仅惩罚非法举动,它们仍然会保留一定的可能性(但是很小),因此会不时地执行(但是很少执行)。因此,您将始终保留偶尔会进行非法举动的代理人。

对我来说,将所有非法举动的概率设置为零并在选择举动之前对输出向量进行重新归一化是更有意义的。


谢谢。可能我不清楚,但我根据输出的概率随机选择了此举。我会尝试您的建议,将非法移动的可能性设置为零,然后看看会发生什么。祝你今天愉快。
莫尔纳尔伊什特万

8

通常,在使用线性函数逼近的策略梯度方法中,softmax方法使用以下公式来计算选择动作一种的概率。这里,权重是θ,特征ϕ是当前状态s和一组动作一种一个动作的函数。

πθ一种=Ëθϕs一种b一种Ëθϕsb

为了消除非法举动,可以将一系列行动限制为仅合法的行动,因此大号ËG一种一种

πθ一种=Ëθϕs一种b大号ËG一种一种Ëθϕsb一种大号ËG一种一种

在伪代码中,公式可能如下所示:

action_probs = Agent.getActionProbs(state)
legal_actions = filterLegalActions(state, action_probs)
best_legal_action = softmax(legal_actions)

无论使用线性函数还是非线性函数逼近(您的神经网络),其想法都是在计算softmax时仅使用合法移动。这种方法意味着座席只会给出有效的举动,如果您以后想要更改游戏,这是很好的,并且动作受限选择之间的价值差异会更容易被座席区分。随着可能采取的行动数量减少,它也会更快。


很有用。感谢您发布方程式和伪代码!
周公克

1
数学和伪代码在此处不匹配。合法移动概率上的Softmax将调整相对概率。例如,删除第一项和第三项的过滤后的(0.3,0.4,0.2,0.1)在您的公式中将是(0.0,0.8,0.0,0.2),但是使用伪代码将是(0.0,0.57,0.0,0.42)。在计算动作概率之前,伪代码需要进行logit处理。
尼尔·斯莱特

4
如何计算经过过滤的Softmax版本的梯度?似乎这样才能使反向传播成功进行,是吗?
brianberns

@brianberns您设法找到答案了吗?对我来说似乎是这种情况,但是在我的玩具示例中,使用未过滤的softmax的对数概率,我只是得到了正确的答案...
trytolearn

5

恕我直言,无效举动的想法本身就是无效的。想象一下在坐标处放置一个“ X” (9, 9)。您可以将其视为无效举动,并给予负面奖励。荒诞?当然!

但是实际上,您的无效举动只是表示形式的遗物(其本身简单明了)。最好的处理方法是将它们完全排除在任何计算之外。

这在国际象棋中更加明显:

  • 在位置表示中,您可能会考虑move a1-a8,只有在有Rook或Queen的情况下a1(并且其他一些条件成立),才属于游戏。

  • 在另一种表示形式中,您可以考虑move Qb2。同样,这可能属于游戏,也可能不属于游戏。当当前玩家没有女王时,则肯定没有女王。

由于无效举动与表示方式有关,而不与游戏有关,因此完全不应考虑它们。


1
好点。在数独上玩的[M]游戏中,约束使得在首次放置后很多位置(坐标+值)不合法。从安置的角度考虑这些非法职位没有任何价值,但是,重要的战略层是认识到哪些安置使剩余的未使用职位的价值最小化。(即,如果我在此处放置8,则会阻止我的对手在该行,列或区域中放置8。从本质上讲,“此位置从游戏板上移除了多少战略位置?”)
DukeZhou

5

我最近在Minesweeper遇到了类似的问题。

我解决问题的方法是完全忽略非法/无效举动。

  1. 使用Q网络预测您所有动作(有效和无效)的Q值
  2. 通过将所有无效移动设置为零/负数的Q值来预处理Q值(取决于您的情况)
  3. 使用您选择的策略从精确的Q值中选择一个动作(即贪婪或Boltzmann)
  4. 执行选定的操作并恢复您的DQN逻辑

希望这可以帮助。


1
关于此,我要补充的唯一一件事是,当您将非法(s,a)对的Q值设置为较大的负值时,您必须记住要对DQN进行反向传播,因此必须训练它不要选择那些状态,动作下次配对。
SN

但是我确实想知道设置大的-ve目标Q值会对损耗/误差函数的连续性或形状产生什么影响(从而影响梯度搜索)。您的经验是什么?
SN

1
@SN我明白你的意思了。这个想法是选择具有最高Q值的动作,而不是无效动作。接下来,您执行该操作并在更新规则中使用该操作(例如,从长远来看,训练您的DQN以支持该操作)。这是使选定动作的将来Q值更高,因此更有利。这将作非法行为Q值虽然降低,这并不重要,因为他们总是在过滤掉(不考虑)。如果您想让我进一步举例说明,请告诉我。:)
Sanavesa

1
@Sanavesa肯定是有道理的,您实际上是指望DQN最终了解通过硬敲门的正确选择。但是,在只有一个或几个法律选择的情况下,您的学习将非常缓慢。我建议的方法是将领域K纳入问题以加快学习速度的一种方法。这也是我认为您在原始帖子中所做的事情,您在其中写过“将无效的移动设置为零/负数的Q值”
SN

1
@SN精确!两种方法都有其优点。取决于应用程序,是因为它更容易学习法律动议,还是直接忽略它们。对于大型复杂的应用程序,我认为忽略无效动作对于代理人来说要快得多,但是请不要在此引用我。
Sanavesa
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.