翻译小组 关注
手机版
  1. 云栖社区>
  2. 翻译小组>
  3. 博客>
  4. 正文

教机器写代码:增强拓扑进化网络(NEAT)

【方向】 2017-09-11 20:36:42 浏览646 评论0 发表于: 翻译小组

算法 函数 http

摘要: NEAT的意思是“增强拓扑进化网络”,它描述了在进化过程中受遗传修饰启发的自学习机器的算法概念,不妨看看它是如何教机器写代码的。

教机器写代码:增强拓扑进化网络(NEAT)

1.gif

在这篇文章中,我将向大家介绍一种名为**增强拓扑进化网络(NEAT)**的机器学习方法。

介绍

我喜欢学习。每当遇到从未接触过的书籍或论文,并开始阅读的时候,我都会感到非常兴奋。有些人喜欢在空闲时间玩填字游戏、数独或者猜谜语,以刺激自己的意识。而我喜欢阅读论文并尝试实现文中所提到的算法。而且,由于喜欢学习,我一直对自己无法学到所有想要学的东西而感到难过。我特别感兴趣的是学习如何让电脑为我而学习,让电脑为我提供一些有趣的信息,从而最大限度地提高学习的效率和有效性。这些用于构建复杂信息的算法属于“专家系统”这个领域。因此,我的目标就是“创造”一个“专家”,在需要做决定的时候可以向他咨询。让我们来看一下这个被称为NEAT的“专家”模型吧,本文将介绍有关这方面的一些概念。在以后的文章中,我可能会给出一些实现代码。

什么是NEAT?

NEAT的意思是“增强拓扑进化网络”,它描述了在进化过程中受遗传修饰启发的自学习机器的算法概念。

2.gif

生活本身非常迷人。每当我观察大自然的时候,我都会去关注所有生物的共同点,也就是信息。信息似乎是繁殖的核心遗产。大自然能够对过去37亿年的信息传递进行优化,并创造出各种不同的物种。查尔斯·达尔文有关适者生存的概念让我们理解了是什么使得一些物种能够生存,而其他物种只能灭亡的。进化计算机科学家的目标是通过模仿自然进化来构建系统解决复杂问题。

描述NEAT原理最简单的方法就是举例子。如果你打算设计一个能以最优方式玩游戏的专家系统,那么你需要考虑哪些相关的因素呢?

首先,定义“玩家”所有可执行的动作。例如,超级马里奥能够跳、躲避、向左走、向右走、旋转、快跑等等。如果我们将机器与这些变量相关联,并允许机器执行这些动作,那么机器才有可能完成某件事。

其次,为计算机定义一个目标。这里要引入“适应度评分”这个概念。适应度评分是一个对成功进行奖励的数学函数。在像马里奥这样的游戏中,适应度评分表示了玩家迈向终点线的进度。 适应度评分函数中可以包含很多的变量,如收集到的硬币、被击败的敌人或整体完成时间。

第三,定义进化规则。 NEAT允许节点的突变、节点之间的新连接,以及通过产生后代来继承父辈。此外,NEAT能够确保不同种类的“物种”之间共存,直到他们被允许相互竞争,产生新的更优的后代。为了确保适者生存,已经尝试过的网络在未来不会重试,而现有的网络可以自我优化,NEAT会为每一个作为历史标记的基因添加一个创新数字。

3.png

上图显示了添加节点和添加连接这两种突变。在图的上半部分,2到4的连接被禁用了,取而代之的是新创建了一个从3到5的连接。在下半部分的节点突变中可以看到2到4的连接被禁用了,新引入了节点6,并创建了3到6和6到4这两个新的连接。

4.png

上图展示了进化是如何发生的。父辈1和父辈2在节点和连接上有相似点,但它们之间也存在区别。该机器使用二元逻辑来包含或者排除一个节点/连接。基本的判断机制是:true与true得true,true与false得false,false与false得false。这样就确保了后代继承过来的信息对于适应度评分是有效的,而进化得到的新的节点和连接会出现在后代中,如果在父节点中是禁用的,则后代中也是禁用的。“*匹配基因是随机遗传的,而不相交的基因(中间不匹配的基因)和多余的基因(最终不匹配的基因)会从更合适的父辈那继承。在这种情况下,假设适应度相等,不相交和多余的基因也会随机遗传。禁用的基因可能会在后代中再次启用:如果一个遗传基因在双亲中被禁用,那么它就有可能被遗传的基因所禁用。*”[Stanley,Miikkulainen,第109页,NEAT]

现在,一切都清楚了,NEAT可以通过迭代和进化新的神经网络来达到最佳的适应度评分,这可在游戏上实现。我强烈推荐这篇论文,它写得非常好,初学者也可以理解。但是如果你想要快速入门的话,可以在YouTube上观看这个精彩的视频:https://youtu.be/qv6UVOQ0F44(需科学上网)

NEAT能很好地解决复杂的问题,因为它可以把大问题分解为多个可优化的小问题。 NEAT代理可用于多个不同的独立任务,然后将其结合起来解决更复杂的问题。这里有一个利用NEAT发明药品的例子,首先确定好所有需要用到的微量元素,然后定义一个适应度函数,使得模拟系统能够理解奖励制度,最后定义进化规则。而另一个NEAT可用于选择新药品的生产技术。一旦这两个系统结合起来,就能产生一个为成本效益而优化的新的适应度函数,此函数可以为这个新设计的药品创造出最优的生产方法。这虽然在理论上听起来不错,但显然是一项非常复杂任务,需要大量的研究和实验才可能实现。

文章原标题《How do we teach a machine to program itself ? — NEAT learning》,作者:Murat Vurucu,译者:夏天,审校:主题曲。

文章为简译,更为详细的内容,请查看原文

本文由用户为个人学习及研究之目的自行翻译发表,如发现侵犯原作者的版权,请与社区联系处理yqgroup@service.aliyun.com

用云栖社区APP,舒服~

【云栖快讯】浅析混合云和跨地域网络构建实践,分享高性能负载均衡设计,9月21日阿里云专家和你说说网络那些事儿,足不出户看直播,赶紧预约吧!  详情请点击

网友评论

阿里云机器学习是基于阿里云分布式计算引擎的一款机器学习算法平台。用户通过拖拉拽的方式可视化的操作组件来进行试验,...

高速通道(ExpressConnect)是一款便捷高效的网络服务,用于在云上的不同网络环境间实现高速、稳定、安全...

基于全网公开发布数据、传播路径和受众群体画像,利用语义分析、情感算法和机器学习,分析公众对品牌形象、热点事件和公...

为您提供简单高效、处理能力可弹性伸缩的计算服务,帮助您快速构建更稳定、安全的应用,提升运维效率,降低 IT 成本...