当交叉产生一个有残疾基因的孩子时,如何避免非功能性神经网络?

人工智能 神经网络 整洁的 神经进化
2021-10-28 07:49:51

我正在实施Stanley 的NEAT(增强拓扑的神经进化)。我在基因组交叉过程中面临一个问题。

假设两个有连接的网络

Genome1 = {    
    (1, Input1, Output), // numbers represent innovation numbers
    (2, Input2, Output)    
} // more fit

Genome2 = {    
    (1, Input1, Output),
    (2, Input2, Output), // disabled
    (3, Input2, Hidden1),
    (4, Hidden1, Output)    
}

被交叉,则 fitter 父级中的连接 (Input2, Output) 有可能被禁用(第 109 页,第 3.2 节,图 4),

如果遗传基因在任一父母中被禁用,则有一个预设的机会被禁用。

从而产生以下后代:

Child = {
    (1, Input1, Output),
    (2, Input2, Output) //Disabled
}

从而使网络无法正常工作。

同样,通过这个机会,节点可能会在交叉后处于无用状态(如没有传出连接或根本没有连接)。

如何防止这种情况,或者我在这里遗漏了什么?

1个回答

Input1在您的示例中,即使Input2已禁用,输出节点仍会从中获取值。

如果孩子是:

Child = {
          (1, Input1, Output1),
          (2, Input2, Output2) //Disabled
         }

然后Output2将返回 0,表示它没有被激活。

对于您的第二个问题,这取决于您的实施。你可以:

1.) 只使用交叉中的连接基因,并从连接基因中导出你的节点基因

2.)测试是否每个节点都在使用,并删除那些没有