序
强化学习这个研究领域自从被人们发现后,一直是人工智能算法中的一大重要研究课题。因为强化学习算法自身仅从环境中获取相应的学习数据,与人类的学习和认知过程接近,强化学习算法也是通用人工智能算法的一个强有力的候选。从2010年开始,随着深度学习在人工智能领域的飞速发展,结合了深度学习模型和强化学习算法的深度强化学习算法也得到了飞速发展。深度强化学习算法具有强化学习算法对周围环境的学习能力,同时还拥有深度模型强大的对数据的特征提取和拟合能力,它正被广泛应用于各个领域。在一些原本认为人类占据优势的领域(比如游戏领域),深度强化学习算法也逐渐打平甚至超越了人类的水平。例如,深度强化学习算法的高光时刻应该是AlphaGo在围棋比赛中以较大的优势赢得了人类世界冠军的比赛。在引入深度学习模型后,AlphaGo使用的强化学习算法,也就是蒙特卡洛树搜索算法的搜索能力有了显著提高,甚至可以让专业的运动员认为通过算法得到的某些棋子的落点是神来之笔,完全摆脱了人们对计算机算法呆板、不知变通的印象。当然,这些进展也有赖于硬件水平和算力的飞速提高。相信在不久的将来,随着算力的继续提高,人们可以开发出更复杂的深度学习模型,结合强化学习算法,最后逐渐逼近通用人工智能的理想。
作为一本深度强化学习的入门图书,本书要解决的一大问题是如何帮助读者快速学习相关领域的入门知识。一方面,笔者在初学强化学习算法的时候,看的书主要描述的都是强化学习的理论知识,关于算法见得最多的是描述算法如何实现的流程图,相反很少涉及把算法转化成具体的代码内容。不同于一般的计算机算法,对于深度强化学习算法来说,实现细节是非常重要的,一些实现细节,比如特征提取、深度模型的超参数(如学习率、迷你批次大小等)对于模型的收敛至关重要。笔者在实现这些算法的过程中,很多情况下都会对具体的实现细节感到苦恼,常常需要仔细阅读原始论文,甚至查看网上类似的实现,最后才能得到自己的能够收敛的算法代码。笔者觉得这些细节部分并非无关紧要,而是关乎算法在工程上是否能够实现。如果讲清楚了细节,很可能会为读者节省宝贵时间,也能更好地帮助读者理解深度强化学习算法需要解决的问题。另一方面,对于如何进行内容上的组织,笔者考虑再三,决定还是采取先理论基础、后实践的方式,在理论基础方面,读者可以随意跳过一些觉得比较复杂的章节,先看具体的实现,等到需要回顾理论的时候再回头参考相关的理论。最后,本文的参考内容除了少部分来源于教科书,大部分都来源于参考文献,可以说尽可能提取这些参考文献的精华部分,利用的参考文献也尽可能新,除了一些经典算法,使用的参考文献都是近五年来新的研究成果,笔者希望对最新的研究成果的归纳能够对读者把算法应用到实践中有所启发。
本书的另一个特点就是使用了PyTorch作为深度学习框架。作为一个成熟的深度学习框架,PyTorch的特点是使用方便,容易上手,而且容易和原生Python代码集成(也就是所谓的“Pythonic”),笔者日常也比较偏爱这个深度学习框架,因此在撰写本书的时候使用的是PyTorch来实现所有的强化学习算法。本书在成书时使用的PyTorch的版本是1.8,这个版本相对来说还是比较新的,但是笔者为了保持最大的向前兼容性,会尽可能避免使用最新的一些特性,理论上说,本书绝大部分代码在PyTorch 1.0以上版本都能运行。另外,读者如果希望对PyTorch进行快速入门,可以参考PyTorch官网的教程或者笔者之前的图书《深入浅出PyTorch——从模型到源码》。
本书配套的源代码可以按照封底“读者服务”的提示获取。
最后,我想要感谢大家在成书过程中对我的支持和帮助,特别是电子工业出版社李利健编辑,在成书过程中给了我很大支持。还有我的师兄、师弟,以及业界的朋友,他们对本书的初稿提出了不少宝贵的意见。鉴于本书成书仓促,不免有错漏之处,恳请读者批评、指正。
张校捷