前言
本文是在阅读Effcient Evolution of Neural Network Topologies一文后的一些总结。
一、概念明晰:
1.genome,染色体也称为基因组;genes,基因;一条genome中包含多个genes,其中一条染色体表示一个拓扑结构,一个基因表示了(in-node,out-node,weight,status,innovation number)一对连接关系,包含连接关系,创新号,权重,状态(禁止和使能)。
2.变异(mutation),包含了两种变异,一种是增加了一条连接,即增加了一个基因,另一种是在一条连接中增加一个节点,即disable一条连接,再增加两条连接。同时,每个基因中的权重(weight)也可以发生变化同样叫做变异。
3.disjoint互斥的,a中的innovation number在b中没有且在b的number范围内;excess过剩的,a中的innovation number在b中没有且在number范围外。例如a={1,2,4,5,6},b={1,2,3,4,6,7,8},a中的5和b中的3为disjoint,而b中的7,8为excess。
二、算法创新
1.通过历史标签追溯基因。给每个连接基因编号,只要号码一样,无论其内部发生什么变化都认为是同一个基因,代表着子代来自相同的祖先。
2.交叉方法。将两条染色体 innovation number 相同的基因排列起来,如果二者不匹配(基因内部不同),则继承适应度更高的的父代,如果适应度相同,则随机继承。
3.通过种群化保护创新(先小种群(species)竞争,再总体(population)竞争,保护新生儿)
增加新的结构一开始会导致网络适应度减小,但是通过先内部niches竞争,再population竞争,使得topological innovation得到保护而有时间优化其结构再在population中竞争。
通过topological similarity区分不同的species,E(excess)和D(disjoint)分别代表了染色体中的特征,用其线性和定义相似度 δ = c 1 E N + c 2 D N + c 3 ⋅ W ˉ \delta=\frac{c_1E}{N}+\frac{c_2D}{N}+c_3·\bar{W} δ=Nc1E+Nc2D+c3⋅Wˉ通过设定阈值 δ t \delta_t δt来划分种群,每个种群共享调整适应度,该种群是增长还是收缩取决于种群调整平均适应度高于还是低于总体平均适应度: N j ′ = ∑ i = 1 N j f i j f ˉ N_j^{'}=\frac{\sum_{i=1}^{N_j}{f_{ij}}}{\bar{f}} Nj′=fˉ∑i=1Njfij,其中 N j N_j Nj和 N j ′ N_j^{'} Nj′分别代表了种群j中之前的和新的个体数量, f i j f_{ij} fij是种群j中个体i的调整适应度, f ˉ \bar{f} fˉ代表了整个总体的平均调整适应度。每个种群中表现最好的r%会被随机交配生成 N j ′ N_j^{'} Nj′的后代,代替所有种群。
NEAT-Python说明网站,包含了许多解释文档。