CleanRL 深度强化学习算法实现总览:9 大算法、27 个单文件变体完整索引
2026/9/15 21:39:42 网站建设 项目流程

CleanRL 深度强化学习算法实现总览:9 大算法、27 个单文件变体完整索引

【免费下载链接】cleanrlHigh-quality single file implementation of Deep Reinforcement Learning algorithms with research-friendly features (PPO, DQN, C51, DDPG, TD3, SAC, PPG)项目地址: https://gitcode.com/GitHub_Trending/cl/cleanrl

CleanRL 是一个以「高质量单文件实现」为核心理念的深度强化学习(Deep RL)算法库:每一个算法实现都独立成.py文件,不依赖自定义网络层或复杂抽象,同时内置实验追踪、模型管理、视频录制等面向科研的工程特性。本文以仓库的 docs/rl-algorithms/overview.md 为骨架,结合cleanrl/目录下的真实源码,完整梳理 CleanRL 当前实现的 9 类算法与其全部变体,并逐算法给出默认超参、适用场景与源码定位,帮助你快速定位"该用哪个文件、改哪些参数、对应哪篇论文"。

CleanRL 算法版图:一张总表

overview.md 以一张总表的方式列出了全部算法与其变体实现。整理如下(各变体的详细文档见对应小节):

算法已实现的变体(源码文件)详细文档
Proximal Policy Optimization (PPO)ppo.pyppo_atari.pyppo_continuous_action.pyppo_atari_lstm.pyppo_atari_envpool.pyppo_atari_envpool_xla_jax.pyppo_atari_envpool_xla_jax_scan.pyppo_procgen.pyppo_atari_multigpu.pyppo_pettingzoo_ma_atari.pyppo_continuous_action_isaacgym/ppo_continuous_action_isaacgym.pyppo.md
Deep Q-Learning (DQN)dqn.pydqn_atari.pydqn_jax.pydqn_atari_jax.pydqn.md
Categorical DQN (C51)c51.pyc51_atari.pyc51_jax.pyc51_atari_jax.pyc51.md
Soft Actor-Critic (SAC)sac_continuous_action.pysac_atari.pysac.md
Deep Deterministic Policy Gradient (DDPG)ddpg_continuous_action.pyddpg_continuous_action_jax.pyddpg.md
Twin Delayed Deep Deterministic Policy Gradient (TD3)td3_continuous_action.pytd3_continuous_action_jax.pytd3.md
Phasic Policy Gradient (PPG)ppg_procgen.pyppg.md
Random Network Distillation (RND)ppo_rnd_envpool.pyppo-rnd.md
Qdaggerqdagger_dqn_atari_impalacnn.pyqdagger_dqn_atari_jax_impalacnn.pyqdagger.md

从这张表可以看到三条清晰的演进主线:同一种算法适配不同环境范式(离散/连续动作、Atari/经典控制/MuJoCo/Procgen/IsaacGym)、同一种算法提供 PyTorch 与 JAX 双后端(如dqn_jax.pyc51_atari_jax.py)、面向吞吐量与多卡训练的高性能变体ppo_atari_envpool.pyppo_atari_multigpu.py)。

PPO:覆盖最广的基准算法(11 个变体)

PPO 是 CleanRL 中变体最丰富、生态最完整的算法,从经典控制到 IsaacGym 仿真,从单卡到多卡,从 PyTorch 到 JAX 均有覆盖。

核心实现ppo.py

cleanrl/ppo.py面向离散动作的经典控制环境(默认CartPole-v1),是理解其余所有 PPO 变体的地基。其核心超参在Argsdataclass 中定义:

  • 环境与训练规模env_id="CartPole-v1"total_timesteps=500000num_envs=4(并行环境数)、num_steps=128(每轮 rollout 每个环境采集的步数)。
  • PPO 核心超参gamma=0.99(折扣因子)、gae_lambda=0.95(GAE 广义优势估计系数)、num_minibatches=4(mini-batch 数)、update_epochs=4(每批数据上更新 K 轮)、clip_coef=0.2(surrogate clipping 系数)、clip_vloss=True(对价值函数使用裁剪损失)、ent_coef=0.01(熵正则系数)、vf_coef=0.5(价值函数损失系数)、max_grad_norm=0.5(梯度裁剪范数)、anneal_lr=True(学习率退火)、target_kl=None(可选的 KL 早停阈值)。
  • 运行时推导参数batch_sizeminibatch_sizenum_iterations在脚本内由num_envs × num_stepsnum_minibatches计算得出,无需手动指定。

