错误策略集锦:训练指标全绿,机器人却原地踏步

摘要:本报告集中解剖 Unitree G1 29 自由度机器人在同一轮(种子 42)训练中产出的三个"训练指标看似成功、实际却不能用"的行走策略,并给出对其加以证伪的验收方法。三个策略是 sprint 冲刺档(回报 24.56、回合 979 步、摔倒终止 1.67%)、stairs 楼梯档(回报 30.13、回合满值 1000 步、摔倒终止 0.02%、地形等级 5.33)与 rough 崎岖档(回报 1.54、回合 955.8 步、摔倒终止 9.11%、地形等级 5.94)。仅看这些训练日志读数,三者都像是稳定可用甚至优秀的策略。然而在"固定前进命令、跑满定长回合、直接测量机器人实际走出的地面距离"这一硬性验收下,三者全部失败:sprint 在命令 3.0 m/s 下 12 秒仅走出 0.28 m(几乎原地),stairs 在命令 0.8 m/s 下仅走出 0.29 m,rough 在同一命令下仅走出 0.23 m——而同一命令下真正能走的对照策略 normal 走出 8.68 m。三者的共同根因是训练与部署的命令分布不匹配、以及训练指标是命令分布下的平均量因而系统性地掩盖了高命令与定向直行下的无能(rough 另叠加了训练中途数值发散崩溃)。本报告的最高价值在于其方法论内核:静态抽帧与跟随镜头回放无法区分"原地踏步"与"真行走",能力验收必须落到位移这一可测量的硬指标上。全部位移数字来自对种子 42 各策略检查点的固定命令位移实测,训练指标取自同一批 run 的训练日志。

表 1 · 实验概要
性质反面教材实验报告 集中解剖"训练指标看似成功、实际却不能用"的策略形态与其验收方法,不作能力展示
机器人Unitree G1 29-dof(g1_29dof_rev_1_0.urdf 导入;隐式 PD 关节位置执行器 + Unitree 电机模型)
收录策略sprint 冲刺 / stairs 楼梯 / rough 崎岖,均为种子 42 的 unitree_rl_lab PPO 策略
对照(真能走,不在集锦)normal 命令 0.8 m/s → 8.68 m;fast 命令 1.5 m/s → 16.63 m
验收手段固定前进命令 + 跑满定长回合 + 直接测量机器人基座水平净位移(位移硬门)
关键判据实走距离 / 命令期望距离 ≈ 1 → 真前进;≈ 0 → 原地(无论训练指标多好)
数据来源位移 = 对种子 42 各策略检查点的固定命令位移实测;训练指标 = 同批 run 训练日志末段读数
状态已收口 ✓ 作为反面教材长期保留;正题(让相应能力真正可用)属后续实验,不在本轮交付
智能体(Agent)PPO Actor-Critic · 480→…→29环境(Environment)Unitree-G1-29dof-Velocity动作 a ∈ ℝ²⁹观测 s′ ∈ ℝ⁴⁸⁰奖励 r ∈ ℝ
图 1 · 速度跟踪任务的智能体–环境交互回路。三个策略共用同一回路与同一套 480 维观测、29 维关节位置动作;它们的区别不在结构,而在"智能体框里学到的行为在部署命令下究竟做了什么"——这正是本报告要验收的对象。

1背景:为什么要专门做一篇失败集锦

在 G1 29 自由度机器人的一轮训练中(种子 42),数个策略给出了优良的训练日志:回合长度接近满值、摔倒终止率接近零、回报为正、地形任务的地形等级爬得很高。它们也通过了当时的快速目检——播放一段回放、抽几帧看姿态——于是一度被当作成功策略接收。随后一次位移实测推翻了其中三个:把前进命令固定住测量机器人实际走出的距离,它们几乎原地不动。

本报告把这三个策略集中起来做成反面教材,原因不在于失败本身,而在于它们代表了三种典型的"训练指标欺骗"形态,以及一套能稳定识别这类欺骗形态的验收方法。范围上,本报告只收录 sprint、stairs、rough 三个种子 42 策略;可交付的正面策略(normal、fast)不属于本集锦,只作为"真能走"的对照出现。这里所说的"看似成功、实则失败",精确含义是:训练日志读数良好、静态抽帧与回放目检也看不出问题,但一旦固定命令测位移即告暴露。

2验收方法:位移硬门与抽帧陷阱

要理解这三个策略为何骗过了初次验收,先要说清两件事:训练指标为什么具有误导性,以及为什么"看回放、看抽帧"分辨不出来。本节给出这两点,再给出据以证伪的硬指标——位移。

