神经网络玩井字游戏不学习

Neural Network playing Tic Tac Toe doesn't learn

我有一个玩井字游戏的神经网络。 (我知道还有其他更好的方法,但我想了解 NN) 所以 NN 与随机 AI 对战。首先,它应该学会做出允许的举动,即。不选择已经被占用的字段。

然而,这并没有走得太远。 当 NN 选择非法移动时,我优化权重,使到另一个随机选择(合法)字段的距离最小化。 (有一个输出值应介于 1 和 9 之间)。

我的问题是:在改变权重时,以前优化的结果现在也改变了。所以我有这种过度拟合:每次我反向传播以针对一种特定情况优化权重时,针对所有其他情况的决策都会变得更糟!

我知道我可能应该有 9 个输出神经元而不是 1 个,并且可能不应该使用随机场作为目标,因为我认为这会把事情搞砸。我开始改变这个。

不过,问题似乎仍然存在。明显地。我怎样才能在一种情况下改进决策而不忘记所有其他情况? 我想出的一个解决方案是 "remember" 每场比赛都玩过并同时优化所有玩过的游戏。

然而,一段时间后,这对计算要求很高。此外,它似乎进入了对所有可能的棋盘情况进行全面枚举的方向。这对于 Tic Tac Toe 可能是可行的,但如果我转到另一个游戏,比如围棋,这就变得不可行了。

我的错误在哪里?我通常如何解决这个问题?或者我在哪里可以读到它?非常感谢!

为了有效地解决这个问题,你应该考虑强化学习方法,而不是你目前正在做的事情。您要做的是学习玩井字游戏的代理人的行为。智能体在赢得比赛时获得高额奖励,在输掉比赛时获得高额惩罚,在执行非法动作时获得更高的惩罚。我的猜测是,将诸如 Q-learning 之类的方法与神经网络一起使用将完美地工作,即使是非常简单的神经网络也是如此。关于该主题的一篇有用的论文可能是:https://www.cs.toronto.edu/~vmnih/docs/dqn.pdf,或关于 TD-Gammon 的早期论文(我认为您可以使用关键字 TD-Gammon、Q-learning 等轻松找到关于该主题的教程)。

顺便说一句,对于为什么你的模型可能不起作用,一个更实际的答案是你似乎使用一个单位来表示分类输出:如果你想表示 1 到 N 之间的整数,您应该使用值介于 0 和 1 之间的 N 个输出神经元来表示它,并选择具有最高值的神经元作为您的答案。使用值介于 1 和 9 之间的单个神经元会在输出之间产生不自然的不对称性,例如,当预期值为 3 时,网络输出 9 的错误率高于输出 2 的错误率。这显然不是案例:所有错误的答案都同样错误。

希望这对您有所帮助,

最佳