社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

神经进化:一种不一样的深度学习

AI科技评论 • 6 年前 • 773 次点击  

作者 | Paul Pauls

编译 | 十、年


编者按:近年来,神经网络借鉴了生物学策略的相关理论知识,实现了大飞跃,完成了之前无法完成的任务。神经进化作为人工智能的一个研究领域,试图通过进化算法而非随机梯度下降来设计和构建神经网络。本文作者Paul Pauls,作为机器学习GDE和开源爱好者,他在Medium上写了一篇关于神经进化算法的文章,详细介绍了神经进化算法的基本概念,以及这几年重要的研究成果。AI科技评论作了有删改的编译,请欣赏~

神经进化是人工智能和机器学习领域的一个分支,它能够改进了人工神经网络,并且试图通过进化算法去寻找最优神经网络。具体而言,就像大自然通过突变、交叉或移除一些潜在的遗传密码来提高大脑的功能一样,人工神经网络通过进化算法能够产生越来越好的拓扑、权重和超参数。
简单的说就是将进化的思想使用到神经网络参数优化的更迭中。

神经进化

神经进化是一种机器学习技术,它使用基于群体的优化方法能够不断提高群体中每个神经网络的质量,从而根据其要解决的问题生成越来越好的神经网络。该种群中的每个个体的存储方式并不是复杂的神经网络,而是存储为基因组。基因组是一种简化的遗传表示,可以映射到神经网络。
神经进化首先需要初始化一组上述基因组,然后将它们应用于具体的问题环境中,然后根据神经网络解决应用问题的能力为每个基因组分配一个适应度分数。例如,该适应度分数可以是图像识别任务中实现的准确度以及机械臂移动实际轨迹和预期轨迹的差别等等。
一旦初始种群被创建,优化循环开始,种群不断地变异、重组、评估和经历自然选择。
如果这些步骤是迭代进行的,而整个种群一次只进行一个步骤,那么所进行的就是代际神经进化(generational neuroevolution)。
竞争性共同进化(competitive coevolution)则意味着神经进化算法的设计允许异步性,并且优化循环在每个基因组的基础上执行。
在代际神经进化和竞争性共同进化两种情况下,其优化过程都是不间断的进行引入创新、评估创新、然后对创新进行分类,直到产生一个最佳实用性神经网络。
图1:典型的代际神经进化过程图解
神经进化过程也是一个“黑盒”,虽然它自己的进化过程需要参数,但却不为生成的神经网络规定任何特定超参数,而是根据实际问题的解决设计神经网络。这便为神经网络的权重、超参数等的选择提供了范围,此范围也称为搜索空间。
虽然“黑盒”性提供了非常广泛的搜索空间,但是为了提高遍历搜索空间的速度,明智的做法是限制搜索空间的粒度。通过限制基因组编码的复杂性,将基因组映射到搜索空间的粒度的能力也被称为遗传编码。
综上所述,为了使搜索空间具有适当的粒度,根据实际问题的要求,设计遗传编码和相应的神经进化算法非常重要。因此,我们我们先来回顾一下遗传编码的概念。

遗传编码
有效的神经网络是能够进行有效的变异和重组人工神经网络的前提。拥有强大表示能力的神经网络不用分析高度复杂的数据结构就能够快速的处理紧凑的遗传密码(compact genetic codes)。换句话说,神经进化算法只在遗传编码上操作,而不是在机器学习框架中复杂的数据结构上操作。当然,基因编码允许这两种表示之间存在映射关系。
基因组的这些有效的遗传表示被称为基因型(genotypes),而相应映射的神经网络被称为显型(phenotypes)。这两个术语是从遗传进化学科中化用的。毕竟神经进化也称的上是遗传进化。另外注意,这里将所有显型都限制为神经网络。

图2:直接遗传编码

