我从来没有真正做过任何实际的机器学习,这对我来说只是一个爱好。
我正在尝试创建一个使用神经网络来学习棋盘游戏“7 Wonders”的过程。这是我希望这个实验完成的方式:
- 获取所有输入(我已经计算了其中的 1278 个)。
- 通过具有任意数量隐藏层的神经网络发送输入,随机初始化权重,并计算所有可能采取的行动的值(231 个输出,在任何给定时间有一些有效或无效。如果选择的行动无效,则选择基于 q 值的下一个最佳输出。)
- 对于第一轮,在 100 场比赛的整个游戏中使用相同的隐藏层及其偏差/权重,并获得这组偏差/权重产生的平均分数(适应度)。
- 少量改变隐藏层的偏差/权重。
- 使用新的偏差/权重集再运行 100 场比赛。如果这组产生更好的分数,使用这个新组作为下一代(新的成功的一代)。否则,根据原始父项变异一个新集合。
据我了解,到目前为止我所描述的是随机梯度下降。这可能会产生次优的最小值,因此为避免这种情况,我想通过执行相同的过程来介绍新父母进行交配。在 2 位父母的任意代数之后,结合他们的偏见/权重,并将上述过程重新应用于新孩子。我会重复这个过程,直到一个孩子几乎总是赢得比赛。
我的问题如下:
- 我描述的这个实验有意义吗?
- 我正在尝试用 Python 编写这一切。我一直在尝试使用 sklearn
MLPClassifier,但我似乎无法弄清楚如何随机初始化我的隐藏层,也无法弄清楚如何手动操作隐藏层。我并没有尝试使用监督方法(据我所知)训练 MLP,这似乎是 sklearn 中的这个类的用途。这是一个很好的图书馆吗?有没有人对此有不同的图书馆建议?