Joy RL:强化学习实践教程

978-7-115-63154-1
作者: 江季王琦杨毅远
译者:
编辑: 郭媛
分类: 其他

图书目录:

详情

本书是继《Easy RL:强化学习教程》(俗称“蘑菇书”)之后,为强化学习的读者专门打造的一本深入实践的全新教程。全书大部分内容基于3位作者的实践经验,涵盖马尔可夫决策过程、动态规划、免模型预测、免模型控制、深度学习基础、DQN算法、DQN算法进阶、策略梯度、Actor-Critic算法、DDPG与TD3算法、PPO算法等内容,旨在帮助读者快速入门强化学习的代码实践,并辅以一套开源代码框架“JoyRL”,便于读者适应业界应用研究风格的代码。与“蘑菇书”不同,本书对强化学习核心理论进行提炼,并串联知识点,重视强化学习代码实践的指导而不是对理论的详细讲解。 本书适合具有一定编程基础且希望快速进入实践应用阶段的读者阅读。

图书摘要

版权信息

书名:Joy RL:强化学习实践教程

ISBN:978-7-115-63154-1

本书由人民邮电出版社发行数字版。版权所有,侵权必究。

您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。

我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。

如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。

版  权

著    江 季 王 琦 杨毅远

责任编辑 郭 媛

人民邮电出版社出版发行  北京市丰台区成寿寺路11号

邮编 100164  电子邮件 315@ptpress.com.cn

网址 http://www.ptpress.com.cn

读者服务热线:(010)81055410

反盗版热线:(010)81055315

内容提要

本书是继《Easy RL:强化学习教程》(俗称“蘑菇书”)之后,为强化学习的读者专门打造的一本深入实践的全新教程。全书大部分内容基于3位作者的实践经验,涵盖马尔可夫决策过程、动态规划、免模型预测、免模型控制、深度学习基础、DQN算法、DQN算法进阶、策略梯度、Actor-Critic算法、DDPG与TD3算法、PPO算法等内容,旨在帮助读者快速入门强化学习的代码实践,并辅以一套开源代码框架“JoyRL”,便于读者适应业界应用研究风格的代码。

与“蘑菇书”不同,本书针对强化学习核心理论进行提炼,并串联知识点,重视强化学习代码实践的指导而不是对于理论的详细讲解。本书适合具有一定编程基础且希望快速进入实践应用阶段的读者阅读。

前  言

在几年前,我们“‘蘑菇书’三剑客”(笔者、王琦、杨毅远)已经在GitHub上发布过线上教程“EasyRL”,填补了强化学习国内相关资料较少的空缺。特此再次衷心感谢李宏毅、周博磊、李科浇3位老师的授权与开源奉献精神,没有他们的鼓励与无私奉献,就没有深受广大强化学习初学者喜爱的“蘑菇书”。受到广大读者的鼓励,我们不断优化教程,以期帮助读者更好、更愉快地入门强化学习。

时光荏苒,笔者已在业界深耕多年,对于强化学习实践有了更加深入的认识,并在理论与实践的结合方面有了一些心得。与此同时,我们也发现读者在将理论应用到实践的过程中似乎遇到了一些困难。首先,很多已经有人工智能知识基础的读者只是想用强化学习来做一些其他方面的交叉研究,但由于强化学习理论错综复杂,对于这样的读者来说很难在短时间内快速把握其重点,并且容易陷入一些与实践关系不大的小知识点的陷阱中。其次,有一些读者很难将强化学习中的公式和实际代码对应起来,例如策略函数的设计等,并且对算法的各种超参数的调整也不知从何处入手。

虽然市面上已经有一些关于强化学习实践的教程,但是这些教程往往过于偏重实践,忽视了理论与实践之间的平衡。此外,相关的实践也往往局限于一些简单的实验和算法,涵盖的内容不够全面。鉴于这些现状,笔者希望读者对强化学习知识有更深入、全面的了解,这也是本书编写的初衷。

