Artificial intelligence 经典bp神经网络与TD学习在棋盘游戏中的应用

Artificial intelligence 经典bp神经网络与TD学习在棋盘游戏中的应用,artificial-intelligence,neural-network,reinforcement-learning,Artificial Intelligence,Neural Network,Reinforcement Learning,我想问,在棋盘游戏中使用标准反向传播神经网络和TD学习方法是否有意义 我的方法如下所示: 玩一局。Net有时扮演贪婪策略和随机移动的玩家 对于每个存储的游戏位置(从终端1开始并移动到起始位置),计算估计位置值和期望位置值,例如 boards_values[i]['desired_value'] = boards_values[i]['estimated_value'] + 0.4 * ( boards_values[i+1]['estimated_value'] - boards_values[

我想问,在棋盘游戏中使用标准反向传播神经网络和TD学习方法是否有意义

我的方法如下所示:

  • 玩一局。Net有时扮演贪婪策略和随机移动的玩家
  • 对于每个存储的游戏位置(从终端1开始并移动到起始位置),计算估计位置值和期望位置值,例如

    boards_values[i]['desired_value'] = boards_values[i]['estimated_value'] + 0.4 * ( boards_values[i+1]['estimated_value'] - boards_values[i]['estimated_value'] )
    
  • 使用标准反向传播算法,从整个游戏结束训练中为网络创建训练模式,每个训练模式在1个历元内具有较小的学习率

    NN.train([pattern], iterations=1, N=0.001, M=0.000001)
    
  • 我在我的tic-tac-toe游戏中尝试了以上的一些组合(不是从一个例子而是从30-40个模式中学习,降低/提高学习速度等等),但从未训练过理想的玩家(它应该永远不会输给random)。当NN代理与随机玩家比赛时,最好的例子之一是:

    (第一名:赢、平、输),(第二名:赢、平、输),(总和:赢、平、输)
    (19134275),(159102239),(350136514)-新鲜净水
    (427,21,52),(312,16172),(739,37224)-在+50k游戏之后

    输入为18个神经元,格式为:
    对于x的每个板单元组(1,0),空单元组(0,0)和o的板单元组(0,1)。输出为-1,1范围内的一个单位赢/输概率估计


    Tic tac toe只是在测试沙盒,当我成功完成后,我将转向更复杂的纸牌游戏(“失落的城市”)。

    是的,这是相对标准的。这是特萨罗在他的程序中所采取的方法,该程序训练了一个人工神经网络,使其能够比最好的人类玩家更好地玩双陆棋(经过150万场比赛的自举训练)

    然而,有许多警告:

    • 众所周知,人工神经网络很难正确使用。通过在一些简单的监督学习问题上进行测试,您是否确保了您的实现按预期执行

    • TDGammon使用神经网络为每个游戏状态提供启发式实用程序,并将其与2层alpha/beta修剪算法相结合。在现代计算机上,可以使用更深入的前瞻性(例如,我最近编写了一个代码,可以轻松管理分支因子为7的游戏上的10层搜索,在解释(非编译)代码上,并且在考虑启发式之前)

    • TD学习并不是唯一的强化学习算法。我在过去成功地应用了SARSA和Q-Learning,它们通过优先探索看起来有希望的策略而忽略看起来不好的策略来加速搜索。您需要将它们与an结合起来,以确保它们有时会探索看起来不好的策略,以避免陷入局部极小值。ε=0.1的简单策略通常效果良好

    • 是强化学习算法中加快学习速度的有效方法。使用合格性跟踪的算法包括TD(λ)、SARSA(λ)和Q(λ)。不过,您需要小心——现在有另一个参数需要拟合,这意味着在训练模型时更重要的是要小心。使用测试集


    我使用的神经网络是bpnn.py,我以前用一些问题测试过它。如果我将计算移到类似于期望输出[I]=期望输出[I]+0.4(期望输出[I+1]-估计输出[I])的位置,并从最后一步移到第一步减少I,它会是某种形式的TD(λ)^^^校正:期望输出[I]=估计输出[I]+0.4(期望输出[I+1]-估计输出[I])