FastTD3:简单、快速、强大的人形机器人强化学习方案

摘要:FastTD3 基于 TD3 算法,通过并行模拟、大批次更新和分布式评论家等优化,在单块 A100 GPU 上 3 小时内即可完成多种人形机器人控制任务的高效训练。

强化学习(Reinforcement Learning, RL)近年来在机器人控制领域取得了显著进展,尤其是在人形机器人的运动与操作任务中表现出巨大潜力。然而,传统的强化学习算法往往训练时间长、调参复杂,严重限制了其在真实场景中的快速迭代与应用。

针对这一痛点,来自加州大学伯克利分校的研究团队提出了 FastTD3——一个简单、快速且性能强大的强化学习算法,能够在极短的时间内完成多种复杂人形机器人控制任务的训练,同时保持优异的稳定性和最终性能。


一、为什么人形机器人控制需要更快的强化学习算法?

人形机器人具有高自由度、复杂的动力学特性以及严格的平衡与控制要求,这些都使得其控制策略的学习变得异常困难。传统的强化学习算法(如 PPO)虽然在许多任务中表现良好,但其on-policy 的特性导致其样本效率低下,训练周期长,不利于快速迭代和实际部署。

尤其是在奖励函数设计阶段,研究人员通常需要多次调整奖励结构并重新训练策略,这一过程如果每次都需要数十个小时,将会严重拖慢研发进度。此外,off-policy 算法(如 SAC、TD3)虽然样本效率更高,但其训练速度往往较慢,且算法实现复杂,难以在工程中快速应用。

FastTD3 的出现,正是为了在保持 off-policy 算法样本效率的同时,大幅提升训练速度,使其更适合机器人领域的快速原型开发与实验迭代。


二、什么是 FastTD3?

FastTD3 是基于 Twin Delayed Deep Deterministic Policy Gradient(TD3)算法的高性能变体,专门针对复杂机器人任务优化。其核心思想并不复杂,主要包含以下几个关键设计:

  1. 并行环境模拟:通过大量并行环境同时采集数据,显著提高数据吞吐量。
  2. 大批次训练:使用非常大的批次大小(如 32,768)进行网络更新,提升训练稳定性。
  3. 分布式评论家(Distributional Critic):对价值函数进行分布建模,提升学习效率。
  4. 精心调优的超参数:针对不同任务和平台提供了经过验证的超参数设置。

这些优化手段的结合,使得 FastTD3 在 HumanoidBench、IsaacLab 和 MuJoCo Playground 等多个主流机器人仿真平台上,都能在 3 小时以内(使用单块 A100 GPU)完成训练,并且在大多数任务中达到或超过现有算法的性能。


三、FastTD3 的核心设计选择

1. 并行环境提升数据多样性

FastTD3 利用大规模并行环境(通常为 1000 个以上)同时进行数据采集。这样做不仅加快了数据收集速度,还通过不同环境中的随机性增加了数据的多样性,从而缓解了 TD3 在探索方面的不足。

2. 大批次训练稳定学习过程

FastTD3 使用极大的批次大小(32,768)进行网络更新。这样做虽然单次更新耗时增加,但由于数据多样性高,每次更新都能提供更稳定的学习信号,从而在整体上减少了达到相同性能所需的更新次数。

3. 分布式评论家增强表达能力

借鉴 Distributional RL 的思想,FastTD3 对价值函数进行分布建模而非仅预测期望值。这样做能更好地捕捉环境的不确定性,从而提升学习效率。需要注意的是,这种方法引入了两个超参数 v_minv_max,但在实践中它们并不难调节。

4. clipped double Q-learning 抑制过高估计

在未使用层归一化(layer normalization)的情况下,FastTD3 仍然依赖于 Clipped Double Q-learning(CDQ)来抑制价值函数的高估问题。这一点与某些最新研究结论不同,说明 CDQ 仍然是一个需要根据任务调整的重要超参数。

5. 网络结构保持简洁高效

FastTD3 使用标准的 MLP 结构,其中评论家网络隐藏层为 [1024, 512, 256],演员网络为 [512, 256, 128]。实验表明,更小的网络会降低时间和样本效率,而引入残差连接或层归一化等复杂结构并未带来显著增益,反而可能减慢训练速度。


四、FastTD3 的实现细节

环境支持与封装

FastTD3 支持多个主流机器人仿真平台,并为每个平台提供了统一的接口封装:

  • HumanoidBench:通过 Stable-Baselines3 的 SubprocVecEnv 实现多进程并行。
  • MuJoCo Playground:使用自定义封装将 JAX 张量转换为 PyTorch 张量,并支持 RSL-RL API。
  • IsaacLab:原生支持 PyTorch,同样封装为 RSL-RL 接口。

