Skill Discovery | RGSD:基于高质量参考轨迹,预训练 skill space

news/2025/10/31 0:53:08/文章来源:https://www.cnblogs.com/moonout/p/19178418

  • 论文标题:Reference Guided Skill Discovery。
  • ICLR 2026 的新文章。
  • arxiv:https://arxiv.org/abs/2510.06203
  • pdf:https://arxiv.org/pdf/2510.06203
  • html:https://arxiv.org/html/2510.06203
  • open review:https://openreview.net/forum?id=IaGf8Eh5Uo

目录
  • 1 解决的 gap 和 motivation
  • 2 具体 method
    • 2.1 DIAYN 简述
    • 2.2 RGSD 阶段一:预训练,构建有语义的 latent space
    • 2.3 RGSD 阶段二:并行 imitation learning 与 skill discovery
    • 2.4 这篇文章的 trick
  • 3 实验
  • 4 为什么 RGSD 不能与 metra 相结合(根据论文原文)
  • 5 相关思考


1 解决的 gap 和 motivation

首先,RGSD(reference guided skill discovery)这篇文章做的是技能发现(skill discovery),即,希望 agent 在没有人工设定奖励的情况下,自己学出一组多样且有意义的技能,以便后续用于各种任务(如走到某处、躲避障碍)。

然而,现有的 skill discovery 方法在高自由度的系统中(如 69 维动作、359 维状态的 SMPL 人形机器人),容易学出杂乱无章的无意义行为,比如抖腿 抖手,而非站立 跑步这种行为。高自由度系统中,探索空间太大,而真正有意义的技能只占一小部分。

因此,一个自然的想法是:我们可否利用一些参考(reference),即预先给定的 expert 轨迹,来引导 agent 学更有意义的行为呢?RGSD 在试图做这件事,它的故事是,希望利用参考轨迹,预先构建一个 focus on 有意义 skill 的 skill latent space,然后在这个 latent space 里做 skill discovery。

原文是这样说的:

为了克服高自由度技能发现中的维度灾难,我们需要预先构建一个语义上有意义的技能潜在空间,并将探索限制在该空间内。

在另一个角度,RGSD 是一个介于 skill discovery 和 imitation learning 之间的方法:

  • 传统无监督方法(如 DIAYN、METRA):通过最大化 skill 与 state 的互信息来鼓励多样性,但在高自由度系统中容易学出杂乱无章的动作,如四肢乱晃。
  • 模仿学习方法(如 ASE、CALM):能较好地复现 reference motion,但缺乏发现新技能的能力,学到的技能范围窄。

一句话总结:RGSD 通过先用 reference 轨迹构建有语义的 skill latent space,再在该 space 中并行进行 imitation learning 与 skill discovery,有效解决了高自由度系统中技能“无意义”的问题,既能高保真模仿,又能自动发现相关新技能,且在下游任务中表现优异。

2 具体 method

2.1 DIAYN 简述

DIAYN 的核心思想是:不同的技能应该导致不同的状态分布。

目标:最大化技能变量 \(Z\) 和状态 \(S\) 之间的互信息 \(I(S; Z)\)
互信息分解:\(I(S; Z) = H(Z) - H(Z|S)\)

  • \(H(Z)\):技能分布本身的熵,鼓励技能多样性(通过固定一个均匀分布的先验 \(p(z)\) 来最大化)。
  • \(-H(Z|S)\):给定一个状态,技能的不确定性应该很小,即,从一个状态应该能很容易地推断出是哪个技能产生了它。

实现方式:

  1. 引入一个判别器(编码器)\(q_\phi(z|s)\),它负责根据状态 \(s\) 来预测技能 \(z\)
  2. 策略 \(\pi_\theta(a|s, z)\) 的奖励函数被设计为:鼓励访问那些能让判别器轻松识别出技能 \(z\) 的状态。

DIAYN 奖励公式:\(r(s, z) = \log q_\phi(z|s) - \log p(z)\)

  • \(\log q_\phi(z|s)\):鼓励策略访问能让技能 \(z\) 被准确识别的状态。
  • \(-\log p(z)\):作为一个先验项,如果某个技能 \(z\) 很少被采样(\(p(z)\) 小),则奖励更高,从而鼓励探索所有技能。

2.2 RGSD 阶段一:预训练,构建有语义的 latent space

