引言

深度强化学习 (Deep RL) 彻底改变了机器人技术,使有腿机器人能够行走、奔跑并从跌倒中恢复。然而,当我们看到那些最令人印象深刻的演示——机器人做后空翻、跳过宽阔的间隙或垂直攀爬时——往往有一个隐性的代价。这个代价就是人力工程投入。

为了实现敏捷的运动,研究人员通常必须手动设计复杂的奖励函数、收集昂贵的专家演示数据,或精心构建课程学习阶段来一步步指导机器人。如果你只是简单要求机器人“向前移动”跨过鸿沟,它很可能会反复掉进去,并且学不会它需要跳跃。它会陷入局部最优。

那么,我们如何让机器人在没有“手把手”教导的情况下学会创造性、敏捷的解决方案呢?

在最近一篇题为 “Unsupervised Skill Discovery as Exploration for Learning Agile Locomotion” 的论文中,佐治亚理工学院的研究人员提出了名为 SDAX (技能发现即探索) 的框架。这种方法利用无监督学习的力量自主探索多样化行为。通过将技能发现视为一种复杂的探索机制,SDAX 使四足机器人能够以最少的奖励工程学会跑酷式的动作——如墙壁跳跃和跨越间隙。

图 1: 我们将策略部署在真实机器人上。机器人成功跳过了间隙。

在这篇文章中,我们将解构 SDAX 的工作原理,其双层优化背后的数学原理,以及它如何允许机器人自学克服物理障碍。

核心问题: 探索 (Exploration) 与利用 (Exploitation)

在强化学习中,智能体面临着经典的权衡:

  1. 利用: 做你知道能获得奖励的事 (例如,拖着脚稍微向前移动) 。
  2. 探索: 尝试新事物以期发现更大的奖励 (例如,尝试跳跃) 。

对于复杂的物理任务,简单的随机探索 (给电机增加噪声) 通常是不够的。随机抽动腿部不会产生协调的跳跃来跨越 48 厘米的间隙。机器人需要高层探索——它需要探索不同的策略 (如快跑、高跳或低伏) ,而不仅仅是探索不同的电机抽动。

引入无监督技能发现

无监督技能发现是 RL 的一个子领域,智能体在没有任何外部任务奖励的情况下学习一系列行为 (技能) 。智能体通常会被赋予一个潜在向量 \(z\) (可以将其视为“风格”或“命令”代码) 。目标是学习一个针对每个不同的 \(z\) 表现出不同行为的策略。

传统上,这样做是为了预训练机器人,使其拥有一个动作库 (行走、滚动、跳跃) ,以便稍后使用。SDAX 的作者提出了一个不同的问题: 我们能否在训练过程中使用这种技能发现过程来解决特定的困难任务?

SDAX 框架

SDAX 背后的直觉是结合两个目标:

  1. 任务目标: 解决问题 (例如,最大化前进速度) 。
  2. 多样性目标: 根据技能向量 \(z\) 表现出不同的行为。

通过推动多样性,机器人被迫尝试不同的策略。一些 \(z\) 向量可能会让机器人跳得很高,而另一些则让它低身奔跑。如果“高跳”有助于跨越间隙,任务奖励就会激增,智能体就会学会该策略。

然而,简单地将这两个奖励相加是危险的。如果多样性奖励太强,机器人就会只做随机体操而忽略目标。如果太弱,机器人就会停止探索。

SDAX 通过一种双层优化 (bi-level optimization) 方案解决了这个问题,该方案可以自动调整探索 (多样性) 和利用 (任务) 之间的平衡。

图 2: \\(\\pi _ { \\theta }\\) 和 \\(\\lambda\\) 的双层优化示意图。任务奖励提供训练 \\(\\lambda\\) 的梯度信号,而两种奖励源的总和提供优化 \\(\\pi _ { \\theta }\\) 的梯度信号

如图 2 所示,该框架包括:

  • 策略 (\(\pi_\theta\)): 以状态 \(s\) 和技能 \(z\) 为条件。它试图最大化组合奖励。
  • 平衡参数 (\(\lambda\)): 一个可学习的权重,决定了机器人应该多大程度上关注多样性。

1. 策略目标

策略 \(\pi_\theta\) 被训练以最大化总回报,即任务奖励和加权多样性奖励的总和。

描述策略优化目标的方程。

