⏱ ~29 min
里程碑
⭐ 为何重要

motion prior 方向的分水岭之作:用一个判别器把动捕数据凝练成 style reward,让物理仿真角色无需手工设计复杂奖励就能模仿人/动物的动作风格。从此 AMP 判别器成为向 RL 注入动捕先验的事实标准,直接衍生出 ASE、CALM、PHC、BeyondMimic 等整条 skill library 与 humanoid 动作模仿脉络。它把 imitation learning 的思想从『跟踪参考动作』推进到『学一个可微的风格分布』。

建立在
催生
数据集CMU MoCap
物理感知
实时
输入模态proprioception

P-AMP-2021 · Adversarial Motion Priors

一句话定位motion prior 线索的分水岭——用 GAN 式判别器把 MoCap 蒸馏成 style-reward,替代 DeepMimic 的逐帧对齐,让 RL policy 在自由探索任务解的同时保持人类动作风格。
完整引用:Xue Bin Peng, Ze Ma, Pieter Abbeel, Sergey Levine, Angjoo Kanazawa. AMP: Adversarial Motion Priors for Stylized Physics-Based Character Control. SIGGRAPH 2021 / ACM TOG 40(4). arXiv:2104.02180.
代码github.com/xbpeng/DeepMimic(与 DeepMimic 同仓库) · 项目页xbpeng.github.io/projects/AMP/
在线索中的位置:见 T04-motion-prior-amp-to-bfm.md 转折 1。


动机:DeepMimic 的三个硬伤

DeepMimic [Peng et al. 2018, arXiv:1804.02717] 用 reference-state alignment 把物理角色控制做出来了:reward 每一步都对照参考片段的第 $t$ 帧,形如 $r^I_t = w^p r^p_t + w^v r^v_t + w^e r^e_t + w^c r^c_t$,每项是指数形式 $\exp(-\|x - x^{\text{ref}}\|^2/\sigma^2)$。这留下三个结构性问题:

  1. 必须时间对齐:policy 一举一动都要「踩在」参考帧上,不能自由探索节奏;
  2. 鲁棒性差:偏离参考就被惩罚,跌倒难恢复,需要 reference state initialization(RSI)+ early termination 等 trick;
  3. 单风格:一段参考对应一个 policy,跨风格、跨任务无法复用。

AMP 的洞察是:这三个问题都源于「对齐到具体参考」。如果只要求「分布像人类」而不要求「帧帧同步」,问题就消解了。

方法核心

1. 判别器:从 (s,a) 到 (s,s') —— observation-only 转移对

GAIL [Ho & Ermon 2016] 用 $(s,a)$ 当判别器输入,必须知道 expert 的动作。对 MoCap 来说这是死路——动捕数据只有姿态序列,没有 torque/action。AMP 改用 observation-only 状态转移对 $(s_t, s_{t+1})$(论文 Sec.5.1,Eq.5;这一思路的判别器形式最早出自 Torabi et al. 2018 的 GAIfO [arXiv:1807.06158],AMP 把它第一次在大规模、跨风格、跨任务的物理角色控制上稳定跑通——注意 AMP 并非物理角色上的首例对抗模仿,Merel et al. 2017 / Wang et al. 2017 已有先例,AMP 的贡献是稳定可扩展、跨任务复用)。

判别器输入的精确形式(论文 Sec.5.3):判别器并非直接吃原始 state,而是先过一个 observation map $\Phi(s_t)$ 抽取以下 4 类特征,再以 $D(\Phi(s_t), \Phi(s_{t+1}))$ 形式喂入:

  • root(pelvis)的线速度 + 角速度,记录在角色局部坐标系(origin 在 root,x 轴朝 facing direction,y 轴 up);
  • 每个 joint 的局部旋转(spherical joint 用 6D normal-tangent 表示,避免 gimbal lock);
  • 每个 joint 的局部速度
  • 末端效应器(hands/feet)的 3D 位置(局部坐标系)。

刻意不包含 task-specific 特征,因此一份 motion prior 可跨任务复用。窗口长度仅 1 步(一对 $(s,s')$),没有时序 stack。

2. 训练目标:LSGAN(不是 sigmoid GAN)+ R1-style gradient penalty

$$\min_D\; \mathbb{E}_{(s,s')\sim\mathcal{D}}\big[(D(\Phi(s),\Phi(s'))-1)^2\big] + \mathbb{E}_{(s,s')\sim\pi}\big[(D(\Phi(s),\Phi(s'))+1)^2\big]$$

LSGAN 等价于最小化 $d^\mathcal{D}$ 与 $d^\pi$ 之间的 Pearson $\chi^2$ 散度(Mao et al. 2017)。

Gradient penalty(论文 Sec.5.4,Eq.8)只在真实样本上施加(1-centered R1 风格,而非 WGAN-GP 的双边惩罚),且系数带 $1/2$ 因子(论文原式):

