引言¶
深度强化学习研究背景¶
在2012年AlexNet [KSH12] 夺得ImageNet图像分类比赛冠军之后,深度神经网络被应用于许多领域,如目标检测和跟踪 [HGDollarG17, RF18] ; 并且在一系列的任务中,深度学习模型的准确率达到甚至超过了人类水准。大规模的商业化应用随之而来,如人脸识别 [TYRW14] 、医疗图像处理 [RFB15] 等领域都使用深度神经网络以提高识别的速度和精度。
强化学习概念的提出最早可追溯到20世纪,其在简单场景上的应用于上世纪90年代至本世纪初即被深入研究,比如1992年强化学习算法打败了人类西洋双陆棋玩家 [Tes94]。早期的强化学习算法大多使用线性回归来拟合策略函数,并且需要预先提取人为定义好的特征,因此实际效果不甚理想。2013年之后,结合了深度学习的优势,深度强化学习使用深度神经网络进行函数拟合,展现出了其强大的威力,如使用DQN [MKS+15] 玩Atari游戏的水平达到人类水准、AlphaGo [SHM+16] 与人类顶尖围棋选手的划时代人机对战、OpenAI Five [BBC+19] 在Dota2 5v5对战比赛中击败人类冠军团队等,无论是学术界还是工业界都对这一领域表现出了极大兴趣。深度强化学习如今不但被应用在游戏AI中,还被使用在如机械臂抓取、自动驾驶、高频交易、智能交通等实际场景中,前景十分广阔。
深度强化学习平台框架现状¶
现有深度强化学习平台简介¶
深度强化学习算法由于其计算模式不规则和高并发的特点,无法像计算机视觉、自然语言处理领域的计算框架一样,从训练数据流的角度进行设计与实现;而强化学习算法形式与实现细节难以统一,又进一步加大了平台的编写难度。尽管一些现有项目尝试搭建通用强化学习算法的框架,但其效果并不理想,深度强化学习领域的研究者往往需要从头编写一个特定强化学习算法的程序来满足自己的需求。
现有使用较为广泛的深度强化学习平台包括OpenAI的Baselines [DHK+17]、SpinningUp [Ach18],加州伯克利大学的开源分布式强化学习框架RLlib [LLN+18]、rlpyt [SA19]、rlkit [PDLN19]、Garage [gc19],谷歌公司的Dopamine [CMG+18]、B-suite [ODH+20],以及其他独立开发的平台Stable-Baselines [HRE+18]、keras-rl [Pla16]、PyTorch-DRL [Chr19]、TensorForce [KSF17]。图 1.1 展示了若干主流强化学习算法平台的标志,表 1.1 列举了各个框架的基本信息。
几乎所有的强化学习平台都以OpenAI Gym [BCP+16] 所定义的API作为智能体与环境进行交互的标准接口,以TensorFlow [ABC+16] 作为后端深度学习框架的平台居多,支持至少4种免模型强化学习算法。大部分平台支持对训练环境进行自定义配置。
PyTorch [PGM+19] 是Facebook公司推出的一款开源深度学习框架,由于其易用性、接口稳定性和社区活跃性,受到越来越多学术界和工业界研究者的青睐,大有超过TensorFlow框架的趋势。然而使用PyTorch编写的深度强化学习框架中,星标最多为PyTorch-DRL [Chr19] (2400+星标),其活跃度远远不及TensorFlow强化学习社区中的开源框架。本文将在下一小节分析其原因。
现有深度强化学习平台不足¶
平台名称 |
星标数 |
后端框架 |
模块化 |
文档 |
代码质量 |
单元测试 |
上次更新 |
---|---|---|---|---|---|---|---|
11460 |
TF/PyTorch |
较全 |
10 / 24065 |
2020.5 |
|||
9764 |
TF |
无 |
2673 / 10411 |
2020.1 |
|||
8845 |
TF1 |
较全 |
180 / 2519 |
2019.12 |
|||
4630 |
TF1/PyTorch |
全面 |
1656 / 3724 |
2019.11 |
|||
4612 |
Keras |
不全 |
522 / 2346 |
2019.11 |
|||
2669 |
TF |
全面 |
3834 / 13609 |
2020.5 |
|||
2424 |
PyTorch |
无 |
2144 / 4307 |
2020.2 |
|||
2054 |
TF1 |
全面 |
2891 / 10989 |
2020.5 |
|||
1529 |
PyTorch |
全面 |
0 / 2141 |
2020.5 |
|||
1448 |
PyTorch |
较全 |
1191 / 14493 |
2020.4 |
|||
1172 |
PyTorch |
不全 |
275 / 7824 |
2020.3 |
|||
975 |
TF2 |
无 |
220 / 5353 |
2020.5 |
|||
709 |
TF1/PyTorch |
不全 |
5 / 17820 |
2020.5 |
表 1.1 按照GitHub星标数目降序排列,从后端框架、是否模块化、文档完善程度、代码质量、单元测试和最后维护时间这些维度,对比了比较流行的深度强化学习开源平台框架。这些平台框架在不同评价维度上或多或少存在一些缺陷,降低了用户体验。此处列出一些典型问题,如下所示:
算法模块化不足: 以OpenAI Baselines为代表,将每个强化学习算法单独独立成一份代码,无法做到代码之间的复用。用户在使用相关代码时,必须逐一修改每份代码,带来了极大困难。
实现算法种类有限: 以Dopamine和SpinningUp为代表,Dopamine框架只支持DQN算法族,并不支持策略梯度;SpinningUp只支持策略梯度算法族,未实现Q学习的一系列算法。两个著名的平台所支持的强化学习算法均不全面。
代码实现复杂度过高: 以RLlib为代表,代码层层封装嵌套,用户难以进行二次开发。
文档不完整: 完整的文档应包含教程和代码注释,部分平台只实现了其一,甚至完全没有文档,十分影响平台框架的使用。
平台性能不佳: 强化学习算法本身难以调试,如果能够提升平台性能则将会大幅度降低调试难度。仍然以OpenAI Baselines为代表,该平台无法全面支持并行环境采样,十分影响训练效率。
缺少完整单元测试: 单元测试保证了代码的正确性和结果可复现性,但几乎所有平台都只做了功能性验证,而没有进行完整的训练过程验证。
环境定制支持不足: 许多非强化学习领域的研究者想使用强化学习算法来解决自己领域内问题,因此所交互的环境并不一定是OpenAI Gym [BCP+16] 已经定制好的,这要求平台框架支持更多种类的环境,比如机械臂抓取所需的多模态环境。以rlpyt为例,该平台将环境进行封装,如果想使用非Atari的环境,研究者必须大费周折改动框架代码。
此外,另一个值得讨论的问题是PyTorch深度强化学习框架活跃程度不如TensorFlow社区的。不少使用PyTorch的研究者通过编写独立的强化学习算法来满足自己需求,虽然实现较TensorFlow简单很多,但却没有针对数据流、数据存储进行优化;从 表 1.1 中也可以看出以PyTorch-DRL为代表的基于PyTorch的深度强化学习平台,文档不全面、代码质量不及独立手写的算法,亦或是封装程度过高、缺乏可靠的单元测试,这些问题一定程度上阻碍了这些平台的进一步发展。
主要贡献与论文结构¶
主要贡献¶
本文描述了“天授”,一个基于PyTorch的深度强化学习算法平台。图 1.2 描述了该平台的总体架构。天授平台以PyTorch作为深度学习后端框架,将各个强化学习算法加以模块化,在数据层面抽象出了数据组(Batch)、数据缓冲区(Buffer)、采集器(Collector)三个基本模块,实现了针对任意环境的并行交互与采样功能,算法层面支持丰富多样的强化学习算法,如免模型强化学习(MFRL)中的一系列算法、模仿学习算法(IL)等,从而能够让研究者方便地使用不同算法来测试不同场景。
天授拥有创新的模块化设计,简洁地实现了各种强化学习算法,支持了用户各种各样的需求。在相关的性能实验评测中,天授在众多强化学习平台夺得头筹。种种亮点使其获得了强化学习社区不小的关注度,在GitHub上开源不到短短一个月,星标就超过了基于PyTorch的另一个著名的强化学习平台rlpyt [SA19]。