神经网络如何学会玩数独?

人工智能 神经网络 机器学习 游戏-ai 组合游戏 多层感知器
2021-10-31 17:05:38

我刚刚开始了解神经网络,并且我已经使用数值系列进行了几次成功的测试,其中 NN 被训练以找到奇数或缺失值。这一切都很好。

我想要执行的下一个测试是近似数独的解,我认为它也可以被视为一种特殊的数字系列。但是,结果确实令人困惑。

我使用的是一个 MLP,三层中的每一层都有 81 个神经元。所有输出神经元都表现出产生接近 0 或 1 的值的强烈趋势。我已经缩放并截断了输出值。结果如下所示:

Expected/Actual Solution:     Neural Net's Solution:

6 2 7 3 5 0 8 4 1             9 0 9 9 9 3 0 0 3
3 4 8 2 1 6 0 5 7             0 9 9 0 0 0 9 9 0
5 1 0 4 7 8 6 2 3             0 9 1 9 9 0 2 0 4
1 6 4 0 2 7 5 3 8             0 0 5 0 0 9 0 0 7
2 0 3 8 4 5 1 7 6             0 0 0 0 0 9 9 0 9
7 8 5 1 6 3 4 0 2             9 9 9 9 0 6 2 9 0
0 5 6 7 3 1 2 8 4             0 0 0 0 9 9 0 9 0
4 3 1 5 8 2 7 6 0             9 9 0 0 0 0 9 0 9
8 7 2 6 0 4 3 1 5             9 9 0 9 9 0 9 0 9

训练集大小为 100000 Sudokus,而学习率为常数 0.5。我将 NodeJS/Javascript 与 Synaptic 库一起使用。

我不期望你们提供完美的解决方案,而是提示这种行为是否是已知问题的典型症状,例如神经元太少/太多、训练集小等。

2个回答

我认为将数独视为神经网络中的回归问题是错误的方法。首先,您必须了解什么是回归。“回归”是指您在给定特定参数的情况下预测值,其中参数与您必须预测的值相关。发生这种情况是因为核心神经网络是“函数逼近器”,它们通过使用大量数据调整权重来对函数进行建模。它们倾向于形成高度非线性的边界,以在高维数据空间内部分离类。

数独不适合这种情况,数独的组合复杂性对于神经网络来说太高了,即使你添加了很多层,这本身就是一个完全不同的问题。您不能在这里“回归”完美数独的正确值,它们不是图像中“像素”强度之类的数字。

但是,您可以应用强化学习技术来学习解决数独的最佳策略。

你已经提到了数独的“近似”解决方案,“近似”是什么意思?如果你的意思是只有几个正方形不合适,那么这是一个错误的假设,因为神经网络被证明是很好的图像分类器,因为它们在这种情况下对平移不变性具有鲁棒性,这不是你需要的.

然而,你可以做一个小实验来看看神经网络实际学到了什么,用像素值强度替换数字,并在数独图像上训练一个生成对抗网络,并查看它产生的数独图像,看看实际上是什么网络学不来。

你可以看看这篇用神经网络解决你的问题的论文。您可以使用 satnet 层的 pytorch 实现:satnet 层 API在这个监督设置中,该层还学习模型的布尔约束。您可以在 github 存储库中找到一个 sodoku 求解器的示例。