科技>计算机>网络与互联网
深入浅出强化学习:编程实战

深入浅出强化学习:编程实战"

作者:郭宪,宋俊潇,方勇纯
ISBN:9787121367465
定价:¥89.0
字数:354千字
页数:272
出版时间:2020-03
开本:16开
版次:01-01
装帧:
出版社:电子工业出版社
简介

涵盖强化学习基本算法实践+深度强化学习算法的原理实现及案例。代码丰富,可直接上手操作;配套丰富的直播课程资源!

前言

前言 每次写书的前言时,我总会感到惴惴不安。因为写前言的时候,书往往已经定稿了,不能再修改内容,书中的每一个字、每一句话、每一段表述都会毫无掩饰地袒露在读者面前。这时我的内心总是惶恐:书中的内容是否已经讲清楚?书中是否仍有很多漏洞?书中的见解是否会贻笑大方?最令我忧虑的是书的内容是否会误人子弟。相信这些担忧是每个心存敬畏之心的作者都有的。直到自己写了两本书,才真正明白那句从小就知道的名言“尽信书不如无书”! 不过,开卷有益,我们还是要多读书、读好书,取之精华,去之糟粕。一本书或一篇文章存在的价值就在于它的精华,我希望这本书还有那么一点点的精华,能帮助到不同层次的读者。 这本书的姊妹篇是《深入浅出强化学习:原理入门》,该书绝大部分的笔墨都用在描述算法的原理上,至于算法的实现,讲得并不多。《深入浅出强化学习:原理入门》出版后,我意识到学习强化学习算法如同学游泳,只知道理论而不下水去游,就永远学不会;同理,只懂原理而没有进行编程训练,永远学不会强化学习算法。出于这样的动机,我为《深入浅出强化学习:原理入门》一书编写了配套程序。在程序的编写过程中,我参考了很多网上的资源,如《莫烦Python》、GitHub 上的很多源代码等。同时还邀请了知乎上的好友——网名为“一缕阳光”的宋俊潇共同完成这本以编程为主题的书。在这里非常感谢《莫烦Python》,感谢那些将代码开源的作者们。本书写作的初衷是通过编程实例帮助那些想要学习强化学习算法的读者更深入、更清楚地理解算法。本书的篇章结构与《深入浅出强化学习:原理入门》一书的篇章结构大体相同,首先介绍马尔可夫决策过程的理论框架,然后介绍基于动态规划的策略迭代算法和值迭代算法,在此基础上介绍了目前强化学习算法中最基本的算法。第1 篇讲解基于值函数的强化学习算法,该篇介绍了基于两种策略评估方法(蒙特卡洛策略评估和时间差分策略评估)的强化学习算法,进而介绍了如何将函数逼近的方法引入强化学习算法中。第2 篇讲解直接策略搜索的方法,该篇介绍了最基本的策略梯 度方法、AC 方法、PPO 方法和DDPG 算法。第3 篇讲解基于模型的强化学习方法,该篇介绍了基于MPC的方法、AlphaZero 算法基本原理及在五子棋上的具体实现细节。建议读者根据书中的代码亲自动手编程,并修改程序中的超参数,根据运行结果不断体会算法原理。笔者在为本书编写代码的过程中也受益匪浅。 本书第1 篇中基于值函数方法的代码编程得益于笔者在2018 年下半年给研究生开的选修课。很多代码参考了学生的作业,在该课程方面表现突出的有:冯帆、曹丁元、郑昊思等,在此感谢。本书第2 篇中直接策略搜索的方法中很多代码则参考了莫烦的Python 课程。第3 篇中基于模型的强化学习算法的代码则参考了伯克利CS294深度强化学习课程的作业,AlphaZero 部分则基于宋俊潇于2018 年上半年完成的一个GitHub 开源项目。课题组内的朱威、赵铭慧、张学有、姜帆、戚琪和古明阳等人也参与了本书的讨论和校对,没有他们,这本书也不可能完成。总之,这本书参考了很多网络资源,非常感谢互联网的共享精神,感谢那些拥有共享精神的网友,免费、共享,是计算机学科能快速发展的重要原因。 非常感谢方勇纯教授对笔者的教导和帮助,并积极推进本书的进展。感谢编辑刘皎女士默默无闻的辛勤付出,感谢国家自然基金青年基金(61603200)对笔者的支持。最后,非常感谢我的爱人王凯女士,在历经艰难的十月怀胎后,生了一个健康漂亮的小公主,非常感谢岳父岳母日日夜夜不辞辛苦地呵护着宝宝健康成长。这本书献给最可爱最聪明最美丽的女儿汐汐。 郭 宪 2019 年11 月

目录

