G1 编程与工程 IsaacLab

G1-23dof 强化学习超参数系统调优指南

2026-04-12 · 5 min read

G1-23dof 强化学习超参数系统调优指南

文档版本:V1.0
机器人平台:Unitree G1-23dof
仿真框架:IsaacLab 2.3.0 + IsaacSim 5.1.0
编写日期:2026-04-12
适用任务:Velocity / CPG-Flat / Fusion V0~V11


1. 超参数分类体系

G1-23dof 训练涉及的超参数分为 6 大类:

类别 参数数量 调参难度 优先级
PPO 算法参数 10+ ★★☆ P0
网络结构参数 5+ ★☆☆ P1
奖励函数权重 17~27 ★★★ P0
传感器配置 8+ ★★☆ P1
环境随机化 10+ ★☆☆ P2
Curriculum 学习 5+ ★★★ P1

2. PPO 算法超参数

2.1 学习率(Learning Rate)

learning_rate: 3e-4  # MLP/Attention
encoder_learning_rate: 1e-4  # 视觉编码器(Fusion 专用)
场景 推荐范围 观察指标
初期探索(0~5k iter) 3e-4 ~ 5e-4 noise_std 快速下降
稳定收敛(5k~20k iter) 1e-4 ~ 3e-4 reward 持续上升
精细调整(20k+ iter) 5e-5 ~ 1e-4 KL divergence 稳定
过高(>1e-3) loss 发散、reward 震荡
过低(<5e-5) 收敛极慢、陷入局部最优

自适应调度schedule="adaptive"):

# 当 KL(π_new || π_old) > desired_kl 时,自动降低学习率
desired_kl = 0.008  # 对于 78D 输入,0.008 是合理阈值
# KL 过大 → 策略更新太激进 → 降 lr
# KL 过小 → 策略更新太保守 → 升 lr

2.2 PPO 裁剪参数(Clip Parameter)

clip_param = 0.2  # PPO epsilon 裁剪范围
clip_param 效果
0.1 极保守,策略更新幅度受限,收敛慢
0.2(推荐) 平衡探索与利用
0.3 更激进,可能提升最终性能但不稳定
0.5 几乎退化为随机策略,训练崩溃风险

2.3 Epoch 和 Mini-Batch

num_learning_epochs = 5      # 每次收集数据后更新次数
num_mini_batches = 16       # 将数据分成多少个 mini-batch
# 总更新次数 = 5 epochs × 16 mini-batches = 80 次/iteration

# 实际 batch_size = num_envs × num_steps_per_env / num_mini_batches
# = 4096 × 24 / 16 = 6144 samples/mini-batch
参数 过大影响 过小影响
num_learning_epochs 过拟合、数据效率低 梯度估计噪声大
num_mini_batches 梯度估计稳定、显存增加 方差大、收敛不稳定

2.4 折扣因子和 GAE

gamma = 0.99    # 折扣因子(1-step 回报)
lam = 0.95      # GAE lambda(优势估计平滑度)
参数组合 适用场景
γ=0.99, λ=0.95(推荐) 标准行走任务
γ=0.995, λ=0.98 需要更长时序规划的任务
γ=0.99, λ=0.8 需要快速响应变化(高频重启环境)

物理意义: - γ 控制视野:0.99 意味着 100 步后的奖励仍有 ~37% 权重 - λ 控制优势估计的偏差-方差权衡:λ=1 偏向蒙特卡洛(高方差无偏),λ=0 偏向 TD(低方差有偏)

2.5 熵正则化(Entropy Coefficient)

entropy_coef = 0.008  # (Fusion V11)
entropy_coef = 0.01  # (Velocity)
权重 效果
0.0 无探索,策略快速收敛但可能陷入局部最优
0.001 轻度探索
0.008~0.01(推荐) 适度探索,平衡
0.05 过度探索,reward 下降

监控指标Entropy / Episode_Reward / entropy_coef

健康的熵衰减曲线:
Iteration 0:    Entropy ≈ 3.5  (高探索)
Iteration 1000: Entropy ≈ 2.8  (逐渐收敛)
Iteration 5000: Entropy ≈ 2.2  (稳定策略)
Iteration 10000+: Entropy ≈ 1.9  (收敛完成)

3. 网络结构超参数

3.1 隐层维度

actor_hidden_dims = [512, 256, 128]   # 标准配置
critic_hidden_dims = [512, 256, 128] # 同 Actor

# 可调维度映射:
# 78D proprio → [512] → [256] → [128] → 23D
# 142D fused  → [512] → [256] → [128] → 23D
配置 适用场景 显存占用
[256, 128, 64] 小规模测试、快速原型
[512, 256, 128](推荐) 标准训练
[1024, 512, 256] 大规模并行、复杂任务

3.2 激活函数

activation = "elu"  # ELU: f(x) = x if x>0 else α(e^x - 1)
激活函数 优点 缺点
ELU(推荐) 负值区有梯度,收敛快 计算量略大
ReLU 简单高效 负值区死亡梯度
Tanh 输出有界 [-1, 1] 梯度消失
GELU Transformer 常用 需 CUDA 支持

3.3 动作噪声标准差

init_noise_std = 1.0  # 初始动作噪声
# 策略输出: tanh(mean) + noise_std * N(0,1)
初始 std 效果
0.1 低探索,仅适用于从已有策略微调
0.5 中等探索
1.0(推荐) 高探索,适合从零训练
2.0 极高探索,初期 reward 可能很低