从源码结构看,ppo.py采用「actor-critic 共享 MLP 骨干(两层 64 隐层 + Tanh)」的网络设计,layer_init使用正交初始化,actor 输出层用std=0.01缩小初始策略熵。策略更新部分使用Categorical分布计算策略损失,配合 GAE 与 mini-batch SGD,构成标准的 PPO-Clip 训练循环。

面向不同环境的 PPO 变体

变体默认环境关键差异
ppo_atari.pyBreakoutNoFrameskip-v4total_timesteps=1e7num_envs=8clip_coef=0.1引入cleanrl_utils.atari_wrappersNoopResetEnvMaxAndSkipEnvEpisodicLifeEnvFireResetEnvClipRewardEnv),使用 CNN 处理帧堆叠
ppo_continuous_action.pyHalfCheetah-v4total_timesteps=1e6num_steps=2048num_minibatches=32update_epochs=10ent_coef=0.0使用Normal(高斯)分布输出连续动作;环境侧叠加FlattenObservationClipActionNormalizeObservationNormalizeRewardTransformObservation/Reward(clip 到 ±10)等 wrapper,兼容 Gymnasium MuJoCo 与 dm_control
ppo_atari_lstm.pyAtari在 actor-critic 中引入 LSTM 处理部分可观测(POMDP)序列
ppo_atari_envpool.pyBreakout-v5envpool向量环境替代 Gym 向量环境,大幅提升环境吞吐
ppo_atari_envpool_xla_jax.py/ppo_atari_envpool_xla_jax_scan.pyAtariJAX 后端 + envpool,配合 XLA 编译;scan 变体用jax.lax.scan重写 rollout 以进一步降低开销
ppo_procgen.pyProcgen 套件面向通用 RL(Procgen benchmark),可配合requirements-procgen.txt
ppo_atari_multigpu.pyBeamRiderNoFrameskip-v4等多卡配置数据并行多 GPU 训练,支持--n_gpu等参数
ppo_pettingzoo_ma_atari.pyPettingZoo 多智能体 Atari基于ppo_pettingzoo_ma_atari环境的多智能体 PPO
ppo_continuous_action_isaacgym.py(位于cleanrl/ppo_continuous_action_isaacgym/IsaacGym 仿真(如 Ant、Humanoid 等)面向 IsaacGym 大规模并行仿真,配套独立的pyproject.toml依赖声明

对应基准脚本可参考 benchmark/ppo.sh、benchmark/ppo_trxl.sh,运行与复现说明见 docs/benchmark/ppo.md、docs/benchmark/ppo_atari.md。

DQN 家族:从经典 DQN 到分布强化学习

DQN:dqn.py与 Atari/JAX 变体

cleanrl/dqn.py是面向经典控制(默认CartPole-v1)的深度 Q 网络实现,其Args完整保留了 DQN 的核心机制参数:

  • 网络与经验回放buffer_size=10000(回放池大小)、batch_size=128(采样批大小)、train_frequency=10(训练频率)。回放池来自cleanrl_utils.buffers.ReplayBuffer
  • 目标网络tau=1.0(硬拷贝系数)、target_network_frequency=500(每 500 步整权重拷贝一次目标网络)。
  • 探索调度start_e=1end_e=0.05exploration_fraction=0.5,即在前 50% 的总步数内将 ε-greedy 探索率从 1.0 线性退火到 0.05。
  • 学习启动learning_starts=10000(预热步数,之前只采集不学习)。

Q 网络采用 120→84 的两层 MLP(ReLU 激活)。变体方面:

  • dqn_atari.py:面向 Atari(BreakoutNoFrameskip-v4),使用卷积网络与 Atari wrappers;
  • dqn_jax.pydqn_atari_jax.py:JAX/Flax 后端实现,需参考requirements-jax.txt安装依赖。

cleanrl_utils/evals/dqn_eval.py提供独立评估函数,tests/test_classic_control.py中也有对dqn.py的冒烟测试可作运行验证。

C51(Categorical DQN):分布价值学习

cleanrl/c51.py在 DQN 基础上把「价值期望」改为「价值分布」,核心差异参数:

  • n_atoms=101:分布的原子(支撑点)数量;
  • v_min=-100v_max=100:回报分布的上下界,用于构造均匀支撑集。

其余参数(buffer_sizegammatautarget_network_frequencystart_e/end_e/exploration_fractionlearning_startstrain_frequency)与 DQN 一致,仅损失函数替换为分类分布投影(F.cross_entropy计算交叉熵)。变体c51_atari.py适配 Atari 像素环境,c51_jax.pyc51_atari_jax.py提供 JAX 实现。

连续控制三件套:DDPG、TD3、SAC

三个面向连续动作空间(默认 MuJoCo-v4环境)的 off-policy 算法共享相似结构:actor-critic + 经验回放 + 目标网络,默认环境均为Hopper-v4total_timesteps=1e6buffer_size=int(1e6)gamma=0.99tau=0.005batch_size=256

特性ddpg_continuous_action.pytd3_continuous_action.pysac_continuous_action.py
学习率learning_rate=3e-4(单优化器)learning_rate=3e-4policy_lr=3e-4q_lr=1e-3(分离优化器)
探索机制exploration_noise=0.1(动作空间高斯噪声)exploration_noise=0.1+ 目标策略平滑policy_noise=0.2noise_clip=0.5熵正则alpha=0.2,默认autotune=True自动调节
延迟更新policy_frequency=2policy_frequency=2policy_frequency=2target_network_frequency=1
学习启动learning_starts=25e3learning_starts=25e3learning_starts=5e3
  • DDPGddpg_continuous_action.py)是确定性策略梯度的基础实现:单个 Q 网络 + 单个确定性 actor,靠exploration_noise探索。
  • TD3td3_continuous_action.py)在 DDPG 之上加入论文提出的三项改进——双 Q 网络取最小(clipped double-Q)、目标策略平滑正则policy_noise+noise_clip)、延迟策略更新policy_frequency=2)。
  • SACsac_continuous_action.py)采用随机策略 + 熵正则,默认开启autotune自动学习温度系数alpha,目标熵按动作维度自适应,样本效率通常优于 DDPG/TD3。

