枢纽
数据集Reallusion
物理感知
实时
输入模态proprioception

ASE:给虚拟角色装一个「可复用的运动技能库」

Xue Bin Peng, Yunrong Guo, Lina Halper, Sergey Levine, Sanja Fidler(UC Berkeley + NVIDIA + U of Toronto)。ACM SIGGRAPH 2022 / ACM TOG 41(4)。 项目页 · 开源(代码 + 数据)· action_genRL线索 T03

🧠 一句话心智模型:人类学一次走路、跑步、挥剑,这些技能就能复用一辈子——做新任务时不用重学。但物理仿真的角色通常是每个新任务从零训一遍 RL,连"走路"这种通用技能都要重学。ASE(Adversarial Skill Embeddings)做的事:先从一大堆杂乱的动作捕捉数据里,预训练出一个"技能向量空间"——给一个 $z$,角色就表演某种技能;再训一个高层策略,用 $z$ 当"动作语言"指挥底层做新任务。从此新任务不用再学走路

🎯 为什么重要:物理动画 + RL 长期被"从零训练"困住

物理仿真角色动画(physically simulated characters)有个老大难:

tabula rasa(白板)困境:传统做法每个任务都从零训一个 RL 策略。要训"走到 A 点",整个 RL 过程要重学维持平衡、迈步、转向……这些所有任务都需要的"底层技能"。然后训"走到 B 点"又重学一遍。
结果:① 样本效率极低;② 复杂任务学不会(连走都没学会,怎么学"跑到目标然后挥剑");③ 不自然(reward 工程师手忙脚乱地加"对称性""能量效率"等启发式)。

对比人类:我们一辈子积累了庞大的运动技能库——走路、跑步、跳跃、蹲下、伸手……学新任务(比如打网球)时直接调用这些底层技能,专注学"策略"而不是"怎么站"。ASE 就是给仿真角色装一个类似的"技能库"。

核心叩问:能不能从一堆杂乱无章、没有标注、没分割的动作捕捉数据里,自动学出一个结构化的技能嵌入空间?这个空间既能生成多样的自然动作,又能作为"动作接口"被新任务复用?

💡 核心思想:GAN 学动作风格 + 互信息学技能结构 = 可复用的"技能语言"

ASE 的"魔法"是把两个目标拼在一起训练同一个底层策略 $\pi(a|s,z)$:一个让它「动得像数据」,另一个让它「不同 $z$ 动得不一样」。两者结合,就得到一个结构化的技能空间。

