machine-learning - 神经进化 : NEAT algorithm innovation numbers

标签 machine-learning neural-network genetic-algorithm evolutionary-algorithm es-hyperneat

我一直在阅读《增强拓扑的神经元进化》,有一件小事一直困扰着我。在阅读 Kenneth Stanley 的 NEAT 论文时,我发现了这个数字:

NEAT mutation

第一次突变时,创新数字从 1,2,3,4,5,6 变为 1,2,3,4,5,6,7。

在第二个中,它从 1,2,3,4,5,6 变为 1,2,3,4,5,6,8,9。

我的问题是为什么它跳过数字 7 并直接上升到 8?我没有找到任何与删除创新编号相关的内容。

第二个数字也是如此,亲本 1 是如何丢失 6,7 的,而亲本 2 中的第 8 个基因去了哪里?

NEAT crossover

最佳答案

创新编号(我将简称为 IN)是一种特定结构的标签。因此,从 1 号神经元到 2 号神经元的连接将有一个 IN,例如1 并且具有该连接的所有网络都会将此连接标记为 IN 1。当创建新连接时(通过添加连接突变或添加节点突变),首先检查在“数据库”中是否存在这样的连接IN。如果已经存在这样的连接,则使用其 IN。如果不是,则增加 IN 计数器,新连接获取此新 IN 并存储在数据库中。

在上半部分的第一张图中,从神经元 3 到神经元 5 添加了一个新连接。如果这是整个群体中出现的第一个这样的连接,则增加 IN 计数器并使用这个新的 IN那个连接。如果它已经在其他地方发生过,您可以使用它的 IN 而不是创建一个新的。可能是这两种情况,我们不知道其他人是什么样子。恰好连接 3->5 有 IN 7。

现在,在第一张图的底部,您在神经元 3 和 4 之间添加了一个神经元 6,这意味着您添加了连接 3->6 和 6->4。同样,您首先询问“数据库中是否有连接 3->6 的 IN?”如果是,则使用该 IN,如果不是,则增加计数器。其他连接也是如此。在该图中,您可以想象所有这些新连接都是新连接,因此在上部,IN 计数器为 6,对于尚未遇到的新连接,您增加了 IN 计数器并将 7 分配给该连接。然后发生了底部部分,有两个全新的连接,因此您将 IN 计数器增加到 8 和 9。在底部部分,没有连接 3->5 有 IN 7,所以这就是 IN 7 不存在的原因那里。

关于第二张图,它只是一个示例,用于展示当存在不相交的 IN 时交叉是如何工作的。 parent 就是这样,只是为了举例而已。然而,他们本来可以很容易地达到这种状态。想象一下,在进化的某个早期时间点,父代 1 只有 IN 1 到 5,而 5 是迄今为止最新的 IN。然后,在群体的其他地方,在神经元 5 和 4 之间添加了一个新神经元(6 号),即创建了新连接 5->6 和 6->4。由于还没有遇到这样的连接,IN 计数器增加到 6 和 7。然后,在此之后,通过添加新连接 1->8 来改变父 1。由于这也是新的,因此分配了新的 IN 8。

关于machine-learning - 神经进化 : NEAT algorithm innovation numbers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41985169/

相关文章:

python - 在尝试使用 train_test_split 时,我的测试集形状很奇怪

javascript - 使用神经网络预测下一个结果

algorithm - 有没有办法改进我的遗传算法?

java - 二叉树遗传规划

python - scikit-learn 与 make_scorer 的斗争

machine-learning - 如何确定 caffe blob 的输入尺寸

python - tf.nn.dynamic_rnn() "outputs"与 "state"的概念理解

c# - C# 中的 NeuralNet 单输出转换为多输出 c# dummy

python - 使用矩阵作为鸭嘴兽 MOEA 的输入

python - 安装turicreate时出现tensorflow错误?