### 在棋盘游戏中使用经典反向传播神经网络与TD学习

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

我的方法如下:

  1. 进行一局游戏。网络作为两个玩家进行游戏,采用贪婪策略并偶尔进行随机移动。
  2. 对于每个存储的游戏位置(从终点-1开始,移动到起始位置),计算估计位置值和期望位置值,例如:

    boards_values[i]['desired_value'] = boards_values[i]['estimated_value'] + 0.4 * ( boards_values[i+1]['estimated_value'] - boards_values[i]['estimated_value'] )
  3. 从整个游戏中创建训练模式,并使用标准反向传播算法以小学习率训练每个模式一个周期。

    NN.train([pattern], iterations=1, N=0.001, M=0.000001)

我在井字游戏中尝试了上述的一些组合(不从一个例子学习,而是从30-40个模式学习,增加/减少学习速度等),但从未训练出理想的玩家(它应该永远不会输给随机玩家)。当神经网络代理与随机玩家对战时,最好的例子之一是:

(作为先手:胜,平,负),(作为后手:胜,平,负),(总计:胜,平,负)
(191, 34, 275), (159, 102, 239), (350, 136, 514) – 新网络
(427, 21, 52), (312, 16, 172), (739, 37, 224) – 经过+50k场游戏后

输入是18个神经元,格式如下:
对于每个棋盘格,设置(1,0)表示x,(0,0)表示空格,(0,1)表示o。输出是一个单位的胜/负概率估计,范围在-1到1之间。

井字游戏只是测试沙箱,当我成功完成后,我将转向更复杂的纸牌游戏(‘失落的城市’)。


回答:

是的,这是相对标准的做法。这是Tesauro在他的程序TDGammon 2.1中采用的方法,该程序通过训练人工神经网络在经过150万场游戏的自举后,玩西洋双陆棋的水平超过了最优秀的人类玩家。

然而,有许多需要注意的地方:

  • 人工神经网络使用起来 notoriously 困难。你是否通过在一些简单的监督学习问题上测试它来确保你的实现按预期工作?

  • TDGammon使用神经网络为每个游戏状态提供启发式效用,并结合2层深度的alpha/beta剪枝算法。使用现代计算机,可以进行更深层次的前瞻(例如,我最近编写了一个alpha/beta搜索算法,在分支因子为7的游戏中轻松管理10层深度的搜索,使用的是解释型(非编译型)代码,并且在考虑启发式之前)。

  • TD学习并不是唯一的强化学习算法。过去我成功地应用了SARSA和Q-Learning,它们通过优先探索看似有前景的策略并忽略看起来不好的策略来加速搜索。你需要将它们与探索策略结合使用,以确保它们有时会探索看起来不好的策略,以避免陷入局部最小值。一个简单的策略如epsilon-greedy,ε = 0.1通常效果很好。

  • 资格迹是加速强化学习算法学习的一种强大方法。使用资格迹的算法包括TD(λ)、SARSA(λ)和Q(λ)。不过你需要小心 – 现在又多了一个需要拟合的参数,这意味着在训练你的模型时更加需要谨慎。使用测试集!

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注