我正在尝试用Python实现一个NEAT(增强拓扑的神经进化)算法,但在观看多个指南和阅读原始论文后,我还有一个问题。当创建一个新的节点/神经元时,它的节点基因是分配一个全局编号还是一个本地编号?
论文听起来像是全局编号,但如果真是这样的话,如果节点创建的顺序不同,即使连接相同,连接基因也可能会有不同;然而,如果是本地编号,那么根据神经网络的不同,连接基因的来源和去向/输入输出连接基因将会有所不同。希望这有意义,如果没有,请告诉我,任何帮助都将不胜感激!
回答:
我甚至不确定“本地编号”是否有意义!创新编号的想法正是为了让我们能够轻松地比较不同基因组之间的结构。
当创建新节点时,通常一个连接会被分成两个,在中间添加一个新节点。这个事件会被记录在日志中,因此如果后来另一个不同的基因组尝试通过分裂相同的连接来创建一个新节点,那么将使用相同的创新编号。
当然,通过一种迂回的方式,可以创建两个结构相同但创新编号不同的基因组。这是被接受的。
我添加了一个这样的例子图表,让我知道你是否在考虑不同的情况:
请注意,一些实现对连接和节点都有创新编号,而另一些实现仅对节点有这样的编号,连接完全由它们连接的节点来描述。在第一种情况下,也可能出现具有不同创新编号的等效连接,但这也没问题。关于这些更细微的细节一直有些争论,但在实践中,似乎影响甚微,如果有的话。