2.1训练指标的系统性欺骗

训练日志里的回报、回合长度、摔倒终止率、地形等级,都是在训练命令分布上取的平均量。速度跟踪任务每个回合从命令区间里随机采一个目标速度;地形任务还叠加持续的小幅偏航命令。于是这些平均量主要由数量占优的低速、转弯、存活样本决定,而"锁定一个高速命令直线前进"这种在训练里罕见甚至从未出现的工况,其无能被平均值淹没。回合长度高只说明"没有摔倒",地形等级高只说明"在难地形上活满了回合",两者都不等于"按命令定向走出了距离"。这是一种系统性的欺骗:指标本身没有造假,但它度量的并不是我们真正关心的那项能力。

2.2回放与抽帧的陷阱

初次验收正是失守在"看画面"上。静态抽帧把动作冻成一张张姿态图,原地踏步与真行走抽出的单帧无法区分;跟随镜头回放则始终把机器人摆在画面中央,机器人无论是否前进,在画面里都像是"停在原地",位移信息被镜头吸收掉了。这两种验收对"到底有没有走出去"这个问题都没有判别力,如图 2 所示。视频 1 是 sprint 档在高命令下的一段跟随镜头回放:画面里步态连续、姿态稳定,单看它无法判断机器人究竟前进了多少——这正是它当初被误判为成功的原因。

两种验收方法的判别力:回放/抽帧分不出,固定命令量位移一量即分① 看跟随镜头回放 / 静态抽帧跟随镜头回放或静态抽帧序列原地踏步的策略真向前走的策略画面几乎相同→ 被误判为「都成功」② 固定前进命令 + 量实际位移固定前进命令跑满定长回合原地:走出 ≈ 0.28 m真走:走出 8.68 m距离差约 30 倍→ 一量即分辨
图 2 · 两种验收方法的判别力对比。上半:看回放或抽帧时,原地踏步与真行走产出几乎相同的画面,被一并误判为成功;下半:固定前进命令、直接量机器人走出的地面距离,原地(约 0.28 m)与真走(8.68 m)相差约三十倍,一量即分辨。
视频 1 · sprint 冲刺档(种子 42)的跟随镜头回放,实测 1280×720,599 帧 @50 fps ≈ 12.0 s。关键说明:镜头跟随机器人基座,机器人始终居中,因此这段画面无法反映它在地面上前进了多远——一个原地踏步的策略与一个真向前走的策略会产出几乎相同的这类回放。它只能佐证步态与姿态,不能作为"真的走出去了"的证据;该结论以正文第 3.1 节的位移实测为准。

2.3位移硬门

唯一可靠的办法是绕开画面,直接测量机器人在地面上走了多远。做法是:把前进速度命令固定为一个常数、其余命令维度置零,让策略在这一恒定命令下跑满一个定长回合,量机器人基座在水平面上的净位移 ‖root_pos_xy[末] − root_pos_xy[初]‖,再与命令期望距离(前进速度 × 时长)对照。真前进的策略会走出接近期望的距离,原地踏步的策略无论训练指标多优良,位移都接近零。这个判据便宜、可复现、与画面无关,是本报告用来分辨全部策略的硬门,其定义见表 2。

表 2 · 位移硬门:验收协议
度量机器人基座在水平面的净位移 ‖root_pos_xy[末] − root_pos_xy[初]‖(米)
输入命令固定的前进速度命令 vx,其余命令维度(横移、偏航)置零,回合内保持不变
时长跑满一个定长回合(sprint 档实测窗口为 12 秒)
期望距离vx × 时长(理想匀速前进应走出的距离)
判定实走 / 期望 ≈ 1 → 真前进;≈ 0 → 原地(与训练指标读数无关)
对照基线normal 命令 0.8 m/s → 8.68 m、fast 命令 1.5 m/s → 16.63 m(同协议下真能走)

3三个失败策略的解剖

把三个策略连同两个"真能走"的对照放在同一张位移图上,差别显著,如图 3 所示:对照的 normal、fast 走出 8.68 m、16.63 m,而 sprint(高命令)、stairs、rough 三条几乎贴着零轴。图中特意保留了 sprint 在低命令 1.0 m/s 下走出的 11.1 m——同一套策略,换一个命令剖面就从"能走"变成"不动",这正是问题的核心线索。下面逐一解剖。