目标:将 reference motion \(\mathcal{M}\)(即 trajectory)的 embedding 嵌入到一个单位超球面中,使得同一 motion 的所有状态嵌入方向一致,不同 motion 的嵌入方向分离。

方法:使用对比学习(InfoNCE Loss)训练编码器 \(q_\phi(z|s)\)

  1. 编码器建模:我们将 \(q_\phi(z|s)\) 建模为一个 von Mises–Fisher (vMF) distribution(好像可以理解为球面上的高斯分布):\(q_\phi(z|s) \propto \exp(\kappa \mu_\phi(s)^\top z)\),其中 \(\mu_\phi(s)\) 是网络输出的均值方向(已归一化),\(\kappa\) 是集中度参数。
  2. 对比学习:
    • 从数据集 \(\mathcal{M}\) 中采样一个 motion \(m\)
    • \(m\) 中采样两个状态作为 anchor \(s^a\) 和正样本 \(s^+\),从其他动作中采样状态作为负样本 \(s^-\)
    • 计算它们的嵌入:\(z^a = \mu_\phi(s^a), z^+ = \mu_\phi(s^+), z^- = \mu_\phi(s^-)\)
    • 优化 InfoNCE loss(关于为什么可以写成 infoNCE loss,附录有相关数学):

      \[\mathcal{L}_{\text{InfoNCE}} = -\log \frac{\exp(\text{sim}(z^a, z^+)/T)}{\exp(\text{sim}(z^a, z^+)/T) + \sum_j \exp(\text{sim}(z^a, z_j^-)/T)} \]

      其中 \(\text{sim}(u, v) = u^\top v\)(余弦相似度),\(T = 1/\kappa\) 是温度系数。

结果:预训练后,同一动作的所有状态 \(s \in m\) 都有相同的嵌入方向 \(\mu_\phi(s) = z_m\)

2.3 RGSD 阶段二:并行 imitation learning 与 skill discovery

在阶段一,我们只训练了 encoder \(\mu_\phi\),而没有训练策略。此阶段,策略 \(\pi_\theta(a|s, z)\) 开始与环境交互并学习。