本书的内容主要基于我们的理论知识与实践经验,并融入了一些原创内容,例如针对策略梯度算法的两种不同的推导版本,以便让读者从不同的角度更好地理解相关知识。全书始终贯穿强化学习实践中的一些核心问题,比如优化值估计的实践技巧、解决探索与利用的平衡等问题。全书的内容编排合理,例如从传统强化学习到深度强化学习过渡的内容中,增加对深度学习基础的总结归纳内容,并对一些应用十分广泛的强化学习算法,如DQN、DDPG以及PPO等算法进行强调,读者可有选择性地阅读。本书除了给出一些简单的配套代码之外,还提供一套“JoyRL”开源框架,以及更多复杂环境实验示例,想要深入了解的读者可自行研究。

本书由开源组织Datawhale的成员采用开源协作的方式完成,历时1年有余,主要参与者包括笔者、王琦和杨毅远。此外,十分感谢谌蕊(清华大学)、丁立(上海交通大学)、郭事成(安徽工业大学)、孙成超(浙江理工大学)、刘二龙(南京大学)、潘笃驿(西安电子科技大学)、邱雯(日本北见工业大学)、管媛媛(西南交通大学)、王耀晨(南京邮电大学)等同学参与“JoyRL”开源框架的共建,以及林诗颖同学在本书编写过程中的友情帮助。在本书写作和出版过程中,人民邮电出版社提供了很多出版的专业意见和支持,在此特向信息技术分社社长陈冀康老师和本书的责任编辑致谢。

由于笔者水平有限,书中难免有疏漏和不妥之处,还望读者批评指正。

江季  

2024年9月

资源与支持

本书由异步社区出品,异步社区(www.epubit.com)为您提供后续服务。

资源获取

本书提供如下资源:

配套代码;

练习题答案;

思维导图。

要想获得以上资源,您可以扫描下方二维码,根据指引领取。

提交勘误

作者和编辑尽最大努力来确保书中内容的准确性,但难免会存在疏漏。欢迎您将发现的问题反馈给我们,帮助我们提升图书的质量。

当您发现错误时,请登录异步社区,按书名搜索,进入本书页面,点击“发表勘误”,输入错误信息,点击“提交勘误”按钮即可(见下图)。本书的作者和编辑会对您提交的错误信息进行审核,确认并接受后,您将获得异步社区的100积分。积分可用于在异步社区兑换优惠券、样书或奖品。

与我们联系

我们的联系邮箱是contact@epubit.com.cn。

如果您对本书有任何疑问或建议,请您发邮件给我们,并请在邮件标题中注明本书书名,以便我们更高效地做出反馈。

如果您有兴趣出版图书、录制教学视频,或者参与图书翻译、技术审校等工作,可以发邮件给我们。

如果您所在的学校、培训机构或企业,想批量购买本书或异步社区出版的其他图书,也可以发邮件给我们。

如果您在网上发现有针对异步社区出品图书的各种形式的盗版行为,包括对图书全部或部分内容的非授权传播,请您将怀疑有侵权行为的链接通过邮件发给我们。您的这一举动是对作者权益的保护,也是我们持续为您提供有价值的内容的动力之源。

关于异步社区和异步图书

异步社区是由人民邮电出版社创办的IT专业图书社区,于2015年8月上线运营,致力于优质内容的出版和分享,为读者提供高品质的学习内容,为作译者提供专业的出版服务,实现作者与读者在线交流互动,以及传统出版与数字出版的融合发展。

异步图书是异步社区策划出版的精品IT图书的品牌,依托于人民邮电出版社的计算机图书出版积累和专业编辑团队,相关图书在封面上印有异步图书的LOGO。异步图书的出版领域包括软件开发、大数据、人工智能、测试、前端、网络技术等。

第1章 绪论