非对称演员-评论家结构

对于提供特权状态(privileged state)的环境(如 IsaacLab 和 MuJoCo Playground),FastTD3 支持非对称演员-评论家结构,即评论家可以使用更多状态信息而演员只能基于局部观测。

训练加速技术

  • 自动混合精度(AMP):使用 bfloat16 精度进行训练,速度提升可达 40%。
  • Torch.compile:通过 LeanRL 框架支持即时编译,进一步带来 35% 的加速。
  • 两者结合:最高可实现 70% 的训练速度提升

replay buffer 设计

FastTD3 没有使用固定大小的全局 replay buffer,而是将 buffer 大小设置为 N * num_envs。这样做可以避免在增加并行环境数量时 buffer 无法完整存储轨迹的问题。所有数据都存储在 GPU 上以避免数据传输瓶颈。


五、实验结果:FastTD3 在多个任务上表现优异

FastTD3 在 HumanoidBench、IsaacLab 和 MuJoCo Playground 的多个任务上进行了测试,结果显示:

  • HumanoidBench 的 39 项任务中,FastTD3 在大多数任务上都能在 3 小时内达到成功阈值。
  • IsaacLabMuJoCo Playground 的高维控制任务中,FastTD3 在训练速度上媲美或超越 PPO,尤其是在具有域随机化的复杂地形上表现更优。
  • sim-to-real 实验中,FastTD3 成功将在 MuJoCo Playground 中训练的策略迁移到真实的 Booster T1 人形机器人上,这是首次有文献记载的基于 off-policy RL 的全身人形机器人成功部署案例。

下图展示了在部分任务上的学习曲线,可以看出 FastTD3 的训练速度显著高于其他基线算法:

FastTD3 Learning Curves

六、如何安装与使用 FastTD3?

系统要求

  • Conda(环境管理)
  • Git LFS(用于 IsaacLab)
  • CMake(用于 IsaacLab)
  • 系统依赖:libglfw3libgl1-mesa-glxlibosmesa6git-lfscmake

安装步骤

FastTD3 为不同仿真平台提供了不同的环境配置:

1. 安装 HumanoidBench 环境

conda create -n fasttd3_hb -y python=3.10
conda activate fasttd3_hb
pip install --editable git+https://github.com/carlosferrazza/humanoid-bench.git#egg=humanoid-bench
pip install -r requirements/requirements.txt

2. 安装 MuJoCo Playground 环境

conda create -n fasttd3_playground -y python=3.10
conda activate fasttd3_playground
pip install -r requirements/requirements_playground.txt

3. 安装 IsaacLab 环境

conda create -n fasttd3_isaaclab -y python=3.10
conda activate fasttd3_isaaclab
pip install 'isaacsim[all,extscache]==4.5.0' --extra-index-url https://pypi.nvidia.com
git clone https://github.com/isaac-sim/IsaacLab.git
cd IsaacLab
./isaaclab.sh --install
cd ..
pip install -r requirements/requirements.txt

运行示例

在 HumanoidBench 上训练

conda activate fasttd3_hb
python fast_td3/train.py \
    --env_name h1hand-hurdle-v0 \
    --exp_name FastTD3 \
    --render_interval 5000 \
    --seed 1

在 MuJoCo Playground 上训练

conda activate fasttd3_playground
python fast_td3/train.py \
    --env_name T1JoystickFlatTerrain \
    --exp_name FastTD3 \
    --render_interval 5000 \
    --seed 1

使用 FastTD3 + SimbaV2(推荐)

python fast_td3/train.py \
    --env_name T1JoystickFlatTerrain \
    --exp_name FastTD3 \
    --render_interval 5000 \
    --agent fasttd3_simbav2 \
    --batch_size 8192 \
    --critic_learning_rate_end 3e-5 \
    --actor_learning_rate_end 3e-5 \
    --weight_decay 0.0 \
    --critic_hidden_dim 512 \
    --critic_num_blocks 2 \
    --actor_hidden_dim 256 \
    --actor_num_blocks 1 \
    --seed 1

七、多 GPU 训练支持

FastTD3 支持多 GPU 训练,能够进一步扩展数据采集和训练吞吐量。需要注意的是,其多 GPU 实现是在每个 GPU 上独立运行相同的实验,而不是将参数分布 across GPUs。

这意味着:

  • 有效环境数量 = num_envs × num_gpus
  • 有效批次大小 = batch_size × num_gpus
  • 有效缓冲区大小 = buffer_size × num_gpus

例如,使用 4 个 GPU 和 num_envs=1024 运行 IsaacLab 实验,效果相当于使用 1 个 GPU 和 num_envs=4096

运行方式如下:

