【问题标题】:Tic tac toe machine learning - valid moves井字游戏机器学习 - 有效动作
【发布时间】:2016-05-09 07:12:08
【问题描述】:

我在玩机器学习。尤其是 Q-Learning,你有一个状态和动作,并根据网络的表现给予奖励。

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

我做的第一件事就是接触 Torch 和一个深度 q 学习模块:https://github.com/blakeMilner/DeepQLearning。

然后我编写了一个简单的井字游戏,其中一个随机玩家与神经网络竞争,并将其插入到此示例 https://github.com/blakeMilner/DeepQLearning/blob/master/test.lua 的代码中。网络的输出由 9 个节点组成,用于设置各自的单元格。

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

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

  • 将井字游戏字段映射为 9 个输入(0 = 空单元格,1 = 玩家 1,2 = 玩家 2)或 27 个输入(例如,对于空单元格 0 [空 = 1,玩家 1 = 0,播放器2 = 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. 我是不是太不耐烦了,必须训练更多的迭代?

谢谢,

-马蒂亚斯

【问题讨论】:

  • 你能发布你的代码吗?
  • 我的建议:第一步忘记神经网络,坚持所有井字游戏状态值的表格表示。他们的电话号码是3^9 = 19683。使用 Q-Learning,由于
  • @John Wakefield:我目前正在创建它的简化版本(2x1 网格而不是 3x3 以最小化状态空间)。完成后我会发送代码。
  • @davidhigh:我将阅读线性回归(在 AI 意义上)。然而,我的主要目标是建立一个小型测试平台,用于学习 Q-Learning,然后将其应用于我想到的更难的问题。

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


【解决方案1】:

马蒂亚斯,

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

希望这会有所帮助!

【讨论】:

  • 感谢您的回答。我实际上使用了 9 个输出节点,我在最初的问题中没有很好地表达这一点。为了清楚起见,我现在对其进行了编辑。
猜你喜欢
  • 2011-12-22
  • 1970-01-01
  • 2015-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多