neural-network - 如何判断我的 self 对弈神经网络过度拟合

标签 neural-network reinforcement-learning temporal-difference

我有一个设计用于玩 Connect 4 的神经网络,它衡量游戏状态对玩家 1 或玩家 2 的值(value)。

为了训练它,我让它与自己进行 n 场比赛。

我发现,尽管每 100 场比赛的均方平均值在 100,000 次迭代中不断提高,但 1000 场比赛的游戏体验却比 100,000 场比赛的结果更好。

(我通过挑战 http://riddles.io 排名最高的玩家来确定这一点)

因此我得出的结论是发生了过度拟合。

考虑到 self 对弈,您如何成功测量/确定/估计发生了过度拟合?即,如何确定何时停止 self 游戏?

最佳答案

我对强化学习不太熟悉,更多的是一个监督学习的人。 话虽如此,我觉得你的选择仍然与监督学习相同。

您需要找到在训练空间之外(再次有损地)输入上的性能(我有损地使用这个术语)的点, 开始减少。 当这种情况发生时,你就终止训练。 您需要提前停止。

对于监督学习,这可以通过保留开发集来完成。 作为对测试集的模仿。

就您的情况而言,很明显这将使您的机器人扮演一群真人——这是对测试集的完美模仿。
这正是您所做的。

缺点是与真人对战的速度很慢。
您可以做的就是部分抵消这一点,而不是暂停训练来进行此测试, 拍摄网络快照,例如每 500 次迭代, 并在一个单独的进程中作为机器人启动它,并在网络仍在训练时对其进行测试并记录分数。 然而,这在这种情况下并没有真正的帮助,因为我认为即使是 1 场试玩游戏所花费的时间也比运行 500 次训练迭代所花费的时间要长得多。 如果您收敛得不是那么快,这仍然适用。

我认为,由于这个问题很简单,这是出于学习目的。
在此基础上,你可以伪造真实的人。
Connect4是一款游戏空间足够小的游戏,经典的游戏AI应该能够近乎完美地完成。
因此,您可以设置一个机器人让它玩(作为其开发集等效项),它使用 Alpha-beta 剪枝极小极大值。

针对大约 100 个迭代器运行游戏,如果您的相对分数开始下降,您就知道自己已经过度拟合。

您可以做的另一件事是首先降低其过度拟合的可能性。这不会帮助你检测到它,但如果你让它变得足够硬以至于它过度拟合,你可以在某种程度上假设它不是。 所以 L1/L2 重量惩罚。辍学。较小的隐藏层尺寸。

您还可以增加等效训练集。 您可以与其他机器人进行比赛,而不是纯粹的 self 比赛, 甚至可能使用不同的超参数设置其自身的其他版本。

关于neural-network - 如何判断我的 self 对弈神经网络过度拟合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47878311/

相关文章:

python - ValueError : Input 0 of layer "max_pooling2d" is incompatible with the layer: expected ndim=4, 发现 ndim=5。收到完整形状 : (None, 3, 51, 39, 32)

matlab - 强化学习

machine-learning - 坚持理解 TD(0) 和 TD(λ) 更新使用之间的区别

machine-learning - 时间差异学习的更新

machine-learning - 卷积神经网络中的反向传播

machine-learning - 循环神经网络可以一次学习略有不同的序列吗?

neural-network - 如何从深度 CNN 输出创建不确定性彩色 map 图像?

machine-learning - TensorFlow - random_crop 在 Cifar10 示例中做什么?

python - Ray:在Python脚本中多次调用tune.run()时的内存管理