论文精读:Parkour in the Wild——多专家蒸馏与 RL 微调如何得到通用敏捷运动策略

论文信息

  • 题目:Parkour in the Wild: Learning a General and Extensible Agile Locomotion Policy Using Multi-expert Distillation and RL Fine-tuning
  • 作者:Nikita Rudin、Junzhe He、Joshua Aurand、Marco Hutter
  • 机构:ETH Zürich Robotic Systems Lab;第一作者同时隶属 NVIDIA Switzerland
  • 预印本:arXiv:2505.11164
  • 期刊记录:The International Journal of Robotics Research OnlineFirst,2026 年 6 月 3 日首次在线发表;尚未编入正式卷期
  • 实验平台:ANYmal D 四足机器人
  • 关键词:多专家策略、策略蒸馏、DAgger、强化学习微调、视觉运动控制、持续扩展、Sim-to-Real

说明:本文以公开的 arXiv 全文为主要技术依据。期刊版本的书目信息已更新,但正文分析对应公开版本;如果两个版本未来出现参数差异,应以最终期刊正文为准。

一句话结论

这篇论文的关键不是发明一种新的 PPO,而是设计了一条能扩展的训练路线:先把困难的多技能探索拆成九个可独立调好的专家,再通过 DAgger 把专家知识压入一个以深度图为输入的统一策略,最后用 RL 直接优化任务成功率,修复蒸馏中的动作冲突、感知差异和分布偏移。

最简流程如下:

九种地形分别训练专家

DAgger 多专家蒸馏

得到“会一些但还不够稳”的 foundation policy

在旧地形 + 新地形 + 真实场景扫描模型上做 RL fine-tuning

得到单一、视觉驱动、可继续扩展的 generalist policy

部署到 ANYmal D,50 Hz 输出控制动作

ANYmal D 使用单一策略通过多种真实非结构化障碍

原论文图 1:单一通用策略在真实环境中组合不同运动能力。图片来源:Rudin et al., 2025 公开论文

1. 论文真正想解决什么问题

四足机器人已经可以针对单一任务学会非常强的动作,例如跳跃、攀爬、钻过低矮空间或踩踏脚石。但“每种障碍一个策略”离真实部署还有很大距离。

真实世界不会提前告诉机器人:

前方 2 米是楼梯,请切换 climb policy;
接下来是窄梁,请切换 beam policy;
随后是碎石,请切换 rock policy。

实际需要的是同一个控制器根据当前观测自行决定:

  • 眼前是什么地形;
  • 该调用哪类运动能力;
  • 是否需要把多种能力连续组合;
  • 遇到训练时没有见过的混合障碍时如何调整动作;
  • 未来发现新失败案例时,能否把新能力加入而不忘掉旧能力。

因此,论文的目标不是单纯追求某一个 parkour 动作的极限,而是同时追求四点:

  1. General:一个策略覆盖多种地形和动作。
  2. Agile:策略仍保留专家的跳跃、攀爬等动态能力。
  3. Extensible:遇到新地形后可以继续微调,而不是从头训练。
  4. Deployable:使用真机可获得的深度图,并能经受感知噪声与现实扰动。

2. 为什么“把所有地形放进 PPO 一起训练”不够

直觉上最简单的办法是把所有地形混在一起,然后从随机初始化开始训练一个大策略。但作者观察到明显的多任务探索失败:

  • 不同地形所需动作模式差异很大;
  • 训练早期,一些容易任务更快产生正回报;
  • 数据和梯度逐渐被这些任务主导;
  • 策略收敛到少数运动模式;
  • 对其他任务几乎不再探索;
  • 即使能过多种地形,也可能只学到一种“到处勉强能用”的折中动作。

可以把它理解为:

多任务 RLi单任务 RL 的最优能力\text{多任务 RL} \neq \sum_i \text{单任务 RL 的最优能力}

因为策略参数共享后,各任务梯度会互相影响;更根本的是,训练数据由当前策略自己采集,一旦某项技能在早期没有被发现,它就很难获得足够的成功轨迹来翻身。

论文采用的工程思想是:先分治,再合并,最后联合优化。

3. 三阶段训练框架总览

九个专家训练、多专家蒸馏与强化学习微调的完整流程

原论文图 2(核心方法图):第一阶段在 9 类地形上分别训练专家,第二阶段用 DAgger 蒸馏到深度图策略,第三阶段加入新地形与真实扫描地形做 RL 微调。图片来源:Rudin et al., 2025

