项目介绍:PPO-PyTorch
PPO-PyTorch 是一个基于 PyTorch 实现的近端策略优化(Proximal Policy Optimization, PPO)算法,适用于 OpenAI gym 环境。这个项目主要面向强化学习初学者,帮助他们理解 PPO 算法,不过它也可以应用于复杂环境,但可能需要调整超参数或修改代码。
功能更新
在 2021 年 4 月,PPO-PyTorch 进行了几项重要更新:
- 合并了离散和连续算法。
- 针对连续动作空间的
action_std
引入了线性衰减以提高在复杂环境中训练的稳定性。 - 为演员(actor)和评论家(critic)设置了不同的学习率。
- 将训练片段、时间步长和奖励记录在
.csv
文件中。 - 提供了从日志文件绘制图表的工具。
- 提供了用于测试和从预训练网络生成 gif 的工具。
- 在 Google Colab 上通过
PPO_colab.ipynb
汇集所有文件以便于训练、测试、绘图和生成 gif。
项目使用
PPO-PyTorch 项目非常易于使用,以下是一些关键功能和步骤:
- 训练新网络:运行
train.py
。 - 测试预训练网络:运行
test.py
。 - 绘制图表:使用日志文件运行
plot_graph.py
。 - 生成和保存 gif:使用预训练网络运行
make_gif.py
。 - 所有控制训练、测试、生成图表和 gif 的参数和超参数均在各自的
.py
文件中管理。 - 一个综合性的 jupyter 笔记本
PPO_colab.ipynb
包含了所有功能。
深入细节
为了保持训练过程的简洁性,PPO-PyTorch 项目包含了一些简化:
- 输出动作分布的标准差在连续环境中是一个常数,并非可训练参数。不过,它会进行线性衰减。
- 使用简单的蒙特卡洛估计来计算优势而非通用优势估计(GAE)。
- 单线程实现,即只有一个工作线程来收集经验。
使用注意事项
建议在 CPU 上运行环境以加速训练。像 Box-2D 和 Roboschool 这样的环境在 CPU 上运行更快,因为在 GPU 上训练时数据在 CPU 和 GPU 间频繁移动,会导致速度变慢。
依赖
PPO-PyTorch 依赖以下软件和库:
- 编程语言:Python 3
- 主要库:PyTorch、NumPy、gym
- 训练环境:Box-2d、Roboschool、pybullet
- 图表和 gif:pandas、matplotlib、Pillow
项目成果
项目中展示了一些训练结果,包括连续控制任务如 RoboschoolHalfCheetah 和 RoboschoolHopper 等,以及离散控制任务如 CartPole 和 LunarLander。每个任务都有对应的训练 gif 和图表,展示了算法的运行和表现。
通过这些更新和简化,PPO-PyTorch 成为了一个易于上手的学习和研究工具,无论是为初学者还是希望快速实现 PPO 算法的研究人员。