NEAT 是否只要求连接基因标有全球创新编号?
来自NEAT 论文
每当新基因出现(通过结构突变)时,就会增加一个全局创新编号并分配给该基因。
似乎任何基因(节点基因和连接基因)都需要一个创新号。但是,我想知道节点基因创新编号是什么。是否为总体的所有元素提供相同的节点 ID?连接基因创新数还不够吗?
此外,NEAT 论文包括下图,它没有显示节点基因上的任何创新编号。
NEAT 是否只要求连接基因标有全球创新编号?
来自NEAT 论文
每当新基因出现(通过结构突变)时,就会增加一个全局创新编号并分配给该基因。
似乎任何基因(节点基因和连接基因)都需要一个创新号。但是,我想知道节点基因创新编号是什么。是否为总体的所有元素提供相同的节点 ID?连接基因创新数还不够吗?
此外,NEAT 论文包括下图,它没有显示节点基因上的任何创新编号。
实际上是相反的:连接 ID 是有争议的!
节点始终具有创新 ID(在图像中,它只是它们的标识号)。
节点 ID 足以识别连接。如果一个连接连接节点 3 和 6,那么它与连接节点 3 和 6 的另一个连接相同:不需要额外的 ID。那么为什么会有额外的创新 ID 呢?
一方面,这是一种实现选择:也许这些额外的 ID 可以让您创建更复杂但更快的代码?
另一方面,关于两个节点之间的连接在进化的不同时期是否意味着相同的事情存在争议。如果您没有创新 ID,那么您就无法区分 3 和 6 中的旧连接以及后来在不同基因组中独立创建的另一个(想象旧连接首先被删除)。这相关吗?如前所述,这是一场公开辩论。当然,这在基本层面上并不重要!
这个问题(和我的答案)与Stack Overflow 上的另一个问题有关。
在原始论文中,创新 ID 仅在连接上。
连接是保存信息的对象;节点可以通过连接来识别。
这张图片代表了一个可能的交叉算子,它区分了不相交的基因和多余的基因,因此根据这些基因创建了子代。这是我硕士论文的一部分,我很乐意扩展这个话题,但现在我只是用它作为例子。
在图像中,我们假设连接两个节点的连接具有相同的创新编号。
如您所见,无需为节点分配创新编号:节点只是连接所说的结果。这也允许使用更动态的方法,甚至可以在构建无效网络之前发现它们(检查是否存在未接收任何输入或未提供任何输出的循环或节点)并纠正它们以便仅获得有效图. 添加节点只是因为存在指向该特定节点的连接。这足以授予其存在(子 2 中的节点号 8)。
最后一点,对于数据规范化理论(规范化是在数据库中组织数据以避免数据冗余,插入异常,更新异常和删除异常的过程)我们应该不惜一切代价避免冗余,这就是为什么我们应该尽量保持跟踪尽可能少的对象。因此,如果我们可以从连接中扣除节点,我们应该这样做。