3.1 第一阶段:九个地形专家

作者分别训练九个专家策略:

专家 主要能力 典型难点
Walk 普通行走 基础稳定性与目标跟踪
Climb 向上攀爬 前腿搭接、重心抬升
Climb down 向下攀爬 视觉遮挡、落脚冲击
Jump 跳跃/越沟 起跳时机、腾空与落地
Tables / Crouch 从桌面等低矮障碍下通过 身体高度与碰撞约束
Rock pile 攀爬石堆 不规则接触与连续姿态调整
Low wall 越过矮墙 需要攀爬与跳跃式动作
Beams 通过窄梁 极高的落脚精度
Stepping stones 踩踏脚石 稀疏可落脚区域与步序规划

前五类能力来自作者团队之前的 ANYmal Parkour 系统,本文再增加低墙、脚石、窄梁和石堆四类技能。

每个专家可以有自己的:

  • 地形课程;
  • reward 权重;
  • termination 条件;
  • 初始化方式;
  • 训练技巧。

例如论文提到,低墙专家从攀爬专家的权重开始训练。这样虽然前期调参成本仍高,但每个问题相对单纯,且训练好的专家可以被冻结并反复使用。

3.2 第二阶段:多专家 DAgger 蒸馏

九个专家最终必须合并为一个 student policy。目标可写为:

πstudent(ots)πexpert,i(ote)\pi_{\text{student}}(o_t^{s}) \approx \pi_{\text{expert},i}(o_t^{e})

其中 ii 是当前地形对应的专家。Student 实际上同时在学习两个隐含任务:

  1. 从自己的深度视觉与本体观测中判断当前地形需要哪类行为;
  2. 模仿对应专家的动作。

作者使用与 DAgger 相似的在线数据聚合方式:

  1. 在并行仿真中把机器人分配到九类地形;
  2. student 的动作 推进环境;
  3. 在 student 真正到达的状态上查询对应 expert;
  4. 保存 (ots,ate)(o_t^s,a_t^e)
  5. 用动作均方误差更新 student;
  6. 重复采集和训练。

监督损失为:

Ldistill(θ)=t=1Nπθ(ots)ate22\mathcal{L}_{\text{distill}}(\theta) = \sum_{t=1}^{N} \left\| \pi_{\theta}(o_t^s)-a_t^e \right\|_2^2

它和普通行为克隆的关键区别是:数据分布来自 student,而不是只来自 expert。

如果只记录 expert 的成功轨迹,student 一旦产生小误差,就可能进入 expert 数据没有覆盖的状态。此时错误会继续积累。DAgger 让 expert 给 student 自己访问到的状态重新标注动作,因此能缓解 covariate shift。

数据采集时,作者还给 student 动作加入零均值高斯噪声:

ats=πθ(ots)+ϵ,ϵN(0,σ2)a_t^s=\pi_{\theta}(o_t^s)+\epsilon, \qquad \epsilon\sim\mathcal{N}(0,\sigma^2)

这个细节有两个作用:

  • 让蒸馏策略覆盖专家轨迹附近更多状态,增强恢复能力;
  • 让策略提前适应 RL 阶段用于探索的动作噪声,减少从监督学习切到 RL 时的性能崩塌。

3.3 第三阶段:RL fine-tuning

蒸馏结束后,student 已经有“能完成大部分技能”的行为先验,但它还不是最终答案:

  • 多专家在相似状态可能给出不同动作,MSE 会学到不合理的平均动作;
  • student 和 expert 使用不同感知输入,student 未必拥有完整判断依据;
  • 模仿优化的是“像专家”,不是“任务是否成功”;
  • expert 没见过的组合地形无法直接提供标签。

因此作者取消 expert 监督,直接用任务 reward 做 RL 微调。微调地形包括:

  • 原九类专家地形;
  • 一条由箱子、沟、桌面、楼梯、坡面组成的 parkour line;
  • 15 个由搜索救援设施实景扫描得到的新地形模型。

这一阶段的意义是把优化目标从:

“复制某个专家动作”\text{“复制某个专家动作”}

切换到:

“无论使用哪种动作,只要稳定、低代价地到达目标”\text{“无论使用哪种动作,只要稳定、低代价地到达目标”}

4. 策略究竟看到了什么