在正式介绍具体的强化学习(reinforcement learning,RL)算法之前,本章先从宏观角度讨论强化学习的相关概念及应用等,帮助读者更好地“观其大略”。对于想利用强化学习做一些交叉研究的读者来说,更应该先通过本章了解强化学习是什么、大概能做什么、能实现什么样的效果等,而不是直接从一个个算法开始学习。

强化学习发展至今,尽管算法已经有成百上千种样式,但实际上从大类来看要掌握的核心算法并不多,大多数算法都只是在核心算法的基础上做了一些较小的改进。举个例子,如图1-1所示,我们知道水和咖啡豆通过一定的方法就能调制成咖啡,水加上糖块就能变成糖水,它们虽然看起来形式不同,但本质上都是饮品,只是有不同的口味而已。

图1-1 咖啡与糖水的示例

1.1 为什么要学习强化学习?

我们先讨论一下为什么要学习强化学习,以及强化学习对于我们的意义。可能大部分读者都是通过人工智能才了解到强化学习的,但实际上早在我们认识人工智能之前可能就已经不知不觉地接触到了强化学习。

笔者想起了初中生物课本中关于蚯蚓的一个实验,其内容大致是这样的:如图1-2所示,将蚯蚓放在一个盒子中,盒子中间有一个分岔路口,路的尽头分别放有食物和电极,让蚯蚓自己爬行到其中一条路的尽头,在放有食物的路的尽头蚯蚓会品尝到美味的食物,而在放有电极的路的尽头则会遭到轻微的电击。

图1-2 蚯蚓实验

该实验的目的是让蚯蚓能一直朝着有食物的路爬行,但由于蚯蚓没有真正的眼睛,因此一开始蚯蚓可能会一直朝着有电极的路爬行并且遭到电击。每次蚯蚓遭到电击或者吃到食物之后,实验者会将其放回原处,经过多次实验,蚯蚓会逐渐学会朝着有食物的路爬行,而不是朝着有电极的路爬行。

在这个过程中,蚯蚓在不断地尝试和试错中学习到了正确的策略。虽然初中生物课本中这个实验的目的是说明蚯蚓的运动是由外界刺激所驱动的,而不是蚯蚓自身的意志所驱动的,但在今天,从人工智能的角度来看,这其实带有较为鲜明的强化学习的“味道”,即试错学习(trial and error learning)。

试错学习一开始是和行为心理学等工作联系在一起的,主要包括以下几个关键部分。

尝试:采取一系列动作或行为来尝试解决问题或实现目标。

错误:在尝试的过程中可能会出现错误,这些错误可能是环境的不确定性导致的,也可能是自身的不当行为导致的。

结果:每次尝试的结果,无论是积极的还是消极的,都会对下一次尝试产生影响。

学习:通过不断地尝试并出现错误,自身会逐渐积累经验,了解哪些动作或行为会产生有利的结果,从而在下一次尝试中做出更加明智的选择。

试错学习在我们的日常生活中屡见不鲜,并且通常与其他形式的学习形成对比,例如经典条件反射(巴甫洛夫条件反射)和观察学习(通过观察他人来学习)。注意,试错学习虽然是强化学习中最鲜明的要素之一,但并不是强化学习的全部,强化学习还包含其他的学习形式,例如观察学习(对应模仿学习、离线强化学习等技术)。

另外,在学习过程中个人做出的每一次尝试都是一次决策(decision),每一次决策都会带来相应的结果。这个结果可能是好的,也可能是坏的;可能是即时的,比如我们吃到棉花糖就能立刻感受到它的甜,也可能是延时的,比如寒窗苦读十年之后,方得“一日看尽长安花”。

我们把好的结果称为奖励(reward),坏的结果称为惩罚(punishment)或者负的奖励。最终通过一次次的决策来实现目标,这个目标通常是以最大化累积的奖励来呈现的,这个过程就是序列决策(sequential decision making)过程,而强化学习就是解决序列决策问题的有效方法之一,即本书的主题。换句话说,对于任意问题,只要能够将其建模成序列决策问题或者带有鲜明的试错学习特征,就可以使用强化学习来解决,并且这是截至目前最为高效的方法之一,这就是要学习强化学习的原因。

