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)$。这留下三个结构性问题:
- 必须时间对齐:policy 一举一动都要「踩在」参考帧上,不能自由探索节奏;
- 鲁棒性差:偏离参考就被惩罚,跌倒难恢复,需要 reference state initialization(RSI)+ early termination 等 trick;
- 单风格:一段参考对应一个 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 momentum | 0.9 |
| GAE($\lambda$) / TD($\lambda$) | 0.95 / 0.95 |
| PPO clip | 0.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):
- gait 自动切换:用 Locomotion 数据集训 Target Heading,policy 自动在 1m/s 走、2.5m/s 慢跑、4.5m/s 跑之间切换,并能 banking into turns、变向减速——没有任何 motion planner。
- skill 组合:Walk+Punch 数据集(仅含独立走/打拳片段)训出的 Strike policy 会先走到目标附近再出拳——时序组合是自动涌现的。
- 空间组合(Appendix D):Wave+Walk 数据集(仅含独立走/挥手片段,合计 281.4s)能让 policy 同时走路+挥手(两个目标同时优化,$r^G = 0.5 r^{\text{heading}} + 0.5 r^{\text{waving}}$,Eq.22)。
- single-clip 模仿:6 类高难特技(back-flip、side-flip、cartwheel、spin、spin-kick、roll)的模仿误差与 DeepMimic 相当,无需手写 reward 也无需 phase variable。但 Front-Flip 等 action 会收敛到局部最优(前进躲闪代替翻转,因 AMP 没有 phase 同步无法用 early termination 救场)。
- AMP vs Latent Space:AMP 收敛更快(不需 300M 样本预训练),动作保真度更高(直接在 motion space 约束,不在 latent space)。
- 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
- GAN 的固有问题:判别器和 policy 对抗训练,会 mode collapse——policy 容易找到一两个判别器给高分的姿态反复刷分,导致生成动作虽「像人」但单调、缺乏多样性;同时 reward 可能变得稀疏(判别器过早判别力过强)。论文用混合风格数据集(避免判别器只学到单一风格)+ gradient penalty(稳定判别器)+ style reward 截断缓解,但没根治。
- 依赖高质量 MoCap:没有对应任务的参考片段就没法学风格;跨形态(人↔四足)不能直接迁移。
- 单层 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)
action是 PD 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](吸收态处理)。