4.1 任务命令

策略不是接受传统的 (vx,vy,ωz)(v_x,v_y,\omega_z) 速度命令,而是位置式任务描述:

  • 目标基座位置 r\mathbf{r}^{*}
  • 目标朝向 ψ\psi^{*}
  • 到达目标的剩余时间 tt^{*}

这使策略同时承担局部导航和敏捷运动:它需要在指定时间内移动到目标位姿,而不是只跟踪瞬时速度。

4.2 本体观测

所有 actor 使用的 proprioception 包括:

  • 基座线速度 vb\mathbf{v}_b
  • 基座角速度 ωb\boldsymbol{\omega}_b
  • 基座坐标系中的重力方向 gb\mathbf{g}_b
  • 12 个关节位置 q\mathbf{q}
  • 12 个关节速度 q˙\dot{\mathbf{q}}
  • 上一步动作。

这些信息回答的是“机器人自己现在是什么状态”。

4.3 外部感知:expert 与 student 不同

专家看到的是机器人周围的局部 elevation map。它接近仿真里的特权信息:地形高度清楚、不会因机器人俯仰而改变,也不受遮挡影响。

Student 则使用四张机载深度图:

  • 两个前向深度相机;
  • 两个后向深度相机。

这意味着蒸馏不只是 policy compression,也是 cross-modal distillation

expert: elevation map + proprioception
↓ action label
student: raw depth images + proprioception + memory

这也是问题变难的主要来源之一。同一障碍可能已经在 elevation map 中完整可见,却只在深度相机里露出局部,甚至暂时离开视野。

4.4 非对称 actor-critic

论文的观测表显示,critic 在微调时拥有比 actor 更丰富的信息:

  • actor/student:本体观测 + 四张深度图;
  • critic:本体观测 + 细粒度局部 elevation map + 大范围粗粒度 elevation map + 水平 LiDAR-like scan;
  • expert:本体观测 + 小范围 elevation map。

这属于 asymmetric actor-critic:部署时 actor 只依赖真实可得传感器,训练时 critic 用特权地形信息更准确地估值,从而降低策略梯度方差。

5. 网络结构

Student/fine-tuned actor 的数据流是:

4 × depth image
│ 每张图独立经过 CNN
│ 3 层 convolution + max pooling
│ 再经过 2 层全连接
│ 每张图输出 64 维 feature

拼接 4 路视觉 feature + proprioception

2 层 LSTM

拼接 LSTM 输出 + proprioception + task command

3 层 ELU MLP

12 维关节动作

这里有两个容易忽略的设计:

  1. task command 在 LSTM 后再次进入 MLP,记忆模块主要负责融合视觉历史和机器人状态;
  2. proprioception 既进入 LSTM,又通过后级拼接直接送给 MLP,当前状态不必完全经过 recurrent bottleneck。

为什么需要 LSTM

深度相机存在遮挡、近距离盲区和有限视场。机器人接近障碍时,先前看见的障碍顶部可能从当前图像消失,但控制仍需使用这段历史信息。

论文比较了:

  • elevation map + MLP;
  • elevation map + LSTM;
  • depth images + MLP;
  • depth images + LSTM。

结果表明 elevation map 下两类网络都能较好蒸馏;深度图输入下,LSTM 对得到有效策略非常关键。即便加入 LSTM,深度图的重建误差仍更高,因为某些障碍在动作早期本来就视觉歧义,例如薄墙与箱子在开始攀爬前可能难以区分。

6. RL 微调的奖励函数

论文给出了微调阶段的完整 reward。为方便理解,我把它分成四组。

6.1 完成任务

含义 权重
Track position 最后 1 秒内跟踪目标平面位置 10
Track heading 最后 1 秒内跟踪目标朝向 5
Don’t wait 基座速度小于 0.2m/s0.2\,\text{m/s} 时惩罚 -1
Stand at target 到达目标后偏离默认站姿的惩罚 -0.5

位置与朝向奖励只在 t<1t^{*}<1 时开启。这说明策略并非每一步都被局部轨迹牵引,而是主要对时限结束时的目标状态负责,因而保留了选择不同动作序列的自由。

“Don’t wait” 则防止策略利用这种稀疏目标结构在前期原地不动。

6.2 平滑与能耗

