1. 背景

近期在基于 Isaac Lab + RSL-RL PPO 的人形机器人强化学习训练过程中,遇到了一类比较典型的问题:

训练前期表现正常,策略能够持续优化,但是在长时间训练后,突然出现:

  • PPO loss 异常增大
  • critic value 出现极端值
  • action 数值异常
  • Gaussian policy 输出异常
  • 最终训练崩溃

初始错误表现类似:

Normal.sample()

std contains invalid value

表面看像是策略分布参数异常,但进一步排查发现:

最终报错位置并不是问题起点。

真正的问题隐藏在训练数据流和策略反馈链路中。


2. 初步判断:不是简单的 PPO 参数问题

出现异常后,第一反应通常是调整:

  • learning rate
  • entropy coefficient
  • clip range
  • value loss weight

但是这些参数调整并没有解决根本问题。

原因是:

训练并不是整体逐渐发散,而是:

极少数环境首先出现异常,然后异常逐步污染训练过程。

通过增加数值检测后发现:

大部分环境:

critic value ≈ 正常范围

但是个别环境:

critic value 出现数量级异常

说明:

问题不是 PPO batch 整体崩溃,而是某些 rollout 环境进入异常状态。


3. 建立完整异常传播链

为了定位第一个异常点,在 PPO 流程增加多层检测:

包括:

  • action 输出
  • policy distribution 参数
  • observation 最大值
  • critic value
  • return
  • advantage

最终得到异常传播链:

异常状态产生

↓

action 出现异常

↓

observation 输入被污染

↓

critic 输出异常

↓

return/value loss 放大

↓

PPO 更新受到影响

↓

策略分布进一步恶化

↓

训练崩溃

因此:

最终看到的 NaN,并不是根因,而是异常传播后的结果。


4. 关键问题一:历史动作信息污染观测

进一步分析 observation 结构。

训练中 policy 使用历史 observation:

当前观测
+
历史状态

因此:

如果某一步产生异常动作,而该动作又进入下一步 observation,就会形成反馈闭环。

原始数据链:

策略输出

↓

动作管理模块

↓

历史动作观测

↓

下一次 policy 输入

↓

策略继续放大异常

问题在于:

实际执行动作可能经过限制,

但是用于训练反馈的历史动作数据未必经过同样处理。

于是:

极端情况下:

异常 action

↓

进入 observation history

↓

污染网络输入

最终导致策略进一步偏离。


5. 解决方案:增加观测侧安全保护

针对这个问题,没有直接修改训练算法,而是在 observation 输入侧增加保护。

核心思想:

不让异常动作直接污染下一步策略输入。

处理后:

  • observation 维度保持不变
  • checkpoint 可以继续加载
  • 训练流程无需大规模修改

验证结果:

修改前:

observation 出现大范围异常值

修改后:

observation 保持稳定范围

说明:

动作异常 → 观测污染 → 策略放大的闭环被切断。


6. 关键问题二:策略输出缺少边界约束

解决 observation 污染后,又发现:

部分情况下:

输入状态正常,

但是:

policy 输出仍然可能突然增大。

进一步检查 Gaussian policy:

发现:

标准差没有明显异常,

但是:

策略网络输出的均值可能在少数状态下持续扩大。

表现类似:

mean:

几十

↓

更大

↓

继续增长

最终导致:

采样动作进入异常区域。


7. 解决方案:限制策略分布输出范围

直接限制 sampled action 并不是最佳方案。

原因:

PPO 需要保证:

  • action sampling
  • log probability

来自同一个概率分布。

因此采用:

在 Gaussian distribution 创建之前,

对网络输出进行平滑约束。

效果:

正常区域:

保持原有表达能力。

异常区域:

避免无限增长。

最终形成三层保护:

策略输出保护

↓

环境执行保护

↓

观测反馈保护

从不同环节降低训练风险。


8. 另一个隐藏问题:奖励设计存在优化漏洞

数值稳定问题解决后,又发现:

训练虽然稳定,

但是策略效果没有达到预期。

进一步分析发现:

不是训练失败,

而是奖励函数存在漏洞。

强化学习中的一个常见问题:

如果奖励设计存在“捷径”,

策略不会主动学习人类期望行为,

而会选择:

更容易获得高奖励的低成本方案。

因此:

需要重新检查:

  • 奖励是否真正约束目标行为
  • 非目标行为是否也能获得高分
  • reward 是否存在数学漏洞

9. 奖励优化原则

优化方向:

不是简单增加奖励权重,

而是重新检查奖励函数:

  1. 明确目标行为和非目标行为差异
  2. 避免简单状态获得过高奖励
  3. 增强奖励与实际目标的一致性
  4. 使用反例测试:

假设策略完全不完成目标动作,

还能获得多少奖励?

这个方法对于强化学习任务非常重要。


10. 最终总结:问题在哪里?如何解决?

经过完整排查,最终确认:

这次训练异常并不是单纯的 PPO 参数问题,而是多个因素共同导致。

主要问题:

问题 1:异常动作进入反馈链

原因:

动作信息进入 observation 后,没有有效限制。

解决:

增加 observation 侧安全处理,

避免异常数据污染策略输入。


问题 2:策略输出缺少稳定约束

原因:

Gaussian policy 在极端状态下可能产生过大的输出。

解决:

对策略分布输出增加平滑限制,

降低极端状态风险。


问题 3:奖励设计存在优化漏洞

原因:

奖励函数允许非目标行为获得较高收益。

解决:

重新设计奖励约束,

提高 reward 与实际目标的一致性。


总结

这次问题最大的经验是:

在机器人强化学习中,

很多所谓的“PPO 不稳定”,

并不一定来自 PPO 算法本身。

更常见的问题来自:

  • action 数据流
  • observation 设计
  • 策略输出范围
  • reward 数学形式

排查强化学习训练异常时,不应该只关注最终报错:

例如:

NaN
loss explosion
std error

而应该沿着完整链路寻找:

第一个异常数据在哪里产生?

↓

如何进入训练系统?

↓

如何被放大?

↓

最终为什么表现成崩溃?

只有找到最初异常点,才能真正解决问题,而不是通过不断调整参数暂时缓解。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