微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在NEAT中,如果之前已拆分相同的连接,如何为新节点编号?

如何解决在NEAT中,如果之前已拆分相同的连接,如何为新节点编号?

我现在正在与NEAT合作,关于新创建的节点编号,我有几个问题。我的第一个假设是,无论何时拆分某个连接(例如,用创新编号标识),都应将其拆分为相同的两个连接并创建相同的新节点。但是,当满足某些条件时,这似乎会产生奇怪的结果。

我有一个非常基本的示例,假设我的起始网络(输入1&2,输出3)由以下连接组成:
(1,3),(2,3)
假设第一个连接已拆分以创建此网络:
(1,4),(4,3)
然后将(1,3)连接重新添加为以下形式:
(1,3),(1,3)

如果再次将(1,3)连接拆分为 ,则不应再次将其拆分为(1,4)和(4,3),对吗?而是变成(1,5)&(5,3)之类的东西。

这是否意味着,每当连接断开时,必须为新节点分配一个全新的节点号吗?

这会不会造成物种数量的大规模人为爆炸,因为基本上每个连接的拆分都会创建两个全新的连接?

解决方法

您是正确的,因为每当连接被拆分时,都必须给新节点一个全新的node_id,并且拆分的连接不能再次拆分为(1,4)和(4,3)基因,因此消除了现有的基因基因。

因此,在[(1,4),(4,3),(2,3),(1,3)]基因型中拆分(1,3)连接确实会导致添加(1 ,5)和(5,3)基因。

但是,这不会导致物种数量的大规模爆炸。原因如下: 这些连接中的每一个都分配有一个特定的标识符,称为创新编号。如果相同突变(分裂连接(1,3))发生在同一世代突变阶段的2个独立基因组中,则为产生的连接分配相同的创新编号。

此创新编号用于比较基因组并将其聚类为物种。不是两个单独的基因组可能共有的node_ids数量相同(如果您这么想)。


请看下图,该图取自O.Stanley的博士学位论文,该论文说明了NEAT中的交叉操作,尽管很好地说明了对齐和比较2个独立基因组的过程。将基因组聚类到物种时,也进行了类似的比对和比较。

NEAT crossover illustration


如果您想了解有关NEAT的形成方法的更多信息,请查看O.Stanley的PhD thesis on NEAT(这是与可用的NEAT官方规范最接近的东西),特别是第3.3章。

如果您想全面了解神经进化的更多信息,请查看以下introduction to the fundamentals

希望这会有所帮助,并随时询问是否仍然不清楚。 =)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。