表达式概念 权重
Joint velocity q˙2|\dot{\mathbf q}|^2 103-10^{-3}
Torque τ2|\boldsymbol\tau|^2 105-10^{-5}
Base acceleration 线加速度平方 + 0.02 × 角加速度平方 103-10^{-3}
Feet acceleration 四足加速度范数之和 2×103-2\times10^{-3}
Action rate 相邻目标关节位置变化平方 102-10^{-2}

这些项限制高频抖动、过大动作变化和不必要的动力消耗,但权重必须足够小,否则策略会偏向“安全但不动”。

6.3 硬件与接触安全

触发条件 权重
Joint velocity limit 超出关节速度限制的部分 -1
Torque limit 超出力矩限制的部分 -0.2
Feet force 足端力超过 700 N 的平方惩罚 105-10^{-5}
Collision 膝部或小腿碰撞 -1

6.4 失败终止

当机身 z 轴与重力的夹角超过 135135^\circ,或关节速度超过限制时,给予 2000-2000 的终止惩罚。

这是一项远大于普通 shaping reward 的惩罚,作用是清楚地区分“动作不够漂亮”和“进入危险状态”。

7. 为什么从蒸馏切换到 RL 容易崩

论文指出,直接对蒸馏策略施加 RL loss,性能往往会持续下降。原因可以从三个分布变化理解:

  1. 动作分布变化:确定性模仿输出变成带方差的随机策略;
  2. 状态分布变化:探索噪声把机器人推到蒸馏数据较少覆盖的状态;
  3. 优化目标变化:MSE 的局部几何与 policy gradient 的更新方向完全不同。

作者给出三项关键稳定措施:

  1. 蒸馏时加入动作噪声,先把 foundation policy 训练得足够鲁棒;
  2. RL 开始时使用较小的策略分布标准差,并保守设置超参数;
  3. 先冻结 actor,只训练 critic;critic 足够准确后再更新 actor。

第三点尤其重要。如果刚开始的 value estimate 很差,advantage 的符号和尺度都可能不可靠,一个原本可用的 actor 会被错误梯度迅速破坏。

可以把训练切换写成:

阶段 A:冻结 actor,rollout 当前蒸馏策略,预训练 critic
阶段 B:critic 稳定后,以低探索方差启动 actor update
阶段 C:在全地形分布上联合优化 actor 与 critic

8. 深度图 Sim-to-Real

8.1 为什么不能直接使用仿真真值深度

ANYmal D 的 RealSense D435i 通过双目匹配与红外投影估计深度。真实图像会出现:

  • 物体边缘缺失;
  • 某些表面无法匹配;
  • 近场无效;
  • 左右视差造成局部盲区;
  • 距离越远,精度越差;
  • 反光、阳光等因素导致退化。

理想渲染深度没有这些问题。如果在理想图像上训练,policy 很容易依赖现实中不存在的细节。

8.2 仿真图像退化流程

论文先渲染 48×3248\times32 的低分辨率深度图,然后做以下处理:

  1. Clip:最大深度截到 2 m;小于 0.15 m 的像素也设为 2 m,模拟近场无效;
  2. Edge noise:通过深度梯度找边缘,将边缘附近像素随机清空或与邻居打乱;
  3. Holes:用缓慢变化的 Perlin noise 生成缺失区域,使空洞具有时间连续性;
  4. Blind spot:随机去掉最左侧 1~5 列,模拟近距离双目盲区;
  5. Gaussian blur:模糊全图,去掉过于理想的小细节。

真实图像则执行相同的裁剪、降采样和高斯模糊,使真实与仿真在共同的“低质量域”中更接近。

这里的策略不是让模拟器精确复现 D435i 的全部成像物理,而是主动丢弃无法稳定迁移的信息。

9. 实验结果怎么读

所有表格成功率来自仿真中 1000 次 rollout,地形在最大训练难度的 90% 附近随机化。

9.1 蒸馏保留了技能,但仍有明显损失

地形 对应专家 仅蒸馏 RL 微调后
Walk 94.6 99.3 100.0
Climb 98.8 98.1 99.5
Climb down 99.9 84.3 99.7
Jump 98.4 93.5 98.0
Tables 99.4 78.9 100.0
Rock pile 92.2 82.6 96.5
Low wall 84.8 77.0 99.9
Beams 97.3 85.2 99.5
Stepping stones 98.8 73.0 98.8

