我正在尝试为围棋、黑白棋、黑白棋、跳棋甚至井字棋等游戏构建神经网络,而不是通过计算移动,而是通过让它们评估位置。
输入是任何棋盘情况。输出是对获胜概率或给定位置的有利程度的分数或估计值。其中 1 = 保证赢,0 = 保证输。
在任何给定的回合中,我都可以循环当前玩家的所有可能动作,评估由此产生的游戏情况,并选择得分最高的一个。
希望通过让这个神经网络与自己对战一万亿场比赛,它可以开发出一个合理的评分功能,从而产生强大的比赛。
问题:如何训练这样的网络?
在每场比赛中,我都可以不断地评估和来回移动,直到其中一名 AI 玩家获胜。在这种情况下,获胜玩家的最后一场比赛情况(就在获胜棋步之前)的目标值应该为 1,而相反的情况(失败的玩家)的目标值应该为 0。
请注意,我不打算使评估网络成为双面的。我将游戏情况编码为总是“我自己的”棋子与“对手”,然后从我自己(即当前玩家)的角度或角度评估分数。然后在我选择一个动作之后,我可以说是翻转,所以对手的棋子现在变成我自己的棋子,反之亦然,然后再次评估分数(现在从对方的角度来看)以进行下一个反击。
因此,这样一个网络的输入确实明确地编码了黑白棋子,或者零碎和十字架(在井字游戏的情况下),但只是我的棋子和他们的棋子。然后评估给定的游戏情况对我有多有利,总是假设轮到我了。
我显然可以为游戏中的最后一步分配一个期望的分数或真值(1 表示胜利,0 表示失败)但是我如何将其反向传播到游戏中的早期情况?
我应该以某种方式将 1 或 0 结果分配回去几步,调整因子或学习率会衰减吗?在一个有 40 个回合的游戏中,考虑最后几个情况的好坏(接近赢或输)可能是有意义的,但我想这不应该一直反映到游戏的前几步。
还是我完全误解了这种方法,这不是应该怎么做的吗?