自序

2015年笔者加入邹伟先生的团队,负责强化学习相关项目,第一次接触“强化学习”这门学科,便被强化学习的魅力深深吸引。

强化学习的原理并不复杂,但学习过程充满了挑战。因其融合了统计、信息、概率论、运筹学等多个学科的内容,故每个算法的基础理论均涉及大量的概念、公式以及数学推导,理解起来非常困难。每研究一个系列的算法都要查阅大量的文献资料。而市面上的相关资料良莠不齐,学习过程举步维艰,经历的困惑和陷阱数不胜数。

为了方便和邹伟先生讨论,笔者将所有算法按照自己的理解进行了整理。对整个强化学习方法进行了分类,对各类别下包含的算法进行了梳理,包括每个算法的具体推导过程。邹伟先生看了笔者整理的初稿,考虑到市面上缺少强化学习中文教材类书籍,仅有的几种强化学习中文著作大多讨论的是其背后的数学理论,很少涉及如何使用编程语言实现强化学习算法,并将其应用于工程实践,便建议笔者写一本面向科研工作者的强化学习实践著作,这就是写作本书的主要原因。虽然深知撰写需要耗费大量的时间和精力,但考虑到入门书籍的重要性,为了让读者避免像笔者一样深陷泥潭,困惑彷徨,难以为继,甚至是后续花费数倍时间成本来纠正偏差,笔者踌躇许久,决定动笔。

2016年年初开始和邹伟先生进入整书规划阶段,每周都会针对整本书的总体架构和章节安排进行交流和讨论。我们讨论每一章的叙述方式,写到什么程度,以及每一章应该配备什么样的案例和习题。经过一遍遍地推翻重写、修改打磨,于2016年7月终于确定书稿大纲。接着进入了漫长的写作阶段,写作的过程更是如履薄冰,唯恐有半点不当误人子弟。内容写作大约持续了两年半的时间,这期间的主要工作就是研读材料、推导公式,和刘昱杓讨论案例和代码,撰写内容并润色修改。一直到2019年年初,才完成了书稿的全部编写工作。

写作过程中,邹伟先生负责本书的整体架构和章节安排,以及书稿的审核、修改工作。笔者负责各章节具体内容的撰写,包括算法来源、原理、流程、算法之间的关系,以及案例编写、代码描述等。刘昱杓负责为各个章节提供代码,按照章节案例需求对代码进行修改。

本书在写作和修改过程中主要参考了David Silver的网络课程Reinforcement Learning,以及Richard S. Sutton的著作Reinforcement Learning: An Introduction,在此,向两位前辈致敬。同时,感谢网络上众多的优秀开发者和博主,感谢清华大学出版社的刘星老师对本书出版给予的支持,感谢北京信息科技大学的李航同学在校稿过程中的辛勤付出,正是他们认真、细致的工作才保证了本书的出版质量,没有他们,该书不会这么顺利出版。

最后,感谢笔者的家人、朋友对笔者长期的帮助和鼓励。三年来,笔者所有的节假日和业余时间都贡献给了此书,无暇顾及其他,并且此间多次感到压抑而彷徨,正是在他们的支持下,笔者才得以坚持。

鬲 玲

2019年12月