NEAT XOR 示例在每次运行时给出不同的结果

数据挖掘 Python 神经网络
2022-02-27 02:52:57

我刚刚开始学习使用 NEAT 算法。当我阅读“通过增强拓扑发展神经网络”论文和当前的 python 文档时,我以为我理解了 NEAT 的基础知识。然而,在实践中我遇到了麻烦。

我已经从源代码(https://github.com/CodeReclaimers/neat-python.git)运行了 XOR 示例。但是,当我多次运行“evolve-feedforward.py”、“evolve-feedforward-parallel.py”或“evolve-minimal”代码时,结果会发生变化。例如,

当我运行“evolve-feedforward.py”时,它给出:1

当我第二次运行相同的代码时,它给出:2

它随着每次运行而变化。我还在每次运行之前删除了生成的整洁检查点文件,但结构仍然会发生变化。我想了解造成这种情况的原因,我想我在这里遗漏了一些要点。

1个回答

如果每个网络都近似地实现了 XOR 函数,但在合理的误差范围内,那么这就是 NEAT 的设计行为。

神经网络允许多个等效的解决方案。即使使用固定架构和随机梯度下降来学习一个简单的函数,也很有可能每次都得到非常不同的权重。借助 NEAT,它还探索了替代架构,并且搜索包括对随机数生成器的许多调用以做出决策。

NEAT 中的主要确定性步骤是选择过程 - 将种群成员相互比较以根据适合度对它们进行排名。然而,由于神经网络的多种设计都可以大致同等地解决 XOR 问题,因此不太可能每次都找到相同的问题。

如果您需要在 NEAT 中准确重现实验,您可以通过设置 RNG 种子来实现。我认为这可能只是对random.seed()您正在使用的库的调用,但某些库可能还有其他需要设置的 RNG 实例。