JAX 变体为ddpg_continuous_action_jax.pytd3_continuous_action_jax.py;Atari 像素版见sac_atari.py。基准复现脚本见 benchmark/sac.sh、benchmark/td3.sh、benchmark/ddpg.sh。

PPG、RND 与 Qdagger:CleanRL 的进阶算法矩阵

PPG:Phasic Policy Gradient

cleanrl/ppg_procgen.py是唯一一个 PPG 实现,面向 Procgen 通用 RL benchmark(默认starpilot)。它把 PPO 的训练拆分为策略阶段辅助阶段,参数上在标准 PPO 超参(num_envs=64num_steps=256gamma=0.999adv_norm_fullbatch=True)之外新增:

  • n_iteration=32(N_pi:策略阶段迭代数);
  • e_policy=1(E_pi:策略阶段内策略更新次数);
  • v_value=1(E_V:策略阶段价值更新次数);
  • e_auxiliary=6(E_aux:辅助阶段价值函数更新次数)。

其网络设计为「actor 与 critic 共享特征提取层」的经典 PPG 结构,辅助阶段仅更新价值头以最小化对策略的干扰。

RND:随机网络蒸馏

cleanrl/ppo_rnd_envpool.py面向稀疏奖励探索任务,默认环境MontezumaRevenge-v5total_timesteps=2e9num_envs=128gamma=0.999clip_coef=0.1ent_coef=0.001。实现要点:

  • 使用envpool提供 128 路并行环境;
  • 训练一个随机初始化且固定不动的目标网络与一个可学习的预测网络,用两者输出特征的均方误差作为内在奖励;
  • 引入RunningMeanStd对奖励做归一化,并维护IntrinsicRewardExtrinsicReward的加权组合(相关权重可在脚本中调整)。

