前言
本书的主题是强化学习(Reinforcement Learning,RL),它是机器学习(Machine Learning,ML)的一个分支,强调如何解决在复杂环境中选择最优动作时产生的通用且极具挑战的问题。学习过程仅由奖励值和从环境中获得的观察驱动。该模型非常通用,能应用于多个真实场景,从玩游戏到优化复杂制造过程都能涵盖。
由于它的灵活性和通用性,RL领域在快速发展的同时,吸引了很多人的关注。其中,既包括试图改进现有方法或创造新方法的研究人员,也包括专注于用最有效的方式解决问题的从业人员。
写本书的目的
写本书的目的是填补RL理论系统和实际应用之间的巨大空白。目前全世界有很多研究活动,基本上每天都有新的相关论文发表,并且有很多深度学习的会议,例如神经信息处理系统(Neural Information Processing Systems,NeurIPS)大会和国际学习表征会议(International Conference on Learning Representations,ICLR)。同时,有好几个大型研究组织致力于将RL应用于机器人、医学、多智能体系统等领域。
最新的相关研究资料虽然很容易获得,却都过于专业和抽象,难以理解。RL的实践落地则显得更为困难,因为将论文中由数学公式堆砌的大量抽象理论转换成解决实际问题的实现方式并不总是显而易见的。
这使得一些对该领域感兴趣的人很难理解隐含在论文或学术会议背后的方法与思想。虽然针对RL的各个方面有很多非常棒的博客用生动的例子来解释,但博客的形式限制让作者们只能阐述一两种方法,而不是构建一个完整的全景图来将不同的方法联系起来。本书就是为了解决这个问题而写的。
教学方法
本书的另一个关注点是实际应用。每个方法针对非常简单到非常复杂的情况都进行了实现。我试图让例子简洁易懂,PyTorch的易读与强大使之成为可能。另外,例子的复杂度是针对RL业余爱好者而设计的,不需要大量的计算资源,比如图形处理器(GPU)集群或很强大的工作站。我相信,这将使充满乐趣和令人兴奋的RL领域不仅限于研究小组或大型人工智能公司,还可以让更广泛的受众涉足。但毕竟本书有关内容还是“深度”RL,因此强烈建议大家使用GPU。
除了Atari游戏或连续控制问题等RL中一些经典的中等规模例子外,本书还有好几章(第10、14、15、16和18章)介绍大型项目,说明RL方法能应用到更复杂的环境和任务中。这些例子不是现实场景中的完整项目,但也足以说明,除了精心设计的基准测试外,RL能在更大的范围内应用。
本书从结构上看分为四个部分,其中第1~4章为第一部分,第5~10章为第二部分,第11~16为第三部分,第17~25章为第四部分。关于本书前三个部分的例子,值得注意的另一件事是我试图使它们成为独立的,会完整地显示所有代码。有时这会导致代码片段的重复(例如,大多数方法中的训练迭代都很相似),但是我认为,让大家学到想学的函数比刻意避免一些重复更重要,你可以自行跳转到需要的代码。本书中的所有例子都能在GitHub上找到,网址为https://github.com/PacktPublishing/Deep-Reinforcement-Learning-Hands-On-Second-Edition。欢迎你来获取、实验并贡献代码。
读者对象
本书面向已经有机器学习基础而想对RL领域进行实践的读者。阅读本书前,读者应该熟悉Python并且有一定的深度学习和机器学习基础。具有统计学和概率论知识会大有帮助,但对于理解本书的大部分内容都不是必要的。
本书内容
第1章介绍了RL的思想和模型。
第2章使用开源库Gym介绍了RL实践。
第3章概述了PyTorch库。
第4章用最简单的RL方法对RL的方法和问题进行了初步介绍。
第5章介绍了基于价值的RL方法。
第6章描述了深度Q-network(DQN),是对基础的基于价值的方法的扩展,能解决复杂环境下的问题。
第7章描述了PTAN库,它可以简化RL方法的实现。
第8章详细介绍了DQN的最新扩展方法,以提升在复杂环境下的稳定性和收敛性。
第9章概述了使RL代码加速执行的办法。
第10章给出了第一个练习项目,重点是将DQN方法应用于股票交易。
第11章介绍了另一类RL方法,即基于策略学习的方法。
第12章描述了RL中使用非常广泛的方法之一。
第13章用并行环境交互的方式扩展了actor-critic方法,从而提高了稳定性和收敛性。
第14章给出了第二个项目,展示了如何将RL方法应用于自然语言处理问题。
第15章介绍了RL方法在文字冒险游戏中的应用。
第16章给出了另一个大项目,使用MiniWoB任务集将RL应用于Web导航。
第17章介绍了连续动作空间的环境特性以及各种方法。
第18章介绍了RL方法在机器人问题中的应用,描述了如何用RL方法来构建和训练小型机器人。
第19章仍是有关连续动作空间的章节,描述了一组置信域方法在其中的应用。
第20章展示了另一组不显式使用梯度的方法。
第21章介绍了能更好地进行环境探索的方法。
第22章介绍了RL的基于模型的方法,并使用了将想象力应用于RL的最新研究结果。
第23章描述了AlphaGo Zero方法并将其应用于四子连横棋游戏中。
第24章使用魔方作为环境,描述了RL方法在离散优化领域的应用。
第25章介绍了一个相对较新的RL方法应用方向,即在多智能体情境下的应用。
阅读指导
本书的所有章节都采用同样的结构来描述RL方法:首先讨论方法的动机、理论基础以及背后的思想;然后,给出几个不同环境下的带完整源代码的例子。
你可以通过不同的方式来阅读本书:
1. 若要快速熟悉某些方法,可以只阅读相关章节的简介部分。
2. 若要深入理解某个方法是如何实现的,可以阅读代码和相关注释。
3. 若要深度熟悉某个方法(我认为是最好的学习方式),可以尝试借助提供的代码重新实现该方法并使之有效。
无论如何,我希望这本书对你有帮助!
下载示例代码及彩色图片
本书的示例代码及所有截图和样图,可以从http://www.packtpub.com通过个人账号下载,也可以访问华章图书官网http://www.hzbook.com,通过注册并登录个人账号下载。
本书的代码也托管在GitHub上(https://github.com/PacktPublishing/Deep-Reinforcement-Learning-Hands-On-Second-Edition)。如果代码有更新,GitHub上的代码会同步更新。本书所有彩色版屏幕截图/图表的PDF文件也可以从https://static.packt-cdn.com/downloads/9781838826994_ColorImages.pdf下载。
排版约定
文中的代码体:表示出现在文中的代码、数据库表名、目录名、文件名、文件扩展名、路径、用户输入、Twitter句柄。
代码块示例:
命令行输入或输出示例:
黑体:表示新的术语、重要的词或会在屏幕中显示的词(例如,菜单或对话框中的内容)。
表示警告或重要的提示。
表示提示和技巧。