$$+\; \tfrac{w_{gp}}{2}\, \mathbb{E}_{(s,s')\sim\mathcal{D}}\big[\|\nabla_\phi D(\phi)\big|_{\phi=(\Phi(s),\Phi(s'))}\|^2\big]$$

注意是对 observation feature $\phi=\Phi(s)$ 求梯度,不是对完整 state。论文实验明确「gradient penalty is crucial for stable training」。

3. style-reward 精确公式(Eq.7)

$$\boxed{\;r^S(s_t, s_{t+1}) = \max\!\Big(0,\; 1 - 0.25\,(D(\Phi(s_t),\Phi(s_{t+1})) - 1)^2\Big)\;}$$

4. 与 task reward 组合(Eq.4)

$$r(s_t, a_t, s_{t+1}, g) = w^G\, r^G(s_t, a_t, s_{t+1}, g) + w^S\, r^S(s_t, s_{t+1})$$

5. 网络架构与训练超参(Sec.6.2 + Table 4)

Policy / Value / Discriminator 三个网络同构(论文原话:"similar architecture as the policy"):fully-connected,2 个隐层,宽度 1024 → 512,ReLU 激活,线性输出。Policy 输出高斯 $\mathcal{N}(\mu(s,g), \Sigma)$,$\Sigma$ 是固定对角协方差(不学习)。

训练超参(论文 Table 4,全部来自正文):

超参
每次更新样本数4096
batch size (PPO)256
判别器 batch $K$256
Policy stepsize(单片段模仿)$2\times 10^{-6}$
Policy stepsize(带 task 任务)$4\times 10^{-6}$
Value stepsize$10^{-4}$(单片段)/ $2\times10^{-5}$(任务)
Discriminator stepsize$10^{-5}$(与 policy 同量级,实际略大于 policy $2\text{–}4\times 10^{-6}$ 约 2.5–5 倍)
判别器 replay buffer $B$$10^5$ transitions
$\gamma$ 折扣0.95(单片段模仿)/ 0.99(带任务)
SGD momentum0.9
GAE($\lambda$) / TD($\lambda$)0.95 / 0.95
PPO clip0.02
物理仿真Bullet,1.2 kHz;policy 查询 30 Hz

6. 算法骨架(Sec.6.3 + Algorithm 1)

关键实验

角色与数据集(Sec.8.1 + Table 2):34 DoF humanoid、59 DoF T-Rex、64 DoF dog 三种角色。MoCap 来源 = CMU + SFU 公开库 + Zhang et al. 2018 + 自录 + artist keyframe。最大数据集为 humanoid Locomotion 434 s / 56 clips / 8 subjects;其他风格数据集包括 Cartwheel (13.6s/3clips)、Jump (28.6s/10)、Run (204s/47)、Walk+Punch (247.8s/15)、Zombie (18.3s/1)、Stealthy (136.5s/3)、Run+Leap+Roll (22.1s/10) 等。

任务(Sec.7)

  • Target Heading:沿方向 $d^\ast$ 以速度 $v^\ast\in[1,5]$ m/s 移动(慢风格如 Zombie/Stealthy 固定 1m/s);
  • Target Location:到达目标点;
  • Dribble:运球到目标位置(state 增广球的位置/朝向/速度);
  • Strike:用末端效应器击中目标(分 far/near/hit 三阶段 reward,Eq.18);
  • Obstacles / Stepping Stones地形 heightfield(100 个采样点、覆盖前方 10m)作为额外 state 输入。

Baselines:(1) DeepMimic 式 motion tracking(Peng et al. 2018a)—— single-clip 任务对比;(2) Latent Space Model(Peng 2019a / Merel 2019 风格,low-level controller 预训练 + high-level controller 下游)—— 预训练用 300M samples,AMP 不需要预训练;(3) No Data(从零训,不用 motion data)。

关键发现(Sec.8.2–8.4)

  1. gait 自动切换:用 Locomotion 数据集训 Target Heading,policy 自动在 1m/s 走、2.5m/s 慢跑、4.5m/s 跑之间切换,并能 banking into turns、变向减速——没有任何 motion planner
  2. skill 组合:Walk+Punch 数据集(仅含独立走/打拳片段)训出的 Strike policy 会先走到目标附近再出拳——时序组合是自动涌现的
  3. 空间组合(Appendix D):Wave+Walk 数据集(仅含独立走/挥手片段,合计 281.4s)能让 policy 同时走路+挥手(两个目标同时优化,$r^G = 0.5 r^{\text{heading}} + 0.5 r^{\text{waving}}$,Eq.22)。
  4. single-clip 模仿:6 类高难特技(back-flip、side-flip、cartwheel、spin、spin-kick、roll)的模仿误差与 DeepMimic 相当,无需手写 reward 也无需 phase variable。但 Front-Flip 等 action 会收敛到局部最优(前进躲闪代替翻转,因 AMP 没有 phase 同步无法用 early termination 救场)。
  5. AMP vs Latent Space:AMP 收敛更快(不需 300M 样本预训练),动作保真度更高(直接在 motion space 约束,不在 latent space)。
  6. gradient penalty 消融:删除后训练不稳定,是必要组件。