Qdagger:从专家(教师)策略蒸馏

cleanrl/qdagger_dqn_atari_impalacnn.py与 JAX 版qdagger_dqn_atari_jax_impalacnn.py面向 Atari(默认BreakoutNoFrameskip-v4total_timesteps=1e7),是 DQN 与行为克隆的结合体:

  • 从 Hugging Face Hub 下载预训练教师模型(dqn_atariQNetwork作为TeacherModel),代码中通过hf_hub_download获取权重;
  • 训练学生策略时以一定概率从教师策略采样动作(sample_action),并将教师行为克隆损失与 DQN 的 Q 学习损失联合优化,同时引入n-step自举与分布式经验回放(deque+ReplayBuffer);
  • 评估环节复用cleanrl_utils/evals/dqn_eval.pyevaluate函数。

所有实现共享的通用工程参数

无论选择哪个算法文件,Args中都包含一组完全一致的通用科研参数:

参数默认值说明
--seed1实验随机种子;另可通过torch_deterministic开启确定性计算
--cudaTrue是否启用 GPU
--trackFalse是否用 Weights & Biases 追踪实验
--wandb-project-name/--wandb-entitycleanRL/Nonewandb 项目名与团队
--capture-videoFalse录制 agent 表现视频到videos/{run_name}目录
--save-model/--upload-model/--hf-entityFalse/False/""保存模型到runs/{run_name},并可上传到 Hugging Face Hub(DQN/C51/SAC/DDPG/TD3/PPO 连续动作等多数文件支持)

tests/目录(如 tests/test_classic_control.py、tests/test_atari.py、tests/test_mujoco.py)可以看到,这些参数与算法逻辑共同保证了脚本可以开箱即用并接受--env-id--total-timesteps等标准 CLI 覆盖。

如何选择实现:决策速查

  • 离散动作、快速验证:经典控制选ppo.pydqn.py;Atari 基准选ppo_atari.py/dqn_atari.py/c51_atari.py
  • 连续控制、MuJoCo/dm_control:优先sac_continuous_action.py(样本效率高),需要确定性与复现可控时选td3_continuous_action.py,最小实现看ddpg_continuous_action.py
  • 追求环境吞吐:Atari 场景用ppo_atari_envpool.py(envpool 向量化),进一步压榨性能可上 JAX 的ppo_atari_envpool_xla_jax.py/_scan.py
  • 多卡训练ppo_atari_multigpu.py
  • 稀疏奖励 / 探索困难ppo_rnd_envpool.py(RND + Montezuma 系列)。
  • 通用 RL / 泛化能力ppo_procgen.pyppg_procgen.py
  • 样本蒸馏 / 从专家学习qdagger_dqn_atari_impalacnn.py
  • 仿真到现实 / IsaacGymppo_continuous_action_isaacgym/ppo_continuous_action_isaacgym.py

安装依赖时可按需选用 requirements/ 下的拆分文件:基础训练用requirements.txt,Atari 用requirements-atari.txt,JAX 用requirements-jax.txt,MuJoCo 用requirements-mujoco.txt,Procgen 用requirements-procgen.txt,envpool 用requirements-envpool.txt,多智能体用requirements-pettingzoo.txt

结语

通过 overview.md 这张索引,可以快速定位 CleanRL 在9 个算法族、27 个实现变体上的完整布局:既有从 CartPole 到 Atari、从离散到连续的横向覆盖,也有 PyTorch/JAX 双后端、envpool 加速、多 GPU、IsaacGym 仿真、稀疏奖励与专家蒸馏的纵向深入。每个变体的详细设计、超参说明与实验曲线,均可通过上述各算法文档页(ppo.md、dqn.md、c51.md、sac.md、ddpg.md、td3.md、ppg.md、ppo-rnd.md、qdagger.md)继续深入研读,并结合 docs/rl-algorithms/overview.md 交叉检索所需实现。

【免费下载链接】cleanrlHigh-quality single file implementation of Deep Reinforcement Learning algorithms with research-friendly features (PPO, DQN, C51, DDPG, TD3, SAC, PPG)项目地址: https://gitcode.com/GitHub_Trending/cl/cleanrl

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询