我已经查看了你在youtube和互联网上的NEAT,但我只能找到使用NEAT的项目,但除了维基百科条目(只介绍它在引言中的含义,并且非常令人困惑),我仍然有不知道它是什么,它是一个图书馆,它是一种神经网络,它是一种训练神经网络的方法吗? 对不起,如果这是一个显而易见的问题。
答案 0 :(得分:14)
NEAT,或扩展拓扑的神经演化,是由Kenneth O'Stanley [1]引入的基于人口的进化算法。
该算法基于以下几个关键特征:
<强>复化强>
初始种群中的网络是最简单的(直到没有任何连接的极端,使输入和输出神经元保持不连接)并且算法仅添加新的结构元素(神经元,连接)。这样,产生的网络往往非常小。
通过历史标记避免竞争约定
在普通的进化算法中,很容易发生两个人编码相同(或非常相似)的行为但具有非常不同的基因型。这称为竞争约定。当这些人受到交叉时,他们的孩子可能比任何一方都要差。 NEAT通过保留新结构元素的历史标记来解决这个问题。当创建新的结构元素时(通过结构突变),它被分配一个创新号(并且所有这样的突变产生相同的元素,即使在不同的个体中也被赋予相同的数字)。然后,当两个人交叉时,他们的基因型以这样的方式排列,即相应的创新数字匹配,只交换不同的元素。
物种形成和健身分享
NEAT适用于物种的概念。这只是将人口细分为几组个体,称为 species 。该细分基于个体的不相似性,所述个体基于其进行交叉时使用的基因型的类似比对来计算。然后跨越不同物种的个体的概率比物种内的交叉小得多。通过促进更多相似父母的交配,孩子不太可能比父母更糟糕,因为父母只是兼容。
此外,在物种内,健康是由个人共享的。这有两个目的。 (1)它保护个体免受突变 - 当突变发生时,适应性通常较低,但由于健身共享,个体有时间优化自身(权重)以适应这种新的结构变化。 (2)促进多样性,因为物种越大,适合度越高,物种成员越不适合。
我强烈建议阅读原始论文[1]。该算法描述得非常好。还有一个NEAT Users Page,其中包含更多论文的链接以及NEAT的实现和使用。
[1] Kenneth O. Stanley和Risto Miikkulainen。通过增加拓扑来演化神经网络。 Evolutionary Computation,10(2):99-127,2002。