1.2 强化学习的应用

从1.1节中我们了解了强化学习大概是用来做什么的,那么它能实现什么样的效果呢?本节我们就来看看强化学习的一些实际应用。强化学习的应用场景非常广泛,其中最为典型的场景之一就是游戏,以AlphaGo为代表的围棋AI就是强化学习的代表作之一,也是其为人们广泛熟知的得意之作。除了部分棋类游戏,以AlphaStar为代表的《星际争霸》AI、以AlphaZero为代表的通用游戏AI,以及以近年的OpenAI Five为代表的Dota 2 AI,这些都是强化学习在游戏领域的典型应用。

除了游戏领域之外,强化学习在机器人抓取(robot manipulation)领域也有所应用。举个例子,图1-3演示了Nico机器人学习抓取任务。该任务的目标是将桌面上的物体抓取到指定的位置,机器人通过每次输出相应关节的参数来活动手臂,然后通过摄像头观测当前的状态,最后通过人为设置的奖励(例如接近目标就给奖励)来学习到正确的抓取策略。

图1-3 Nico机器人学习抓取任务

不同于游戏领域,在机器人抓取领域中实现强化学习的成本往往较为高昂,一方面是观测环境的状态需要大量的传感器,另一方面则是试错学习带来的实验成本较高,在训练过程中如果机器人决策稍有失误就有可能导致设备损坏,因此在实际应用中往往需要结合其他的方法来辅助强化学习进行决策。其中最典型的方法之一就是建立仿真环境,通过仿真环境来模拟真实环境,这样就可以大大降低实验成本。

如图1-4所示,该仿真环境模拟了真实的机器人抓取任务的环境。通过仿真环境免去大量视觉传感器的搭建过程,从而可以大大降低实验成本,同时由于仿真环境中机器人关节响应速度更快,进而算法的迭代速度更快,可以更快地得到较好的策略。

图1-4 机器人抓取任务的仿真环境

当然,仿真环境也并不是万能的,因为仿真环境和真实环境之间往往存在一定的差异,这就需要我们在设计仿真环境的时候尽可能全面地考虑到真实环境的各种因素,这是一个非常重要的研究方向。除了简单的抓取任务之外,研究者们还在探索将强化学习应用于更加复杂的机器人任务,例如仓储搬运、机器人足球以及自动驾驶等。

除了游戏和机器人抓取领域之外,强化学习在金融领域也有所应用,例如股票交易、期货交易、外汇交易等。在股票交易中,我们的目标是通过买卖股票来最大化我们的资产。在这个过程中,我们需要不断地观测当前的股票价格,然后根据当前的价格来决定买入或卖出股票的数量,最后通过股票价格的变化来更新我们的资产。在这个过程中,我们的资产会随着股票价格的变化而变化,这就是奖励或惩罚,每次的买卖就是决策。当然,强化学习的应用还远远不止如此,例如自动驾驶、推荐系统、交通派单、广告投放以及近年来大火的ChatGPT等,这些都是强化学习的典型应用。

1.3 强化学习方向概述

强化学习不仅应用十分广泛,而且从技术角度来讲其方向也非常多。在学习基础的强化学习知识之后,读者可根据自身的兴趣选择相应的方向进行深入学习。本节将对强化学习的一些典型方向进行简要介绍,以便读者能够对强化学习有更加全面的认识,为后续的学习做好铺垫。强化学习的典型方向主要如下。

1.3.1 多智能体强化学习

