如何在 LightZero 中设置配置文件

在 LightZero 框架中,要在特定环境中运行特定算法,您需要设置相应的配置文件。配置文件主要由两部分组成:main_config 和 create_config。其中,main_config 定义了运行算法的主要参数,如环境设置和策略设置,而 create_config 指定了要使用的特定环境类和策略类及其引用路径。

要在自定义环境中运行特定算法,您可以在路径 zoo//config/__config 下找到现有环境 对应不同算法 的默认配置文件。然后,基于此,您可以主要修改对应于 env 的部分,然后进行调试和优化。

下面,我们以atari_muzero_config.py为例,详细解释配置文件的设置。

1. main_config

main_config 字典包含了运行算法的主要参数设置,主要分为两部分:env 和 policy。

1.1 env 部分中的主要参数

  • env_id: 指定要使用的环境。

  • obs_shape: 环境观察的维度。

  • collector_env_num: 在经验回放缓存收集器中用于收集数据的并行环境数量。

  • evaluator_env_num: 评估器中用于评估策略性能的并行环境数量。

  • n_evaluator_episode: 评估器中每个环境运行的回合数。

  • manager: 指定环境管理器的类型,主要用于控制环境的并行化模式。

1.2 策略部分中的主要参数

  • model: 指定策略使用的神经网络模型,包括模型的输入维度、帧堆叠的数量、模型输出动作空间的维度、模型是否需要使用下采样、是否使用自监督学习辅助损失、动作编码类型、网络中使用的归一化模式等。

  • cuda: 指定是否将模型迁移到GPU进行训练。

  • reanalyze_noise: 在MCTS重新分析期间是否引入噪声,这可以增加探索。

  • env_type: 标记 MuZero 算法所面临的环境类型。根据不同的环境类型,MuZero 算法在细节处理上会有所不同。

  • game_segment_length: 用于自我对战的序列(游戏段)的长度。

  • random_collect_episode_num: 随机收集的剧集数量,为探索提供初始数据。

  • eps: 探索控制参数,包括是否使用 epsilon-greedy 方法进行控制,控制参数的更新方法,起始值,终止值,衰减率等。

  • use_augmentation: 是否使用数据增强。

  • update_per_collect: 每次数据收集后的更新次数。

  • batch_size: 更新期间采样的批次大小。

  • optim_type: 优化器类型。

  • piecewise_decay_lr_scheduler: 是否使用分段常数学习率衰减。

  • learning_rate: 初始学习率。

  • num_simulations: MCTS 算法中使用的模拟次数。

  • reanalyze_ratio: 重新分析系数,控制重新分析的概率。

  • ssl_loss_weight: 自监督学习损失函数的权重。

  • n_episode: 每个环境在并行收集器中运行的剧集数。

  • eval_freq: 策略评估频率(以训练步数衡量)。

  • replay_buffer_size: 经验回放缓冲区的容量。

两个经常更改的参数设置区域在这里也特别提到,并由注释标注:

# ==============================================================
# begin of the most frequently changed config specified by the user
# ==============================================================
# These are parameters that need to be adjusted frequently based on the actual situation
# ==============================================================
# end of the most frequently changed config specified by the user
# ==============================================================

提醒用户这些参数通常需要调整,例如 collector_env_num、num_simulations、update_per_collect、batch_size、max_env_step 等。调整这些参数可以优化算法性能并加快训练速度。

2. create_config

create_config 字典指定了要使用的特定环境类和策略类及其引用路径,主要包含两部分:env 和 policy。

2.1 env 部分的设置

env=dict(
    type='atari_lightzero',
    import_names=['zoo.atari.envs.atari_lightzero_env'],
),

这里,type 指定了要使用的环境名称,而 env_name 指定了环境类所在的引用路径。这里使用了预定义的 atari_lightzero_env。如果你想使用自定义环境类,你需要将 type 改为自定义环境类的名称,并相应地修改 import_names 参数。

2.2 策略部分中的设置

policy=dict(
    type='muzero',
    import_names=['lzero.policy.muzero'],
),

这里,type 指定了要使用的策略名称,import_names 指定了策略类所在的路径。这里使用了 LightZero 中预定义的 MuZero 算法。如果你想使用自定义策略类,你需要将 type 更改为自定义策略类,并将 import_names 参数修改为自定义策略所在的路径。

3. Running the Algorithm

完成配置后,在主函数中调用以下内容:

if __name__ == "__main__":
    from lzero.entry import train_muzero
    train_muzero([main_config, create_config], seed=0, max_env_step=max_env_step)

这将在配置的环境中运行 MuZero 算法进行训练。[main_config, create_config] 指定了用于训练的配置,seed 指定了随机数种子,max_env_step 指定了环境交互的最大步数。

4. Notes

上述内容简要介绍了在 LightZero 框架下为自定义环境配置算法的方法,希望能对您有所帮助。请在配置过程中注意以下几点:

  • 在使用自定义环境时,请确保根据 LightZero 框架定义的环境接口标准编写环境类,否则可能会发生错误。

  • 不同的算法和环境需要不同的配置参数。在配置之前,您需要彻底了解算法的原理和环境的特点,并且可以参考相关学术论文来合理设置参数。

  • 如果你想在一个自定义环境中运行LightZero支持的算法,可以首先使用算法的默认策略配置,然后根据实际训练情况进行优化和调整。

  • 在配置并行环境数量时,应根据您的计算资源合理设置,以避免由于并行环境过多导致的内存不足问题。

  • 您可以使用诸如 tensorboard 之类的工具来监控训练情况并及时解决问题。详情请参阅日志系统文档。

  • 祝您使用 LightZero 框架体验顺畅!