首页>参考读物>计算机科学与技术>人工智能

深度强化学习:基于Python的理论及实践
作者 : [美] 劳拉·格雷泽 (Laura Graesser) [美] 龚辉伦 (Wah Loon Keng) 著
译者 : 许静 过辰楷 金骁 刘磊 朱静雯 译
出版日期 : 2021-09-15
ISBN : 978-7-111-68933-1
定价 : 119.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 306
开本 : 16
原书名 : Foundations of Deep Reinforcement Learning:Theory and Practice in Python
原出版社: Pearson Education Inc.
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

本书介绍了深度强化学习理论和实现的独特结合。它从入门开始,然后详细地解释了深度强化学习算法的理论,也讨论了它的配套软件库SLM实验室的实现,并以使深度强化学习工作的实际细节结束。

图书特色

图书前言

当DeepMind在Atari街机游戏中取得突破性进展时,我们第一次发现了深度强化学习(Deep RL)。人工智能体在只使用图像而不使用先验知识的情况下,首次达到了人类的水平。
人工智能体在没有监督的情况下,通过反复试验自学的想法激发了我们的想象力,这是一种新的、令人兴奋的机器学习方法,它与我们熟悉的监督学习领域有很大的不同。
我们决定一起学习这个主题,我们阅读书籍和论文,学习在线课程,学习代码,并尝试实现核心算法。我们意识到,深度强化学习不仅在概念上具有挑战性,在实现过程中也需要像大型软件工程项目一样经过艰辛的努力。
随着我们的进步,我们了解了更多关于深度强化学习的知识——算法如何相互关联以及它们的不同特征是什么。形成这种心理模型是一个挑战,因为深度强化学习是一个新的研究领域,尚无全面的理论书籍,我们必须直接从研究论文和在线讲座中学习。
另一个挑战是理论与实现之间的巨大差距。通常,深度强化学习算法有许多组件和可调的超参数,这使其变得敏感且脆弱。为了成功运行,所有组件都需要正确地协同工作,并使用适当的超参数值。从理论上讲,实现这一目标所需的细节并不是很清楚,但同样重要。在我们的学习过程中,那些理论和实现相结合的资源是非常宝贵的。
我们觉得从理论到实现的过程应该比我们发现的更简单,我们希望通过自己的努力使深度强化学习更易于学习。这本书是我们的尝试,书中采用端到端的方法来引入深度强化学习——从直觉开始,然后解释理论和算法,最后是实现和实践技巧。这也是为什么这本书附带了一个软件库SLM Lab,其中包含了所有算法的实现。简而言之,这是我们在开始学习这一主题时希望拥有的书。
深度强化学习属于强化学习中一个较大的领域。强化学习的核心是函数逼近,在深度强化学习中,函数是用深度神经网络学习的。强化学习与有监督和无监督学习一起构成了机器学习的三种核心技术,每种技术在问题的表达方式和算法的数据学习方式上都有所不同。
在这本书中,我们专注于深度强化学习,因为我们所经历的挑战是针对强化学习这一子领域的。这从两个方面限制了本书的范围。首先,它排除了在强化学习中可以用来学习函数的所有其他技术。其次,虽然强化学习从20世纪50年代就已经存在,但本书强调的是2013年到2019年的发展。最近的许多发展都是建立在较早的研究基础上的,因此我们认为有必要追溯主要思想的发展。然而,我们并不打算给出这一领域的全面历史介绍。
这本书是针对计算机科学专业的学生和软件工程师的,旨在介绍深度强化学习,无须事先了解相关主题。但是,我们假设读者对机器学习和深度学习有基本的了解,并且有中级Python编程水平。一些使用PyTorch的经验也是有用的,但不是必需的。
这本书的结构如下。
第1章介绍深度强化学习问题的不同方面,并对深度强化学习算法进行综述。
第一部分是基于策略的算法和基于值的算法。第2章介绍第一种策略梯度方法(REINFORCE算法)。第3章介绍第一种基于值的方法(SARSA)。第4章讨论深度Q网络(DQN)算法。第5章重点讨论改进的深度Q网络——目标网络、双重DQN算法和优先级经验回放技术。
第二部分重点研究基于策略和基于值的组合方法。第6章介绍对REINFORCE算法进行扩展的演员-评论家算法。第7章介绍对演员-评论家算法进行扩展的近端策略优化(PPO)算法。第8章讨论同步和异步并行方法,适用于本书中的任何算法。最后,第9章总结所有的算法。
每个算法章节的结构都是相同的。首先,介绍该章的主要概念,并通过相关的数学公式进行研究。然后,描述算法并讨论在Python中的实现。最后,提供一个可在SLM Lab中运行的可调超参数配置算法,并用图表说明该算法的主要特点。
第三部分重点介绍实现深度强化学习算法的实践细节。第10章介绍工程和调试实现,包括关于超参数和实验结果的小结。第11章为配套的SLM Lab提供使用参考。第12章介绍神经网络架构。第13章讨论硬件。
本书的最后一部分(第四部分)是关于环境设计的,由第14~17章组成,分别讨论状态、动作、奖励和转换函数的设计。
我们推荐从第1章开始顺序阅读到第10章。这些章节介绍了本书中的所有算法,并提供了实现算法的实用技巧。接下来的三章(第11~13章)集中在更专业的主题上,可以按任何顺序阅读。对于不想深入研究的读者来说,第1、2、3、4、6和10章是本书的一个连贯子集,重点关注了一些算法。最后,第四部分包含了一组独立的章节,供对更深入地理解环境或构建自己的环境有特殊兴趣的读者阅读。
SLM Lab\[67\]是本书的配套软件库,是一个使用PyTorch\[114\]构建的模块化深度强化学习框架。SLM是Strange Loop Machine的缩写,向侯世达的名著《哥德尔、艾舍尔、巴赫:集异璧之大成》\[53\]致敬。SLM Lab的具体例子包括使用PyTorch的语法和特性来训练神经网络。然而,实现深度强化学习算法的基本原理也适用于其他的深度学习框架,比如TensorFlow\[1\]。
SLM Lab的设计旨在帮助初学者通过将其组成部分组织成概念清晰的片段来学习深度强化学习。这些组成部分与学术文献中讨论的深度强化学习一致,以便于从理论转换到代码。
学习深度强化学习的另一个重要方面是实验。为了方便实验,SLM Lab还提供了一个实验框架,帮助初学者设计和测试自己的假设。
SLM Lab库作为GitHub上的开源项目发布。我们鼓励读者安装它(在Linux或MacOS机器上),并按照存储库网站上的说明运行第一个演示(https://github.com/kengz/SLM-Lab)。已经创建了一个专用的git分支“book”,其代码版本与本书兼容。从存储库网站复制的简短安装说明显示在代码0-1中。
代码0-1 从book git分支安装SLM-Lab

我们建议你先设置它,这样就可以使用本书中介绍的算法来训练智能体了。除了安装和运行演示程序外,在阅读算法章节(第一部分和第二部分)之前,不需要熟悉SLM Lab,我们会在需要的地方向训练智能体发出所有命令。在第11章中,我们将重点从算法转移到更实际的深度强化学习方面,对SLM Lab进行更广泛的讨论。

上架指导

计算机/人工智能

封底文字

通过本书可以快速了解深度强化学习算法的理论、语言和实现方面的专业知识。全书用熟悉的符号清晰地阐明概念,用简洁、可读的代码解释各类新技术,而不是在不相关的材料中浪费时间——这些都是为本书打下坚实基础的完美方法。
——Vincent Vanhoucke,谷歌首席科学家

深度强化学习结合了深度学习和强化学习,使人工智能体能够在没有监督的情况下学习如何解决顺序决策问题。在过去的十年中,深度强化学习在一系列问题上取得了显著的成果,涵盖从单机游戏和多人游戏到机器人技术等方方面面。本书采用理论结合实践的方法,从直觉开始,然后仔细解释深度强化学习算法的理论,讨论在配套软件库SLM Lab中的实现,最后呈现深度强化学习算法的实践细节。
通过本书,你将:
理解深度强化学习问题的每个关键方面。
探索基于策略和基于值的算法,包括REINFORCE算法、SARSA算法、深度Q网络(DQN)算法和改进的深度Q网络算法。
深入研究基于策略和基于值的组合算法,包括演员-评论家算法和近端策略优化(PPO)算法。
了解算法的同步并行和异步并行。
在SLM Lab中运行算法,学习深度强化学习的实现细节。
探索算法基准测试结果与调优超参数。
了解深度强化学习的环境设计。

图书序言

2019年4月,OpenAI的五款机器人在Dota 2比赛中与2018年人类世界冠军OG展开较量。Dota 2是一款复杂的多人竞技游戏,玩家可以选择不同的角色,赢得一场比赛需要策略、团队合作和快速决策。如果构建一个人工智能来参与这款游戏,需要考虑很多的变量和一个看似无限的优化搜索空间,这似乎是一个不可逾越的挑战。然而,OpenAI的机器人轻而易举地赢得了胜利,随后它们在与公众玩家的比赛中也赢得了99%以上的胜利。这一成就背后的创新就是深度强化学习。
虽然这是最近才发展起来的,但强化学习和深度学习都已经存在了几十年,大量的新研究和GPU功率的不断提高推动了这一技术的发展。本书将向读者介绍深度强化学习,并将过去六年所做的工作融合成一个连贯的整体。
虽然训练电脑赢得电子游戏的胜利可能不是特别有用的事情,但它是一个起点。强化学习是机器学习的一个领域,它对于解决顺序决策问题(即随着时间的推移而解决的问题)非常有用。这几乎适用于任何情况——无论是玩电子游戏、走在街上,还是驾驶汽车。
本书对这个处于机器学习前沿的复杂主题做了通俗易懂的介绍。两位作者不仅对这方面的许多论文进行了研究,还创建了一个开源库SLM Lab,用于帮助读者通过快速建立和运行算法来深入学习强化学习。SLM Lab是基于PyTorch用Python编写的,但是读者只需要熟悉Python即可。至于选择使用TensorFlow或其他一些库作为深度学习框架的读者,仍然可以从这本书中获得启发,因为它介绍了深度强化学习解决方案的概念和问题公式。
本书汇集了新的深度强化学习研究成果,以及读者可以使用的示例和代码,还有与OpenAI Gym、Roboschool、Unity ML-Agents工具包一起使用的库,这使得本书成为希望使用这些系统的读者的完美起点。

Paul Dix
丛书编辑

译者序

强化学习是从传统试错学习发展而来的一种回报式学习方法,它已成为现代人工智能领域的一个重要分支,并在机器人、电子游戏、语音系统等诸多领域取得了令人瞩目的应用成果。在围棋应用中取得巨大成功的博弈算法AlphaGo以及升级版的AlphaGo Zero,更是将强化学习的相关研究推向高峰。现代强化学习理论与心理学、运筹学和数学优化等其他知识领域有着紧密关联,特别是随着深度学习的兴起,强化学习的网络模型向着纵深发展,在学习效果上取得了新的突破,形成了一批面向深度强化学习的新模型、新算法。近年来,在人工智能领域的顶级会议上,关于深度强化学习的探讨一直是热点议题,这使得深度强化学习有望在更多实用领域大显身手。
由于深度强化学习涉及的知识面较广,难以从零星的细节中掌握其体系特征,因此学习深度强化学习需要一本全面且系统的好书。本书从这一目标出发,围绕深度强化学习的体系特征进行了深入浅出的讲解和探讨,特点鲜明。首先,本书的叙述结构合理有序,开篇第1章总览本书各部分的算法思路,第2~9章介绍典型的深度强化算法理论,第10~17章介绍算法的实操细节。全书沿着从理论到实践的叙述主线循序渐进地进行讲解,遵循客观学习规律。其次,本书突出知识学习的实用性,对于关键算法均有代码示例讲解,用8章的篇幅讲解实践过程中的工作场景、代码框架、环境搭建等内容,使读者更易上手,并加深理解。最后,本书内容设置合理,重点突出,理论部分主要围绕深度强化学习及其优化算法来讲解,深入剖析典型的REINFORCE算法的原理和实现,为读者提供系统的推导和解释。此外,一些章节最后的扩展阅读和历史回顾板块也是本书的亮点,它们试图从时间维度上拓宽读者的视野,激发读者的学习兴趣。
本书可以作为高等院校人工智能、计算机、大数据等相关专业的本科或研究生教材,也可以作为人工智能相关领域的研究人员和技术人员的参考书籍。此外,对强化学习感兴趣的读者也可以将本书作为自学的参考教材。
译者在本书的翻译过程中尽量做到语言流畅,符合中文表达的习惯,对于专业术语也尽量保持其语境含义。由于本书涉及范围广泛,限于译者水平,在译文中难免存在疏漏和错误,真诚希望读者朋友批评指正。
最后,感谢为本书翻译工作做出贡献的研究生吴彦峰、邱宇、高红灿、王伟静等。同时向机械工业出版社的温莉芳女士、何方编辑表示深深的谢意,感谢他们为本书顺利出版提供的帮助和支持。

许静
2021年3月于南开园

图书目录

赞誉
译者序
序言
前言
致谢
第1章 强化学习简介1
 1.1 强化学习1
 1.2 强化学习中的MDP4
 1.3 强化学习中的学习函数7
 1.4 深度强化学习算法9
  1.4.1 基于策略的算法9
  1.4.2 基于值的算法10
  1.4.3 基于模型的算法10
  1.4.4 组合方法11
  1.4.5 本书中的算法12
  1.4.6 同策略和异策略算法12
  1.4.7 小结12
 1.5 强化学习中的深度学习13
 1.6 强化学习与监督学习14
  1.6.1 缺乏先知14
  1.6.2 反馈稀疏性15
  1.6.3 数据生成15
 1.7 总结16
第一部分 基于策略的算法和基于值的算法
第2章 REINFORCE18
 2.1 策略18
 2.2 目标函数19
 2.3 策略梯度19
  2.3.1 策略梯度推导20
 2.4 蒙特卡罗采样22
 2.5 REINFORCE算法23
  2.5.1 改进的REINFORCE算法23
 2.6 实现REINFORCE24
  2.6.1 一种最小化REINFORCE的实现24
  2.6.2 用PyTorch构建策略26
  2.6.3 采样动作28
  2.6.4 计算策略损失29
  2.6.5 REINFORCE训练循环30
  2.6.6 同策略内存回放31
 2.7 训练REINFORCE智能体33
 2.8 实验结果36
  2.8.1 实验:评估折扣因子γ的影响36
  2.8.2 实验:评估基准线的影响37
 2.9 总结39
 2.10 扩展阅读39
 2.11 历史回顾39
第3章 SARSA40
 3.1 Q函数和V函数40
 3.2 时序差分学习42
  3.2.1 时间差分学习示例44
 3.3 SARSA中的动作选择48
  3.3.1 探索和利用49
 3.4 SARSA算法50
  3.4.1 同策略算法51
 3.5 实现SARSA52
  3.5.1 动作函数:ε-贪婪52
  3.5.2 计算Q损失52
  3.5.3 SARSA训练循环54
  3.5.4 同策略批处理内存回放55
 3.6 训练SARSA智能体56
 3.7 实验结果58
  3.7.1 实验:评估学习率的影响58
 3.8 总结60
 3.9 扩展阅读60
 3.10 历史回顾60
第4章 深度Q网络62
 4.1 学习DQN中的Q函数62
 4.2 DQN中的动作选择64
  4.2.1 Boltzmann策略65
 4.3 经验回放67
 4.4 DQN算法68
 4.5 实现DQN69
  4.5.1 计算Q损失70
  4.5.2 DQN训练循环70
  4.5.3 内存回放71
 4.6 训练DQN智能体74
 4.7 实验结果77
  4.7.1 实验:评估网络架构的影响77
 4.8 总结78
 4.9 扩展阅读79
 4.10 历史回顾79
第5章 改进的深度Q网络80
 5.1 目标网络80
 5.2 双重DQN算法82
 5.3 优先级经验回放85
  5.3.1 重要性抽样86
 5.4 实现改进的DQN88
  5.4.1 网络初始化88
  5.4.2 计算Q损失89
  5.4.3 更新目标网络90
  5.4.4 包含目标网络的DQN91
  5.4.5 双重DQN91
  5.4.6 优先级经验回放91
 5.5 训练DQN智能体玩Atari游戏96
 5.6 实验结果101
  5.6.1 实验:评估双重DQN与PER的影响101
 5.7 总结104
 5.8 扩展阅读104
第二部分 组合方法
第6章 优势演员-评论家算法106
 6.1 演员106
 6.2 评论家107
  6.2.1 优势函数107
  6.2.2 学习优势函数110
 6.3 A2C算法111
 6.4 实现A2C113
  6.4.1 优势估计113
  6.4.2 计算值损失和策略损失115
  6.4.3 演员-评论家训练循环116
 6.5 网络架构117
 6.6 训练A2C智能体118
  6.6.1 在Pong上使用n步回报的A2C算法118
  6.6.2 在Pong上使用GAE的A2C算法121
  6.6.3 在BipedalWalker上使用n步回报的A2C算法122
 6.7 实验结果124
  6.7.1 实验:评估n步回报的影响124
  6.7.2 实验:评估GAE中λ的影响126
 6.8 总结127
 6.9 扩展阅读128
 6.10 历史回顾128
第7章 近端策略优化算法130
 7.1 替代目标函数130
  7.1.1 性能突然下降130
  7.1.2 修改目标函数132
 7.2 近端策略优化136
 7.3 PPO算法139
 7.4 实现PPO141
  7.4.1 计算PPO的策略损失141
  7.4.2 PPO训练循环142
 7.5 训练PPO智能体143
  7.5.1 在Pong上使用PPO算法143
  7.5.2 在BipedalWalker上使用PPO算法146
 7.6 实验结果149
  7.6.1 实验:评估GAE中λ的影响149
  7.6.2 实验:评估裁剪变量ε的影响150
 7.7 总结152
 7.8 扩展阅读152
第8章 并行方法153
 8.1 同步并行153
 8.2 异步并行154
  8.2.1 Hogwild!算法155
 8.3 训练A3C智能体157
 8.4 总结160
 8.5 扩展阅读160
第9章 算法总结161
第三部分 实践细节
第10章 深度强化学习工程实践164
 10.1 软件工程实践164
  10.1.1 单元测试164
  10.1.2 代码质量169
  10.1.3 Git工作流170
 10.2 调试技巧171
  10.2.1 生命迹象172
  10.2.2 策略梯度诊断172
  10.2.3 数据诊断173
  10.2.4 预处理器174
  10.2.5 内存174
  10.2.6 算法函数174
  10.2.7 神经网络175
  10.2.8 算法简化177
  10.2.9 问题简化177
  10.2.10 超参数178
  10.2.11 实验室工作流178
 10.3 Atari技巧179
 10.4 深度强化学习小结181
  10.4.1 超参数表181
  10.4.2 算法性能比较184
 10.5 总结186
第11章 SLM Lab187
 11.1 SLM Lab算法实现187
 11.2 spec文件188
  11.2.1 搜索spec语法190
 11.3 运行SLM Lab192
  11.3.1 SLM Lab指令193
 11.4 分析实验结果193
  11.4.1 实验数据概述193
 11.5 总结195
第12章 神经网络架构196
 12.1 神经网络的类型196
  12.1.1 多层感知机196
  12.1.2 卷积神经网络198
  12.1.3 循环神经网络199
 12.2 选择网络族的指导方法199
  12.2.1 MDP与POMDP200
  12.2.2 根据环境选择网络202
 12.3 网络API204
  12.3.1 输入层和输出层形状推断205
  12.3.2 自动构建网络207
  12.3.3 训练步骤209
  12.3.4 基础方法的使用210
 12.4 总结211
 12.5 扩展阅读212
第13章 硬件213
 13.1 计算机213
 13.2 数据类型217
 13.3 在强化学习中优化数据类型219
 13.4 选择硬件222
 13.5 总结223
第四部分 环境设计
第14章 状态226
 14.1 状态示例226
 14.2 状态完整性231
 14.3 状态复杂性231
 14.4 状态信息损失235
  14.4.1 图像灰度235
  14.4.2 离散化235
  14.4.3 散列冲突236
  14.4.4 元信息损失236
 14.5 预处理238
  14.5.1 标准化239
  14.5.2 图像预处理240
  14.5.3 时间预处理241
 14.6 总结244
第15章 动作245
 15.1 动作示例245
 15.2 动作完整性247
 15.3 动作复杂性248
 15.4 总结251
 15.5 扩展阅读:日常事务中的动作设计252
第16章 奖励255
 16.1 奖励的作用255
 16.2 奖励设计准则256
 16.3 总结259
第17章 转换函数260
 17.1 可行性检测260
 17.2 真实性检测262
 17.3 总结263后记264
附录A 深度强化学习时间线267
附录B 示例环境269
参考文献274

教学资源推荐
作者: [美] 杰瑞米·瓦特(Jeremy Watt) 雷萨·博哈尼(Reza Borhani) 阿格洛斯·K.卡萨格罗斯(Aggelos K. Katsaggelos) 著
作者: 主编 段峰 参编 韩书宁 谭莹 金天磊 张丽娜 张明昕
作者: (澳)Michael Negnevitsky 著
参考读物推荐
作者: 刘祥龙 杨晴虹 谭中意 蒋晓琳 等编著深度学习技术及应用国家工程实验室、百度技术学院 组编
作者: [美]摩根·奎格利(Morgan Quigley) 布莱恩·格克(Brian Gerkey) 威廉 D.斯马特(William D. Smart)著
作者: 赵涓涓 强彦 主编
作者: [西班牙]伯纳多·朗奎洛·贾蓬(Bernardo Ronquillo Japón) 著