阶段 1:预训练(学技能库) 动作捕捉数据 187 段 clip,~30 分钟 走路/跑步/挥剑/盾击... 判别器 D 这动作像不像 人类数据? 低层策略 π π(a | s, z) z 决定输出哪个技能 编码器 q q(z | s, s') 看动作反推 z z 技能向量 模仿目标 + 技能发现目标(互信息) 阶段 2:任务训练(用技能库) 高层策略 ω(z | s, g) 看任务目标 g, 输出"用哪个技能" z 任务目标 g 走到/挥剑到... 低层策略 π(冻结) 不动!直接复用 训练好的 π 复用
图 1:ASE 两阶段框架。阶段 1 用「GAN 模仿 + 互信息结构化」训出可复用的底层策略 π;阶段 2 冻结 π,只训高层 ω 来指挥 z 做新任务。

数学上,预训练目标是两个项的和:

$\max_\pi \;-D_{JS}\big(d^\pi(s,s') \,\|\, d^M(s,s')\big) + \beta\, I(s,s'; z)$

第一项是模仿目标(用判别器近似 Jensen-Shannon 散度):让策略产生的状态转移分布"看起来像"数据集。第二项是技能发现目标(互信息):让不同的 $z$ 产生可区分的行为——否则模型会塌缩到只生成一种动作。

🛠️ 让这套框架在 37-DoF 人形上真跑通的 4 个关键设计

论文用了一个带剑盾的 37 自由度人形角色(仿真模型 120D 状态、31D 动作),在 Isaac Gym GPU 仿真器上 4096 并行环境、120 Hz 仿真、训练 ~10 年模拟时间。让这一切真正起效的关键设计:

设计心智模型为什么必要
① 球面 latent space + 未归一化动作空间高层策略 ω 输出未归一化 $\bar{z}$,用归一化 $z = \bar{z}/\|\bar{z}\|$ 投影到球面再传给 π训练初期 ω 分布靠近原点 → 均匀覆盖球面 = 探索所有技能;训练后期 ω 偏离原点 → 聚焦少数技能 = 利用。一个 trick 内置了 explore-exploit 切换
② 判别器复用作 motion prior阶段 2 训练 ω 时,把阶段 1 的 D 冻结,作为风格奖励 $-\log(1-D(s,s'))$ 加进任务奖励避免高层指挥出"非人类"的技能组合(如频繁切换导致抖动)。冻结 = 不需要新数据
③ 从随机初始状态训练预训练时让角色从各种随机姿态(包括摔倒状态)开始附带学到了鲁棒的恢复策略——跌倒能爬起来。这个能力自动迁移到所有下游任务
④ 大规模并行仿真Isaac Gym,4096 个环境并行,单 V100 训 10 天 = 超 100 亿样本(10 billion,约 10 年模拟时间)对抗模仿学习样本饥渴。没有 GPU 大规模并行根本不可行
🔮 直觉:为什么"未归一化 latent"能自动平衡探索-利用?
想象 latent space 是一个气球的表面(球面)——每个点是一个技能。高层 ω 输出的 $\bar{z}$ 是球心附近的随机点,归一化后相当于"从球心向外随机投掷飞镖",落点会均匀覆盖球面——这就是探索(所有技能都试试)。训练久了,ω 的均值偏离原点,飞镖落点就集中在某个区域——这就是利用(找到好技能就多用)。一个 trick 把 RL 最难调的 explore-exploit 平衡几何化进了动作空间。

📊 结果:一个模型学多种技能,复用到多种任务,还附带鲁棒恢复

用 187 段动作捕捉 clip(~30 分钟)预训练,单模型学到的技能涵盖走路、跑步、蹲走、挥剑、盾击等。然后复用到 5 个下游任务(每种任务只训高层 ω):

任务从零训ASE(无 SD)ASE(无 Div.)ASE(完整)
Reach(剑尖到目标)0.560.330.720.75
Speed(指定速度移动)0.950.870.930.93
Steering(指定方向)0.940.740.900.90
Location(走到目标点)0.670.250.470.45
Strike(跑去挥剑击倒)0.870.500.800.82
维度数字
训练规模4096 并行环境,120Hz 仿真,10 年模拟时间,单 V100 × 10 天
技能多样性单模型自动学到走/跑/蹲走/挥剑/盾击/转身等,无需手动分割数据
恢复能力500 次随机扰动(500-1000N,0.5s)全部成功恢复,平均 0.31s,最大 4.1s
技能组合Strike 任务自动组合「跑→挥剑→站定」,无需 reward shaping
关键消融去掉 skill discovery → 性能大跌;去掉 diversity → 技能覆盖锐减
关键洞察:注意"从零训"在某些任务上分数反而更高(Speed 0.95 vs ASE 0.93)——但那是用非自然动作"作弊"得到的(比如用剧烈扭动前进)。ASE 的赢点不是"分数最高",而是"自然 + 通用 + 可复用":一个模型多个任务用,动作像人,还会自己组合技能。这正是 "generalist skill foundation" 的核心价值

🌐 在领域中的位置

DeepMimic(逐 clip 单独训) AMP(adversarial motion prior,但仍从零训每任务) ASE(预训练可复用技能库 + 高层调度)⭐ PULSE / PACER(更大规模 + 复杂场景)

ASE 是物理动画角色迈向 "skill foundation model" 的关键一跃。它把"技能学习"和"任务学习"彻底解耦——预训练一次,复用终身。这和机器人界的 RT-1 / OpenVLA 思路异曲同工:都是先训通用底层,再适配上层。关联线索:T04 动作生成谱系

❓ 常见误区

ASE 是模仿学习还是强化学习?

两者结合。底层策略 $\pi$ 用对抗模仿学习(类似 GAN,让动作像数据集);高层策略 $\omega$ 用标准 RL(PPO,最大化任务奖励)。底层学"动作像人",高层学"用哪些动作完成任务"。这种分层让两个目标互不干扰。

它和 AMP(Adversarial Motion Priors)有什么区别?

AMP(同作者前作)也用判别器约束动作风格,但每个任务仍从零训。ASE 多了"预训练 + 复用"这一层:先把通用技能库训出来冻结,之后所有任务只训轻量的高层 ω。AMP 是"单任务风格化",ASE 是"通用技能库"

为什么不直接用 motion tracking(动作跟踪)?

Motion tracking 要求策略显式跟踪某段 clip,需要动作规划器选哪段 clip、何时切换。ASE 让策略隐式学习整个分布,并通过 latent $z$ 自然组合——不需要显式规划器,能生成数据里没有的新组合(如跑过去→挥剑→站定,这个完整序列在数据里没有)。 这跟真机器人 VLA(RT-1 等)什么关系?

思路高度类似——都是"先训通用底层 + 后训高层任务"的分层基础模型范式。区别:ASE 处理低维状态 + 高维动作 + 物理仿真,VLA 处理高维图像 + 离散动作 + 真实世界。两者各自是动画界和机器人界的"skill foundation"代表。