顾名思义,多智能体强化学习就是在多个智能体的环境下进行强化学习。与单智能体环境不同,在多智能体环境中通常存在非静态问题,即环境的状态不仅由单个智能体的动作决定,还受到其他智能体的动作的影响。例如在AlphaStar中,每个智能体都是《星际争霸》中的一个玩家,每个玩家都有自己的目标,例如攻击对方的基地或者防守自己的基地,这就导致环境的状态不仅由玩家自己的动作决定,还受到其他玩家的动作的影响。

此外,在多智能体环境中还存在信号问题,即智能体之间可能需要进行通信以实现合作或竞争,如何高效地通信并从信号中学习是一个难题。同时,存在信誉分配问题,在多智能体的合作任务中,确定每个智能体对于整体目标的贡献(或责任)是一个挑战。多智能体环境通常也存在复杂的博弈场景,对于此类研究,研究者们通常会引入博弈论来找到环境中的纳什均衡或其他均衡策略,但这同样是一个复杂的挑战。

1.3.2 模仿学习和逆强化学习

模仿学习(imitation learning,IL)是指在奖励函数难以明确定义或者策略本身就很难学习的情况下,通过模仿人类的行为来学习到一个较好的策略。最典型的模仿策略之一就是行为克隆(behavioral cloning,BC),即将每一个状态-动作对视为一个训练样本,并使用监督学习的方法(如神经网络)来学习一个策略。但这种方法容易受到分布漂移(distribution shift)的影响,即智能体可能会遇到从未见过的状态,从而导致策略出错。

逆强化学习(inverse reinforcement learning,IRL)即通过观察人类的行为来学习到一个奖励函数,然后通过强化学习来学习一个策略。由于需要专家数据,逆强化学习会受到噪声的影响,因此如何从噪声数据中学习到一个较好的奖励函数也是一个难题。

1.3.3 探索策略

在强化学习中,探索策略(exploration strategy)是一个非常重要的问题,即如何在探索和利用之间进行权衡。在探索的过程中,智能体会尝试一些未知的动作,从而可能获得更多的奖励,但同时可能会受到较多的惩罚。而在利用的过程中,智能体会选择已知的动作,从而可能获得较少的奖励,但同时可能会受到较少的惩罚。因此,如何在探索和利用之间进行权衡是一个非常重要的问题。目前比较常用的方法有ε-greedy(ε贪心)和上置信界(upper confidence bound,UCB)等。

此外,提高探索效率的目的是避免局部最优问题,从而增强智能体的鲁棒性。近年来,有研究结合进化算法来提高探索效率,例如NEAT(neuro evolution of augmenting topologies,增强拓扑的神经进化)和PBT(population based training,基于种群的训练)等算法,当然这些算法在提高探索效率的同时会带来一定的计算成本。

1.3.4 实时环境

实时环境(real-time environment)是指在实际应用中,智能体往往需要在实时或者在线环境中进行决策。在这种情况下训练不仅会降低效率(实时环境中响应动作更慢),还会带来安全隐患(训练过程中可能会出现意外)。

解决这一问题的方法之一就是离线强化学习(offline reinforcement learning),即在离线环境中进行训练,然后将训练好的模型部署到在线环境中进行决策。但这种方法也存在一定的问题,例如离线环境和在线环境之间可能存在分布漂移,即两个环境的状态分布不同,这就会导致训练好的模型在在线环境中可能会出现意外。

另外还有一种近两年比较流行的方法——世界模型(world model),即在离线环境中训练一个世界模型,然后将世界模型部署到在线环境中进行决策。世界模型的思路是将环境分为两个部分,一个部分是世界模型,另一个部分是控制器。世界模型的作用是预测下一个状态,而控制器的作用是根据当前的状态来决策动作。这样就可以在离线环境中训练世界模型,然后将世界模型部署到在线环境中进行决策,从而避免了在线环境中的训练过程,提高了效率,同时避免了在线环境中的安全隐患。

但世界模型也存在一定的问题,例如世界模型的预测误差会导致控制器的决策出错,因此如何提高世界模型的预测精度也是一个难题。

1.3.5 多任务强化学习

