训练多层感知器打牌

时间:2015-11-28 04:42:19

标签: machine-learning neural-network mathematical-optimization evolutionary-algorithm

我正在编写一个多层感知器神经网络来玩双人纸牌游戏。我想知道是否有更好的方法来优化权重,而不是测试具有随机重生权重的神经网络。

这是我实施神经网络的方式。

  • 第一层中的神经元输出表示卡片中卡片状态的字段值。对于这些神经元中的每一个,存在一组恒定权重。例如,如果卡在AI的手中,则神经元输出的字段等于阵列中的第一个重量,如果卡在桌子上 - 第二个,依此类推。这些恒定的输入权重需要在培训过程中进行优化。
  • 接下来,有几个隐藏的神经元层。拓扑是固定的。前一层中的所有神经元都连接到下一层中的每个神经元。连接'权重需要优化。
  • 最后一层神经元代表玩家的行动。这些对应于可以播放的卡片,以及一些非卡片特定的操作,例如从桌子上取卡或结束转弯。与法律诉讼相对应的最大输出字段值决定了要播放的操作。

有一个警告。我希望神经网络找到最佳策略,所以我无法在单个转弯时进行训练。相反,我必须让它发挥,直到它获胜或失败,并且大约50转。 我想知道在这种情况下训练的最佳方法是什么,其中一个人不知道每个回合的正确响应,但只知道在多次NN评估之后问题是否得到了正确解决,即它赢得了比赛。 / p>

目前,我只想到了一种简单的进化方法,其中一组随机生成的NN多次相互竞争,并且一些最成功的NN仍然用于下一轮,其中NN是没有通过被其他随机的替换。我看到的问题是,在这种方法中,权重需要很长时间才能开始收敛。但由于胜利的比例是许多权重的函数(我预计需要几百个才能正确地模拟问题),这对NN输出有非常非线性的影响,我不知道我是怎么做的。可以使用函数最小化技术。

有没有人知道这个权重优化问题是否会更适合蒙特卡罗技术以外的任何其他问题?

1 个答案:

答案 0 :(得分:1)

我认为这取决于您的纸牌游戏。一般来说,我认为你的陈述是错误的:

  

有一个警告。我希望神经网络找到最佳策略,所以我无法在单个转弯时进行训练。

应该有可能找到一种方法来训练你的网络单独转弯。例如,如果两个玩家可以在每个回合中进行相同的精确移动,则可以根据获胜者在每个回合中所做的操作来训练失败者网络。不可否认,对于大多数纸牌游戏而言可能并非如此,其中给定回合的动作组通常由每个玩家持有的牌决定。

如果您正在玩扑克游戏,请查看this。我们的想法是根据您认为足够好学习的玩家的历史来训练您的网络。例如,如果您有关于您最喜欢的(扑克)玩家游戏的大量数据,您可以训练神经网络来了解他们的动作。然后,在新游戏的每个回合中,做神经网络告诉你做的事情,因为它之前的训练和你在那个回合中可用的数据:你拿着什么牌,牌桌上有什么牌,什么牌你知道你的对手要等等。

你也可以考虑reinforcement learning,它可以使用神经网络,但是基于不同的想法。这可能有助于您处理“无法轮流训练”问题,而无需培训数据。