3

我最近尝试自己实现 NEAT(增强拓扑的神经进化),在解决 XOR 问题时,它似乎陷入了某种局部最大值。

我的实现能够按照 NEAT 算法的预期添加隐藏节点和连接,并且我的算法有可能解决它,因为它能够在数百代之后在极少数情况下解决它。

我在这个项目中的所有代码都可以在https://github.com/Maxwell-Hunt/NEAT找到,关于这个算法的原始论文可以在http://nn.cs.utexas.edu/downloads/找到论文/stanley.ec02.pdf

当我试图让它解决 XOR 时,它通常能够得到正确的结果:[0,0] -> [0], [0,1] -> [1], [1,0] -> [1 ],但它也得到不正确的 [1,1] -> 1。

4

1 回答 1

1

我已经在 Ruby 中实现了 NEAT,它很好地解决了 XOR 问题。

https://github.com/flajann2/rubyneat

请随意阅读和窃取我的代码。

调试这样的事情可能很棘手。对于初学者,请密切注意您的健身配方。我没有机会查看您的代码,但它应该提供部分答案,您将在我的代码中看到:

https://github.com/flajann2/rubyneat_examples

您可能还需要密切关注 sigmoid 函数的工作原理。它不应该太陡峭等。

此外,问题也可能是您的选择和交配算法。如果你没有让它们正确,进化可能不会开始。

我的代码需要大约 100-200 次运行才能转换为 XOR 的正确解决方案。然而,它应该会快很多,而且我知道我需要做些什么来改进它,但它确实有效。

希望这会有所帮助。

于 2020-04-30T11:53:56.337 回答