多任务强化学习(multi-task reinforcement learning)在深度学习中也较为常见,在实际应用中,智能体往往需要同时完成多个任务,例如机器人需要同时完成抓取、搬运、放置等任务,而不是单一的抓取任务。在这种情况下,如何在多个任务之间进行权衡是一个难题。

目前解决该问题比较常用的方法有联合训练(joint training)和分层强化学习(hierarchical reinforcement learning)等。联合训练的思路是将多个任务的奖励进行加权求和,然后通过强化学习来学习一个策略。分层强化学习的思路是将多个任务分为两个层次,一个是高层策略,另一个是低层策略。高层策略的作用是决策当前的任务,而低层策略的作用是决策当前任务的动作。这样就可以通过强化学习来学习高层策略和低层策略,从而解决多任务强化学习的问题。

但分层强化学习也存在一定的问题,例如高层策略的决策可能会导致低层策略的决策出错,因此如何提高高层策略的决策精度也是一个难题。

1.4 学习本书之前的一些准备

我们先介绍一下关于本书出版的初衷。其实目前强化学习相关的图书在市面上已经琳琅满目了,但是其中很多偏向理论阐述,缺少实际的经验总结,比如可能会通过数学推导来告诉读者某某算法是可行的,但是一些实验细节和不同算法之间的对比很难体现出来,理论与实践之间、公式与代码之间其实存在一定的“鸿沟”。

另外,由于信息时代知识的高速迭代,面对海量的信息,我们需要从中梳理出重点并快速学习,以便尽快看到实际应用的效果,而这就不得不需要经验丰富的老师傅来“带路”,这也是本书出版的初衷之一。笔者会基于大量的强化学习实践经验,对理论部分删繁就简,并将其与实践紧密结合,以更通俗易懂的方式帮助读者快速实践。

在具体学习本书之前,先给读者做一些基础知识的铺垫。

强化学习是机器学习的一个分支,因此读者需要具备一定的机器学习基础,例如具备基本的线性代数、概率论、数理统计等基础知识。当然只需要读者修过相关的大学课程即可,不必刻意回顾一些知识,原理部分可跟随本书的推导学习。

学习强化学习初期是不涉及深度神经网络相关的知识的,这一部分通常称为传统强化学习部分。虽然这部分的算法在今天已经不常用,但是其中蕴含的一些思想和技巧是非常重要的,因此读者需要对这部分内容有所了解。在学习结合深度学习的深度强化学习部分之前,本书会用一章来帮助读者整理需要的深度学习知识。

深度学习在强化学习中的主要作用是提供强大的函数拟合能力,使得智能体能够适应复杂、高维度和非线性的环境。深度学习与强化学习之间的关系相当于眼睛和大脑的关系,眼睛是帮助大脑决策、更好地观测世界的工具,一些没有眼睛的动物,例如蚯蚓,也可以通过其他的感官来观测并解析状态。再如,同样的大脑决策水平的情况下,即相同的强化学习算法条件下,正常人要比双目失明的人做日常的决策方便。但是,即使深度学习部分是相同的,例如正常大人和小孩都能通过眼睛观测世界,大脑决策水平的差异也会让两者的表现有所差异。

总而言之,深度学习与强化学习在复杂的环境下缺一不可。虽然强化学习算法很多,但基本分为两类,即基于价值的算法和基于策略的算法。这两类算法各有优势,请读者在学习之后根据实际需要谨慎选择。

相关图书

DeepSeek极速上手 :高效做事不内耗
DeepSeek极速上手 :高效做事不内耗
高并发系统:设计原理与实践
高并发系统:设计原理与实践
秒懂AI辅助论文写作
秒懂AI辅助论文写作
AI商业进化论:“人工智能+”赋能新质生产力发展
AI商业进化论:“人工智能+”赋能新质生产力发展
开源心法
开源心法
生物计算
生物计算

相关文章

相关课程