我应该如何处理无效操作(使用 REINFORCE 时)?

人工智能 强化学习 政策梯度 演员批评方法 加强 奖励设计
2021-10-22 19:38:02

我想创建一个可以玩 5-in-a-row/Gomoku 的 AI。我想为此使用强化学习。

我使用带有基线的策略梯度方法,即 REINFORCE。对于价值和策略函数的近似,我使用了神经网络它具有卷积层和全连接层。除输出之外的所有层都是共享的。策略的输出层有8×8=64(板的大小)输出单元和softmax所以它是随机的。

但是,如果网络产生非常高的无效动作概率怎么办?一个无效的动作是当代理想要检查一个包含一个X或的方块O时。我认为它可能会停留在那种游戏状态。

我应该如何处理这种情况?

我的猜测是使用actor-critic方法。对于无效的动作,我们应该给予负奖励并将转牌传给对手。

4个回答

忽略无效的动作。

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

对我来说,在选择移动之前将所有非法移动的概率设置为零并重新规范化输出向量更有意义。

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

π(θ,a)=eθϕ(s,a)bAeθϕ(s,b)

为了消除非法动作,可以将一组动作限制在合法的范围内,因此Legal(A).

π(θ,a)=eθϕ(s,a)bLegal(A)eθϕ(s,b),aLegal(A)

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

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

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

我最近在扫雷游戏中遇到了类似的问题。

我解决它的方法是完全忽略非法/无效的动作。

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

希望这可以帮助。

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

但实际上你的无效动作只是表示的遗物(它本身很简单很好)。对它们的最佳处理是将它们完全排除在任何计算之外。

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

  • 在位置表示中,您可能会考虑 move a1-a8,它仅在有 Rook 或 Queen 时才属于游戏a1(并且某些其他条件成立)。

  • 在不同的表示中,您可能会考虑 move Qb2同样,这可能属于也可能不属于游戏。如果当前玩家没有皇后,那么它肯定没有。

由于无效动作与表现有关而不是与游戏有关,因此根本不应该考虑它们。