强化学习环境探索与参数调整

强化学习领域,理解环境的运作机制以及如何与环境交互是至关重要的。本文将深入探讨如何通过调整学习配置来优化算法在Cartpole和Mountain Car这两个经典环境中的表现。

Cartpole环境的理解

Cartpole环境是一个经典的强化学习问题,目标是通过移动小车来保持杆子竖直。可以通过查询Gym环境来了解它期望如何与之交互。

import gym env = gym.make("Cartpole-v0") print(env.observation_space) # 输出:Box(4,) print(env.action_space) # 输出:Discrete(2)

观察空间告诉每次观察应该包含四个值,而动作空间是离散的,即向左或向右移动。通过与环境的交互,可以得到新的观察值、奖励详情、是否结束的通知以及一些信息。

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

每次交互都会得到新的观察值、奖励详情、是否结束的通知以及一些信息。OpenAI的Wiki页面提供了更多细节,包括观察值中的四个浮点数:小车的位置、速度、杆子的角度和杆子尖端的速度。

调整学习配置

在之前的文章中,使用了DQNTrainer,并且没有指定太多配置,RLlib使用了默认值。可以使用Python库的pretty-printing模块来显示这些默认值。

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

输出应该让对库的可定制性有所了解。例如,double_q、dueling和prioritised_replay默认都是True,这些选项可以帮助代理更快地学习。学习率(lr)是一个可能想要调整的参数,但它对代理的学习方式有显著影响。

在训练Cartpole环境时,可以在配置字典中添加以下几行代码来调整学习率和关闭探索计划:

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

这将把学习率从默认的0.0005提高到0.001,并关闭探索计划。如果探索开启,代理可能会以随时间衰减的概率随机选择动作,而不是只选择它认为最好的动作。这可以避免过拟合。Cartpole环境足够简单,所以不需要担心这个问题。

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

Mountain Car环境

Mountain Car是另一个经典的强化学习环境。代理需要学会通过左右推动小车,以尽可能少的能量将其推到山顶。

注意奖励结构:每经过一个时间步,得分就会减少一分,直到Mountain Car到达山顶。所以目标得分也是一个负数,只是比在训练早期阶段得到的得分不那么负。一集会自动在200个时间步后终止,所以最坏的得分是-200。

ENV = 'MountainCar-v0' TARGET_REWARD = -110 # 注意负目标 TRAINER = DQNTrainer tune.run( TRAINER, stop={ "episode_reward_mean": TARGET_REWARD}, config={ "env": ENV, "num_workers": 0, # 在单个进程中运行 "num_gpus": 0, "monitor": True, "evaluation_num_episodes": 25, "lr": 0.001, "explore": False, } )
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485