模仿和发现共享同一个 policy network,并且,共享同一个奖励函数形式(即 DIAYN 的奖励),但技能 \(z\) 的采样方式不同。

  1. 技能 \(z\) 的采样:

    • 以概率 \(p\)(模仿):采样一个参考动作 \(m\),计算其平均嵌入 \(z_m = \frac{1}{l} \sum_{s \in m} \mu_\phi(s)\)。让策略执行技能 \(z = z_m\)
    • 以概率 \(1-p\)(发现):从标准正态分布采样并归一化,\(z = k / \|k\|, k \sim \mathcal{N}(0, I)\)
  2. 计算 reward:

    • 我们将预训练的编码器 \(q_\phi\) 冻结,记为 \(q_\phi\)。然后,初始化一个可训练的发现编码器 \(q'_\phi\),其参数从 \(q_\phi\) 复制而来。
    • reward 公式:\(r(s,z) = -\log p(z) + \log q_\phi(z | s) = C + \kappa\mu_\phi(s)^\top z\)
    • 对于模仿任务,奖励是当前状态 \(s\) 与目标技能 \(z_m\) 的相似度(通过冻结的、完美的编码器 \(q_\phi\) 计算)。
    • 对于发现任务,奖励是标准的 DIAYN 奖励,但编码器 \(q'_\phi\) 是可训练的。
  3. 编码器更新:

    • 模仿:通过最大化 \(\log q_\phi(z | s)\) 来学策略。
    • 发现:为了防止 \(q'_\phi\) 在发现过程中破坏已学到的潜在空间,我们添加一个 KL 散度的 loss 项:\(\mathcal{L}_{\text{KL}} = \alpha \cdot \text{KL}(q'_\phi(\cdot|s) \| q_\phi(\cdot|s))\)
  4. 策略更新:

    • 使用 PPO 作为 RL 算法,最大化上述奖励 \(r(s, z)\) 以及策略的熵,来更新策略 \(\pi_\theta\)

2.4 这篇文章的 trick

  • To exploit this local concavity in practice, we apply early termination: whenever the agent deviates from the reference motion beyond a specified threshold measured by cartesian error, the episode is terminated. 为了在实践中利用这种局部凹陷,我们应用了早期终止:每当智能体偏离参考运动超过笛卡尔误差测量的指定阈值时,该情节就会终止。
  • we adopt reference state initialization (RSI), which samples initial states directly from the reference motions. RSI prevents the emergent of disjoint skill sets by ensuring that imitation and discovery operate over overlapping state distributions. 我们采用参考状态初始化(RSI),直接从参考运动中对初始状态进行采样。RSI 通过确保模仿和发现在重叠的状态分布上运行来防止不相交技能集的出现。
  • 为了在发现过程中保护学习到的潜在空间,我们从冻结的 \(q_\phi\) 初始化一个单独的编码器 \(q'_\phi\),并加一个最小化这两个 q 之间的 KL 散度的 loss。
  • 我们并行训练发现和模仿,with a ratio parameter p,以概率 p 进行 imitation learning,1-p 进行 skill discovery,以便共享策略和价值函数能够将高保真行为的知识从模仿转移到发现中。这两个过程共享相同的奖励函数和潜在空间形式,因此这些共享组件可以稳定地优化。
  • 为确保训练稳定,所有方法都采用了提前终止条件:每当机器人摔倒时,该回合即终止。(LGSD 也是这样的,使用这种方法把 metra 卡下去了)
  • 在做实验比较的时候,对于 CALM,由于它也包含运动编码器,因此选择能够代表每个运动的正确潜在变量是直接的。对于没有编码器的方法,我们均匀地采样 500 个潜在向量,选择其中使笛卡尔误差最小的一个,并使用这个向量重新评估以确保公平性。我们发现 500 个样本是足够的,因为进一步增加数量并没有带来明显的改进。(感觉这样做是好的、公平的;值得学习,实验里比较公平的细节或许应该写出来)

3 实验

实验 setting:

  • 环境:Isaac Gym 中的 SMPL 人形机器人(69 维动作,359 维状态)。
  • 数据集:ACCAD 运动数据库中的 20 个参考动作(走路、跑步、侧步 sidestepping、后退、出拳等)。
  • 评估指标:
    • 模仿保真度:Cartesian 误差(位置误差)、FID 分数(运动自然度)。这两个 metrics 的介绍可参考博客。
    • 技能多样性:能否发现与 reference 动作的新变种(如往不同方向走的 sidestepping)。
    • 下游任务性能:如“sidestepping 到达目标”任务的成功率。

实验结果:

  • 模仿效果:RGSD 在多数任务上 Cartesian 误差最低(如跑步误差 7.7cm),表明能高保真复现参考动作。
  • 技能发现:能生成语义相关的新技能(如不同方向的侧步、多角度出拳),且 FID 分数稳定,说明新技能既多样又自然。
  • 下游任务:在“侧步到达目标”任务中,RGSD 成功率与 CALM 相当,但运动保真度更高(FID 34.3 vs. CALM 的 46.7)。

4 为什么 RGSD 不能与 metra 相结合(根据论文原文)

这部分对应论文 5.4 节和附录 F。

核心原因:METRA 的奖励机制与“重复性动作”存在根本性冲突,而这类动作是 RGSD 技能库的重要组成部分。

具体来说,问题体现在以下三个层面:

  1. 奖励计算失效:

    • METRA 的奖励是 \((\phi(s_{T}) - \phi(s_{0}))^{\top} z\),它鼓励 agent 在 latent space 中沿着技能方向 \(z\) 产生位移。
    • 然而,对于重复性动作(如行走),一个周期结束后,智能体在局部坐标系下的姿态 \(s_T\) 与起始姿态 \(s_0\) 几乎完全相同。
    • 因此,\(\phi(s_{T}) \approx \phi(s_{0})\),导致奖励 \(\approx 0\)。这意味着,执行一个完美的周期行为反而无法获得任何奖励,这与奖励最大化的目标相悖。
  2. 状态增强的副作用:

    • 方案一:添加全局坐标。 在 agent 越跑越远的情况下,这可以区分 \(s_0\)\(s_T\),但带来了新问题:
      • 全局坐标是无界的,RGSD 声称 METRA 会轻易利用这一点:智能体只需学会向不同方向移动,就能最大化奖励,而无需学习有意义的身体动作(如摆臂、迈腿)。
      • 这导致 latent space 被全局坐标主导,技能发现失败。
    • 方案二:添加时间变量,即当前的 timestep 值。这同样能区分状态,但同样带来新问题:
      • 时间变量会迫使 latent space 形成一个以时间为刻度的“等高线”结构。
      • 在探索时,RGSD 声称,agent 从一个时间步跳到下一个时间步,可能在潜在空间中产生巨大的、不连续的跳跃(例如,跨过“等高线”组成的山,从一侧跳到另一侧),这违反了 METRA 要求相邻状态潜在距离小于 1 的约束。
      • 最终,导致训练变得极不稳定。
  3. 与 RGSD 设计哲学的冲突:

    • RGSD 的核心是预先构建一个稳定、语义清晰的(超球面)潜在空间
    • 而 METRA 为了最大化技能差异,其学习过程会动态地、剧烈地改变潜在空间的结构(如附录 F 图 7 所示)。
    • 这两种 latent space 处理方式是相互矛盾的。因此,将 METRA 的探索机制强加于 RGSD 预结构化好的空间上,会破坏后者的语义基础。

5 相关思考

  • (abstract 里的 manifold 这个词,第一次见,比较新奇)
  • 思考,encoder 设置成 \(z = \mu(s)\) 会不会没那么好用,导致跑步时的各种姿势都被映射到同一个 z 上;会不会 \(z=\mu(s,s')\) 更好一些;
  • fig 4 用俯视图的轨迹来说明 skill 的多样性,这确实符合 skill discovery 工作的可视化的惯例。然而,它表现出多样行为(如不同角度的转弯)的 skill,所对应的 skill 都是同一个 \(z_m\)。因此,这好像跟狭义上的 skill discovery 的多样性不太 match,即,它并不是不同 skill z 能生成不同的行为,不过在某种程度上,它确实学到了不同的行为。
  • 如果在同一个 z 下,动作也是 diverse 的,这意味着什么?意味着(比如说)不同角度的转弯,所对应的动作,都被映射到了同一个 embedding 下。思考,embedding 有这样的性质,要不因为 RGSD 的预训练,训出来就会这样(毕竟有一个 KL 散度的 loss 约束 embedding 不能变太多),要不因为 RGSD 的 policy 不小心做出了不同角度的转弯,\(phi'\) 为了让 agent 的 reward 最大化,就也允许不同角度的转弯了。
  • 如果 RGSD 是真的,那么 RGSD 用 metra 不 work,或许是因为 metra 更注重结果(metra 这类方法,每一步的 reward 都是 \(\phi(s_T)-\phi(s_0)\) 裂项出来的),所以没法学到原地打转 过程性的技能。
  • 合作者说这篇文章的理论都是对的,只不过假设一个 motion m 里的所有 state 映射到同一个 embedding \(phi\),这个假设有点奇怪。
  • (公式 6 7 求导得到的那个常数 C 项,合作者有些怀疑正确性)


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/951225.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

revit api 事务和事务组

revit api 事务和事务组使用事务创建元素public void CreatingSketch(UIApplication uiApplication) {Document document = uiApplication.ActiveUIDocument.Document;ApplicationServices.Application application = …

Ai元人文:价值权衡元能力的培育路径与开源生态构建

Ai元人文:价值权衡元能力的培育路径与开源生态构建 笔者:岐金兰 2025年10月31日 摘要:本文探讨了智能价值权衡元能力的本质与提升路径。基于"三值纠缠模型"的理论框架,我们提出了一套从"编程"…

Ubuntu server配置Docker Daemon.json 顽固不生效

本文详细记录了在 Ubuntu Server(ubuntu-24.04.3-live-server-amd64) 环境中,Docker 守护进程(dockerd)拒绝加载 /etc/docker/daemon.json 配置的疑难杂症。即使配置内容和权限都正确,问题依然存在。本文提供了…

sunpinyin online的简单例子

sunpinyin online的简单例子#include <stdio.h> #include <sunpinyin.h>class WinHandler : public CIMIWinHandler {void enableDeferedUpdate(CIMIView* view, int waitTime) {}void disableDeferedUpda…

程序员修炼之道:从小工到专家

初入行业,多数人是 “代码搬运工”,能完成需求却难思深层逻辑。真正的突破,始于跳出 “实现工具” 思维。 要多问 “为何这么设计”,而非只做 “如何实现”;要主动复盘项目坑点,把经验转化为方法论;更要持续深耕…

microsoft edge webview离线安装包

microsoft edge webview2离线安装包&在线安装包 Microsoft Edge WebView2 控件允许在本机应用中嵌入 web 技术(HTML、CSS 以及 JavaScript)。

概率递推1

Problem 19.2025年7月16日-27日,第32届世界大学生运动会在德国举行。在比赛期间,运动员甲(来自中国)和运动员乙(来自澳大利亚)因赛事成为朋友。运动员甲持有一套熊猫主题的运动项目徽章,包含乒乓球、羽毛球、篮…

Revit Api打印当前项目的所有的可打印视图

Revit Api打印当前项目的所有的可打印视图打印当前文档中的可打印视图 public Autodesk.Revit.UI.Result Execute(ExternalCommandData commandData, ref string message, Autodesk.Revit.DB.ElementSet elements) {Do…

实验课收获2025.10.30

这几周的实验课密集地学习了几个经典算法:归并排序、切绳子问题、最长公共子序列和背包问题。有的理解起来很快,有的却让我卡壳了好久。 对我来说接受度比较高的:背包问题 背包问题的动态规划思路我接受得很快。老师…

DW1000芯片帧组成解析

对DW1000链路层协议帧格式进行简单介绍。概述 在物联网定位与数据传输场景中,DW1000 作为遵循 IEEE802.15.4-2011 UWB 标准的芯片,其核心数据传输载体是 “帧”。它像一个精密的 “快递包裹”,通过三层结构(同步头…

revit api测量距离

revit api测量距离根据起始点,和方向向量,创建模型线,获取距离这里的方向是向上的,可以根据自己的需要修改using Autodesk.Revit.Attributes; using Autodesk.Revit.DB; using Autodesk.Revit.UI; using System;[T…

《程序员修炼之道》第一章有感

《程序员修炼之道》第一章有感翻开《程序员修炼之道》第一章,瞬间跳出了“完成任务就够了”的误区。程序员不是单纯写功能的,更要主动打磨代码、想着优化提升。这场职业修炼,从认真对待每一行代码开始。

10月30日日记

1.今天上体育课学习三步上篮,和学习数据结构 2.明天休息 3.数据库索引为什么多用B+树而不是哈希表

代码大全2阅读笔记(3)

一、开篇:别让 “交付” 成为代码质量的终点 读完《代码大全 2》的维护与优化章节,最颠覆认知的一句话是:“代码的生命周期中,编码只占 20%,剩下 80% 的时间都在维护与迭代”。很多时候我们把 “代码能运行、功能…

rustdesk 下载Windows版

蓝奏云下载 rustdesk-1.4.3-x86_64.exe rustdesk-1.4.2-x86_64.exe rustdesk-1.4.1-x86_64.exe 旧版下载 rustdesk-1.4.0-x86_64.exe最新版随github更新

apue笔记-进程环境、进程控制、进程关系

原文博客:https://nosae.top进程环境 C程序总是从main函数开始执行,内核在调用main之前会调用一个特殊的启动例程,由这个例程去调用main。这个例程如果用C代码来写(一般是用汇编来写),那就是exit(main(argc, arg…

数字识别(非汉字版)

1 训练 import torch from torch.utils.data import DataLoader from torchvision import transforms from torchvision.datasets import MNIST import matplotlib.pyplot as plt import matplotlib import numpy as …

Rust 解析验证码:结合 Tesseract OCR 进行文本识别

环境准备 1.1 安装 RustRust 可通过官方的 rustup 进行安装: curl --proto =https --tlsv1.2 -sSf https://sh.rustup.rs | sh 更多内容访问ttocr.com或联系1436423940 安装完成后,检查 Rust 是否可用: rustc --ver…

UML图以及设计模式部分总结

今天将软考内容中的UML统一建模语言和设计模式的部分内容进行了复习,具体内容总结如下: 1.类图,用例图,序列图,通信图,状态图:状态图强调一个对象行为的事件顺序,包括初态中间态以及终态, 初态只有一个,而终…

Consul访问宿主机api项目失败 - binzi

最近在学习consul,在docker上启动consul实例后。本地有一个.net core api项目,项目主要是实现启动就向consul注册及有一个心跳检查,启动调试后可以看到已经成功向consul注册了服务,就是心跳检查一直不成功,最后不…