训练环境配置#
MotrixLab 提供了灵活的配置系统,允许用户自定义强化学习训练参数。本节介绍如何配置训练环境和强化学习算法参数。
RL 训练配置 (PPOCfg)#
训练配置定义了基于 PPO 算法的强化学习算法的参数。MotrixLab 现在支持为不同训练后端配置不同的参数。
完整配置示例#
@dataclass
class CompletePPOConfig(PPOCfg):
"""
完整的强化学习训练配置示例
包含了从基础到高级的所有配置参数
"""
# ===== 基础训练参数 =====
seed: Optional[int] = None # 随机种子
num_envs: int = 2048 # 训练时并行环境数量
play_num_envs: int = 16 # 评估时并行环境数量
max_env_steps: int = 2_048_000 # 最大训练步数
check_point_interval: int = 1000 # 检查点保存间隔
# ===== PPO算法核心参数 =====
learning_rate: float = 3e-4 # 学习率
rollouts: int = 32 # 经验回放轮数
learning_epochs: int = 2 # 每次更新的训练轮数
mini_batches: int = 32 # 小批量数量
discount_factor: float = 0.99 # 折扣因子
lambda_param: float = 0.95 # GAE参数
grad_norm_clip: float = 1.0 # 梯度裁剪
# ===== PPO裁剪参数 =====
ratio_clip: float = 0.2 # PPO裁剪比率
value_clip: float = 0.2 # 价值裁剪
clip_predicted_values: bool = True # 裁剪预测值
# ===== 损失函数参数 =====
entropy_loss_scale: float = 0.0 # 熵损失系数
value_loss_scale: float = 2.0 # 价值损失系数
kl_threshold: float = 0 # KL散度阈值
# ===== 学习率调度器 =====
learning_rate_scheduler_kl_threshold: float = 0.008 # 自适应学习率KL阈值
# ===== 网络架构配置 =====
# 小型网络(适合简单任务如 CartPole)
# policy_hidden_layer_sizes: tuple[int, ...] = (128, 64)
# value_hidden_layer_sizes: tuple[int, ...] = (128, 64)
# 中型网络(默认配置,适合大部分任务)
policy_hidden_layer_sizes: tuple[int, ...] = (256, 128, 64)
value_hidden_layer_sizes: tuple[int, ...] = (256, 128, 64)
# 大型网络(适合复杂任务如机器人控制)
# policy_hidden_layer_sizes: tuple[int, ...] = (512, 256, 128)
# value_hidden_layer_sizes: tuple[int, ...] = (512, 256, 128)
# ===== 网络共享配置 =====
share_policy_value_features: bool = True # 策略和价值网络共享特征提取层
# ===== 训练控制参数 =====
random_timesteps: int = 0 # 随机步数
learning_starts: int = 0 # 开始学习的步数
time_limit_bootstrap: bool = True # 时间限制引导
# ===== 奖励整形 =====
rewards_shaper_scale: float = 1.0 # 奖励缩放因子
配置使用方法#
1. 默认配置使用#
# 使用代码中给定的配置
uv run scripts/train.py --env my-task
# 指定训练后端,系统会自动选择对应的后端配置
uv run scripts/train.py --env my-task --train-backend jax
uv run scripts/train.py --env my-task --train-backend torch
2. 命令行参数覆盖#
# 覆盖支持的命令行参数
uv run scripts/train.py --env my-task \
--num-envs 1024 \
--train-backend jax \
--sim-backend np
# 系统会自动选择JAX后端对应的配置
3. 配置优先级#
系统按以下优先级选择配置:
后端特定配置: 如果存在
@rlcfg(env_name, backend="jax/torch")装饰的配置通用配置: 如果存在
@rlcfg(env_name)装饰的配置(无 backend 参数)
例如:
# 最高优先级 - 后端特定配置
@rlcfg("my-task", backend="jax")
@dataclass
class MyTaskJAXCfg(PPOCfg):
mini_batches: int = 4
# 次优先级 - 通用配置
@rlcfg("my-task")
@dataclass
class MyTaskRLCfg(PPOCfg):
mini_batches: int = 32
# 当使用 --train-backend jax 时,系统会选择 MyTaskJAXCfg
# 当使用 --train-backend torch 时,系统会选择 MyTaskRLCfg
SKRL 框架配置映射#
在 MotrixLab 中,用户通过 PPOCfg 配置类设置参数,这些参数会被映射到 SKRL 框架的配置字典中。
用户可配置参数#
MotrixLab 配置类 |
SKRL 框架参数 |
说明 |
|---|---|---|
|
|
学习率 |
|
|
经验回放轮数 |
|
|
训练轮数 |
|
|
小批量数量 |
|
|
折扣因子 |
|
|
梯度裁剪 |
|
|
GAE 参数 |
|
|
PPO 裁剪比率 |
|
|
价值裁剪 |
|
|
裁剪预测值 |
|
|
熵损失系数 |
|
|
价值损失系数 |
|
|
KL 散度阈值 |
|
|
随机步数 |
|
|
开始学习的步数 |
|
|
时间限制引导 |
|
|
自适应学习率 KL 阈值 |
|
|
日志写入间隔 |
|
|
检查点保存间隔 |
|
|
奖励缩放函数 |
预处理器参数#
SKRL 框架参数 |
类型 |
说明 |
|---|---|---|
|
RunningStandardScaler |
状态标准化 |
|
RunningStandardScaler |
价值标准化 |
配置层次总结#
用户配置类 (PPOCfg)
↓ 后端特定选择
后端配置 (JAX/Torch)
↓ 参数映射
SKRL 框架配置字典
↓ 传递给
PPO Agent
↓ 执行
强化学习训练
这种设计允许用户:
通过简单的配置类来控制复杂的训练参数
为不同训练后端配置不同的参数以获得最佳性能
保持与 SKRL 框架的完全兼容性