蒸馏后相对对应专家平均下降 10.4%。下降最明显的地方有两类:

  • 技能歧义:Tables 与 Climb、Climb down 与 Jump 的类似状态可能对应不同专家动作;
  • 精确感知:窄梁和脚石要求精确落脚,而 student 从 elevation map 换成了有噪声深度图。

一个有趣的反例是 Walk:蒸馏策略达到 99.3%,反而超过 Walk 专家 94.6%。这说明共享参数不只有负迁移;从复杂技能获得的恢复与跨越动作也可能增强简单行走。

9.2 RL 微调真正带来了泛化

新/未见地形 仅蒸馏 RL 微调后
Parkour line(微调见过) 5.8 98.5
Scanned meshes train 11.9 99.1
Scanned meshes test(未见) 14.9 94.9
Arranged rocks(未见) 62.9 93.2
Gap-climb(未见技能组合) 10.2 82.0
Climb down on stones(未见技能组合) 11.3 54.4

微调策略在九类专家地形上平均比对应专家高 3.1%,并在未见过的扫描模型上达到 94.9%。

但“Climb down on stones” 只有 54.4%,这是论文很诚实的一项结果:会下台阶、也会踩石头,不代表一定会把两者组合好。组合泛化不是把技能名称相加,而是需要在新的接触序列里重新协调全身动作。

9.3 持续微调能否加入新能力

作者专门把 “Climb down on stones” 作为新任务再训练:

  • 从随机初始化训练:找不到可用解;
  • 从 distilled policy 开始:能获得非平凡性能;
  • 从已 RL fine-tuned policy 开始:学习更快、最终更好;
  • 新旧所有地形混合训练:新地形最终成功率最高。

Repeated fine-tuning 后该地形从 54.4% 提升到 92.4%,同时旧地形性能基本没有显著变化。

最值得注意的是:新地形只占采样的 3%,混合旧地形反而比只训练新地形更好。可能的解释是:

  • 旧地形维持了运动先验,降低灾难性遗忘;
  • 多样数据起到了正则化作用;
  • 新任务需要复用旧技能,而不是完全重写 policy;
  • 只在一个难地形上更新容易过拟合局部动作与地形几何。

作者也明确说,这只证明几十种地形范围内可行,不足以证明无限扩展不会遇到容量与技能干扰瓶颈。

10. 为什么 distillation + fine-tuning 优于其他组合方式

论文比较了三类方案。

10.1 Hierarchical skill selector

高层策略每步选择一个专家并修改其命令。

优点:

  • 专家本身保持冻结;
  • 技能边界清楚;
  • 理论上易解释。

缺点:

  • 硬切换难以连续融合动作;
  • 技能从五个增加到九个后,高层策略会完全放弃部分技能;
  • Gap-climb 需要同时融合 jump 与 climb,而不是二选一。

10.2 VAE latent skill space

先把专家动作编码到共享 latent space,冻结 decoder,再训练策略输出 latent。

优点:

  • latent action space 比原始关节动作更容易探索;
  • 从随机初始化训练时优于标准 end-to-end RL;
  • 对两个已知技能之间的插值有帮助。

缺点:

  • decoder 的动作流形由旧专家数据决定;
  • 新地形需要的全新动作可能不在这个流形中;
  • 训练步骤和组件更多;
  • 技能、地形规模继续增加后效率下降。

10.3 Distillation + RL fine-tuning

蒸馏提供一个覆盖多个成功模式的参数初始化,RL 又没有冻结 decoder 或专家边界,因此可以修改和创造动作。

它的核心优势可以概括为:

比从零 RL 更容易探索
+ 比层级切换更容易融合技能
+ 比冻结 VAE decoder 更容易超出旧技能动作流形

11. 一个很重要的涌现行为:Active Perception

仅蒸馏策略 RL 微调后策略
蒸馏策略贴近障碍后再攀爬 微调策略主动保持观测距离

原论文图 8:仅蒸馏策略复制 expert 的贴近动作;RL 微调后,策略为了让箱顶留在深度相机视场内,会主动离障碍更远。图片来源:Rudin et al., 2025

攀爬专家使用理想 elevation map,因此它可以贴近箱子后再抬腿。但 student 的相机固定在机身上:离箱子太近时,箱顶会离开视场。

蒸馏阶段要求 student 模仿 expert,所以 student 也倾向于贴近障碍,靠 LSTM 记住之前看见的箱顶。这种动作在无扰动时可行,但可靠性较低。

