如何让强化学习者学习无尽的跑步者?

时间:2018-07-15 12:33:04

标签: unity3d machine-learning reinforcement-learning

我试图训练强化学习代理使用Unity-ML玩无尽的亚军游戏。

游戏很简单:障碍物正在从侧面靠近,而特工必须在正确的时机跳跃以克服障碍。

作为观察,我到下一个障碍物有一段距离。可能的动作是0-空闲; 1-跳。奖励可以延长游戏时间。

不幸的是,特工甚至无法可靠地克服第一个障碍。我想这是由于这两种操作之间的失衡过大,因为理想的策略通常大部分时间不执行任何操作(0),而仅在非常特定的时间点执行跳跃(1)。另外,由于特工无法在空中跳跃,因此跳跃过程中的所有动作都是没有意义的。

我如何才能改善学习以使其融合?有什么建议值得探讨吗?

当前教练配置:

EndlessRunnerBrain:
  gamma: 0.99
  beta: 1e-3
  epsilon: 0.2
  learning_rate: 1e-5
  buffer_size: 40960
  batch_size: 32
  time_horizon: 2048
  max_steps: 5.0e6

谢谢!

1 个答案:

答案 0 :(得分:1)

如果不查看用于强化学习算法的确切代码,很难说。以下是一些值得探索的步骤:

  • 您让代理培训多长时间?根据游戏环境的复杂性,特工可能需要花费数千集才能学会避免其第一个障碍。
  • 使用Frameskip对象的Academy属性进行的实验。这允许代理仅在经过多个帧之后才采取措施。增大此值可以提高在更简单的游戏中学习的速度。
  • 调整学习率。学习率决定了代理对新信息和旧信息的加权程度。您使用的学习率非常低;尝试将其增加两位小数。
  • 调整epsilon。 Epsilon确定执行随机操作的频率。给定状态且epsilon率为0.2,您的代理将在20%的时间采取随机措施。其他80%的时间,它将选择具有最高关联奖励的(状态,动作)对。您可以尝试减小或增大该值以查看是否获得更好的结果。由于您知道在训练开始时会需要更多随机动作,因此您甚至可以在每个情节中“衰减” epsilon。如果开始时的epsilon值为0.5,则在每个游戏情节完成后,将epsilon减小一个较小的值,例如0.00001左右。
  • 更改代理商获得奖励的方式。与其为悬空的每一帧奖励特工,不如为成功跳过的每一个障碍奖励特工。
  • 您确定给定的time_horizonmax_steps为游戏提供足够的跑道来完成一集吗?

希望这会有所帮助,并祝您好运!