OpenAI/rllab 实验运行指南:从基础到高级配置
rllab 项目地址: https://gitcode.com/gh_mirrors/rll/rllab
实验运行基础
OpenAI/rllab 采用面向对象的设计思想,将强化学习实验的各个组件进行抽象化封装。要运行一个实验,开发者需要构建环境、算法等对应的对象,然后在算法对象上调用训练方法。
基础实验示例
让我们以经典的倒立摆(Cartpole)问题为例,展示如何使用TRPO算法进行训练:
from rllab.algos.trpo import TRPO
from rllab.baselines.linear_feature_baseline import LinearFeatureBaseline
from rllab.envs.box2d.cartpole_env import CartpoleEnv
from rllab.envs.normalized_env import normalize
from rllab.policies.gaussian_mlp_policy import GaussianMLPPolicy
# 环境初始化与归一化处理
env = normalize(CartpoleEnv())
# 策略网络配置:两层隐藏层,每层32个神经元
policy = GaussianMLPPolicy(
env_spec=env.spec,
hidden_sizes=(32, 32)
)
# 使用线性特征基线
baseline = LinearFeatureBaseline(env_spec=env.spec)
# TRPO算法配置
algo = TRPO(
env=env,
policy=policy,
baseline=baseline,
batch_size=4000, # 每批样本量
whole_paths=True, # 使用完整轨迹
max_path_length=100, # 单条轨迹最大长度
n_itr=40, # 迭代次数
discount=0.99, # 折扣因子
step_size=0.01, # 步长
)
algo.train() # 开始训练
首次运行注意事项
首次执行脚本时,Theano需要初始化并编译计算图,这个过程可能需要几分钟时间。编译完成后,计算结果会被缓存,后续运行将显著加快。这是Theano框架的特性,属于正常现象。
典型输出解析
训练过程中会输出详细的日志信息,包括:
- 环境、策略、基线等组件的初始化状态
- 每次迭代的详细过程(基线拟合、策略优化等)
- 关键性能指标:
- 平均回报(AverageReturn)
- 最大/最小回报(MaxReturn/MinReturn)
- 策略熵(Entropy)
- KL散度(MeanKL/MaxKL)
- 优化前后的损失值(LossBefore/LossAfter)
这些指标对于监控训练过程和调试模型都非常重要。
高级实验配置:Pickled模式
对于更复杂的实验需求,rllab提供了"Pickled"模式,支持更多高级功能如日志记录和并行采样。
Pickled模式示例
from rllab.misc.instrument import run_experiment_lite
def run_task(*_):
# 实验配置与基础模式相同
env = normalize(CartpoleEnv())
policy = GaussianMLPPolicy(env_spec=env.spec, hidden_sizes=(32, 32))
baseline = LinearFeatureBaseline(env_spec=env.spec)
algo = TRPO(
env=env,
policy=policy,
baseline=baseline,
batch_size=4000,
max_path_length=100,
n_itr=1000,
discount=0.99,
step_size=0.01,
# plot=True, # 启用绘图功能
)
algo.train()
# 使用run_experiment_lite运行实验
run_experiment_lite(
run_task,
n_parallel=1, # 并行采样工作进程数
snapshot_mode="last", # 只保存最后一次迭代的参数快照
seed=1, # 实验随机种子
# plot=True, # 启用绘图
)
Pickled模式的优势
-
配置与执行分离:将实验参数配置与实际执行过程解耦,提高了代码的模块化程度
-
灵活的部署方式:支持多种运行环境:
- 本地执行
- Docker容器内执行
- 云端EC2实例执行
-
高效的超参数搜索:可以快速构建多个不同超参数配置的实验,并在多台EC2机器上并行执行
-
资源隔离:特别适合需要混合使用GPU和CPU的场景。主进程可以使用GPU进行批量优化,而工作进程使用CPU生成轨迹样本。
高级参数说明
run_experiment_lite
还支持以下实验参数:
exp_name
:指定实验名称,实验数据将存储在data/local/{exp_name}
目录下。默认使用时间戳命名。exp_prefix
:当未指定exp_name
时,与时间戳组合生成实验目录名,格式为{exp_prefix}_{timestamp}
。
实验设计建议
-
环境选择:对于新算法验证,建议从Cartpole等简单环境开始,再逐步过渡到更复杂的环境。
-
策略网络设计:隐藏层大小和层数需要根据任务复杂度调整。简单任务通常1-2层足够,复杂任务可能需要更深网络。
-
批量大小设置:较大的batch_size通常能带来更稳定的训练,但会增加计算开销。
-
并行化考量:当使用
n_parallel
>1时,确保系统有足够的CPU资源支持并行采样。 -
随机种子:重要的实验应该固定随机种子以确保结果可复现。
通过合理使用rllab提供的这些实验配置选项,研究人员可以高效地进行强化学习算法的开发和验证工作。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考