同一套验收:固定前进命令、跑满同一时长,量机器人实际走出的地面距离(米)↑ 真能走对照 · ↓ 集锦策略(锁定命令走不动)fast(对照) · 命令 1.5 m/s16.63 m真能走normal(对照) · 命令 0.8 m/s8.68 m真能走sprint · 命令 1.0 m/s11.1 m同一策略、低速命令→正常前进sprint · 命令 3.0 m/s0.28 m训练指标全绿:回报 24.56 · 摔 1.67% · 回合 979 步stairs · 命令 0.8 m/s0.29 m训练指标全绿:回报 30.13 · 摔 0.02% · 地形等级 5.33rough · 命令 0.8 m/s0.23 m训练指标全绿:回报 1.54 · 摔 9.11% · 地形等级 5.94051015m
图 3 · 三个集锦策略与两个对照策略在固定命令下实测走出的地面距离。条长为实走距离(米),各条左侧标注其固定命令(命令不同,不可横向比速度,只看"走没走出去")。上半三条为真能走的对照与 sprint 低速命令;下半三条为集锦策略,右侧文字是它们各自看似全绿的训练指标。数字取自种子 42 检查点的固定命令位移实测与同批 run 训练日志。

3.1sprint 冲刺:速度虚标

sprint 档以 −0.5 至 4.0 m/s 的前进命令区间训练,并被命名为"4 m/s 冲刺档"。它的训练日志见表 3 左列:回报 24.56、回合 979 步(近满值 1000)、摔倒终止 1.67%,是一个稳定跑满回合的策略。位移实测推翻了这个命名:在固定命令 3.0 m/s 下,12 秒只走出 0.28 m,几乎原地;而同一套策略在固定命令 1.0 m/s 下能走出 11.1 m。机制在于训练命令在整个区间均匀采样,策略把大量时间花在中低速上,学到的是一套"应付各种命令的平均行为",从未被要求"锁定高速、直线冲出去";一旦部署给它一个恒定的高速命令,它就退回到几乎不前进的踏步。因此"冲刺档"是一个名不副实的标签——它其实是一套普通的行走策略,速度被虚标了。

表 3 · sprint 冲刺:训练指标(看似好)对固定命令位移(真相)
维度读数判读
训练回报24.56正值、稳定
回合长度979 步 / 满值 1000几乎不摔、能跑满回合 → 看似成功
摔倒终止1.67%极低
训练命令上限4.0 m/s号称"冲刺档"
位移 @ 命令 3.0 m/s12 秒走 0.28 m期望约 36 m,实走近乎为零 → 原地
位移 @ 命令 1.0 m/s走 11.1 m同一策略、低速命令下正常前进
失败类型速度虚标:所谓 4 m/s 冲刺实为普通行走策略,锁定高速命令即不前进

3.2stairs 楼梯:地形能力虚标

stairs 档的训练日志尤为突出,见表 4:回报 30.13、回合满值 1000、摔倒终止 0.02%、地形等级爬到 5.33(地形定义里约合 0.13 m 踏高的楼梯)。仅看这些读数,它像是三个策略里最成功的一个。但在固定命令 0.8 m/s 下只走出 0.29 m、命令 0.4 m/s 下 0.22 m;作为对照,同一命令 0.8 m/s 下真能走的 normal 走出 8.68 m,相差约三十倍。机制在于地形等级度量的是"存活式晋级"——回合活满即升级——它衡量的是"在难地形上不摔倒地活下来",不是"按命令定向走过难地形"。叠加训练命令里持续的 ±0.2 rad/s 偏航,策略学到的是原地小步周旋以维持存活,而非直线推进。于是地形能力被虚标:高地形等级并不保证锁定直线命令时能够前进。

表 4 · stairs 楼梯:训练指标(看似好)对固定命令位移(真相)
维度读数判读
训练回报30.13三个失败策略里最高
回合长度1000 步(满值)完全不摔、跑满回合 → 看似成功
摔倒终止0.02%近乎为零
地形等级5.33 / 满 8号称能上约 0.13 m 踏高的楼梯
位移 @ 命令 0.8 m/s走 0.29 m同命令下 normal 走 8.68 m → 约三十分之一
位移 @ 命令 0.4 m/s走 0.22 m更低命令仍不前进
失败类型地形能力虚标:高地形等级 = 在难地形上存活(不摔),非定向前进;锁定直线命令根本不走

3.3rough 崎岖:地形能力虚标叠加数值发散

rough 档同属地形能力虚标,且情况更差,见表 5。它的地形等级 5.94 是三者最高,回合 955.8 步、摔倒终止 9.11%;但在固定命令 0.8 m/s 下只走出 0.23 m、命令 0.4 m/s 下只走出 0.01 m,几乎完全静止。除与 stairs 相同的"存活不等于前进"外,rough 还叠加了第二重失败:训练在计划的 12000 次迭代里,第 3803 次因动作分布标准差变为非法值(数值发散)而崩溃,交付的是崩溃前的 model_3800 中途快照。也就是说,这个"高地形等级"策略既没有真正的定向行走能力,本身还是一个未训练完成的中途产物。