第0 篇 先导篇 1 1 一个极其简单的强化学习实例 2 1.1 多臂赌博机 2 1.1.1 ? ? greedy策略 3 1.1.2 玻尔兹曼策略 . 6 1.1.3 UCB 策略 7 1.2 多臂赌博机代码实现 7 2 马尔可夫决策过程 13 2.1 从多臂赌博机到马尔可夫决策过程 13 2.2 马尔可夫决策过程代码实现 23 第1 篇 基于值函数的方法 31 3 基于动态规划的方法 32 3.1 策略迭代与值迭代 .32 3.1.1 策略迭代算法原理 33 3.1.2 值迭代算法原理 35 3.2 策略迭代和值迭代的代码实现 36 3.2.1 鸳鸯环境的修改 36 3.2.2 策略迭代算法代码实现 37 3.2.3 值迭代算法代码实现 .41 4 基于蒙特卡洛的方法 45 4.1 蒙特卡洛算法原理 46 4.2 蒙特卡洛算法的代码实现 49 4.2.1 环境类的修改和蒙特卡洛算法类的声明 49 4.2.2 探索初始化蒙特卡洛算法实现 52 4.2.3 同策略蒙特卡洛算法实现 . 56 5 基于时间差分的方法 62 5.1 从动态规划到时间差分强化学习 62 5.2 时间差分算法代码实现 66 5.2.1 时间差分算法类的声明 66 5.2.2 SARSA 算法 . 67 5.2.3 Q-Learning 算法 70 6 基于函数逼近的方法 74 6.1 从表格型强化学习到线性函数逼近强化学习 74 6.1.1 表格特征表示 74 6.1.2 固定稀疏表示 75 6.1.3 参数的训练 76 6.2 基于线性函数逼近的Q-Learning 算法实现 76 6.3 非线性函数逼近DQN 算法代码实现 85 第2 篇 直接策略搜索的方法 95 7 策略梯度方法 96 7.1 算法基本原理及代码架构 96 7.1.1 策略的表示问题 97 7.1.2 随机策略梯度的推导 98 7.1.3 折扣累积回报 99 7.1.4 代码架构 101 7.2 离散动作:CartPole 实例解析及编程实战 103 7.2.1 CartPole 简介 103 7.2.2 问题分析及MDP 模型 .104 7.2.3 采样类的Python 源码实现 105 7.2.4 策略网络模型分析 106 7.2.5 策略网络类的Python 源码实现 108 7.2.6 策略网络的训练与测试 110 7.2.7 用策略梯度法求解Cartpole 的主函数 112 7.2.8 CartPole 仿真环境开发 113 7.3 连续动作Pendulum 实例解析及编程实战 117 7.3.1 Pendulum 简介 118 7.3.2 采样类的Python 源代码实现 118 7.3.3 策略网络模型分析 .120 7.3.4 策略网络类的Python 源码实现 121 7.3.5 策略网络的训练与测试 125 7.3.6 用策略梯度法求解Pendulum 的主函数 126 7.3.7 Pendulum 仿真环境开发 127 8 Actor-Critic 方法 131 8.1 Actor-Critic 原理及代码架构 131 8.1.1 Actor-Critic 基本原理 131 8.1.2 Actor-Critic 算法架构 .133 8.2 TD-AC 算法 133 8.2.1 采样类的Python 源码 134 8.2.2 策略网络的Python 源码 135 8.2.3 策略训练和测试 138 8.2.4 主函数及训练效果 140 8.3 Minibatch-MC-AC 算法 141 8.3.1 Minibatch-MC-AC 算法框架 141 8.3.2 采样类的Python 源码 142 8.3.3 策略网络的Python 源码 144 8.3.4 策略的训练和测试 147 8.3.5 主函数及训练效果 149 9 PPO 方法 151 9.1 PPO 算法基本原理及代码结构 151 9.2 Python 源码解析 154 9.2.1 采样类 154 9.2.2 策略网络 156 9.2.3 策略的训练和测试 159 9.2.4 主函数及训练效果 160 10 DDPG 方法 163 10.1 DDPG 基本163 10.2 Python 源码解析 167 10.2.1 经验缓存器类 167 10.2.2 策略网络 169 10.2.3 训练和测试 173 10.2.4 主函数及训练效果 175 第3 篇 基于模型的强化学习方法 177 11 基于模型预测控制的强化学习算法 178 11.1 基于模型的强化学习算法的基本原理 178 11.1.1 神经网络拟合动力学模型 179 11.1.2 模型预测控制 179 11.1.3 基于模型的强化学习算法伪代码 180 11.2 Python 源码实现及解析 181 11.2.1 数据收集类 181 11.2.2 数据采样类 181 11.2.3 动力学网络类 182 11.2.4 模型预测控制器类 185 11.2.5 模型训练和预测函数 186 11.2.6 主函数 188 12 AlphaZero 原理浅析 190 12.1 从AlphaGo 到AlphaZero 191 12.2 蒙特卡洛树搜索算法 196 12.2.1 博弈树和极小极大搜索 196 12.2.2 再论多臂老虎机问题 198 12.2.3 UCT 算法 200 12.3 基于自我对弈的强化学习 206 12.3.1 基于MCTS 的自我对弈 206 12.3.2 策略价值网络的训练 210 13 AlphaZero 实战:从零学下五子棋 214 13.1 构建简易的五子棋环境 215 13.2 建立整体算法流程 223 13.3 实现蒙特卡洛树搜索 229 13.4 实现策略价值网络 235 13.5 训练实验与效果评估 240 附录A PyTorch 入门 246 A.1 PyTorch 基础知识 246 A.1.1 Tensor 246 A.1.2 基础操作 247 A.1.3 Tensor 和NumPy array 间的转化 249 A.1.4 Autograd:自动梯度 249 A.2 PyTorch 中的神经网络 250 A.2.1 如何定义神经网络 251 A.2.2 如何训练神经网络 254 A.2.3 在CIFAR-10 数据集上进行训练和测试 256 A.2.4 模型的保存和加载 259 参考文献 261 后记 263

作者简介

编辑推荐

作者寄语

电子资料

www.luweidong.cn

下一个