我正在玩机器学习。特别是Q-Learning,你有一个状态和行动,并根据网络的运作情况给予奖励。
现在对于初学者来说,我为自己设定了一个简单的目标:训练一个网络,以便为井字游戏(对于一个随机对手)发出有效的动作作为动作。我的问题是,网络根本不会学习,甚至会随着时间的推移而变得更糟。
我做的第一件事就是与火炬接触以及深入的q学习模块:https://github.com/blakeMilner/DeepQLearning。
然后我写了一个简单的tic-tac-toe游戏,其中随机玩家与神经网络竞争并将其插入此样本https://github.com/blakeMilner/DeepQLearning/blob/master/test.lua的代码中。网络输出由9个节点组成,用于设置相应的单元格。
如果网络选择一个空单元格(其中没有X或O),则移动有效。根据这个,我给予积极的奖励(如果网络选择空单元格)和负面奖励(如果网络选择一个被占用的单元格)。
问题是它似乎永远不会学习。我尝试了很多变化:
没有任何作用:(
现在我有几个问题:
谢谢,
-Matthias
答案 0 :(得分:2)
的Matthias,
您似乎正在使用一个输出节点? “前向步骤中网络的输出是1到9之间的数字”。如果是这样,那么我相信这就是问题所在。我没有一个输出节点,而是将其视为分类问题,并且有九个输出节点对应于每个电路板位置。然后将这些节点的argmax作为预测的移动。这就是设置Go游戏的网络(有361个输出节点,每个节点代表棋盘上的交叉点)。
希望这有帮助!