AMP:让物理角色「写得像」动捕演员的对抗式模仿学习
🎯 为什么重要:物理动画的「奖励函数工程」瓶颈
物理模拟角色(人、T-Rex、狗)要做出自然的动作,传统做法是tracking:给一个参考动捕片段,让角色逐步贴住参考姿态。这套范式有两个老大难:
① 奖励要手写——每个动作都要人工设计「姿态误差」度量并调参(对称、稳定、能耗……),不可跨技能通用;
② 数据集一大就崩——扩展到几十段混杂的动捕片段时,必须额外搭一个 motion planner 决定「这一帧该贴哪段参考」,并做片段对齐(phase variable)。一旦对齐失败,整套就崩。
AMP 的回答是:把「跟踪某个姿态」换成「让判别器相信你来自数据集」。这样不需要相位同步,也不需要选片段——所有片段组成一个「风格分布」,策略只要落在这个分布里就行。这也是把 GAIL(Generative Adversarial Imitation Learning)首次大规模、稳定地搬进物理角色动画的里程碑论文。
💡 核心思想:把「风格」变成一个判别器
整个系统把奖励拆成两项,线性组合:
r = wG · rG(任务) + wS · rS(风格),论文中 wG=wS=0.5
- 任务奖励 rG:人来写,但写得很简单——「朝目标走」、「击中目标」、「带球到位置」。完全不管风格。
- 风格奖励 rS:判别器来打分。判别器看一个状态转移
(st, st+1),输出「这看起来像不像数据集里的动作」。越像,奖励越高。
关键在于:判别器看的是「状态转移」(连续两帧的姿态变化),不依赖任何动作标签,也不和某段参考同步——所以它学的是一个分布,不是一条轨迹。策略落在这个分布里,任务奖励把它导向目标,「在哪儿切换步态」「该不该跳」都自然涌现。
🛠️ 让 GAN 在物理角色上真稳的 4 个关键设计
裸的 GAIL 直接搬到物理角色会崩——判别器太强、梯度爆炸、模式坍缩。论文给了 4 个稳定化的工程决策,每个都通过消融证明「拿掉就完蛋」:
| 设计 | 具体做法 | 为什么必要 |
|---|---|---|
| ① 从观测模仿(state-only) | 判别器输入 D(s, s'),不依赖演示动作 a | 动捕数据只有姿态,没有「动作」(关节力矩)。这也是和原版 GAIL 的关键差别 |
| ② 最小二乘判别器(LSGAN) | 用 L2 损失替代 sigmoid 交叉熵 | 避免判别器自信到「梯度消失」,训练更稳,最终奖励被裁剪到 [0,1] 区间 |
| ③ 精心设计的观测特征 Φ(s) | 根(骨盆)线/角速度、每个关节的局部旋转+局部速度、末端效应器(手脚)3D 位置 | 尤其 关节速度 不能少:少了它,角色学翻滚时会偷懒「趴在地上不动」 |
| ④ 梯度惩罚(gradient penalty) | 对真实样本加 wgp·‖∇φD‖² 项,wgp=10 | 消融里这是最关键的一项——不加,训练剧烈震荡、动作出伪影 |
把这些和 PPO + reference state initialization(从数据集随机采样初始状态)+ early termination(除脚之外碰地就终止) 拼起来,整个训练循环见论文 Algorithm 1。每个 batch 还会把策略轨迹塞进 replay buffer B,判别器从 B 和 M 共同采样,避免对最新 batch 过拟合。
传统做法要规划器选「现在该跟哪段参考」,因为跟踪目标必须唯一。AMP 的判别器只问「这一步像不像人」,任何看起来像人的走法都给分。所以策略可以自由地:走→跑(速度切换)、走→拳(远→近),甚至组合出数据集里没有的新动作(如向前摔倒时自动抱团滚一下,再爬起来)——这些都没有显式编进数据集,是 reward landscape 自己逼出来的。
📊 关键结果:可比 tracking,且支持大尺度非结构化数据集
| 维度 | 数字(来自 PDF) |
|---|---|
| 角色 | 34 DoF 人形 / 59 DoF 霸王龙 / 64 DoF 狗 |
| 最大数据集 | 56 段 clips / 434 秒 / 8 个演员(Locomotion) |
| 训练规模 | 100–300M 样本;30–140 小时 / 16 CPU cores |
| 模拟器 | Bullet,1.2 kHz 物理;策略 30 Hz |
| 奖励权重 | wG = wS = 0.5(所有任务统一) |
| 梯度惩罚 | wgp = 10 |
Table 1(任务回报,归一化到 [0,1],3 个种子 × 32 episodes)——同一个 34 DoF 人形换不同数据集,就能换不同风格:
| 任务 | 数据集 | Task Return |
|---|---|---|
| Target Heading(沿方向跑) | Locomotion(混合) | 0.90 ± 0.01 |
| Target Heading | Zombie(丧尸) | 0.94 ± 0.00 |
| Target Heading | Stealthy(潜行) | 0.89 ± 0.02 |
| Target Heading | 仅 Walk | 0.46 ± 0.01(学不会跑) |
| Dribble(带球) | Locomotion | 0.78 ± 0.05 |
| Strike(走到位 + 出拳) | Walk + Punch | 0.73 ± 0.02 |
| Obstacles(跨障) | Run + Leap + Roll | 0.27 ± 0.10(最难) |
Table 3(单片段模仿,平均姿态误差,单位米)——和 DeepMimic 跟踪法(要手写 reward)对比,AMP 不写 reward 也能逼近:
| 动作 | DeepMimic 跟踪 | AMP(本文) |
|---|---|---|
| Cartwheel(侧翻) | 0.039 ± 0.011 | 0.067 ± 0.014 |
| Walk | 0.018 ± 0.005 | 0.030 ± 0.001 |
| Run | 0.028 ± 0.002 | 0.075 ± 0.015 |
| Back-Flip | 0.076 ± 0.021 | 0.150 ± 0.028 |
| Dog - Canter | 0.026 ± 0.002 | 0.034 ± 0.002 |
🌐 在领域中的位置
AMP 是物理角色「对抗模仿」范式的奠基。它把「风格」从一种手工 reward 变成了一个可学习、可迁移、可组合的先验。后续工作(ASE、CALM、PADL)把这个先验模块化、层次化。需要指出:扩散时代的运动生成工作(如 MDM)是运动学扩散模型,不涉及物理仿真与 AMP;BeyondMimic 走的是 DeepMimic 式跟踪 + 引导扩散路线,也并未使用 AMP 的对抗判别器——这两者与 AMP 是并列而非继承关系。真正直接继承 AMP 判别器思想的是 ASE/CALM 等物理角色工作。关联线索:T04 AMP 谱系。
❓ 常见误区
AMP 是模仿学习还是强化学习?
两者都是。判别器负责「模仿」(从数据集学风格),PPO 负责「强化」(朝任务目标优化)。这是 GAIL 的精髓:把模仿学习问题转化成一个 RL 问题,reward 由判别器提供。
它和 DeepMimic 的根本差别?
DeepMimic 跟踪某段具体参考,需要 phase 变量把策略和参考对齐;AMP 学的是分布,不与任何具体片段对齐,因此可以无缝吃下大杂烩数据集,并涌现组合行为。代价:单片段精度略低(见表 3)。
判别器不会像 GAN 一样模式坍缩吗?
会,论文 §8.3 末(Comparisons 章节结尾,紧接 §9 Discussion)明确指出这是 AMP 的主要局限:面对大多样化数据集,策略可能只模仿其中一小撮动作。replay buffer + LSGAN + 梯度惩罚能缓解,但没根除——这也是后来 ASE 引入潜空间(skill embedding)和层次化结构的动机之一(用潜在技能码显式条件策略,避免坍缩到单一动作)。
训练真的要 100M+ 样本?
是的。物理仿真便宜,但 RL+GAN 的样本效率不高,单任务 30–140 CPU-小时是当时的常态。后续工作(如 PADL、PHC)的一大改进方向就是把 prior 抽出来复用,避免每个任务都从头练。