前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >教会机器“自动编程”? 来看看NEAT学习方法!

教会机器“自动编程”? 来看看NEAT学习方法!

作者头像
用户1737318
发布2018-07-20 14:49:18
8610
发布2018-07-20 14:49:18
举报
文章被收录于专栏:人工智能头条

作者 | Murat Vurucu

编译 | 聂震坤

什么是NEAT?

NEAT全称是增强拓扑神经网络(Neuroevolution of augmenting topologies),描述了在人类进化过程中被遗传修饰所启发的机器学习算法概念。

生命是很奇妙的。每当我思考大自然,我都会去看所有生物共有的一个特征——信息。信息是生物繁殖的核心要素。大自然可以在传递信息的过程中对其进行优化,创造了许多不同的物种共存。查尔斯·达尔文的适者生存的概念开启了我们对优胜劣汰的物种发展规律的认知。而具有创造力的计算机科学家的目标则是通过模仿自然进化规律来构建系统以此解决复杂的问题。

描述NEAT如何工作的最简单方法便是举一个例子。如果你想设计一个专业系统,它以最优的方式为你玩游戏,哪些是重要因素?

首先,定义所有玩家可以执行的行动是很重要的。超级马里奥可以跳,踩,往左走,往右走,扭身和加速跑等等。如果我们将机器连接到这些变量并允许它们执行它们,那么这个机器就可以做点什么了。

其次,定义计算机的目标很重要。NEAT引用了一个适应值的概念。适应值是当某步骤成功时奖励的分数。在像马里奥这样的游戏中,适应值将是玩家向终点线前进的进步值。适应值中包含更多的变量,如收集的硬币,被击败的敌人或者完成所花费的时间。

另外,定义什么时候是进步也很重要。NEAT允许节点突变,节点之间的新的连接和最适合的神经网络继承成为新的后代。此外,NEAT保证不同种类的要素可以共存,知道这些要素被允许相互竞争后他们才能产生新的和更合适的迭代。为了保证最合适的要素继续存在,已经尝试过的组合便不会再次出现。现有的网络可以自我优化,NEAT将迭代数字添加到作为历史标记的每个基因上。

上图展示了通过添加连接和节点进行的突变。在图中的例子中禁用从2-4的连接,并创建从3-5的新连接。在节点突变的较低示例中,可以看到如何禁用从2-4的连接并引入新的节点6,以及如何生成从3-6与6-4的两个新连接。

上图展示了迭代的发生。父类1和父类2有着相似的节点结构与相似的连接,但是他们也有一切区别。机器使用二进制法则来选择使用或者无视掉节点或连接。基本的决策落实是true和true为true,true和false为false,false和false为false。此类迭代方式确保了后代继承的信息值绝对有效的(根据适应值)。

基因分配是随机遗传的,而不相交的基因(中间不匹配的基因)和多余的基因(最终不匹配的基因)从更合适的父类继承。在这种情况下,因为已经假设适应度相等,因此不想交和多余的基因可是随机遗传。被禁用的基因可能在后代中被再次启用:如果父类中的基因被禁用,那么遗传基因的预设机会就会被禁用。[Stanley, Miikkulainen, Page 109, NEAT]

现在或多或少你应该都已经了解了,NEAT在整个游戏中不断继承,计划出新的神经网络来优化其适应值。他的成品应当如下视频所示:

视频内容

NEAT是一个很好的解决方案,它能将复杂问题分解成数个小的问题并将其逐个优化。NEAT可以为许多不同的独立任务开发,然后联合起来解决更复杂的问题。一个例子是可以通过列出所有已知的原子来创建新的药物,合理的定义适应值使得模拟能够理解奖励制度并最终朝此方向进化。另一个NEAT的应用是可用于选择生产新药物的技术。一旦这两个系统功能结合在一起,这将成为设计药物的最佳方法。虽然理论上听起来不错,但是这显然是一项非常服的的任务,需要大量的研究与开发。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-08-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 人工智能头条 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档