CUDA_VISIBLE_DEVICES=0,1,2,3 python train_multigpu.py \
    --env_name Isaac-Velocity-Flat-G1-v0 \
    --exp_name FastTD3-MultiGPU \
    --seed 1

八、实战建议与调参技巧

如果训练效果不佳怎么办?

  1. 增加 num_updates:如果智能体在训练早期陷入局部最优,可能是因为未能充分利用价值函数。提高每次环境步后的更新次数通常有帮助。
  2. 尝试 num_steps=3 或禁用 use_cdq:如果智能体完全无法学习,可以尝试调整这些参数。
  3. 调整奖励函数:对于带有惩罚项(如力矩、能量、动作变化率)的任务,可以先降低惩罚系数,待策略初步学习后再逐步增加。
  4. 课程学习:先使用较弱的惩罚项进行训练,然后再用更强的惩罚项进行微调。

内存不足怎么办?

FastTD3 将整个 replay buffer 存储在 GPU 上以减少数据传输开销,这可能会占用大量显存。如果遇到内存不足的问题,可以按以下顺序调整:

  1. 减小 buffer_size
  2. 减小 batch_size
  3. 减小 num_envs

如何进一步提升训练速度?

  • 使用 --compile_mode max-autotune 选项:这会进行更激进的编译优化,可能带来额外 10% 的速度提升,但会增加几分钟的编译时间。
  • 确保使用了 GPU 渲染:在某些云实例中,MuJoCo 可能回退到 CPU 渲染。如果渲染时间超过 5 秒,很可能是没有使用 GPU 渲染。

九、sim-to-real:从仿真到真实机器人

FastTD3 不仅在仿真中表现优异,也成功应用于真实人形机器人控制。研究团队将 MuJoCo Playground 中训练的策略迁移到了 Booster T1 人形机器人上,这是首次有文献记载的基于 off-policy RL 的全身人形机器人成功部署案例。

为了简化 sim-to-real 的流程,团队将 Booster Gym 的机器人配置和奖励函数移植到了 MuJoCo Playground 中,发现这相比基于 IsaacGym 的训练显著简化和加速了迭代周期。


十、总结与展望

FastTD3 证明了即使不引入复杂的算法创新,通过精心调优的经典算法结合现代计算资源(大规模并行模拟、大批次训练、分布式评论家等),也能在复杂机器人控制任务上取得突破性的训练速度。

这项工作并不旨在声称相对于先前算法的创新性或优越性,而是将研究社区中已有的洞察提炼为一个简单易用的算法,并提供全面的实验分析和实现。FastTD3 的代码库轻量且易于使用,支持多个主流机器人仿真平台,并提供了预配置的超参数和多种实用功能。

未来,FastTD3 有望在以下方向进一步发展:

  • 与近期 RL 进展(如 SimbaV2、TD-MPC2 等)结合,进一步提升性能;
  • 在 demo-driven RL 设置中应用,利用其 off-policy 特性进行示范学习;
  • 在迭代逆强化学习设置中使用,结合语言模型作为奖励生成器,解决人形控制中的奖励设计难题。

附录:常见问题解答(FAQ)

Q1: FastTD3 和 TD3 有什么区别?

FastTD3 是基于 TD3 的高性能变体,主要区别在于使用了并行环境模拟、大批次训练、分布式评论家以及精心调优的超参数,这些改进显著提升了训练速度而不增加算法复杂性。

Q2: 我需要什么样的硬件来运行 FastTD3?

所有实验都是在单块 NVIDIA A100 80GB GPU 上进行的。对于较小型的任务,RTX 4090 或其他高端消费级 GPU 也可能足够。多 GPU 训练可以进一步提升性能。

Q3: FastTD3 支持哪些仿真平台?

目前支持 HumanoidBench、MuJoCo Playground、IsaacLab 和 MTBench。代码库设计为易于扩展,可以支持其他平台。

Q4: 训练一个人形机器人任务通常需要多长时间?

在 A100 GPU 上,大多数任务可以在 3 小时内完成训练。具体时间取决于任务复杂度和超参数设置。

Q5: 如何将 FastTD3 用于我自己的任务?

你可以修改环境封装和奖励函数来适应自己的任务。代码库提供了清晰的接口和示例,便于用户自定义任务。

Q6: FastTD3 是否支持视觉输入?

当前版本的 FastTD3 专注于状态输入任务,不支持原始视觉输入。未来可能会扩展支持视觉输入的功能。


相关资源

  • 项目页面:https://younggyo.me/fast_td3
  • 开源代码:https://github.com/younggyoseo/fast_td3
  • 技术报告:https://arxiv.org/abs/2505.22642

希望通过 FastTD3 的推出和开源,能够加速机器人强化学习的研究和应用,推动人形机器人技术的发展。