计算成本:每个 policy 100–300M samples,16 CPU cores 训 30–140 小时(单机 CPU,没用 GPU)。

为什么重要

AMP 是分水岭,不是改进。它把 imitation 从「状态对齐」(reference tracking)升级到「分布对齐」(distribution matching),让 MoCap 第一次成为可跨任务复用的资源而非「一段参考配一个 policy」。后续 ASE/CALM/Multi-AMP/PHC/UHC/HOVER/BFM 全部建立在「判别器式 style prior」这一思想上,只是把 prior 的形态从 reward 升级到 latent、再到 controller、再到 foundation model

工程上,AMP 还有一个副产品:判别器替代复杂手工 reward。这被 AMP-Adroit [Escontrela et al. 2022, arXiv:2203.15103] 显式做成卖点(论文标题即此),使 AMP 成为 reward 自动化链(legged_gym → AMP → Eureka)的一环。

局限与 mode collapse

  1. GAN 的固有问题:判别器和 policy 对抗训练,会 mode collapse——policy 容易找到一两个判别器给高分的姿态反复刷分,导致生成动作虽「像人」但单调、缺乏多样性;同时 reward 可能变得稀疏(判别器过早判别力过强)。论文用混合风格数据集(避免判别器只学到单一风格)+ gradient penalty(稳定判别器)+ style reward 截断缓解,但没根治。
  2. 依赖高质量 MoCap:没有对应任务的参考片段就没法学风格;跨形态(人↔四足)不能直接迁移。
  3. 单层 prior,无内部结构:判别器把所有 MoCap 压成一个标量 reward,没有可指挥的技能 vocabulary——这是 ASE [Peng et al. 2022, arXiv:2205.01906] 用两层 latent skill、Multi-AMP 用多离散风格、CALM 用条件化 latent 的直接动机。

复现要点

以下要点基于论文 Sec.6 + Table 4 + Algorithm 1 的精确数字,可直接用于复现

  • 判别器输入:必须用 $\Phi(s_t), \Phi(s_{t+1})$(4 类特征:root 线/角速度、joint 局部旋转 6D 表示、joint 局部速度、末端 3D 位置),不要喂 raw state 或 action。窗口仅 1 步。
  • 判别器损失用 LSGAN(不是 sigmoid cross-entropy),正样本目标 +1、负样本 -1;输出是实数 score 不是概率。
  • 判别器更新频率高于 policy:每 iteration 先采 $m$ 条轨迹,然后 $n$ 次小批量更新 $D$(每次 $K=256$ 对),最后才一次 PPO 更新 $\pi, V$。⚠️ 注意 stepsize 方向:判别器 $10^{-5}$ 与 policy $2\text{–}4\times 10^{-6}$ 同量级(判别器反而略大 2.5–5 倍,见 Table 4),稳住对抗靠的是「更新次数 ~16:1 + R1 梯度惩罚 + replay buffer」,不是更小的判别器 stepsize。
  • 判别器 replay buffer $10^5$:避免判别器过拟合最新 rollout,是稳定训练的隐性关键。
  • reward 权重固定 $w^G = w^S = 0.5$(所有任务一致,无需调)。
  • style reward 必须 clamp 到 $[0,1]$max(0, 1 - 0.25*(D-1)^2)
  • 仍需 RSI + early termination:AMP 没摆脱这两个 DeepMimic trick,只是去掉了 phase variable。
  • PPO 配置:clip 0.02(比常规 0.2 严得多)、GAE $\lambda=0.95$、$\gamma=0.95$(单片段)/ 0.99(带任务)。
  • 物理:Bullet 1.2 kHz,policy 30 Hz。
  • Isaac Gym 实现:参考 escontra/AMP_for_hardware(AMP-Adroit 作者 Escontrela 的 fork)或 leggedrobotics/unitree_rl_gym,比原版 DeepMimic 仓库更易上手。
  • 常见坑:(1) 判别器太强 → 减小 $D$ stepsize 或减少 $D$ 更新次数 $n$;(2) Front-Flip 类动作局部最优 → 这是 AMP 的固有缺陷(无 phase 同步、无法 early terminate),可考虑 ASE 的 latent skill 或加 phase 变量缓解;(3) actionPD controller 目标位置(spherical joint 用 3D exponential map、revolute joint 用 1D 角度),不是 torque。

延伸

  • 后继:ASE [arXiv:2205.01906](latent skill)、AMP-Adroit [arXiv:2203.15103](Isaac Gym 工程化)、PHC [arXiv:2305.06456](大规模 controller)。
  • 对比:DeepMimic [arXiv:1804.02717](前作,逐帧对齐)、GAIL [Ho & Ermon 2016]、DAC [Kostrikov et al. 2019, arXiv:1809.02925](吸收态处理)。