什么是 NEAT(增强拓扑的神经进化)?

What is NEAT (Neuroevolution of Augmenting Topologies)?

我在 youtube 和互联网上查过 NEAT 是什么,但我只能找到使用 NEAT 的项目,但除了 wikipedia 条目(它只说介绍中的内容,而且很混乱),我仍然不知道它是什么,它是一个库,它是一种神经网络,它是一种训练神经网络的方法吗? 对不起,如果这是一个明显的问题。

NEAT,或 Augmenting Topologies 的 Neuro-Evolution,是由 Kenneth O'Stanley [1] 引入的 population-based 进化算法。

该算法基于几个关键特征:

复杂化

初始种群中的网络是最简单的(达到完全没有连接的极端,使输入和输出神经元不连接)并且算法仅 adds new结构元素(神经元、连接)。这样,生成的网络往往非常小。

通过历史标记避免竞争约定

在普通的进化算法中,很容易发生两个个体编码相同(或非常相似)的行为但具有非常不同的基因型。这称为竞争约定。当这些人进行交叉时,他们的 children 可能比任何一个 parent 都差。 NEAT 通过保留新结构元素的历史标记来解决这个问题。当一个新的结构元素被创建(通过结构突变)时,它被分配一个创新编号(并且所有产生相同元素的突变,即使在不同的个体中也被分配这个相同的编号)。然后,当两个个体交叉时,他们的基因型以这样一种方式对齐,即相应的创新数字匹配,并且只交换不同的元素。

物种形成和适应性共享

NEAT 使用 物种 的概念。这只是将种群细分为若干个体组,称为物种。这种细分是基于个体的差异性,这些差异性是根据其基因型的相似比对计算得出的,就像在进行交叉时所使用的那样。交叉来自不同物种的个体的概率比物种内部的交叉小得多。通过促进更相似的 parent 的交配,children 不太可能比 parent 差很多,因为 parent 只是兼容。

此外,在物种内部,适应度在个体之间共享。这有两个目的。 (1) 它保护个体免受突变——当突变发生时,适应度通常会很低,但由于存在适应度共享,个体有时间优化自身(权重)以适应这种新的结构变化。 (2) 促进多样性,因为物种越大,共享的适应度越多,物种成员的适应度越低。

强烈推荐阅读原论文[1]。该算法描述得很好。还有一个 NEAT Users Page 链接到更多论文以及 NEAT 的实现和使用。


[1] Kenneth O. Stanley 和 Risto Miikkulainen。通过增强拓扑进化神经网络。进化计算, 10(2):99-127, 2002.