深度强化学习课程文档

训练我们的机器人

Hugging Face's logo
加入 Hugging Face 社区

并获取增强的文档体验

开始使用

训练我们的机器人

为了开始训练,我们首先需要在安装了 Godot RL Agents 的相同 venv / conda 环境中安装 imitation 库,使用命令:pip install imitation

从 Godot RL Repository 下载 imitation learning 脚本的副本。

使用以下参数运行训练:

sb3_imitation.py --env_path="path_to_ILTutorial_executable" --bc_epochs=100 --gail_timesteps=1450000 --demo_files "path_to_expert_demos.json" --n_parallel=4 --speedup=20 --onnx_export_path=model.onnx --experiment_name=ILTutorial

将 env 路径设置为导出的游戏,并将 demo 文件路径设置为录制的演示。如果您有多个演示文件,请在它们之间添加空格,例如 --demo_files demos.json demos2.json

您还可以为 --gail_timesteps 设置大量的 timestep,然后使用 CTRL+C 手动停止训练。我使用此方法在奖励开始接近 3 时停止训练,这发生在 total_timesteps | 1.38e+06 时。这花费了约 41 分钟,而 BC 预训练在我的 PC 上使用 CPU 进行训练花费了约 5.5 分钟。

要在训练时观察环境,请添加 --viz 参数。在 BC 训练期间,环境将保持冻结状态,因为此阶段不使用环境,除非获取有关观察和动作空间的一些信息。在 GAIL 训练阶段,环境渲染将更新。

以下是使用 tensorboard 显示的日志中的 ep_rew_meanep_rew_wrapped_mean 统计信息,我们可以看到在这种情况下它们非常接近

training results
您可以在从其开始训练的路径的相对路径 logs/ILTutorial 中找到日志。如果进行多次运行,请在每次运行之间更改 --experiment_name 参数。

即使设置环境奖励不是必需的,并且在这里的训练中未使用,但也实现了一个简单的稀疏奖励来跟踪成功。掉出地图、掉入水中或陷阱会将 reward += -1,而激活拉杆、收集钥匙和打开宝箱各设置 reward += 1。如果 ep_rew_mean 接近 3,我们就会得到一个好的结果。 ep_rew_wrapped_mean 是来自 GAIL 判别器的奖励,它不能直接告诉我们 agent 在解决环境方面有多成功。

让我们测试训练好的 agent

训练完成后,您将在启动训练脚本的文件夹中找到一个 model.onnx 文件(您还可以在控制台的训练日志中找到 .onnx 文件的完整路径,靠近末尾)。将其复制到 Godot 游戏项目文件夹中。

打开 onnx 推理场景

此场景与演示记录场景一样,仅使用关卡的一个副本。它还将其 Sync 节点模式设置为 Onnx Inference

单击 Sync 节点,并将 Onnx Model Path 属性设置为 model.onnx

onnx inference scene

按 F6 启动场景,让我们看看 agent 学到了什么!

训练好的 agent 视频

看来 agent 能够从两个位置(左侧平台或右侧平台)收集钥匙,并很好地复现了录制的行为。如果您得到类似的结果,那么恭喜您,您已成功完成本教程! 🏆👏

如果您的结果差异很大,请注意,录制的演示的数量和质量会影响结果,调整 BC/GAIL 阶段的步数以及修改 Python 脚本中的超参数可能会有所帮助。也存在一些运行到运行的差异,因此即使使用相同的设置,结果有时也会略有不同。

< > 在 GitHub 上更新