【问题标题】:Training a multilayer perceptron to play cards训练多层感知器打牌
【发布时间】:2023-03-29 16:07:01
【问题描述】:

我正在编写一个用于玩两人纸牌游戏的多层感知器神经网络。我想知道是否有比使用随机重新生成的权重测试神经网络更好的方法来优化权重。

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

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

有一个警告。我希望神经网络找到最佳策略,所以我不能在单独的回合中训练它。相反,我必须让它玩,直到它赢或输,这大约是 50 回合。 我想知道在这种情况下最好的训练方法是什么,在这种情况下,人们不知道每一轮的正确响应,但只知道在多次 NN 评估后问题是否正确解决,即它赢得了比赛。

目前,我只想到了一种简单的进化方法,其中一组随机生成的 NN 多次相互对抗,并且一些最成功的 NN 留在下一轮,其中没有的 NN t pass 被其他随机的替换。我看到的问题是,在这种方法中,权重开始收敛需要很长时间。但是由于获胜的分数是许多权重的函数(我预计需要数百个才能正确建模问题),这些权重对 NN 输出具有高度非线性影响,所以我不知道如何使用函数最小化技术。

有谁知道这个权重优化问题是否会比蒙特卡洛技术更适用于其他任何问题?

【问题讨论】:

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


    【解决方案1】:

    我认为这取决于你的纸牌游戏是什么。总的来说,我认为你的这种说法是错误的:

    有一个警告。我希望神经网络找到最佳策略,所以我不能在单独的回合中训练它。

    应该有可能找到一种方法来在各个转弯处训练您的网络。例如,如果两个玩家在每一轮都可以做出完全相同的一组动作,那么您可以根据获胜者在每一轮所做的事情来训练失败者网络。诚然,对于大多数纸牌游戏来说,情况可能并非如此,在这些游戏中,给定回合的一组动作通常由每个玩家持有的牌决定。

    如果您正在玩扑克之类的游戏,请查看this。这里的想法是根据您认为足以学习的玩家的历史来训练您的网络。例如,如果你有很多关于你最喜欢的(扑克)玩家游戏的数据,你可以训练一个神经网络来学习他们的动作。然后,在新游戏的每一轮,根据神经网络之前的训练和截至该轮的可用数据,执行神经网络告诉你的操作:你拿着什么牌,桌上有什么牌,什么牌你知道你的对手拿着等。

    您也可以考虑reinforcement learning,它可以利用神经网络,但基于不同的想法。这可能会帮助您解决“无法在单个转弯上进行训练”的问题,而无需训练数据。

    【讨论】:

    • 感谢您的评论!我知道在某些游戏中可以轮流训练,而且我读到人们这样做是为了扑克。但我认为这对于我感兴趣的游戏来说是不可能的。以杜松子酒为例。此外,轮流训练通常需要与其他人的游戏数据库进行比较,我希望我的神经网络找到自己的策略,而不是模仿别人。我想知道的事情之一是神经网络是否可以学得足够好,以至于可以用来学习一些有关策略的东西。我会看看你的链接。
    猜你喜欢
    • 2021-12-15
    • 2014-11-04
    • 2017-06-12
    • 2021-07-13
    • 1970-01-01
    • 2016-03-02
    • 2021-09-07
    • 2010-10-05
    • 2013-12-23
    相关资源
    最近更新 更多