我在YouTube和互联网上查找了NEAT的相关信息,但只能找到使用NEAT的项目,除了维基百科的条目(仅在介绍中说明了它是什么,而且非常令人困惑)外,我仍然不知道它是什么,它是一个库吗?是一种神经网络吗?还是一种训练神经网络的方法?如果这是一个显而易见的问题,我深表歉意。
回答:
NEAT,或称增强拓扑的神经进化,是由Kenneth O’Stanley [1] 引入的一种基于种群的进化算法。
该算法基于几个关键特征:
复杂化
初始种群中的网络是最简单的(甚至可能没有任何连接,输入和输出神经元未连接),算法只会增加新的结构元素(神经元、连接)。这样,生成的网络往往非常小。
通过历史标记避免竞争惯例
在普通的进化算法中,很容易发生两个个体编码相同(或非常相似)的行为,但基因型却大不相同。这被称为竞争惯例。当这些个体进行交叉时,它们的后代很可能比任何一个父本都要差。NEAT通过保留新结构元素的历史标记来解决这个问题。当创建一个新的结构元素(通过结构变异)时,会分配一个创新编号(所有产生相同元素的变异,即使在不同的个体中,也会分配相同的编号)。然后,当两个个体进行交叉时,它们的基因型会以对应创新编号匹配的方式对齐,只交换不同的元素。
物种化和适应度共享
NEAT使用物种的概念。也就是说,种群被细分为几个个体组,称为物种。这种细分是基于个体之间差异性的计算,计算方式与交叉时使用的基因型对齐方式类似。然后,不同物种个体之间的交叉概率远小于物种内部的交叉。通过促进更相似父母的交配,子代不太可能比父母差得多,因为父母本身就是兼容的。
此外,在物种内部,适应度在个体之间共享。这有两个目的。(1)它保护个体免受变异的影响——当发生变异时,适应度通常会很低,但由于有适应度共享,个体有时间优化自身(权重)以适应这种新的结构变化。(2)促进多样性,因为物种越大,适应度共享就越多,物种成员的适应度就越低。
我强烈推荐阅读原始论文 [1]。算法描述得非常好。此外,还有一个NEAT用户页面,上面有更多论文链接以及NEAT的实现和应用。
[1] Kenneth O. Stanley 和 Risto Miikkulainen。通过增强拓扑进化神经网络。进化计算,10(2):99-127,2002年。