RL 微调后,策略出现了新的动作:

  • 在离箱子更远的位置停下;
  • 调整机身俯仰;
  • 让箱顶重新进入深度相机视场;
  • 看清后再触碰和攀爬。

这是 active perception:策略不仅“根据图像运动”,还主动改变身体姿态来改善下一时刻的图像。

这个例子也解释了为什么最后必须有 RL:expert 的动作对 expert 的传感器最优,却不一定对 student 的传感器最优。纯模仿无法主动背离老师,而任务 reward 可以。

12. 真机部署

ANYmal D 在搜救训练场的真机连续动作

原论文图 9(局部):微调后的策略在训练时未见的真实搜救场地中部署。图片来源:Rudin et al., 2025

部署使用标准 ANYmal D:

  • 使用六个深度相机中的四个;
  • 不使用机载 LiDAR;
  • 不使用外部传感器;
  • 全部推理在机载 CPU 上完成;
  • policy 控制频率 50 Hz;
  • 深度输入更新频率 15 Hz;
  • 相机内部以 60 Hz 发布 ROS message;
  • 每次直接使用各相机最近一帧,不做显式同步。

训练时随机化每个相机的延迟,因此部署时可以容忍不同相机时间戳不完全一致。

论文报告的真机能力包括:

  • 室内孤立障碍与混合障碍;
  • 搜索救援设施中的碎石和模拟坍塌建筑;
  • 跳跃、攀爬等动态动作;
  • 湿滑或移动地面;
  • 脚卡进裂缝或钢丝;
  • 高草视觉干扰;
  • 反光表面与阳光造成的深度退化。

需要注意:论文主要给出真机定性展示,完整的数值成功率表来自仿真,不能把仿真 94.9% 直接解释成现实场景成功率。

13. 论文的局限性

13.1 多专家蒸馏本质上是病态监督问题

不同专家可能在相似观测下输出不同动作。MSE 会倾向平均这些动作,但动作平均不等于行为平均:

12(ajump+aclimb)\frac{1}{2}(a_{\text{jump}}+a_{\text{climb}})

可能既不能跳,也不能爬。论文靠 RL 后处理缓解冲突,但并未从根本上解决多模态监督目标。

未来可考虑:

  • mixture density policy;
  • 显式 skill token 或可学习路由;
  • advantage-weighted distillation;
  • 按 teacher confidence 加权;
  • diffusion / autoregressive action modeling。

13.2 仍需要大量人工设计

九个专家分别需要 curriculum、reward 和初始化调试;微调阶段还要重新统一不同专家的 reward 与 termination。论文的训练路线降低了全任务联合调参难度,但没有消除调参。

13.3 视觉精度仍不足

在窄梁和脚石上,策略会先踩错再恢复;遇到桌面悬空结构时,有时需要先碰到障碍才开始下蹲。强恢复能力掩盖了感知和落脚规划不够准确的问题。

13.4 “安全通过”可能以硬件磨损为代价

微调策略在攀爬和跳跃时比专家更常使用膝部接触。这能提高成功率,却带来电机冲击和机械磨损。训练 reward 中虽然有膝/小腿碰撞惩罚,但真实行为表明这项约束还不够。

13.5 LSTM 的长期记忆会稀释

机器人看见箱子后,如果马上前进,它会正确攀爬;若原地等待几秒再前进,它可能撞上箱子。因为 LSTM hidden state 每步更新,即使没有新信息,旧障碍信息也会逐渐消失。

作者建议未来考虑 attention/Transformer,使策略能选择性保留关键历史观测。

13.6 端到端策略难诊断

一旦出现失足,很难判断是:

  • 深度噪声导致障碍没看清;
  • CNN 特征提取失败;
  • LSTM 忘记历史;
  • locomotion 本身落脚错误;
  • reward 鼓励了高风险恢复行为。

模块化系统接口会损失信息,但端到端系统也牺牲可解释性和独立调试能力。

14. 我认为这篇论文最有价值的三点

14.1 Distillation 不是终点,而是 RL 的探索先验

很多工作把蒸馏成功定义为“student 尽可能复制 teacher”。本文更实用的观点是:即使 student 比 expert 差,只要它已经进入多个技能的可行解附近,就能作为后续 RL 的 foundation policy。