自适应 std(可选):noise_std 随训练自动衰减


4. 奖励函数权重调参

4.1 调参优先级矩阵

奖励项 优先级 调整难度 典型范围
track_lin_vel_xy P0 ★★☆ 1.0 ~ 3.0
alive P0 ★☆☆ 0.1 ~ 0.2
base_height P0 ★★☆ -5.0 ~ -15.0
flat_orientation_l2 P1 ★★☆ -1.0 ~ -5.0
feet_gait P1 ★★☆ 0.3 ~ 1.0
feet_clearance P1 ★★☆ 0.5 ~ 2.0
action_rate P2 ★☆☆ -0.01 ~ -0.05
joint_vel P2 ★☆☆ -0.0005 ~ -0.002

4.2 调参思路

问题 1:机器人走路像滑行(不抬脚)

原因:feet_clearance 权重过低,或 gait 奖励不足
解决:feet_clearance 1.0 → 2.0,feet_gait 0.3 → 0.8

问题 2:机器人偏向摔倒(reward 升高但实际摔倒快)

原因:alive 权重过高,掩盖了其他惩罚
解决:alive 0.15 → 0.05,增强 base_height + flat_orientation

问题 3:步态不规律(时而快走时而慢走)

原因:缺少周期步态奖励约束
解决:增加 feet_gait 0.5,或增加 action_rate -0.05

问题 4:关节能量消耗过高

原因:energy 权重过低
解决:energy -2e-5 → -5e-5,配合 joint_vel -0.001 → -0.003

4.3 奖励权重平衡检查

# 经验法则:主要任务奖励总和 ≈ 1.0~2.0
task_total = track_lin_vel_xy + track_ang_vel_z + alive + feet_gait + feet_clearance
# → 应该是正值的主要来源

# Safety 惩罚总和应适中,不应完全压制正奖励
safety_total = abs(base_height) + abs(flat_orientation) + abs(undesired_contacts)
# → 如果 safety_total >> task_total,策略无法学习

# 合理比例:task_total / |safety_total| ≈ 0.2 ~ 0.5
# 即正奖励的绝对值应该是安全惩罚的 2~5 倍

5. 传感器超参数

5.1 Depth Camera

参数 默认值 调整影响
max_distance 5.0m 过小:看不到远处障碍;过大:分辨率浪费
height 48 影响卷积特征粒度
width 64 影响水平视野分辨率

5.2 Height Scanner

参数 默认值 调整影响
resolution 0.1m(10cm) 过粗:漏掉小障碍;过细:维度爆炸
size [1.6, 1.0] 扫描范围,过小看不到脚前方

5.3 LiDAR

参数 默认值 调整影响
num_azimuth 360 每圈射线数,影响角度分辨率
num_channels 8 垂直层数,影响俯仰视野
max_range 10.0m 最大探测距离

6. Curriculum 超参数

6.1 Terrain Curriculum

terrain_levels = CurrTerm(func=mdp.terrain_levels_vel)
# 或
terrain_levels = CurrTerm(func=failure_adaptive_terrain_curriculum)
类型 适用场景 参数
terrain_levels_vel 标准速度任务 成功率阈值自动升降
failure_adaptive_terrain_curriculum Fusion 复杂地形 失败驱动的难度适应
quality_gated_terrain_curriculum V11 最终版 距离 + 存活率双门控

6.2 Quality-Gated Curriculum(V11)

# 门控条件:同时满足才升级难度
min_distance = 2.0      # 单 episode 至少走 2m
min_survival_rate = 0.6 # 存活率 > 60%

# 优势:防止"转圈也能升级"的漏洞
# 转圈机器人距离短但存活率高,quality-gated 堵住此漏洞

7. 调参流程实战

7.1 推荐调参顺序

Step 1: 验证基础训练(默认超参数)
  → 检查 reward 曲线是否单调上升
  → 检查 episode_length 是否合理(>300)

Step 2: 优先调学习率(3e-4 → 1e-4 → 5e-4)
  → 观察 KL divergence 是否稳定

Step 3: 调奖励权重(先 task,再 safety)
  → 如果 track_lin_vel 不上升:增大权重或减少干扰项
  → 如果姿态很差:增强 base_height + flat_orientation

Step 4: 调 PPO 参数(clip_param + entropy_coef)
  → 不稳定:降低 clip_param 或增大 entropy_coef
  → 收敛慢:适当提高学习率

Step 5: Curriculum 调整
  → 升级太快:提高 min_survival_rate
  → 升级太慢:降低 min_survival_rate 或增加 init_terrain_level

7.2 快速验证清单

检查项 健康指标
Reward 曲线 单调上升,无剧烈震荡
Episode length >500(10秒以上存活)
noise_std 初期下降,后期稳定
Policy entropy 逐渐降低但不趋于零
Value loss < 1.0,稳定
KL divergence < 0.02,若持续 >0.05 需降学习率

版本记录

版本 日期 修改内容 作者
V1.0 2026-04-12 初始版本,超参数系统调优指南 AI Assistant

本文档由 AI 辅助整理自 unitree_lab_locomotion 仓库源码

← 上一篇
G1-23dof Following 目标跟随任务配置规范
下一篇 →
G1-23dof Velocity 任务训练配置规范
← 返回博客列表