前言
强化学习(reinforcement learning,RL)是人工智能的一个流行且有前景的分支,它涉及建立更智能的模型和智能体,可以根据不断变化的需求自动确定理想的行为。本书将帮助读者掌握强化学习算法,并通过构建自学习智能体,理解算法的实现。
本书首先介绍在强化学习环境中工作所需的工具、库和设置,涵盖强化学习的构成模块,深入探讨基于值的方法,如Q-learning和SARSA算法的应用。读者将学习如何结合使用Q-learning和神经网络来解决复杂问题。此外,在学习*d*dPG和TD3确定性算法之前,读者将学习策略梯度方法,如TRPO和PPO,以提高性能和稳定性。本书还介绍模仿学习的原理,以及Dagger如何教智能体飞行。读者将探索进化策略和黑盒优化技术。最后,读者将掌握探索方法,如UCB和UCB1,并开发一个名为ESBAS的元算法。
在本书结束时,读者将使用关键的强化学习算法,克服现实应用中的挑战,并成为强化学习研究社区的一员。
本书的目标读者
如果你是人工智能研究者、深度学习用户,或者希望从头开始学习强化学习的人,那么这本书就很适合你。如果你想了解该领域的进展,也会发现这本书很有帮助。当然,Python的基础知识是必需的。
本书涵盖的内容
第1章,强化学习概貌。本章引导读者进入强化学习领域。它描述了强化学习擅长解决的问题以及强化学习算法已经得到应用的领域,也介绍了后续各章完成各项任务所需的工具、库和设置。
第2章,强化学习过程与OpenAI Gym。本章介绍强化学习算法的主流程、用于开发算法的工具箱以及不同类型的环境。读者可以开发使用OpenAI Gym接口的随机智能体来玩利用随机动作的倒立摆(CartPole)游戏,也将了解如何使用OpenAI Gym接口运行其他环境。
第3章,基于动态规划的问题求解。本章介绍强化学习的核心思想、术语和方法。读者将了解强化学习的主功能块,掌握开发强化学习算法解决问题的一般思路;也将了解基于模型的算法与无模型算法的区别,以及强化学习算法的分类。动态规划将用于解决FrozenLake游戏问题。
第4章,Q-learning与SARSA的应用。本章探讨基于值的方法,特别是Q-learning和SARSA这两种不同于动态规划而且适合处理大型问题的算法。为了切实掌握这些算法,读者可以将它们用于FrozenLake游戏,并研究与动态规划方法的差异。
第5章,深度Q神经网络。本章介绍如何将神经网络,特别是卷积神经网络用于Q-learning。读者将了解为什么Q-learning与神经网络的结合产生了难以置信的结果,以及这种结合如何打开了通向更多问题的大门;另外,读者也将利用OpenAI Gym接口将DQN用于解决雅达利游戏问题。
第6章,随机策略梯度优化。本章介绍一种新的无模型算法策略梯度方法。读者将了解策略梯度方法与基于值的方法的区别以及两者各自的优缺点,也将实现REINFORCE和行动者-评判者(AC)算法来解决新的LunarLander游戏问题。
第7章,信赖域策略优化和近端策略优化。本章提出了使用新机制控制策略改进的策略梯度方法。这些机制用于改进策略梯度算法的稳定性和收敛性。特别是,读者将了解和实现两种采用这些技术的主要策略梯度方法TRPO和PPO,并将这些方法应用于具有连续动作空间的环境Roboschool。
第8章,确定性策略梯度方法。本章介绍一类新的、结合策略梯度和Q-learning的算法确定性策略算法。读者将了解其基本概念并在一个新环境中应用两个深度确定性算法DDPG和TD3。
第9章,基于模型的强化学习。本章介绍学习环境模型去规划未来动作或学习策略的强化学习算法。读者将了解这些算法的工作原理、优点以及广泛应用的原因。为了掌握这些算法,读者将在Roboschool环境应用这些基于模型的算法。
第10章,模仿学习与DAgger算法。本章解释模仿学习的工作原理以及如何适用于一个问题。读者将了解最有名的模仿学习算法DAgger。为了掌握这一算法,读者将在FlappyBird环境中应用该算法以提高智能体学习过程的速度。
第11章,黑盒优化算法。本章讨论进化算法一类不依赖反向传播的黑盒优化算法。这些算法之所以引人注目,是因为它们的训练速度快且易于在成百上千个CPU核上并行化。本章通过聚焦进化策略算法(一种进化算法),提供了进化算法的理论和实践知识。
第12章,开发ESBAS算法。本章介绍强化学习特有的探索 ? 利用困境问题。本章利用多臂老虎机问题解释了探索 ? 利用困境,并利用UCB和UCB1等方法解决了这个困境;接着介绍了算法选择问题,并开发了一种名为ESBAS的元算法。该算法利用UCB1,为每种情况选择最适合的强化学习算法。
第13章,应对强化学习挑战的实践。本章归纳了强化学习领域的重大挑战问题,介绍了克服这些问题的一些实践与方法;还介绍了将强化学习应用到现实问题所面临的一些挑战、深度强化学习的未来发展以及将会产生的社会影响。
阅读本书的必要准备
必须具备Python知识。了解一些强化学习知识和强化学习有关的各种工具也将是有益的。
下载示例代码文件
你可以在www.packt.com登录自己的账户下载本书的示例代码文件。如果你是从别处购得本书,可以访问www.packtpub.com/support页面并注册账号,文件将直接通过电子邮件发送给你。
你可以按照以下步骤下载代码文件:
(1) 登录或注册网站www.packt.com。
(2) 选择Support标签。
(3) 点击Code Downloads按钮。
(4) 在Search框中输入书名,然后按照屏显指令操作。
一旦文件下载完毕,请用以下最新版本工具进行文件解压或文件夹提取。
● WinRAR/7-Zip for Windows。
● Zipeg/iZip/UnRarX for Mac。
● 7-Zip/PeaZip for Linux。
本书所带代码包也存放在GitHub库中,网址是https://github.com/PacktPublishing/ Reinforcement-Learning-Algorithms-with-Python。如果代码有更新,那么GitHub库中的代码也会同步更新。
此外,配套其他大量著作和视频的代码包,可从https://github.com/PacktPublishing/获得。敬请查阅!
下载彩色插图
本书使用的彩色图表和截屏图片已经汇集成一个PDF格式文件,可提供给读者。读者可从http://www.packtpub.com/sites/default/files/downloads/9781789131116_ColorImages.pdf下载。
文本格式约定
本书采用以下若干文本格式约定。
CodeInText:表示代码文本、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟URL、用户输入以及推特用户名(Twitter handle)。例如,本书使用Python 3.7,不过3.5以上版本都可用。另外设定读者已经安装了numpy和matplotlib。
一段代码设置如下:
import gym
# create the environment
env = gym.make("CartPole-v1")
# reset the environment before starting
env.reset()
# loop 10 times
for i in range(10):
# take a random action
env.step(env.action_space.sample())
# render the game
env.render()
# close the environment
env.close()
命令行的输入输出标记为粗体格式:
$ git clone https://github.com/pybox2d/pybox2d
$ cd pybox2d
$ pip install-e.
Bold:(粗体)表示新概念、关键词或者出现在屏幕上菜单/对话框里的词。例如,在强化学习(reinforcement learning,RL)里,算法被称为智能体,从环境提供的数据中学习。
表示警告或重要说明。
表示提示或技巧。
联系方式
欢迎读者积极反馈。
一般反馈:如果读者对本书的任何方面有问题,可以在邮件主题中注明书名,反馈至邮箱customercare@packtpub.com。
勘误:虽然我们已尽力确保著作内容的准确性,但错误仍难以避免。如果读者发现书中错误,烦请告知。请访问www.packtpub.com/support/errata,选定图书,点击勘误提交表格链接,填入具体信息。
盗版:如果读者在互联网上发现我们的图书被以任何形式非法复制,烦请告知网址或网站名。请通过copyright@packt.com联系我们,并提供盗版材料的链接。
如果愿意成为作者:如果读者有熟悉的主题而且愿意写书或参与出书,请访问authors. packtpub.com。
撰写书评
请读者留言评论。如果你读过或使用过本书,何不在你购书处留下宝贵的意见?潜在的读者将会看到并根据你公正客观的评论意见,决定是否购书。我们也能了解你对我们产品的想法,而我们的作者能够获悉你对他们著作的反馈。不胜感激!
更多有关Packt的信息,请访问packt.com。
目录
前言
第一部分 算法与环境
第1章 强化学习概貌 2
1.1 强化学习导论 3
1.1.1 比较强化学习和监督学习 4
1.1.2 强化学习的历史 5
1.1.3 深度强化学习 6
1.2 强化学习的要素 7
1.2.1 策略 8
1.2.2 值函数 9
1.2.3 回报(奖励) 10
1.2.4 模型 11
1.3 强化学习的应用 11
1.3.1 游戏 11
1.3.2 机器人与工业4.0 12
1.3.3 机器学习 12
1.3.4 经济学与金融 13
1.3.5 医疗健康 13
1.3.6 智能交通系统 13
1.3.7 能源优化与智能电网 13
1.4 本章小结 13
1.5 思考题 14
1.6 延伸阅读 14
第2章 强化学习过程与OpenAI Gym 15
2.1 环境设置 15
2.1.1 安装OpenAI Gym 16
2.1.2 安装Roboschool 17
2.2 OpenAI Gym和强化学习过程 17
2.2.1 开发强化学习过程 18
2.2.2 了解空间概念 21
2.3 利用TesorFlow开发强化学习模型 22
2.3.1 张量 24
2.3.2 创建计算图 27
2.3.3 线性回归示例 28
2.4 TensorBoard介绍 32
2.5 强化学习环境 34
2.5.1 为什么需要不同的环境 35
2.5.2 开源环境 35
2.6 本章小结 37
2.7 思考题 37
2.8 延伸阅读 38
第3章 基于动态规划的问题求解 39
3.1 马尔可夫决策过程 39
3.1.1 策略 41
3.1.2 回报 41
3.1.3 值函数 42
3.1.4 贝尔曼方程 43
3.2 强化学习算法的类别 43
3.2.1 无模型算法 44
3.2.2 基于模型的强化学习 45
3.2.3 算法多样性 46
3.3 动态规划 46
3.3.1 策略评价与策略改进 47
3.3.2 策略迭代 48
3.3.3 值迭代 52
3.4 本章小结 55
3.5 思考题 55
3.6 延伸阅读 56
第二部分 无模型强化学习算法
第4章 Q-learning与SARSA的应用 58
4.1 无模型学习 58
4.1.1 已有经验 59
4.1.2 策略评价 59
4.1.3 探索问题 60
4.2 时间差分学习 60
4.2.1 时间差分更新 61
4.2.2 策略改进 61
4.2.3 比较蒙特卡罗和时间差分方法 62
4.3 SARSA 62
4.3.1 SARSA介绍 62
4.3.2 算法 62
4.4 应用SARSA解决Taxi-v2问题 63
4.5 Q-learning 69
4.5.1 理论 69
4.5.2 算法 70
4.6 应用Q-learning解决Taxi-v2问题 71
4.7 比较SARSA和Q-learning 74
4.8 本章小结 74
4.9 思考题 75
第5章 深度Q神经网络 76
5.1 深度神经网络与Q-learning 76
5.1.1 函数逼近 77
5.1.2 利用神经网络的Q-learning 77
5.1.3 深度Q-learning的不稳定性 78
5.2 DQN 79
5.2.1 解决方案 80
5.2.2 DQN算法 80
5.2.3 模型架构 82
5.3 用于Pong的DQN 83
5.3.1 雅达利游戏 84
5.3.2 预处理流程 84
5.3.3 DQN实现 87
5.3.4 结果 96
5.4 DQN变种 98
5.4.1 DDQN 98
5.4.2 竞争DQN 101
5.4.3 n步DQN 103
5.5 本章小结 104
5.6 思考题 105
5.7 延伸阅读 105
第6章 随机策略梯度优化 106
6.1 策略梯度方法 106
6.1.1 策略的梯度 107
6.1.2 策略梯度定理 108
6.1.3 梯度的计算 109
6.1.4 策略 109
6.1.5 在线策略梯度 111
6.2 了解REINFORCE算法 111
6.2.1 REINFORCE的实现 113
6.2.2 利用REINFORCE实现航天器着陆 117
6.3 带基线的REINFORCE算法 119
6.3.1 带基线的REINFORCE算法的原理 119
6.3.2 带基线的REINFORCE算法的实现 121
6.4 学习AC算法 122
6.4.1 让评判者帮助行动者学习 122
6.4.2 n步AC模型 123
6.4.3 AC算法的实现 124
6.4.4 用AC算法实现航天器着陆 127
6.4.5 高级AC算法以及提示和技巧 128
6.5 本章小结 129
6.6 思考题 129
6.7 延伸阅读 129
第7章 信赖域策略优化和近端策略优化 130
7.1 Roboschool 130
7.1.1 Roboschool介绍 130
7.1.2 连续系统的控制 131
7.2 自然策略梯度 134
7.2.1 自然策略梯度的直观理解 134
7.2.2 数学知识基础 136
7.2.3 自然梯度的计算复杂性 137
7.3 信赖域策略优化 138
7.3.1 TRPO算法 138
7.3.2 TRPO算法的实现 141
7.3.3 TRPO的应用 147
7.4 近端策略优化 148
7.4.1 PPO简述 149
7.4.2 PPO算法 149
7.4.3 TRPO算法的实现 150
7.4.4 PPO的应用 154
7.5 本章小结 155
7.6 思考题 155
7.7 延伸阅读 156
第8章 确定性策略梯度方法 157
8.1 策略梯度优化与Q-learning的结合 157
8.1.1 两类算法的优缺点 157
8.1.2 确定性策略梯度 158
8.2 深度确定性策略梯度 160
8.2.1 DDPG算法 161
8.2.2 DDPG算法的实现 163
8.2.3 DDPG应用于BipedalWalker-v2 167
8.3 双延迟深度确定性策略梯度 168
8.3.1 高估偏差问题 169
8.3.2 方差抑制问题 171
8.3.3 TD3应用于BipedalWalker 174
8.4 本章小结 175
8.5 思考题 176
8.6 延伸阅读 176
第三部分 超越无模型算法
第9章 基于模型的强化学习 178
9.1 基于模型的方法 178
9.1.1 基于模型的学习概述 179
9.1.2 基于模型的方法的优缺点 182
9.2 基于模型的学习与无模型学习的结合 183
9.2.1 有用的结合 183
9.2.2 利用图像构建模型 184
9.3 用于倒立摆的ME-TRPO 185
9.3.1 了解ME-TRPO 186
9.3.2 ME-TRPO的实现 187
9.3.3 RoboSchool实验 191
9.4 本章小结 193
9.5 思考题 194
9.6 延伸阅读 194
第10章 模仿学习与DAgger算法 195
10.1 技术要求 195
10.2 模仿学习 196
10.2.1 驾驶助手示例 197
10.2.2 模仿学习与强化学习对比 198
10.2.3 模仿学习中的专家作用 199
10.2.4 模仿学习的结构 199
10.3 Flappy Bird游戏 201
10.3.1 Flappy Bird介绍 201
10.3.2 如何利用环境 201
10.4 理解数据集聚合算法 202
10.4.1 DAgger算法 203
10.4.2 Dagger算法实现 204
10.4.3 Flappy Bird游戏结果分析 209
10.5 反向强化学习 210
10.6 本章小结 210
10.7 思考题 211
10.8 延伸阅读 211
第11章 黑盒优化算法 212
11.1 超越强化学习 212
11.1.1 强化学习简要回顾 212
11.1.2 替代方法 213
11.2 进化算法的核心 214
11.2.1 遗传算法 216
11.2.2 进化策略 217
11.3 可扩展的进化策略 218
11.3.1 核心思想 219
11.3.2 可扩展进化策略的实现 220
11.4 应用于LunarLander的可扩展进化策略 226
11.5 本章小结 227
11.6 思考题 228
11.7 延伸阅读 228
第12章 开发ESBAS算法 229
12.1 探索与利用 229
12.1.1 探索与利用介绍 229
12.1.2 多臂老虎机 231
12.2 探索的方法 232
12.2.1 ?贪婪策略 232
12.2.2 UCB算法 233
12.2.3 探索的复杂性 234
12.3 ESBAS 235
12.3.1 拆箱算法选择 235
12.3.2 ESBAS介绍 236
12.3.3 算法实现 237
12.3.4 解决Acrobot问题 241
12.4 本章小结 244
12.5 思考题 244
12.6 延伸阅读 245
第13章 应对强化学习挑战的实践 246
13.1 深度强化学习的最佳实践 246
13.1.1 选择合适的算法 247
13.1.2 从0到1 248
13.2 深度强化学习的挑战 250
13.2.1 稳定性与可重现性 250
13.2.2 效率 251
13.2.3 泛化 251
13.3 先进技术 252
13.3.1 无监督强化学习 252
13.3.2 迁移学习 253
13.4 现实世界中的强化学习 255
13.4.1 现实挑战 256
13.4.2 弥合模拟与现实世界的差距 257
13.4.3 创建专有环境 257
13.5 强化学习的未来及其社会影响 258
13.6 本章小结 258
13.7 思考题 259
13.8 延伸阅读 259
附录 思考题参考答案 260