这里,\(r^{task}\) 是简单的目标 (例如,“向前移动”) ,而 \(r^{div}\) 是来自技能发现模块的内在奖励。\(\lambda\) 用于缩放多样性奖励。

2. 多样性奖励 (\(r^{div}\))

为了计算多样性,SDAX 对具体算法是不可知的,但作者主要使用 METRA (并与 DIAYN 进行了比较) 。METRA 的目标是最大化 Wasserstein 依赖度量。简单来说,它奖励智能体移动到那些基于技能 \(z\) 可区分、且在状态空间中相距甚远的状态。

多样性奖励的目标可以表示为:

METRA 多样性目标的方程。

这鼓励机器人找到能产生独特、可区分的状态轨迹的行为。

3. 双层优化 (“秘方”)

SDAX 最具创新性的部分在于它处理 \(\lambda\) 的方式。作者没有手动调整 \(\lambda\) (这既乏味又脆弱) ,而是将其视为一个可学习的参数。

逻辑: 我们要调整探索量 (\(\lambda\)) ,使其最大化任务奖励 。 如果更多的探索能带来更好的任务表现,就增加 \(\lambda\)。如果探索分散了机器人对目标的注意力,就减少 \(\lambda\)。

从数学上讲,\(\lambda\) 的优化仅为了最大化任务奖励:

显示 lambda 仅针对任务奖励进行优化的方程。

这创建了一个依赖链。改变 \(\lambda\) 会改变总奖励,进而改变策略 \(\pi\),这反过来又会改变预期的任务奖励。为了更新 \(\lambda\),我们需要计算任务奖励关于 \(\lambda\) 的梯度。

利用链式法则,我们可以分解这个梯度:

分解 J_task 关于 lambda 的梯度的方程。

这基本上是在问: “当我们改变 \(\lambda\) 时,策略参数 \(\theta\) 会如何变化,而 \(\theta\) 的这种变化又如何影响任务性能?”

通过涉及策略梯度定理的推导 (详见论文附录) ,作者得出了一个实用的更新规则:

lambda 的近似梯度方程。

解读更新规则: 看上面的方程。它涉及两个梯度的点积:

  1. 任务优势 (\(A^{task}\)) 加权的策略梯度。
  2. 多样性优势 (\(A^{div}\)) 加权的策略梯度。

直观来看,这意味着:

  • 如果改善任务的梯度方向与改善多样性的梯度方向相似 (点积为正) ,说明多样性有帮助! 增加 \(\lambda\)。
  • 如果任务希望策略往一个方向走,而多样性希望它往相反方向走 (点积为负) ,说明多样性阻碍了性能。 减少 \(\lambda\)。

这允许系统动态调节探索。在训练初期,或者当机器人受困时,多样性可能与寻找解决方案一致。一旦任务被解决,多样性可能会变成干扰,\(\lambda\) 就会自然衰减。

实验结果

作者在三个标准的跑酷任务——跳跃 (Leap) 、攀爬 (Climb) 和爬行 (Crawl) ——以及一个“超级敏捷”任务墙壁跳跃 (Wall-Jump) 上测试了 SDAX。

仿真性能

用于比较的基线包括:

  • Task Only: 仅使用任务奖励的标准 PPO。
  • Div Only: 没有任何任务目标的技能学习。
  • RND: 使用随机网络蒸馏 (一种流行的探索奖励) 代替技能发现。
  • SDAX (Ours): 使用 METRA 或 DIAYN 作为多样性组件。

训练曲线显示了 SDAX (特别是配合 METRA 时) 的明显优势。

图 3: 训练曲线,表示经过一定次数更新后通过的障碍物数量。我们使用 METRA 的方法能解决所有任务,并表现出更好的样本效率。

如图 3 所示:

  • 跳跃 (a): “Task Only” (蓝色) 基线很快就会停滞。它很可能掉进间隙就放弃了。SDAX (绿色) 不断探索不同的跳跃速度,直到越过间隙,取得了很高的成功率。
  • 爬行 (c): 这很棘手,因为机器人必须降低高度。标准奖励通常鼓励直立以保持平衡。SDAX 自主发现了“蹲伏”技能。

探索的可视化

机器人真的学会了多样化的技能吗?是的。在训练期间,不同的 \(z\) 向量会产生不同的行为。

图 4: 训练期间机器人探索的多样化技能的可视化。

