65.9K
CodeProject 正在变化。 阅读更多。
Home

Cartpole:调整选项

starIconstarIconstarIconstarIconstarIcon

5.00/5 (3投票s)

2020年6月26日

CPOL

3分钟阅读

viewsIcon

7782

在本文中,我们将了解幕后发生了什么,以及有哪些选项可用于更改强化学习。

在前一篇也是第一篇文章中,我们回顾了强化学习的背景,并设置了一些辅助函数。最后,我们解决了一个简单的 Cartpole 环境。

这一次,我们将深入了解幕后情况,看看有哪些选项可以调整学习。最后,我们将看看另一个经典的强化学习环境:登山车。

理解 Cartpole 环境

我们可以查询 Gym 环境,以了解它期望我们如何与之交互

import gym
env = gym.make("Cartpole-v0")
print(env.observation_space)
>>> Box(4,)

这告诉我们,我们应该期望在每个观察结果中获得四个值。

print(env.action_space)
>>> Discrete(2)

这被称为离散动作空间;在这种情况下,向左移动或向右移动。保持静止不是一种选择:小车将处于持续的运动状态。一些其他环境具有连续动作空间,例如,代理必须准确地决定施加多少电压到伺服系统以移动机器人手臂。

让我们逐步完成与 Cartpole 环境交互的一个回合。我们正在重置环境,然后一遍又一遍地采取相同的动作(0 或 LEFT),直到杆倾倒得太远或小车超出范围。

env.reset()
while True:
  update = env.step(action=0)
  print(update)
  observation, reward, done, info = update
  if done:
    break

每次交互时,我们会得到一个新的观察结果,有关奖励的详细信息(对于我们设法生存的每个时间步长 +1),剧集是否完成的通知,以及一些(空)信息。

OpenAI 的 wiki 页面对该环境进行了更详细的介绍,包括对观察结果中四个浮点数的解释:小车的位置、其速度、杆的角度和杆尖的速度。

更改学习配置

在前一篇文章中,我们使用了 DQNTrainer。由于我们在配置中没有指定太多内容,因此 RLlib 使用了默认值。我们可以使用 Python 库的漂亮打印模块来显示这些内容

import pprint
pprint.pprint(ray.rllib.agents.dqn.DEFAULT_CONFIG)

此处的输出应使您了解该库的可定制程度。 例如

  • double_qduelingprioritied_replay都默认为 True:这些选项可用于帮助代理更快地学习
  • lr是学习率;这可能是您想要调整的东西,但它可能会对代理的学习方式产生巨大的影响

在本系列的剩余部分中,我们将介绍更多选项。 我希望这会激发您调查其他选项的兴趣!

将以下行添加到您上次用于在 Cartpole 环境中训练的配置字典中

"lr": 0.001,
"explore": False,

这将将学习率从默认的 0.0005 提高到 0.001,并将关闭探索计划。 如果探索已开启,代理可能会随机选择一个动作,该概率会随着时间的推移而衰减,而不是仅仅采取它认为最好的动作。 这可以避免过度拟合。 Cartpole 环境非常简单,因此我们无需担心这一点。

再次运行训练,看看效果如何。 您可能需要多次运行每个配置才能获得清晰的图像。 调整其他一些参数,看看是否可以缩短训练时间。 这是一个很好的实验环境,因为您可以在几分钟内知道您的更改是否成功。

登山车环境

登山是另一个经典的强化学习环境。 您的代理必须学会通过左右推动一辆小车到山顶,并尽可能少地消耗能量。

注意奖励结构:对于从开始到登山车到达山顶之间经过的每个时间步长,您都会从得分中失去一分。 所以目标分数也是一个负数,只是比训练早期获得的分数更不负。 剧集将在 200 个时间步长后自动终止,因此最差的分数为 -200。

这是我使用的代码

ENV = 'MountainCar-v0'
TARGET_REWARD = -110  # note the negative target
TRAINER = DQNTrainer

tune.run(
     TRAINER,
     stop={"episode_reward_mean": TARGET_REWARD},
     config={
       "env": ENV,
       "num_workers": 0,  # run in a single process
       "num_gpus": 0,
       "monitor": True,
       "evaluation_num_episodes": 25,
       "lr": 0.001,
       "explore": False,
     }
)

对我来说,这在不到 10 分钟的时间内解决了环境问题。 和以前一样,尝试配置以查看是否可以提高性能。

下一篇文章开始,我们将学习更多基于 Atari Breakout 游戏的复杂环境。

© . All rights reserved.