神经网络的输入/输出编码,以学习基于网格的游戏


13

我正在写一个简单的玩具游戏,目的是在其上训练深层神经网络。游戏规则大致如下:

  • 游戏的棋盘由六边形单元组成。
  • 两位玩家都拥有相同的棋子集合,他们可以选择自由放置在棋盘上。
  • 根据彼此的位置和配置放置不同类型的棋子奖励积分(或减少对手的积分)。
  • 得分更高的人获胜。

还有其他规则(关于转弯,件数和类型等),但是在此问题中它们并不重要。我想设计一个深度神经网络,该网络可以通过与自身竞争来反复学习。我的问题是关于输入和输出的表示。尤其是:

  • 由于碎片的模式很重要,所以我一直认为至少要有一些卷积层。电路板可以有各种尺寸,但原则上非常小(在我的测试中为6x10,可以通过几个单元进行扩展)。是否有意义?我可以使用哪种池?
  • 如何代表双方?在这篇关于go的论文中,作者使用了两种输入矩阵,一种用于白宝石,另一种用于黑宝石。在这种情况下也可以工作吗?但是请记住,我有不同类型的片段,例如A,B,C和D。我应该使用2x4输入矩阵吗?对我来说,它似乎很稀疏,效率很低。我担心卷积层将无法正常工作。
  • 我认为输出结果可能是代表董事会位置的矩阵上的概率分布,以及指示要播放的部分的概率单独数组。不过,我也需要代表的能力通过交替之际,这是非常重要的。如何在不降低其在其他概率中的重要性的情况下做到这一点?
  • 而且最重要的是,我是否只强制执行获胜举动还是执行失举?实施获胜的举动很容易,因为我只是将所需的概率设置为1。但是当失败时,我该怎么办?将该移动概率设置为0,将所有其他概率设置为相同值?另外,即使最终得分差异与输出的含义相违背,通过最终得分差异实施移动是否有意义?

另外,我在node.js中开发了游戏引擎,并考虑将Synaptic用作框架,但是我不确定它是否可以与卷积网络一起工作(我怀疑是否有办法固定与本地感知领域相关的权重)。关于与节点兼容的其他库的任何建议?


我们是否应该假设您希望机器学习未知游戏,然后学习如何赢得未知游戏?(与学习如何赢得游戏规则相反(在编写机器学习软件之前,程序员可以使用游戏规则))
FauChristian

Answers:


1
  • 为了表示作品,您应该能够使用单个输入矩阵。只需为不同类型的作品指定一个整数。白色宝石可以是正整数,而黑色宝石可以是负整数。

  • 可以将Sigmoid用于电路板位置置信度,而将线性激活用于件标识符。通过将是另一个Sigmoid输出。我认为您不必担心通行证会被稀释。由于这是一项有价值的动作,因此得分将在很大程度上取决于传球的输出,并且其斜率也会很大。如果您需要选择通过高频进行强化学习目的的行动,那么就属性的概率较高的在随机选择的功能作用。

  • 最终得分差异对举动的可取性有很大影响。较大的分数差异将对功能产生重大影响。因此,您可能要在损失函数中包括得分差异的大小。

这是Deep Q Learning所做的工作。也许您也想对此进行研究。


1

您不需要转换层,因为您无需将图片作为输入(见下文)。或者,您可以尝试使用板子的图片(不同的零件具有不同的形状)。这也可以。然后我将进行2个转换层,跨度为1,内核大小等于一半大小。我会尝试使用单个最大池。

与其他答案不同,我建议使用3d张量作为输入,通道数等于不同的片段。其他两个相等的尺寸将对应于板上的单元数量。NN中的各种变换将无法很好地区分多个整数。这就是为什么最好对片段的类型进行一次热编码。

我只使用一个向量,其中n + 1个分量用于输出:n表示所有可能的移动,1表示通过。它将编码每个动作的预期奖励,而不是概率。

不确定执行移动的意思。但是,当您要使用诸如Q学习之类的方法进行训练时,以一定的概率(例如10%的次数)不时地进行一次完全随机的移动是有意义的。查找https://en.wikipedia.org/wiki/Reinforcement_learning


张量过大。
FauChristian
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.