神经进化是人工智能和机器学习领域的一个分支,它能够改进了人工神经网络,并且试图通过进化算法去寻找最优神经网络。具体而言,就像大自然通过突变、交叉或移除一些潜在的遗传密码来提高大脑的功能一样,人工神经网络通过进化算法能够产生越来越好的拓扑、权重和超参数。
简单的说就是将进化的思想使用到神经网络参数优化的更迭中。
神经进化
神经进化是一种机器学习技术,它使用基于群体的优化方法能够不断提高群体中每个神经网络的质量,从而根据其要解决的问题生成越来越好的神经网络。该种群中的每个个体的存储方式并不是复杂的神经网络,而是存储为基因组。基因组是一种简化的遗传表示,可以映射到神经网络。
神经进化首先需要初始化一组上述基因组,然后将它们应用于具体的问题环境中,然后根据神经网络解决应用问题的能力为每个基因组分配一个适应度分数。例如,该适应度分数可以是图像识别任务中实现的准确度以及机械臂移动实际轨迹和预期轨迹的差别等等。
一旦初始种群被创建,优化循环开始,种群不断地变异、重组、评估和经历自然选择。
如果这些步骤是迭代进行的,而整个种群一次只进行一个步骤,那么所进行的就是代际神经进化(generational neuroevolution)。
竞争性共同进化(competitive coevolution)则意味着神经进化算法的设计允许异步性,并且优化循环在每个基因组的基础上执行。
在代际神经进化和竞争性共同进化两种情况下,其优化过程都是不间断的进行引入创新、评估创新、然后对创新进行分类,直到产生一个最佳实用性神经网络。
图2:直接遗传编码
基因编码一般可分为两个子类:直接编码和间接编码。虽然还有第三类发展性编码,但这种编码我们先忽略不计,毕竟这两年也没啥进展。直接编码表示神经网络的各个方面,它们在遗传表示中显式编码(如上图2所示)。直接编码直接在基因型中编码每个连接及其相应的权重,但通过排除神经网络中的偏差和激活函数的可能性来限制搜索空间。
这种直接编码可以表示任意的前馈和递归拓扑,也能够产生最优的拓扑。但“拓扑”太灵活的话,粒度的搜索空间就会变得非常庞大。因此需要设计良好的神经进化算法才能快速遍历该搜索空间。
图4:竞合公约问题图解
重组并不会突变基因组,拥有创新可以通过将两个亲本基因组( parent-genomes)及其独特特征结合,并产生“新颖”的后代基因组。如果重组方法设计得当,并且可以无损地融合两个亲本基因组的有益特征,将其在整个群体中传播,提高所有现有基因组的适用性。
设计重组方法的核心在于“无损融合”,即不丢失任何基因特性的情况下融合。例如在神经进化算法之前,NEAT算法(通过增强拓扑的进化神经网络(Evolving Neural Networks through Augmenting Topologies))利用直接编码在进行修改网络的拓扑结构,包括新增节点和删除节点等操作时会产生交叉损失。如上图竞合公约问题( competing-conventions problem)所示。随后,NEAT算法提出了一种“历史标记”的方法,该方法为每个突变提供了唯一的标识符,从而最终实现了基因组的无损重组,使其为神经进化算法提供了基准。
评估方法
在总体优化循环中,基于问题评估基因组似乎是最简单的。但这一步骤确是非常重要,不仅是能够指出潜在的改进和进步。评估方法从根本上说是一个过程,即将基因组映射到由其遗传编码规定的神经网络,并将其应用于问题环境,然后根据神经网络的表现计算适应值。
一些神经进化算法的评估过程还包括将神经网络加权训练的附加步骤,虽然这种方法非常明智,但只有当实际环境能够清晰反映基本信息才有用。
在整个评估过程中,尽管确定适应度的方式完全取决于实际问题的具体情况,但可以进行合理的修改。例如在图像识别中可以设置为准确度,游戏中可以设置为点数。
在确定适应度计算时,新颖性搜索也是一个需要考虑的重要概念。因为这个概念涉及用新的方法奖励基因组,能够使其具有更高的适应值。例如,在实际的电子游戏环境中的智能体如果进入一个未知的区域会获得体能提升,尽管总体上获得的分数较少,但也能促进了基因库的创新,从而促进更有希望的进化。
自然选择与亲本选择
虽然繁殖方法定义了探索搜索空间的方式。但选择哪些基因组将作为后代的“父母”?哪些基因组将从基因库中移除?也是神经进化计划的另一个非常重要的方面。
神经进化算法的种类决定了哪种基因能够作为父母基因。在一代人的神经进化中,选择适合下一代的基因组通常归结为选择当前表现最好的基因组。选择作为父母的基因组不一定与移除的基因组互补。基因组的选择要足够有希望保证创新突变的潜力,尽管在下一代可能会被移除。
神经进化算法的一个标准配置是选择利用前20%的基因组作为父母,另外在下一次迭代中会去除90%表现最差的基因组。另外根据代际神经进化算法是否采用物种形成,亲本选择或基因组移除选择也会发生了显著变化。
物种形成是一种代际神经进化的工具,它根据显型中的拓扑相似性等明显特征将群体中的个体聚集在一起;或根据或在实际环境中达到的特定状态等隐藏特征聚集。聚集后产生的集群被认为是物种,物种的产生取决于物种的选择方法,具体来说得繁殖过程可以通过将更多的后代分配给平均适应度更高的物种来控制进化,从而产生“优秀”的后代。
然而,设计得当的物种形成也保护了基因库中的创新,因为这些物种会将一些后代基因分配下去。因此,设计一种适当的、基因问题解决的物种形成方法将种群中的个体分离到不同的物种中,可以成为神经进化方法中非常强大的工具,这种方法既可以引导进化进入有益的方向,也可以保护创新的新路径。
另一方面,在竞争的共同进化方案(competitive coevolution scheme)中,基因组通常是随机配对,其中更合适或更有创新的一个被选为“父母”,另一个从基因库中移除。由于竞争共同进化的异步性,不可能同时对种群中的所有基因组进行分类和分类,从而极大地限制了用物种形成等方法指导进化的可能性。
关于神经进化的总结
神经进化是优化人工神经网络的一种方法,是一个多功能的工具,不仅限于机器学习方面,还可以应用于改进计算机视觉、自然语言处理。创建神经进化算法时需要考虑很多东西,但最重要的是最有效地利用实际问题环境。
神经进化中具有里程碑意义的研究
该算法不同于我们之前讨论的传统神经网络,它不仅会训练和修改网络的权值,同时会修改网络的拓扑结构,包括新增节点和删除节点等操作。NEAT通过突变和无损重组直接编码,同时通过物种形成保护创新。由于其简单性和同步能力,NEAT可以被认为是典型的神经进化算法。
1、A Hypercube-Based Encoding for Evolving Large-Scale Neural Networks, 2009
HyperNEAT是NEAT的变体,和NEAT具有相同的原理,但其所使用的是间接编码,称为组合模式产生网络(CPPNs)。CPPNs允许神经网络对称和重复,这不仅更准确地反映了人类大脑的组成,而且还通过将其映射到网络拓扑,从而利用应用问题中固有的几何和结构。
2、Evolving the Placement and Density of Neurons in the HyperNEAT Substrate, 2010
ES-HyperNEAT进一步扩展了HyperNEAT,在信息量较高的区域允许在CPPN编码模式中使用更密集的基底(denser substrate)。虽然HyperNEAT将隐藏神经元放置在何处的决定权留给了用户(user),但ES-HyperNEAT采用四叉树状结构来确定那些隐藏节点的密度和位置。ES-HyperNEAT在主要基准测试中能够胜过传统的HyperNEAT。
3、A Neuroevolution Approach to General Atari Game Playing, 2014
通过使用CNE、CMA-ES、NEAT和HyperNEAT算法来解决61个Atari2600视频游戏,展示了神经进化在通用视频游戏(GVGP)中的潜力。虽然神经进化在这项研究之前已经在GVGPI中进行了部署。结果与预期不谋而合,因为它们表明直接编码方法在紧凑的状态表示效果最好,间接编码允许缩放到更高维的表示。
4、DLNE: A hybridization of deep learning and neuroevolution for visual control, 2017
通过将神经进化与CNN的图像识别相结合,介绍了神经进化最有趣的用途之一。通过CNN进行图像识别,将识别出的图像转换为特征表示,然后将识别出的图像送入神经进化优化的神经网络。虽然这种方法的有效性在很大程度上取决于特征表示的质量,但即使采用简单的方法也能有一个很有前途的研究方向。
5、Large-Scale Evolution of Image Classifiers, 2017
这篇论文对进化算法进行了改动,使其可以用于NAS(神经网络架构搜索),算法对于计算资源要求较高。算法一开始从没有任何卷积的最简单的模型开始进化,与之前看过的论文不同的是,神经网络架构没有固定的网络深度(意味着搜索空间进一步扩大,算法运行时间长)。