Tic tac toe机器学习 - 有效的动作

时间:2016-01-31 22:26:04

标签: machine-learning deep-learning tic-tac-toe torch q-learning

我正在玩机器学习。特别是Q-Learning,你有一个状态和行动,并根据网络的运作情况给予奖励。

现在对于初学者来说,我为自己设定了一个简单的目标:训练一个网络,以便为井字游戏(对于一个随机对手)发出有效的动作作为动作。我的问题是,网络根本不会学习,甚至会随着时间的推移而变得更糟。

我做的第一件事就是与火炬接触以及深入的q学习模块:https://github.com/blakeMilner/DeepQLearning

然后我写了一个简单的tic-tac-toe游戏,其中随机玩家与神经网络竞争并将其插入此样本https://github.com/blakeMilner/DeepQLearning/blob/master/test.lua的代码中。网络输出由9个节点组成,用于设置相应的单元格。

如果网络选择一个空单元格(其中没有X或O),则移动有效。根据这个,我给予积极的奖励(如果网络选择空单元格)和负面奖励(如果网络选择一个被占用的单元格)。

问题是它似乎永远不会学习。我尝试了很多变化:

  • 将tic-tac-toe字段映射为9个输入(0 =单元格为空,1 =播放器1,2 =播放器2)或27个输入(例如,对于空单元格0 [empty = 1,player1 = 0, player2 = 0])
  • 将隐藏节点数量改为10到60之间
  • 尝试了多达60k次迭代
  • 在0.001和0.1之间改变学习率
  • 为失败提供负面奖励,或仅为成功奖励,不同的奖励值

没有任何作用:(

现在我有几个问题:

  1. 因为这是我第一次尝试Q-Learning,所以我从根本上做错了吗?
  2. 哪些参数值得改变? “大脑”的东西有很多:https://github.com/blakeMilner/DeepQLearning/blob/master/deepqlearn.lua#L57
  3. 隐藏节点的数量有多好?
  4. https://github.com/blakeMilner/DeepQLearning/blob/master/deepqlearn.lua#L116定义的简单网络结构是否对此问题过于简单?
  5. 我是不是太急躁了,不得不训练更多的迭代?
  6. 谢谢,

    -Matthias

1 个答案:

答案 0 :(得分:2)

的Matthias,

您似乎正在使用一个输出节点? “前向步骤中网络的输出是1到9之间的数字”。如果是这样,那么我相信这就是问题所在。我没有一个输出节点,而是将其视为分类问题,并且有九个输出节点对应于每个电路板位置。然后将这些节点的argmax作为预测的移动。这就是设置Go游戏的网络(有361个输出节点,每个节点代表棋盘上的交叉点)。

希望这有帮助!