如何在 Alpha Zero (Connect 4) 中为两个玩家使用一个神经网络?

人工智能 神经网络 深度学习 反向传播 深度神经网络 零字母
2021-11-03 11:10:57

首先,很高兴找到这个社区!

我目前正在 Connect4 上实现我自己的 Alpha Zero 克隆。但是,我有一个无法克服的心理障碍。

如何为两个玩家使用一个神经网络?我不明白输入应该是什么。

我只是放在董事会位置吗(6×7) 假设玩家 1 在棋盘上的棋子表示为1, 空板为0和 Player2 的棋子为1?

对我来说,这似乎是最有效的。但是,在反向传播中,我觉得这行不通。如果我为两个玩家更新同一个网络(Alpha Zero 会这样做),难道我不会尝试同时优化 Player1 和 Player 2 吗?

我只是无法理解它。2 个神经网络,一个玩家的每个神经网络对我来说是可以理解的。但是一个网络?我不明白如何反向传播?每次我向后退一层时,我是否应该翻转我的“z”(游戏的结果)?这就是使用一个网络的全部内容吗?

我希望我说得足够清楚。我很困惑,我尽力了。

谢谢您阅读此篇!

1个回答

让我们从另一个角度定义您的问题。假设在这个 RL 问题中,您有两个代理(代理 1 和代理 2)相互竞争以实现自己的目标,即赢得 connect4 游戏。

因此,我们可以说,从agent1的角度来看,他是player1,而player2是agent2。同样,从agent2的角度来看,他是player1,而player2是agent1。

在这里,我们可以使用您提出的相同定义:

“假设玩家1在棋盘上的棋子表示为-1,空棋盘表示为0,玩家2的棋子表示为1”

当轮到 agent1 时,他会收到来自环境的观察(代表棋盘配置)。在这种情况下,agent1 的棋子表示为 -1,空棋盘表示为 0,玩家 2(agent2 的)棋子表示为 1。然后,您可以使用神经网络计算,例如 agent1 的下一个动作。

当轮到agent2时,他会收到另一个来自环境的观察,但是这次你将它自己的棋子表示为-1,而agent1的(从agent2的角度来看player2的)为1。

使用这种方法,神经网络将始终接收一个表示作为输入,其中“它”控制的棋子为 -1,而其竞争对手的棋子为 1,空白空间为 0。从神经网络的角度来看,他不在乎关于哪个代理正在玩,因为实际观察无法区分以计算下一个动作。

因此,您将必须生成两个不同的观察结果,其中您反转其上的符号,具体取决于它是哪个轮次(agent1 的轮次或 agent2 的轮次)。

例如:

代理1的董事会

agent2的董事会