项目介绍:DQN-Atari-Agents
DQN-Atari-Agents 是一个用于模块化训练不同 DQN 算法的项目。这个项目包含了一些对基础 DQN 算法的扩展功能。所有版本可以由一个脚本进行训练,用户可以选择从原始像素或内存数据中进行训练。最近,该项目增添了多进程的能力,可以并行运行多个环境以加速训练过程。
支持的 DQN 版本
项目中包含以下 DQN 版本:
- DDQN(双重深度 Q 网络)
- Dueling DDQN(决斗双重深度 Q 网络)
这两个版本还可以通过添加一些增强功能来进一步提升性能,如 Noisy 层、优先体验回放(Per)、多步目标(Multistep Targets),以及训练为 分类版本(C51)。将这些全部结合起来会形成目前价值导向方法中的 state-of-the-art 算法:Rainbow。
计划中的功能扩展
- 并行环境以加速训练(基于实际时间) [已实现]
- Munchausen RL [未实现]
- DRQN(递归深度 Q 网络) [未实现]
- Soft-DQN [未实现]
- 好奇心探索,目前仅限于 DQN [已实现]
如何训练您的代理
依赖环境
训练和测试环境:
- Python 3.6
- PyTorch 1.4.0
- Numpy 1.15.2
- gym 0.10.11
要训练基础的 DDQN,只需运行命令 python run_atari_dqn.py
。同时可以通过以下参数修改并训练您自己的 Atari 代理:
例如: python run_atari_dqn.py -env BreakoutNoFrameskip-v4 -agent dueling -u 1 -eps_frames 100000 -seed 42 -info Breakout_run1
其中参数包括:
agent
: 指定要训练的 DQN 代理类型,默认是 DQN - 基准版。可选输入有:dqn
、dqn+per
、noisy_dqn
等。env
: Atari 环境的名称,默认是 PongNoFrameskip-v4。frames
: 要训练的帧数,默认是 500 万帧。- 其他参数还包括
seed
、batch_size
、layer_size
等一系列可调参数,用于细化模型训练。
使用 Tensorboard 查看训练进度
运行命令 tensorboard --logdir=runs/
可以查看训练过程中的数据。
Atari 游戏的性能表现
Pong 游戏
使用以下超参数进行训练:
batch_size
: 32seed
: 1layer_size
: 512frames
: 300000lr
: 1e-4
CartPole 环境的收敛证明
尽管 Atari 算法的训练需要大量时间,但在 CartPole-v0 环境中可以快速证明收敛性。其中,Rainbow 方法表现优于其他两种方法(Dueling DQN 和 DDQN)。
并行环境
为了减少训练时间,项目实现了并行环境。以下图表显示了不同数量的工作线程对 CartPole-v0 和 LunarLander-v2 环境的训练加速效果。
帮助与问题反馈
开发者开放接受反馈、bug 的提交和改进建议,请随时联系他。
参考文献
在项目中引用了一些重要的论文,包括对 DQN、Dueling DQN、Noisy Layer、C51、PER 和 Rainbow 的介绍。作者鼓励大家在自己的项目或研究中使用这段代码。
作者
- Sebastian Dittert
用户可以自由地在自己的项目中使用这段代码,若需引用,请参照以下信息:
@misc{DQN-Atari-Agents,
author = {Dittert, Sebastian},
title = {DQN-Atari-Agents: Modularized PyTorch implementation of several DQN Agents, i.a. DDQN, Dueling DQN, Noisy DQN, C51, Rainbow and DRQN},
year = {2020},
publisher = {GitHub},
}