图书前言

前    言

传统的深度学习方法在功能上几乎已经触顶,越来越多的研究人员开始寻找训练人工神经网络的替代方法。

深度机器学习对于模式识别非常有效,但是却无法解决需要理解背景环境的任务。许多研究人员,包括现代深度机器学习之父Geoff Hinton都认同,目前设计人工智能系统的方法不再能够应对当前面临的挑战。

本书讨论了传统的深度机器学习方法的可行替代方案—神经进化算法。神经进化是一系列机器学习方法,它们使用进化算法来简化对复杂任务的解决,如游戏、机器人和自然过程的仿真。

神经进化算法的灵感来自于自然选择的过程。非常简单的人工神经网络可能会变得非常复杂。神经进化的最终结果是网络的最佳拓扑形态,这使模型更节能,更易于分析。

在本书中,读者将学习到各种神经进化算法,并获得使用它们来解决不同的计算机科学问题的实用技能,从经典的强化学习到构建用于迷宫自动导航的代理。此外,读者还将学习如何使用神经进化来训练深度神经网络,从而创建可以玩经典Atari游戏的机器人代理。

本书通过各种实验,循序渐进,使读者对神经进化方法有深入的理解。它涵盖了游戏、机器人和自然过程模拟等领域的实际示例,并使用实际示例和数据集来帮助读者更好地理解所探索的概念。在通读完本书之后,读者将能够完成本书所演示的实验,并且举一反三,将神经进化方法应用于自己的工作和研究。

我们编写本书的目标是为读者提供最前沿的技术知识,这是传统深度学习的重要替代方法。我们希望神经进化算法在项目中的实际应用能使读者以一种优雅且节能的方式解决当前棘手的问题。

本书读者

本书适用于希望从头开始实现神经进化算法的机器学习从业人员、深度学习研究人员和AI爱好者。读者将学习到如何将这些算法应用于各种实际问题,掌握神经进化方法优化训练人工神经网络的过程,熟悉神经进化的核心概念,并获得在工作和实验中使用它的必要实践技能。学习本书之前,读者必须具备一定的Python和深度学习以及神经网络基础知识。

内容介绍

本书共分4个部分。

 第1部分为“进化计算算法和神经进化方法的基本原理”,包括第1章和第2章。

 第1章“神经进化方法概述”,介绍了遗传算法的核心概念,如遗传算子和基因组编码方案。另外,还简要介绍了4种神经进化算法。

 第2章“Python库和环境设置”,讨论了神经进化方法的实际操作。本章介绍了流行的Python库的优缺点,这些库提供了NEAT算法及其扩展的实现。

 第2部分为“运用神经进化方法解决经典计算机科学问题”,包括第3~6章。

 第3章“使用NEAT进行XOR求解器优化”,通过实现经典计算机科学问题的求解器开始尝试NEAT算法。

 第4章“摆杆平衡实验”,介绍了与强化学习领域中计算机科学经典问题相关的小车-摆杆平衡实验。

 第5章“自主迷宫导航”,尝试创建可以从迷宫中找到出口的求解器代理。读者将学习如何对具有多个传感器的机器人进行模拟,以检测障碍物并监控其在迷宫中的位置。

 第6章“新颖性搜索优化方法”,使用在第5章的迷宫求解器创建过程中获得的实践经验来着手创建更高级的求解器。

 第3部分为“高级神经进化方法”,包括第7~10章。

 第7章“基于超立方体的NEAT和视觉辨别”,介绍了高级神经进化方法。读者将学习间接基因组编码方案,该方案使用复合模式生成网络(CPPN)来协助对较大的表现型ANN拓扑形态进行编码。

 第8章“ES-HyperNEAT和视网膜问题”,介绍了如何选择最适合特定问题空间的基板配置。

 第9章“协同进化和SAFE方法”,讨论了在自然界中广泛发现的协同进化策略,并介绍了将共栖策略转移到神经进化领域的方法。

 第10章“深度神经进化”,介绍了深度神经进化的概念,该概念可用于训练深度人工神经网络(DNN)。此外,本章进行了训练代理玩Frostbite游戏的实验。

 第4部分为“复习和总结”,包括第11章和第12章。

 第11章“最佳实践和技巧提示”,指导读者如何着手解决当前遇到的问题,如何调整神经进化算法的超参数以及如何使用高级可视化工具等。此外,本章还介绍了可用于分析算法性能的指标和Python编码技巧等。

 第12章“总结”,对读者在本书中学到的所有内容进行复习,并为读者提供了继续自学的一些资料。

充分利用本书

