跑模型时间!
来自 Hugging Face 强化学习课程。
Huggy 是 Hugging Face 制作的深度强化学习环境,基于Unity MLAgents 团队的项目 Puppo the Corgi。该环境是使用Unity 游戏引擎和MLAgents创建的。ML-Agents 是 Unity 游戏引擎的工具包,它允许我们使用Unity 创建环境或使用预制环境来训练我们的智能体。
在这个环境中,我们的目标是训练哈吉捡起我们扔的棍子。这意味着他需要正确地朝棍子移动。
任务
我们向他提供有关环境的信息,或者说观察:
- 目标(摇杆)位置
- 自己与目标的相对位置
- 他的腿的方向。
有了所有这些信息,哈吉就可以使用他的策略来确定下一步要采取哪些行动来实现他的目标。
动作空间即关节电机驱动哈吉的腿。这意味着为了获得目标,哈吉需要学会正确旋转每条腿的关节电机,这样他才能移动。
奖励函数的设计是为了让Huggy 实现他的目标:拿起棍子。
- 定向奖励:我们奖励他接近目标。
- 时间惩罚:每次动作都会受到固定时间的惩罚,迫使他尽快到达棍子位置。
- 旋转惩罚:如果哈吉旋转过多且转身过快,我们就会对其进行惩罚。
- 达到目标奖励:我们对达到目标的Huggy进行奖励。
模型
整个训练是由一条命令完成的(并没有看到和讲解内部的代码!)
1
mlagents-learn ./config/ppo/Huggy.yaml --env=./trained-envs-executables/linux/Huggy/Huggy --run-id=“Huggy” --no-graphics
定义了四个参数:
mlagents-learn <config>
:超参数配置文件所在的路径。--env
:环境可执行文件所在的位置。--run-id
:要为训练运行 ID 指定的名称。--no-graphics
:在训练期间不启动可视化。
就是使用 ML-Agents
工具包,使用PPO模型,在 Huggy
环境中训练,具体的模型参数为:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
behaviors:
Huggy:
trainer_type: ppo
hyperparameters:
batch_size: 2048
buffer_size: 20480
learning_rate: 0.0003
beta: 0.005
epsilon: 0.2
lambd: 0.95
num_epoch: 3
learning_rate_schedule: linear
network_settings:
normalize: true
hidden_units: 512
num_layers: 3
vis_encode_type: simple
reward_signals:
extrinsic:
gamma: 0.995
strength: 1.0
checkpoint_interval: 200000
keep_checkpoints: 15
max_steps: 2e6
time_horizon: 1000
summary_freq: 50000
一共要训练 2e6 步,在 google colab 上大约花费 40 min。
上传模型
如何在笔记本中登录 Hugging Face 可以查看之前的文章
登录之后运行命令
1
mlagents-push-to-hf --run-id="HuggyTraining" --local-dir="./results/Huggy" --repo-id="QMMMS/ppo-Huggy" --commit-message="Huggy"
定义了 4 个参数:
--run-id
:训练运行 ID 的名称。--local-dir
:智能体被保存的地方,例如results/<run_id名称>
,所以在我的情况下是results/First Training
。--repo-id
:要创建或更新的 Hugging Face 存储库的名称。它始终是<您的 huggingface 用户名>/<存储库名称>
如果存储库不存在,它将自动创建--commit-message
:由于 HF 存储库是 git 存储库,因此您需要给出提交消息。
随后能看到提示信息:[INFO] Your model is pushed to the hub. You can view your model here: https://huggingface.co/QMMMS/ppo-Huggy
看看成果
可以在浏览器中和训练好的 Huggy 玩游戏!
- 在浏览器中打开 Huggy 游戏:https://huggingface.co/spaces/ThomasSimonini/Huggy
- 点击“玩我的 Huggy 模型”
- 选择您的模型存储库,即模型 ID(在我的例子中为 QMMMS/ppo-Huggy)。
- 选择要重播的模型:我有多个模型,因为我们每 500000 个时间步长保存一个模型。但是由于我想要最新的,所以我选择
Huggy.onnx
可以尝试使用不同的模型步骤来查看代理的改进。