在图 4 中,我们可以看到机器人对同一障碍物尝试不同的策略。

  • 跳跃: 一些技能导致短跳 (失败) ,而另一些则触发强力弹射 (成功) 。
  • 攀爬: 一些技能导致机器人滑落 (失败) ,而另一些则找到了抓地力向上攀登 (成功) 。

至关重要的是,因为 \(\lambda\) 被调整为最大化任务奖励,系统最终会倾向于成功的技能。

自适应 \(\lambda\) 与固定 \(\lambda\) 的对比

论文的一个主要主张是自动调整 \(\lambda\) 优于寻找一个“神奇数字”。

图 5: SDAX 优于所有固定 lambda 值的基线奖励。

图 5(a) 显示 SDAX (绿线) 优于固定 \(\lambda\) 值 (紫色、蓝色、青色) 。 图 5(b) 揭示了自动调整 \(\lambda\) 的行为。它开始时很高 (鼓励早期探索) ,随着机器人开始掌握任务而急剧下降。这证实了假设: 先探索,后利用。

“正向坍缩”现象

人们可能会担心: 如果是训练条件策略 \(\pi(a|s,z)\),测试时我们需要寻找完美的 ‘z’ 向量吗?

令人惊讶的是,作者发现随着训练的进行, 大多数技能向量都会收敛到该解决方案。 他们称之为“正向坍缩” (positive collapse) 。因为任务奖励在所有技能之间共享,并且任务奖励最终占据主导地位,策略学会了无论 \(z\) 是什么,“解决任务”都是获得奖励的最佳方式。

论文中的表 1 (此处未展示,但在结果中引用) 显示,对于跳跃任务,随机 \(z\) 向量的成功率随着时间推移从 43% 上升到 97%。这使得部署变得简单: 只需采样一个随机 \(z\)。

终极关卡: 墙壁跳跃 (Wall-Jump)

为了挑战极限,研究人员设计了一个墙壁跳跃任务。这要求机器人奔跑、跳向墙壁、蹬墙 (改变方向) 并落地。

标准任务奖励 (跟踪引导线) 失败了,因为机器人只会撞向墙壁,无法弄清楚蹬墙所需的复杂方向变化。

图 25: 我们的方法使机器人能够解决墙壁跳跃任务。

通过将机器人的方向 (滚转/俯仰/偏航) 包含在技能发现观察空间中,SDAX 探索了不同的接近角度。

  • 图片 (b): 仅任务奖励的机器人坠毁。
  • 图片 (c) & (d): SDAX 机器人学会倾斜、踢墙和后空翻。
  • 图表 (e): 绿线显示 SDAX 获得了几乎两倍于基线的奖励。

由此产生的动作非常动态,并且是在没有显式动作捕捉演示的情况下学会的。

图 6: 墙壁跳跃序列可视化。

真实世界部署

仿真是很有用,但硬件才是真理。作者将 Isaac Gym 中训练的策略迁移到了 Unitree A1 机器人上。他们在训练期间使用了域随机化 (改变摩擦力、质量和电机强度) 以确保鲁棒性。

结果迁移得令人印象深刻。

图 7: 攀爬 (上) 和爬行 (下) 策略的技能均在真实机器人上进行了测试。

机器人能够攀爬 25 厘米高的平台,爬过 27 厘米高的障碍物。此外,爬行策略证明了对不同地形摩擦力的鲁棒性,无需重新训练即可从木板过渡到橡胶垫。

图 8: 爬行策略通过在不同地形 (上图为木板,下图为橡胶垫) 上成功穿越障碍物,展示了鲁棒性。

结论与启示

SDAX 代表了我们在思考“解决”机器人任务方式上的转变。我们不再告诉机器人确切地如何移动 (通过奖励塑形) 或向它展示什么 (通过演示) ,我们只是告诉它: “解决这个任务,并尝试用尽可能多的不同方式去完成。”

通过双层优化自动平衡这两个指令,SDAX 允许机器人充当自己的科学家——假设不同的运动策略 (技能) ,针对环境进行测试,并采用有效的策略。

关键要点:

  1. 基于技能的探索: 使用技能发现提供了具有语义意义的探索 (跳跃与奔跑) ,而不仅仅是随机噪声。
  2. 自动调优: \(\lambda\) 的双层优化消除了繁琐的超参数调整。
  3. 仿真到现实: 发现的技能在物理上是可行的,并且对于真实硬件来说足够稳健。

这项工作为机器人自主学习适应日益复杂的环境铺平了道路,减少了人类工程师的负担,并允许更多通用的敏捷机器出现。