因此评价蒸馏模型时,除了 imitation accuracy,还应问:

  • 它是否覆盖所有行为模式?
  • 加探索噪声后是否仍能恢复?
  • 从它开始做 RL 是否比从零更快?
  • 它是否为新任务提供有用的 state visitation distribution?

14.2 感知与控制必须共同优化

专家的最优动作依赖其感知接口。更换传感器后,动作也应改变。Active perception 说明 end-to-end RL 的价值不只是少写一个建图模块,而是让运动本身适应感知限制。

14.3 持续学习未必只靠复杂的 anti-forgetting 算法

本文没有使用 EWC、replay buffer 专用损失或参数隔离,而是让新地形只占小部分样本,同时持续混入全部旧地形。至少在当前规模上,这种简单 rehearsal 就能维持旧技能并提升新技能。

15. 如果我要复现,建议怎么拆

这篇工作完整复现的门槛很高,不建议第一步就实现九专家 + 四相机 + 真机。可以按以下层级推进。

Level 1:两专家动作蒸馏

先选择两个差异明确的任务,例如:

  • flat walk;
  • stair climb。

保持 expert 和 student 都使用 height scan,先验证:

  • student rollout + expert relabel;
  • DAgger dataset 聚合;
  • 动作 MSE;
  • 每个 terrain 分开统计成功率;
  • 加噪声与不加噪声的恢复能力。

Level 2:验证感知跨模态

将 student 输入改为 depth image,expert 仍用 height scan:

teacher: privileged height scan
student: depth CNN + proprioception

分别测试 MLP 和 LSTM,制造相机遮挡,确认记忆是否真正有用。

Level 3:蒸馏后 RL 微调

先只在原有两类地形上微调,重点验证稳定切换:

  1. distillation checkpoint 的确定性成功率;
  2. 加不同动作噪声后的成功率;
  3. actor 冻结期间 critic loss 与 explained variance;
  4. 解冻 actor 后各任务成功率是否瞬间下降;
  5. 标准差、learning rate、clip range 对遗忘的影响。

Level 4:加入组合地形

构造必须连续使用两个技能的新障碍,例如:

平地 → 缺口 → 高台 → 下台阶

比较:

  • 从零 RL;
  • 仅蒸馏;
  • 蒸馏 + RL;
  • 已微调策略再次 fine-tune。

Level 5:视觉 Sim-to-Real

最后再加入:

  • 48×3248\times32 深度图;
  • near/far clipping;
  • edge dropout;
  • temporal Perlin holes;
  • blind columns;
  • blur;
  • camera latency randomization;
  • 非同步多相机输入。

16. 复现时建议记录的指标

只看总 reward 不足以解释多技能训练。至少应按地形分别记录:

  • success rate;
  • episode termination reason;
  • target position/heading error;
  • 每米能耗或 torque integral;
  • joint velocity/torque limit violation;
  • knee/shank collision count;
  • peak foot contact force;
  • action rate;
  • teacher-student action MSE;
  • critic explained variance;
  • policy entropy / action standard deviation;
  • 每类地形的采样比例与梯度贡献;
  • 新任务训练前后旧任务性能变化。

尤其要画一个 task × checkpoint 矩阵,否则平均成功率可能掩盖某个技能已经被完全遗忘。

17. 读论文时容易产生的误解

误解 1:一个策略成功,是因为网络足够大

论文真正强调的是训练分布和初始化。没有专家蒸馏时,标准 RL 会卡在部分任务;网络结构本身不能自动解决多模态探索。

误解 2:DAgger 后已经得到通用策略

仅蒸馏策略在 Parkour line 上只有 5.8%,在未见扫描地形上只有 14.9%。它主要提供技能覆盖和初始化,真正的新地形能力来自 RL 微调。

误解 3:RL 微调只是小幅抛光

Parkour line 从 5.8% 到 98.5%,训练扫描地形从 11.9% 到 99.1%。这不是简单去噪,而是显著重构行为。

误解 4:泛化意味着任意技能组合都能完成

初次面对 Climb down on stones 时只有 54.4%。论文证明了较强但有限的组合泛化,并没有证明系统已经拥有抽象符号式技能组合能力。

误解 5:真机不需要状态估计

论文说深度图输入降低了对精确地形建图与状态估计的依赖,不代表控制系统完全没有机器人状态估计。本体速度、重力方向等观测仍需估计。

18. 与我已有四足 RL 知识的连接

这篇论文可以放进下面这条知识链:

MDP / observation / action

单地形 PPO 与 curriculum

privileged learning 与 asymmetric critic

teacher-student / DAgger

视觉 encoder + recurrent memory

多专家动作冲突

RL fine-tuning 与持续扩展

depth Sim-to-Real 与真机部署

它也把之前容易分开理解的几个概念串了起来:

  • expert 的 elevation map 是 privileged information;
  • student 的 LSTM hidden state 是 terrain/history latent;
  • DAgger 解决 student rollout 的分布偏移;
  • asymmetric critic 提升视觉 actor 的 RL 训练效率;
  • action noise 同时连接蒸馏鲁棒性与 RL exploration;
  • old-terrain rehearsal 缓解 repeated fine-tuning 的遗忘;
  • active perception 是 perception-action closed loop 的涌现结果。

19. 最终评价

这篇论文最强的地方,是它没有把“通用运动策略”包装成一次训练即可得到的魔法模型,而是正面承认:

  • 专家训练费力;
  • 多专家动作存在冲突;
  • 蒸馏会损失性能;
  • 视觉跨模态让模仿更难;
  • RL 从零探索会模式坍塌;
  • 监督学习切到 RL 会不稳定;
  • 未见技能组合仍会失败;
  • 真机高成功率动作不一定对硬件友好。

它给出的答案也非常工程化:

用专家解决“先找到成功动作”的问题;
用 DAgger 解决 student 状态分布的问题;
用动作噪声解决策略脆弱和 RL 切换的问题;
用 critic 预训练解决初始 advantage 不可靠的问题;
用 RL 解决多专家冲突和新地形无标签的问题;
用深度退化解决视觉 Sim-to-Real 的问题;
用旧新地形混合采样解决持续扩展中的遗忘问题。

因此,我认为本文最值得复用的不是某一个 reward 数值,而是这套分阶段思维:

先让策略拥有多种可行行为,再让任务目标决定这些行为应该如何融合、修改和扩展。

参考资料

  1. Rudin, N., He, J., Aurand, J., & Hutter, M. Parkour in the Wild: Learning a General and Extensible Agile Locomotion Policy Using Multi-expert Distillation and RL Fine-tuning. arXiv:2505.11164, 2025.
  2. Rudin, N., et al. 期刊版本 DOI 页面. The International Journal of Robotics Research, OnlineFirst, 2026.
  3. Ross, S., Gordon, G. J., & Bagnell, J. A. A Reduction of Imitation Learning and Structured Prediction to No-Regret Online Learning. AISTATS, 2011.
  4. Hoeller, D., Rudin, N., Sako, D., & Hutter, M. ANYmal Parkour: Learning Agile Navigation for Quadrupedal Robots. 2023.
  5. Rudin, N., Hoeller, D., Reist, P., & Hutter, M. Learning to Walk in Minutes Using Massively Parallel Deep Reinforcement Learning. CoRL, 2022.
3d打印 ai辅助设计 algorithm algorithms anymal apriltag ardupilot axis-angle bang-bang blender bode cadquery calibration camera calibration chrome cmake cmakelists cnn colcon conan control cpp cpu d435i dagger data_struct db design-pattern dots economics eigen factory-pattern fcpx fiducial marker figure finance forge fov freecad gazebo gdb git gnu hardware ibus imu interest isaac gym isaac lab isaaclab kdl latent variable latex launch learning-notes legged locomotion legged robotics legged-robot life linux linux-kernel mac math matlab matrix memory mlp money motion-control motor moveit mpc mujoco network ocs2 ode openscad operator optimal algorithm optimal-control perf performance personal-finance pixhawk pixhawk 6c policy distillation ppo privileged learning profiling px4 python qgroundcontrol qos quadrotor realsense reinforcement learning representation learning reward tuning rnn robot robotics ros ros2 rtb security shell sim-to-real simulation socket stairs stl stm32 tcp-ip teacher policy teacher-student temporal convolution thread tools twist ubuntu uml unitree urdf vae valgrind vcxsrv velocity vim web wifi wiring work wsl 中文输入 交叉编译 依赖管理 分支管理 四旋翼 四足机器人 实验诊断 强化学习 机器人 机器人控制 机器人视觉 构建系统 深度学习 深度相机 点云 版本控制 神经网络 自主回充 航模 视觉定位 训练曲线 输入法 配置类 采购记录 飞控
知识共享许可协议