表 5 · rough 崎岖:训练指标(看似好)对固定命令位移(真相)
维度读数判读
训练回报1.54正值
回合长度955.8 步九成回合跑满 → 看似"多数存活"
摔倒终止9.11%偏高,但仍以存活为主
地形等级5.94 / 满 8三个策略里最高
训练迭代3803 / 12000第 3803 次数值发散崩溃,采用崩前 model_3800
位移 @ 命令 0.8 m/s走 0.23 m同命令下 normal 走 8.68 m
位移 @ 命令 0.4 m/s走 0.01 m几乎完全静止
失败类型地形能力虚标 + 训练崩溃:存活非前进,且策略是未训完的中途快照

4共同根因

三个策略的失败形态不同,根因相通,归纳见表 6。第一,训练与部署的命令分布不匹配:训练命令在整个区间随机采样(sprint 的前进命令为 −0.5 至 4.0 m/s,地形档还带 ±0.2 rad/s 的持续偏航),策略学的是"应付各种命令的平均行为",大量时间在低速与转弯,从没被要求"锁定高速或特定方向直线走";部署时给一个恒定命令即告暴露。第二,训练指标是命令分布下的平均量,系统性地欺骗:高命令与定向直行下的无能,被数量占优的低命令、存活样本平均掉了。两条共同根因互相印证——sprint 低命令能走、高命令不动直接暴露第一条,三个策略训练指标全绿而固定命令位移全零直接暴露第二条。此外 rough 还叠加了一个自身的失败:训练在第 3803 次迭代数值发散崩溃,采用的是崩前快照,并非训练完成品。

表 6 · 根因剖析:机制、证据与教训。
#根因机制本集锦的证据教训
1训练-部署命令分布不匹配训练命令整区间随机采样,从未练"锁定高速/定向直行"sprint 命令 1.0 走 11.1 m 但命令 3.0 走 0.28 m;地形档带偏航走弧线部署命令剖面须落在训练分布内,否则外推即废
2训练指标系统性欺骗回报/回合/摔倒率/地形等级都是命令分布下的平均量,高命令与定向无能被平均掉三策略训练指标全绿,固定命令位移全部近零能力验收看固定命令下的位移,不看训练日志平均量
3rough 专属 · 训练数值发散训练未完成即在第 3803 迭代数值发散崩溃,只能采用崩前快照rough 迭代 3803/12000 崩溃,采用 model_3800数值发散须先加防护(梯度裁剪/正则)再训满程;此项 rough 独有,不适用于 sprint/stairs

关于跨引擎部署的更正。本报告早期版本曾把"这些策略换物理引擎(Isaac→MuJoCo)部署时同样倾覆"列为策略成熟度不足的佐证。后经部署保真度深挖查明:那次倾覆源于部署器的一个缺陷——把训练侧的隐式 PD 阻尼错当外部力矩显式施加,致使关节速度从第一步起高频振铃、策略收到失真的速度观测;它与策略成熟度无关,连本报告用作对照的 normal / fast 可交付策略在旧部署器下也同样倾覆。修正部署器(把阻尼交回积分器隐式处理、并清除训练时根本不存在的库仑摩擦)后,normal / fast 均可在 MuJoCo 中稳定行走。故此佐证已从上表移除;sim2sim 迁移的完整记录见中级教程 Sim2Sim 章。

5局限性

第一,三个策略均为单一随机种子(42)的记录,未做多种子统计。第二,位移实测为定长回合的单次测量,未做多次重复。第三,时长口径中只有 sprint 档明确记为 12 秒窗口,其余数字以同一"固定命令、定长回合"协议测得;因此跨命令的期望距离对照以同命令下的 normal / fast 基线为准,而非逐条按窗口反推。第四,本报告只测量水平净位移,未刻画路径形状(如是否走弧线、是否偏航周旋)。第五,全部数字来自训练日志与固定命令位移实测,未包含训练之外统一协议的独立评估。第六,结论限于这一轮种子 42 的检查点,不外推到其它训练配置。

6结论与后续工作

