本书以“平民”的起点,从“零”开始,基于PyTorch框架,介绍深度学习和强化学习的技术与技巧,逐层铺垫,营造良好的带入感和亲近感,把学习曲线拉平,使得没有学过微积分等高级理论的程序员一样能够读得懂、学得会。同时,本书配合漫画插图来调节阅读气氛,并对每个原理都进行了对比讲解和实例说明。本书适合对深度学习和强化学习感兴趣的技术人员、希望对深度学习和强化学习进行入门了解的技术人员及深度学习和强化学习领域的初级从业人员阅读。
高扬,金山办公软件人工智能组技术负责人,历任欢聚时代人工智能算法专家,金山软件西山居大数据架构师等职。重庆工商大学研究生导师,电子工业出版社博文视点大数据技术图书专家委员会专家委员,有多年海外工作经验。有多部“白话”系列大数据与机器学习相关著作。叶振斌,现任网易游戏伏羲人工智能实验室高级深度学习研发工程师。多年从事机器学习,特别是强化学习智能算法的研究及开发工作。拥有丰富的软件开发经验,以及丰富的人工智能算法训练平台开发经验。万娟,华为设计师。资深UI设计师,多年产品交互与视觉设计经验,对于TOB企业系统应用设计与TOC用户产品设计有深入的理解与实践。多次参与华为企业内系统设计与智能家居、智能设备等UI及交互设计。从小热爱艺术绘画,多次参与全国艺术与工业设计比赛并获得奖项。对商业插画有丰富的经验,配合出版多本书籍。
传统篇
第1章 强化学习是什么 2
1.1 题设 3
1.1.1 多智能才叫智能 5
1.1.2 人工智能的定义 5
1.2 强化学习的研究对象 7
1.2.1 强化学习的应用场合 7
1.2.2 强化学习的建模 11
1.3 本章小结 17
第2章 强化学习的脉络 18
2.1 什么是策略 18
2.2 什么样的策略是好的策略 19
2.3 什么是模型 21
2.4 如何得到一个好的策略 23
2.4.1 直接法 23
2.4.2 间接法 25
2.5 马尔可夫决策过程 29
2.5.1 状态转移 30
2.5.2 策略与评价 31
2.5.3 策略优化 36
2.6 Model-Based和Model-Free 36
2.6.1 Model-Based 36
2.6.2 规划问题 37
2.6.3 Model-Free 38
2.7 本章小结 38
第3章 动态规划 40
3.1 状态估值 40
3.2 策略优化 42
3.3 本章小结 43
第4章 蒙特卡罗法 45
4.1 历史由来 45
4.2 状态估值 47
4.3 两种估值方法 49
4.3.1 首次访问蒙特卡罗策略估值 49
4.3.2 每次访问蒙特卡罗策略估值 49
4.3.3 增量平均 50
4.4 弊端 51
4.5 本章小结 52
第5章 时间差分 53
5.1 SARSA算法 53
5.1.1 SARSA算法的伪代码 54
5.1.2 SARSA算法的优点和缺点 57
5.2 Q-Learning算法 57
5.2.1 Q-Learning算法的伪代码 58
5.2.2 Q-Learning算法的优点和缺点 59
5.3 On-Policy和Off-Policy 61
5.4 On-Line学习和Off-Line学习 62
5.5 比较与讨论 63
5.6 本章小结 65
现代篇
第6章 深度学习 68
6.1 PyTorch简介 69
6.1.1 历史渊源 70
6.1.2 支持 71
6.2 神经元 74
6.3 线性回归 77
6.4 激励函数 80
6.4.1 Sigmoid函数 81
6.4.2 Tanh函数 82
6.4.3 ReLU函数 82
6.4.4 Linear函数 83
6.5 神经网络 84
6.6 网络训练 85
6.6.1 输入 86
6.6.2 输出 86
6.6.3 网络结构 87
6.6.4 损失函数 88
6.6.5 求解极小值 90
6.6.6 线性回归 90
6.6.7 凸函数 93
6.6.8 二元(多元)凸函数 98
6.6.9 导数补充 101
6.6.10 导数怎么求 103
6.6.11 “串联”的神经元 105
6.6.12 模型的工作 107
6.6.13 理解损失函数 108
6.7 深度学习的优势 108
6.7.1 线性和非线性的叠加 109
6.7.2 不用再提取特征 111
6.7.3 处理线性不可分 112
6.8 手写数字识别公开数据集 114
6.9 全连接网络 117
6.9.1 输入与输出 118
6.9.2 代码解读 119
6.9.3 运行结果 125
6.10 卷积神经网络 125
6.10.1 代码解读 125
6.10.2 理解卷积神经网络的结构 132
6.10.3 卷积核的结构 134
6.11 循环神经网络 135
6.11.1 网络结构 136
6.11.2 应用案例 140
6.11.3 代码解读 143
6.12 其他注意事项 148
6.12.1 并行计算 148
6.12.2 梯度消失和梯度爆炸 152
6.12.3 归一化 157
6.12.4 超参数的设置 159
6.12.5 正则化 161
6.12.6 不唯一的模型 170
6.13 深度神经网络的发展趋势 171
6.14 本章小结 178
第7章 Gym——不要钱的试验场 180
7.1 简介 180
7.2 安装 182
7.3 类别 183
7.4 接口 188
7.5 本章小结 191
第8章 DQN算法族 192
8.1 2013版DQN 192
8.1.1 模型结构 192
8.1.2 训练过程 195
8.1.3 Replay Memory 197
8.1.4 小结 198
8.2 2015版DQN 198
8.2.1 模型结构 198
8.2.2 训练过程 199
8.2.3 Target网络 200
8.2.4 小结 201
8.3 Double DQN 201
8.3.1 模型结构 202
8.3.2 训练过程 202
8.3.3 效果 203
8.3.4 小结 204
8.4 Dueling DQN 204
8.4.1 模型结构 205
8.4.2 效果 207
8.4.3 小结 208
8.5 优先回放DQN 208
8.6 本章小结 209
第9章 PG算法族 211
9.1 策略梯度 211
9.2 DPG 213
9.3 Actor-Critic 214
9.4 DDPG 214
9.5 本章小结 218
第10章 A3C 219
10.1 模型结构 219
10.1.1 A3C Q-Learning 219
10.1.2 A3C Actor-Critic 222
10.2 本章小结 224
第11章 UNREAL 226
11.1 主任务 226
11.2 像素控制任务 227
11.3 奖励值预测 229
11.4 值函数回放 230
11.5 损失函数 231
11.6 本章小结 232
扩展篇
第12章 NEAT 236
12.1 遗传算法 237
12.1.1 进化过程 237
12.1.2 算法流程 238
12.1.3 背包问题 239
12.1.4 极大(小)值问题 247
12.2 NEAT原理 255
12.2.1 基因组 255
12.2.2 变异和遗传 256
12.3 NEAT示例 258
12.4 本章小结 262
第13章 SerpentAI 263
13.1 简介 263
13.2 安装和配置 264
13.3 示例 265
13.3.1 创建Game Plugin 265
13.3.2 创建Game Agent 268
13.3.3 训练Context Classifier 271
13.3.4 训练Agent 282
13.4 本章小结 286
第14章 案例详解 287
14.1 AlphaGo 287
14.1.1 AlphaGo的前世今生 287
14.1.2 “深蓝”是谁 288
14.1.3 围棋到底有多复杂 290
14.1.4 论文要义 294
14.1.5 成绩 302
14.1.6 开源项目 303
14.2 AlphaGo Zero 304
14.2.1 改进之处 304
14.2.2 成绩 308
14.2.3 开源项目 309
14.3 试验场大观 311
14.3.1 StarCraftⅡ 311
14.3.2 VizDoom 320
14.3.3 Universe 323
14.3.4 DOTA2 324
14.4 本章小结 329
第15章 扩展讨论 331
15.1 TRPO 331
15.2 反向强化学习 332
15.3 模型压缩 333
15.3.1 剪枝 335
15.3.2 量化 336
15.3.3 结构压缩 337
15.4 本章小结 339
后记 341
附录A 342
A.1 安装Ubuntu 342
A.2 安装CUDA环境 347
A.3 安装PyTorch 348
A.4 下载本书示例代码 349
A.5 安装PyCharm 350
A.5.1 方法一 350
A.5.2 方法二 351
A.6 安装Jupyter Notebook 351
A.7 安装相关Python依赖包 352
A.7.1 安装Box2D 352
A.7.2 安装MuJoCo 352
A.7.3 安装SerpentAI 355
A.7.4 安装Spritex 359
A.7.5 安装StarCraftⅡ 360
A.7.6 安装VizDoom 363
A.8 安装OpenCV 364
A.9 Python语言简介 364
A.9.1 安装Python 365
A.9.2 Hello World 365
A.9.3 行与缩进 365
A.9.4 变量类型 366
A.9.5 循环语句 367
A.9.6 函数 368
A.9.7 模块 369
A.9.8 小结 369
A.10 本书涉及的主要开源软件版本 369
参考文献 371