Python编程语言的实践知识对于使用本书中提供的示例至关重要。为了更好地理解源代码,最好使用支持Python语法突出显示和代码引用位置的集成开发环境。如果读者尚未安装,本书推荐使用Microsoft Visual Studio Code。它是免费的跨平台开发工具,读者可以访问以下网址下载:

https://code.visualstudio.com

Python和我们在本书中讨论的大多数库都是跨平台的,并且与Windows、Linux和mac OS兼容。本书描述的所有实验都是从命令行执行的,因此应熟悉所选操作系统上安装的终端控制台应用程序。

要完成本书第10章“深度神经进化”中描述的实验,读者需要使用配备NVIDIA显卡GeForce GTX 1080 Ti或更高版本的性能较高的计算机。在Ubuntu Linux环境中运行该实验效果会更好。Ubuntu是一个免费的、功能强大的、基于Linux的现代操作系统。熟悉它,会为Python开发带来很多帮助。

下载示例代码文件

读者可以从www.packtpub.com下载本书的示例代码文件。具体步骤如下:

(1)登录或注册www.packtpub.com。

(2)在页面顶部的搜索框中输入图书名称Hands-On-NeuroEvolution-with-Python,如图P-1所示。

 

图P-1

(3)在出现本书搜索结果后,单击View Details(查看详情)按钮,如图P-2所示。

 

图P-2

(4)在本书详情页面中,找到并单击Download code files(下载代码文件)按钮,如图P-3所示。

 

图P-3

(5)在本书源代码页面中,单击右侧Code(代码)按钮,在弹出的下拉菜单中选择Download ZIP(下载压缩包),如图P-4所示。

 

图P-4

下载文件后,请确保使用最新版本解压缩或解压缩文件夹:

 WinRAR/7-Zip(Windows系统)

 Zipeg/iZip/UnRarX(Mac系统)

 7-Zip/PeaZip(Linux系统)

该书的代码包也已经在GitHub上托管,网址如下,欢迎访问:

https://github.com/PacktPublishing/Hands-on-Neuroevolution-with-Python

如果代码有更新,则也会在现有GitHub存储库上更新。

下载彩色图像

我们还提供了一个PDF文件,其中包含本书中使用的屏幕截图、图表的彩色图像,读者可以通过以下网址下载:

https://static.packt-cdn.com/downloads/9781838824914_ColorImages.pdf

本书约定

本书使用了许多文本约定。

(1)CodeInText:表示文本中的代码字、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟URL、用户输入和Twitter句柄等。有关该实现的详细信息,请参阅以下网址的agent.py文件: 

https://github.com/PacktPublishing/Hands-on-Neuroevolution-with-Python/blob/master/ Chapter5/agent.py

(2)有关代码块的设置如下:

if indices is None:

indices = np.arange(self.batch_size)

(3)任何命令行输入或输出都采用如下所示的粗体代码形式:

$ conda create -n deep_ne python=3.5

(4)术语或重要单词采用中英文对照形式,在括号内保留其英文原文。示例如下:

当从目标点到机器人中心的线落入其视野(Field Of View,FOV,也称为视场)内时,特定的雷达传感器将被激活。

(5)本书还使用了以下两个图标。

 图标表示警告或重要的注意事项。

 图标表示提示或小技巧。

关于作者

Iaroslav Omelianenko担任首席技术官和研究主管超过10年。他是机器学习研究领域的活跃成员,并在arXiv、ResearchGate平台以及Preprints等刊物上发表了若干篇研究论文。10多年前,他开发了用于手机游戏的自主代理,此后一直从事机器学习的应用。在过去的5年中,他积极参与有关将深度机器学习方法应用于身份验证、个人特征识别、协作机器人技术和合成智能等的研究。他还是一名活跃的软件开发人员,使用Go语言创建了开源神经进化算法的实现。

“我要感谢所有研究人员和开发人员在开源理想的启发下分享他们的工作。没有开放源代码社区,我们的世界将不会像今天这样绚丽多彩。”

关于审稿人

Alan McIntyre是CodeReclaimers公司的首席软件架构师,主要为计算应用程序提供定制软件设计和开发服务,包括计算几何、计算机视觉和机器学习等。他之前曾在通用电气、微软和多家初创公司担任软件工程师。

Unsal Gokdag,2017年以来一直在物流领域担任全职高级数据科学家,此前曾在2013年担任研发工程师。他目前正在攻读博士学位,研究方向是用于图像去斑和偏振SAR图像分类的机器学习算法的比较。他曾从事机器学习、计算机视觉和生物信息学方面的工作。在撰写本科学士学位论文时,他就曾经接触过NEAT算法,此后一直对神经进化算法很感兴趣。他目前居住在德国。