ASE: Large-Scale Reusable Adversarial Skill Embeddings for Physically Simulated Characters
动机
到 2022 年,AMP [Peng et al. 2021] 已经证明:用一个 GAN 式判别器把 MoCap 蒸馏成 style-reward,可以让 policy 在「完成任务」的同时「风格像人」。但 AMP 留下三个结构性问题,ASE 正是冲着它们而来:
- 整体 reward 不可指挥:判别器把整段 MoCap 压成「一个标量 reward」,policy 内部没有任何可寻址的技能结构,无法主动调用某个子技能(如「现在踢一下」)。
- 下游任务每次从零训练:AMP 的判别器是 task-conditional 的,每个新任务都要把策略和环境一起重训,sample inefficient 且无法做「一次预训练、多任务复用」。
- mode collapse:GAN 式对抗训练的通病——policy 容易塌缩到一两个高奖励行为,MoCap 数据集大量片段被浪费。
ASE 想做的事是:给角色一个可复用、可指挥、大规模的技能 vocabulary。预训练一次,所有下游任务只训一个低维 high-level policy。这个思路和 HRL 里的 skill library 一脉相承,但 ASE 的关键创新是用 adversarial imitation 替代每个 skill 的手工 reward——不需要任何标注、任何 MoCap 切分。
方法核心:两层 latent skill 架构
ASE 的训练分预训练阶段(学低层 $\pi$)和任务阶段(学高层 $\omega$)。整篇论文真正的技术含量几乎全在低层。
一、目标函数:imitation + skill discovery 的组合
预训练目标是两项之和(Eq. 2):
$$\max_\pi \; -D_{JS}\big(d^\pi(s,s') \,\|\, d^\mathcal{M}(s,s')\big) + \beta\, I(s, s'; z\,|\,\pi)$$
- 第一项(imitation):让策略产生的状态转移分布 $d^\pi$ 匹配 MoCap 数据集 $\mathcal{M}$ 的转移分布 $d^\mathcal{M}$。JS 散度不可算,用 GAN 变分近似得到一个判别器 $D(s,s')$(同 AMP),policy 的 imitation reward 是 $r^D_t = -\log(1 - D(s_t, s_{t+1}))$。
- 第二项(skill discovery):最大化技能 $z$ 与它产生行为 $(s,s')$ 之间的互信息 $I(s,s';z|\pi)$。直觉来自互信息分解 $I = H(s,s') - H(s,s'|z)$:不同 $z$ 应产生不同行为(熵大),同一 $z$ 应产生可预测行为(条件熵小)。
互信息不可算,用 variational lower bound(Gregor 2017 / Eysenbach 2019 的 DIAYN 思路):引入一个 skill encoder $q(z|s,s')$,让 $q$ 能从 $(s,s')$ 反解出 $z$,最大化 $\mathbb{E}[\log q(z|s,s')]$ 即可。
和 AMP 的关系(重要):imitation 项就是 AMP 的判别器,公式几乎照搬(包括 gradient penalty $w_{gp}=5$,Eq. 14)。ASE 相对 AMP 多出的不是判别器,而是 (a) latent 变量 $z$ 进 policy、(b) skill discovery 的互信息项、(c) diversity 项防 mode collapse。可以说 ASE = AMP 的判别器 + DIAYN 的互信息 + 多样性正则。这是 T04 转折 3 的核心叙事。
二、低层 $\pi(a|s,z)$ 的关键工程细节
预训练 surrogate 目标(Eq. 15)把上面三项写成可优化的 reward:
$$\arg\max_\pi\; \mathbb{E}\Big[\sum_t \gamma^t\big(-\log(1-D(s_t,s_{t+1})) + \beta\log q(z_t|s_t,s_{t+1})\big) - w_{div}\,\mathbb{E}\big[\tfrac{D_{KL}(\pi(\cdot|s,z_1),\pi(\cdot|s,z_2))}{D_z(z_1,z_2)}-1\big]^2\Big]$$
PPO 优化。三项里只有前两项进 reward,diversity 项只在梯度更新时用(pseudo-reward 不进环境)。三个细节决定 ASE 能否训出来:
1. Latent space 是超球面(非高斯)。GAN 常用 $\mathcal{N}(0,I)$,但这导致 Z 无界,离原点远的 latent 会产生 OOD/低质量动作——而 Z 又要当 high-level policy 的 action space,OOD 是致命的。ASE 把 Z 建模成单位超球面 $\|z\|=1$,先采 $\bar{z}\sim\mathcal{N}(0,I)$ 再归一化 $z=\bar{z}/\|\bar{z}\|$(StyleGAN [Karras et al. 2019] 的 trick)。这个选择还有一个意外好处:球面让 exploration 变得自然——见 §四。
2. Skill encoder 用 von Mises-Fisher 分布(球面上的高斯,§6.2 Eq. 12)。因为 latent space 是单位超球面(Eq. 11,$z=\bar z/\|\bar z\|$),encoder 不能用普通高斯,必须用 vMF 分布:
$$q(z|s,s') = \frac{1}{Z}\exp\big(\kappa\,\mu_q(s,s')^\top z\big)$$
- $\mu_q(s,s')$ 是分布均值,必须归一化 $\|\mu_q\|=1$(在球面上)。
- $\kappa$ 是 concentration/scaling factor(类比高斯的 $1/\sigma^2$),论文 Table 2 设 $\kappa=1$。
- $Z$ 是 normalization constant(vMF 的归一化项,含 modified Bessel function,论文用 $Z$ 占位不展开)。
- 训练目标(Eq. 13)是最大化 $(z, s, s')$ 样本的对数似然:$\max_q \mathbb{E}_{p(z)}\mathbb{E}_{d^\pi(s,s'|z)}[\kappa\,\mu_q(s,s')^\top z]$。
- encoder 和判别器共享网络骨架、两个 output head(Fig. 5)——这是 ASE 的关键工程优化,让判别器的中间特征被 skill encoder 复用。
3. Diversity objective(§6.4,Eq. 15 末项,基于 Yang et al. 2019 的改进版):两个 latent 越接近(余弦距离 $D_z(z_1,z_2)=0.5(1-z_1^\top z_2)$ 小),它们的 action 分布 KL 越小;latent 离得远,action 分布也得离得远。具体形式(论文原话):
$$w_{div}\,\mathbb{E}_{d^\pi(s)}\mathbb{E}_{z_1,z_2\sim p(z)}\left[\frac{D_{KL}\big(\pi(\cdot|s,z_1),\pi(\cdot|s,z_2)\big)}{D_z(z_1,z_2)}-1\right]^2$$
其中 $D_z(z_1,z_2)=0.5(1-z_1^\top z_2)$ 是球面 cosine 距离。这形如 multidimensional scaling(MDS,Kruskal 1964)——论文实测比 Yang 2019 原版更稳定。关键:reward 只依赖 $q$ 和 $D$,diversity 项只在梯度更新时用,不进环境 reward(pseudo-reward)。消融里这是关键:去掉它,policy 直接塌缩到「原地站立」这一个 clip(§10.4 Fig. 10「No Div.」列)。
三、dim(Z)=64 的依据(基于 PDF 正文,Table 2 + §10.4 消融)
论文 Table 2 hyperparameter 表明确写 dim(Z)=64,并列出全套配套超参:action variance $\Sigma_\pi = 0.0025$,skill discovery 权重 $\beta=0.5$,gradient penalty $w_{gp}=5$,diversity 权重 $w_{div}=0.01$,vMF concentration $\kappa=1$;discount 0.99,GAE/TD $\lambda=0.95$,PPO clip 0.2,Adam stepsize $2\times 10^{-5}$,episode length $T=300$。
论文正文没解释 64 怎么选的——这是一个「调出来够用」的工程常数,没有理论推导。从后续工作看,64 已成事实默认:CALM、PADL、BeyondMimic 等都沿用或接近这个量级。经验上 64 大到足以承载 187 段 MoCap 的多样性(§10.4 Fig. 9 clip-transition graph 显示 ASE 比 No-SD/No-Div 模型稠密得多),又小到让 high-level policy 在低维空间探索可负担。论文 §10.5 还讨论:latent 维度太小(球面上可用方向少)会导致行为不够 diverse,需要在 action 分布上用更大 std 才能产出同等多样性。
responsive skills 的两个 trick:原始目标会让 $\pi$ 「只看初始 $z_0$、中途换 $z$ 被忽略」。ASE 两个修复:
- 每个 timestep 都换 $z$:但同一个 $z$ 保持 1–150 步再换(避免高频抖动),逼 policy 学会「响应 $z$ 变化」。
- 加 diversity objective(见上)。
robust recovery:预训练时每个 episode 有 10% 概率把角色随机扔到「跌倒态」(随机高度/姿态空中落下),让 $\pi$ 自带 fall recovery 能力,下游任务无需重新训练 recovery。
四、高层 $\omega(z|s,g)$:可指挥的探索结构
任务阶段训一个 high-level policy $\omega(\bar{z}|s,g)=\mathcal{N}(\mu_\omega, \Sigma_\omega)$,输出未归一化的 $\bar{z}\in\bar{Z}$,再投影到单位球 $z=\bar{z}/\|\bar{z}\|$ 喂给 $\pi$。这里有一个非常漂亮的几何 trick(Fig. 3):
- 初始化 $\omega$ 的 mean 在 $\bar{Z}$ 的原点附近 → $\omega(\bar{z}|s,g)\approx\mathcal{N}(0,\Sigma_\omega)$ → 归一化后 z 在球面均匀分布 → 自然 uniform exploration。
- 训练中梯度把 $\mu_\omega$ 推离原点 → 归一化后 z 集中到某个方向 → exploit 特定技能。
- $\mu_\omega$ 离原点远近 = exploration/exploitation 强弱。
这套机制是球面 latent space 的「意外红利」——普通高斯 latent space 没法这么优雅地表达「exploration-exploitation dial」。
motion prior:高层训练时把预训练好的判别器 $D$ 冻结,作为 portable motion prior 加进 reward:$r_t = w_G r^G_t + w_S r^S_t$,$w_G=0.9, w_S=0.1$。冻结判别器通常会被 policy 利用其漏洞,但 ASE 发现低层 $\pi$ 已经把行为限制在「像人」的 manifold 里,漏洞利用基本消失。
为什么重要
- 首次把 MoCap 压成「可指挥的连续技能库」:AMP 只能给整段 reward,ASE 给出 64 维地址空间,high-level policy 在这 64 维里探索就能完成任务。这是 HRL 在物理角色控制里的真正落地——之前的 skill library 都要手工拆 skill。
- 大规模验证(§10.1 数字):187 段 MoCap(Reallusion 提供,约 30 分钟)、10 billion 样本(≈10 年仿真时间)、单 V100 训 10 天、4096 并行环境、120Hz 仿真。这套规模在 2022 年是极限级,奠定了「MoCap 可以被 scale 化利用」的事实基础。
- 5 个下游任务单模型复用:Reach / Speed / Steering / Location / Strike,所有任务用同一个预训练 $\pi$,只训 $\omega$。Strike 任务展示技能组合:跑到目标前 → 切换到挥剑 → 击中后回到 idle,全部自动涌现。
- fall recovery 内嵌:10% 跌倒初始化让 $\pi$ 自带恢复能力,下游任务不再需要单独训 recovery policy。这个设计被 PHC/UHC(T04 转折 4)继承并放大成「perpetual humanoid」的核心卖点。
局限
- 风格受限于数据集:187 段 Reallusion MoCap 偏 gladiator 题材,论文的 Sword/Shield 任务和数据集强相关。换到任意形态(如四足)需要重新 retarget + 重新预训练,不能跨形态 zero-shot。
- 仍是 task-conditional 高层:每个新任务要训 $\omega$(虽然比从头训 policy 快得多)。真正「一次预训练、零适配」的 motor foundation 要等到 BFM(T04 转折 6,2025)。
- GAN 式判别器不稳定:虽然加了 gradient penalty + diversity + 球面 latent,但训练曲线仍有抖动,需要调 $w_{gp}/\beta/w_{div}$;不同 MoCap 数据集需重调。
- skill latent 没语义:每个 $z$ 对应什么行为要靠可视化才能知道,无法直接说「$z=e_1$ 是走路」。CALM [Tessler et al. 2023] 用 transition code + skill label 给 latent 加语义,正是补这个洞。
- 覆盖率不等于生成能力:ASE 的「技能库」是 MoCap 已有片段的插值/组合,不能生成数据集外的新行为。这是 ASE(技能库)和 BFM(生成式分布)的本质区别,见 T04 §四对比表。
复现要点
- 基座:Isaac Gym(旧版,非 Isaac Lab),4096 并行环境,单 V100/3090 应可;ASE 代码随 IsaacGymEnvs 发布。
- 关键超参(论文 Table 2/3,已验证可直接用):dim(Z)=64,$\Sigma_\pi=0.0025$(低层)/0.01(高层),$\beta=0.5$(skill discovery 权重),$w_{gp}=5$,$w_{div}=0.01$,$\kappa=1$;discount 0.99,GAE/TD $\lambda=0.95$,PPO clip 0.2,Adam stepsize $2\times 10^{-5}$,episode $T=300$;低层 30Hz,高层 6Hz(高层输出重复 5 步喂低层,防抖);latent z 每 1–150 timestep 换一次。
- 网络结构:低层 $\pi$ MLP [1024, 1024, 512] + linear 输出 action mean + diagonal $\Sigma$;value $V(s,z)$ 同结构;判别器 $D$ 和 encoder $q$ 共享 backbone、两个 head(Fig. 5)。高层 $\omega$ MLP [1024, 512] + linear。
- batch 规模:每次 update 采 131072 样本,policy/value minibatch 16384,D/q minibatch 4096。Adam stepsize $2\times 10^{-5}$。
- state/action 维度(论文 §8.1):state 120D(root pose + 关节 + 末端位置),action 31D(PD target rotations,球关节用 exponential map),角色 37 DoF + 剑盾(剑 3D 球关节、盾固定关节)。
- 预期难度:中。仿真复现 1–2 周(预训练 10 天 + 任务训练各 1–2 天)。难点不在代码,在调 diversity/skill discovery 的权重——权重错就 mode collapse。
- 坑:latent space 必须是球面,不是高斯;responsive skills 必须每个 timestep 换 $z$(不能整段 episode 用一个 $z$);encoder 用 vMF 不是高斯。
相关
- 建立在:AMP [Peng et al. 2021, arXiv:2104.02180](判别器 imitation,本仓库 P-AMP-2021.md);DIAYN [Eysenbach et al. 2019](互信息 skill discovery);StyleGAN [Karras et al. 2019](球面 latent trick);Isaac Gym [Makoviychuk et al. 2021](GPU 仿真基座)。
- 引出:CALM [Tessler et al. 2023, arXiv:2305.02195](给 latent 加 skill label 语义);Multi-AMP [Vollenweider et al. 2022, arXiv:2203.14912](多离散风格);PHC/UHC [Luo et al. 2023](把「技能库」升级成「覆盖全 AMASS 的 universal tracker」,T04 转折 4,本仓库 P-PHCUHC-2023.md);BFM [Zeng et al. 2025](最终升级成生成式 motor foundation,T04 转折 6)。
- 本仓库笔记交叉引用:T04-motion-prior-amp-to-bfm.md(转折 3);与 P-AMP-2021.md 是同一作者的结构化升级;与 P-BFM-2025.md 形成「技能库 vs 生成式分布」的对照。