基因编码一般可分为两个子类:直接编码和间接编码。虽然还有第三类发展性编码,但这种编码我们先忽略不计,毕竟这两年也没啥进展。直接编码表示神经网络的各个方面,它们在遗传表示中显式编码(如上图2所示)。直接编码直接在基因型中编码每个连接及其相应的权重,但通过排除神经网络中的偏差和激活函数的可能性来限制搜索空间。
这种直接编码可以表示任意的前馈和递归拓扑,也能够产生最优的拓扑。但“拓扑”太灵活的话,粒度的搜索空间就会变得非常庞大。因此需要设计良好的神经进化算法才能快速遍历该搜索空间。
图3:间接遗传编码
间接编码的功能是规定那些无法直接“翻译”成人工神经网络的自定义编码。也就是说为了将基因型映射到神经网络,需要一个由间接编码规定单独的“翻译”能力。如果间接编码设计得当,那么即使神经网络非常复杂,也可以通过搜索空间实现有意义且快速的遍历。
虽然可以从直接编码快速创建人工神经网络,但是缺少间接编码的翻译能力却会减慢处理速度,并且可能导致“粗粒度”。所以在决定使用哪种编码之前,必须考虑两种编码的优缺点。
但是两种遗传编码都证明了遗传编码如何确定搜索空间的大小,例如。例如通过控制激活函数或某些层类型确定搜索空间。

繁殖方法与解决方式探索
有种遍历搜索空间的方法被称为繁殖的过程(the process of reproduction),这种方法与神经进化所使用的遗传编码密切相关。通常通过突变或重组基因组来创造新的基因组,新的基因组也继承了旧的基因组。突变让后代基因组探索人工神经网络新的结构、权重和超参数。重组基因组本质上是将两个基因组及其独特的特征合并。
突变与遗传编码紧密相关,因为神经网络的参数只能突变到以遗传编码表示的程度。因此,为神经进化算法定义突变有以下三种情况。1、遗传编码的哪一部分会发生突变?是拓扑、权重、还是超参数?2、基因组中选定的部分会发生多大程度的突变?例如,神经进化算法可以对低适应度基因组使用较大的突变,对高性能基因组使用微小的突变。3、突变采用何种方式。是定向?还是随机?

图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(神经网络架构搜索),算法对于计算资源要求较高。算法一开始从没有任何卷积的最简单的模型开始进化,与之前看过的论文不同的是,神经网络架构没有固定的网络深度(意味着搜索空间进一步扩大,算法运行时间长)。
利用这篇的自动化方法得出的深度网络结构,已经能在CIFAR-10上取得可以跟人工设计的网络相媲美的结果。
6、Evolving Deep Neural Networks, 2018
CoDeepNEAT算法是近年来兴起NEAT算法的扩展。这篇论文首先定义了DeepNEAT,即以紧凑形式表示整个深层神经网络的层间接编码(包括超参数等)。然后,这些DeepNEAT基因组被看做模块,并与由多个重复模块组成的蓝图共同进化,这些蓝图是由数个节点组成的,节点指向表征了神经网络的特定模块。另外该网络在CIFAR-10数据集上进行了基准测试,产生了比较好的结果。
7、Regularized Evolution for Image Classifier Architecture Search, 2018 
这篇论文中所用进化算法的一大重要特征是采用了一种正则化形式:相比于移除最差的神经网络,他们移除了最老的神经网络(无论它有多好)。这提升了对任务优化时所发生变化的稳健性,并最终更可能得到更加准确的网络。其中一个原因可能是由于不允许权重继承,所有的网络必须都从头开始训练。因此,这种形式的正则化选择重新训练后依旧较好的网络。也就是说,得到更加准确的模型只是偶然的,训练过程中存在的噪声意味着即使完全相同的架构准确率也可能不同。
8、Designing Neural Networks Through Neuroevolution, 2019
这篇文章是对现代神经进化的一个极好的回顾,由该领域四位最著名的研究人员合作成文。它即使它没有引入新的概念,但总结和说明了神经进化的每一个重要方面。
9、Evolutionary Neural AutoML for Deep Learning, 2019
该论文介绍了功能强大的进化AutoML框架LEAF,该框架利用了进化算法CoDeepNEAT。虽然在论文中作者没有透露他们的源代码,但他们对其设计进行了广泛的讨论,并提供了有价值的意见。
另外,在医学图像分类和自然语言分析任务中对进化AutoML框架的性能进行了评估,其结果超过了现有的最先进的AutoML系统和手工神经网络解决方案。



点击“阅读原文” 前往 AAAI 2020 专题

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/53669