上QQ阅读APP看书,第一时间看更新
7.1 为什么使用强化学习库
在第6章中,我们实现的基础DQN的代码并不冗长也不复杂——大约有200行训练代码加上120行环境包装器代码。当你还在熟悉RL方法的时候,自己实现所有的东西对于理解这些方法的工作原理会大有裨益。但是,你在这个领域越久,就越频繁地发现自己在一遍又一遍地编写同样的代码。
这些重复源于RL方法的通用性。我们在第1章讨论过,RL十分灵活,并且很多现实生活中的问题都属于环境–智能体交互的类型。RL方法不会对观察和动作的细节做很多假设,所以用来解决CartPole环境的代码也适用于Atari游戏(可能需要一些小调整)。
一遍又一遍地重复编写同样的代码并不是很高效,因为每次都可能会引入错误,它们会花费你大量的时间来理解逻辑及调试。另一方面,精心设计的代码已用于多个项目,它们通常在性能、单元测试、可读性和文档方面拥有更高的质量。
按照计算机科学的标准来说,RL的工程应用还处于早期阶段,因此与其他更成熟的领域相比,可能没有那么丰富的方法可供选择。例如,对于Web开发来说,即使只限制使用Python,还是有数百种各种各样的非常好的库可以选择,有用于重量级、功能齐全的网站开发的Django,也有用于轻量级的Web服务器网关接口(Web Server Gateway Interface,WSGI)应用程序开发的Flask,还有更多大大小小的其他库。
在RL领域,这一过程才刚刚开始,但还是可以从几个试图简化RL从业者工作的项目中进行选择。此外,你也可以像我几年前一样,自己编写自己的工具集。之前提到的PTAN就是我写的一个库,在本书的其余部分,它将被用来举例说明示例。