本报告表明,在这一轮种子 42 的训练里,训练指标良好、回放看似正常的三个策略,在固定命令位移这一硬门下全部不合格:sprint 是被虚标了速度的普通行走策略,stairs 与 rough 是把"在难地形上存活"误当成"能走过难地形"的地形能力虚标,rough 还叠加了未训练完成。这些失败并非死胡同,而是指明了正题:要让高速冲刺档与地形档真正可用,需要在训练命令采样里加入"固定高速、固定方向直线"的课程,让策略真正练到目标工况;rough 则需先加数值防护再训练满程;并可能配合更强的域随机化。这些属于后续的崎岖与域随机化实验,不在本轮种子 42 的交付范围。本报告的方法论结论是恒定的:能力验收必须落到固定命令下的位移硬门,训练日志的平均量与画面回放都不足以判定一个行走策略是否真的会走。

两次修复尝试及其证伪价值。针对 sprint 的速度虚标,做过两次逐步加码的奖励修复,结论对"这台机器人为什么不奔跑"很有信息量。第一次:在保持命令范围与其余配置不变的前提下,向奖励表移植 Isaac 官方步行任务中被证实能诱发奔跑的腾空奖励项(feet_air_time,权重 +0.75),并解除固定周期的步态相位锁。它确实把 sprint 从原地踏步(固定命令 3.0 m/s 下仅 0.28 m)带成了真实前进——腾空奖励提供了"向前迈步"的梯度;但策略并未奔跑,而是稳定在一个远低于命令的慢速上,且无视命令幅值(3.0 与 4.0 m/s 下表现一致)、始终够不着高速位移门。第二次进一步松开该配置对重心起伏、竖直速度与躯干倾摆的重罚(把身高偏离 −10、竖直速度 −2、躯干倾摆 −5 三项降到官方步行任务的宽松水平),所据的假设是这些稳定性重罚压制了奔跑必然伴随的动态量。结果:仍未越过奔跑位移门,策略照旧停在慢速。这一步反过来证伪了"稳定性重罚是奔跑主要约束"的猜想——松开它们并没有让机器人跑起来。综合两次:更可能的约束是指数核跟踪项在高命令处梯度趋零,没有任何一项在奖励"跑得更快",而腾空奖励可靠原地高抬腿而非高速奔跑来最大化;加之该 29 自由度本体(更重、带 7 自由度手臂)与当年自发奔跑的另一构型并不相同。让它真正奔跑,更可能需要在命令课程上抬高下限、强制高速工况,或重新设计面向速度的奖励,而非在稳定性项上做加减法。

附录 · 关于本报告

数据来源。位移数字来自对种子 42 各策略检查点(sprint、stairs、rough 及对照 normal、fast)在固定前进命令、定长回合下的位移实测;训练指标(回报、回合长度、摔倒终止率、地形等级)取自同一批 run 的训练日志末段读数;rough 的迭代数与崩溃档取自其训练进程记录;sprint 的 12 秒实测窗口为记录在案的测量口径。所有数字均为真实读数,未作任何修饰或外推。

报告性质。本报告为反面教材,只解剖失败形态与验收方法,不含独立评估节与网络架构复述——这些内容与正面报告一致,不在此重复。

训练批次沿革。本集锦的三个策略属于第二训练批(b2)。此前的第一批(batch-1,22 个 run × 3000 迭代)中,全部 8 个地形 run 以另一种更彻底的方式失败:所用奖励表不含摔倒惩罚项,而地形上的负分项(身高偏离、躯干倾斜等)扣分沉重,于是"尽快摔倒以终止回合"成为回报意义下的最优解——8 个 run 的回合长度全部收敛到 6 至 28 步(合 0.12 至 0.56 秒)、摔倒终止率 100%,且回报曲线因"摔得越来越快、扣分越来越少"而呈上升形态,极易被误读为正在学习。b2 批以三项修正重启地形训练:加入权重 −200 的摔倒终止惩罚、地形晋级判据改为存活式、移除按世界坐标系身高的终止判据。修正之后才得到本报告解剖的三个"能活满回合但不前进"的策略——失败形态从"立刻摔倒"演进为"稳定地原地踏步",训练指标的欺骗性也随之升级,这正是失败集锦作为系列记录的价值所在。batch-1 的完整验尸记录(含逐 run 数字与因果推演)存于项目的失败实验档案。

参考文献。

  1. J. Schulman, F. Wolski, P. Dhariwal, A. Radford, O. Klimov. Proximal Policy Optimization Algorithms. arXiv:1707.06347, 2017.
  2. N. Rudin, D. Hoeller, P. Reist, M. Hutter. Learning to Walk in Minutes Using Massively Parallel Deep Reinforcement Learning. CoRL 2021.
  3. Unitree Robotics. unitree_rl_lab, official Isaac Lab reinforcement-learning tasks and Unitree G1 29-dof configuration.

返回报告介绍 / Back to report