枢纽
数据集AMASS
物理感知
输入模态proprioception

ControlVAE:用 VAE + 世界模型给物理角色装一个「动作词典」

Heyuan Yao, Zhenhua Song, Baoquan Chen, Libin Liu(北京大学)。ACM SIGGRAPH Asia 2022, ACM TOG 41(6)。 DOI · motion priorVAE 线索 T03

🧠 一句话心智模型:你想让一个仿真小人会走、会跑、会跳、会起身——别给它每个动作单独训一个控制器(之后想加新任务又要重训)。ControlVAE 训一个 VAE:把「做什么动作」压缩到一个 64 维隐空间(一本「动作词典」),采样一个 z 就是一个具体技能。再加上一个可微的世界模型把仿真器「包」起来,下游任务可以直接反传梯度来训高层策略,不用再硬跑 RL。

🎯 为什么重要:物理角色动画的「重用」老大难

DeepMimic 之后,物理小人学单个动作(走、跳、后空翻)已经不难。但真要做产品级动画,问题在重用

核心矛盾:每个新任务都从零训一个 controller 太贵、且无法组合。比如「走到 A 点 + 跳过障碍 + 继续走到 B 点」就需要一个能切换/混合多个技能的统一框架。Kinematic 领域早就有 VAE/GAN 学「动作词典」的成熟做法,但它们梯度穿不过仿真器这堵墙——物理仿真器是个黑盒,不能反传。

ControlVAE 的破局就是:学一个世界模型替仿真器「挡一刀」。世界模型可微,于是 motion domain 的目标函数能直接监督 policy。

💡 核心思想:VAE 编码技能 + 世界模型打通反向传播

Encoder q(z|s,s') approx. posterior 输入: 当前+下一状态 z ∈ R⁶⁴ "动作词典" 技能 latent prior p(z|s) state-conditional Policy π(a|s,z) MoE decoder a (PD target) World Model ω(s,a) 预测 s'(可微!) 下游:高层任务策略 π(z|s,g) 用世界模型反传梯度训(MPC 或 model-based) ∇ 通过世界模型反传到 z/policy 关键:prior 是 state-conditional(不是标准 N(0,I)),让 latent 更可分、下游更稳
图 1:ControlVAE 的双支柱。橙色:VAE 把动作压成 latent z(conditioned on state);红色:世界模型替仿真器做可微预测,让下游任务的梯度能直接监督 policy。

🛠️ 关键设计:四个让它真正训得动的细节

设计心智为什么必要
① State-conditional priorp(z|s) 而不是标准 N(0,I)标准 N(0,I) 把所有技能揉成一团;让 prior 看当前状态,不同状态下采样到不同技能,下游更稳
② 世界模型神经网络预测 $s_{t+1}=\omega(s_t,a_t)$把不可微的仿真器替换成可微的近似,让 motion domain 的 loss 直接监督 policy
③ 数据平衡按状态价值采样初始状态,难动作被多采简单动作(走路)会霸占训练 buffer;按价值反比例采样让难动作(跳跃、起身)也有机会
④ Trajectory Sampler 切换训练时随机切换参考动作片段逼迫 policy 学会动作间过渡,而不是只学独立片段
🔮 关键洞察:为什么「世界模型」是「VAE 控制器」的必备搭档
VAE 在 motion domain(无物理)早就好用,但搬到物理角色上不行,因为仿真器这堵黑盒墙挡住了梯度。ControlVAE 的核心贡献是:训练一个可微的世界模型,让「motion 的 loss → 世界模型 → policy」这条反传链路了。下游任务(走到目标点、跳跃朝向)可以直接用世界模型采样/求导来训,不必再开昂贵的 RL。论文显示:model-based 半小时收敛到 PPO 几个小时的水平。
🔮 状态条件先验的直观解释
想象「z 是动作词典的索引」:在「站定」状态下,你想要的 z 分布(多半是「起步走」或「保持站」),和在「跑动中」状态下想要的 z 分布(多半是「继续跑」「跳」「停」)完全不同。让 prior 看状态,等于「这一页翻到动作词典的对应章节」,采样质量大幅提升。论文 Fig.8 显示:标准 prior 下不同技能的 latent 互相打架,state-conditional 下清晰分簇

📊 结果:MPC + Model-based 双路径都能跑通

维度数字(论文实验)
训练数据LaFAN 数据集 4 段长动作序列(走、跑、跳、起身等),下采样 20fps + 镜像增广 ≈ 30 分钟
潜空间64 维;policy 用 6 个 expert 的 MoE,每个 3×512 单元
训练时间20,000 iter,~50 小时(4 CPU 线程 + 1×RTX 2080Ti)
训练收敛~10,000 iter 后开始稳定收敛
推理速度快于实时,支持桌面交互控制
任务覆盖高度控制、朝向控制、steering、skill control(走/跑/跳/单脚跳/跨步跳 5 技能)
vs VAE-NC(标准 prior)NC 版本「频繁摔倒、爬不起来、朝向乱转」;ControlVAE 稳定跟随目标
vs model-free PPOmodel-based 在相同 transition 数下表现更好;半小时收敛 vs PPO 数小时
关键洞察:ControlVAE 不是一个「我比你高 5%」式的 SOTA 刷榜工作,而是把「motion domain 生成模型」和「物理仿真」这两条原本平行的研究线打通了的方法论。它的核心贡献是一套可复用的训练 recipe:VAE encoder/decoder + state-conditional prior + 世界模型 + 数据平衡 + trajectory switching。

🌐 在领域中的位置

DeepMimic(单片段 RL 跟踪,2018) AMP / ASE(GAIL 学先验,2021-22) MotionVAE(kinematic 动作 VAE,2020) ControlVAE(物理 + VAE + 世界模型,2022)⭐ CALM / Phoenix(latent skill 进一步发展)

ControlVAE 是「motion prior 物理化」的关键节点,与 AMP/ASE(GAIL 路线)同期并行。它的「VAE 编码技能 + 世界模型让梯度穿过仿真」配方,被后续 CALM、Phoenix 等以不同形式借鉴(虽然这些后续工作多用 GAIL 替代 VAE)。它是 motion prior 谱系里「model-based」分支的代表。关联线索:T04 motion prior 谱系

❓ 常见误区

ControlVAE 和 ASE / AMP 有什么区别?

都是「学一个 motion prior 给下游用」,但路线不同:ControlVAE 用 VAE 显式建模 latent,需要 encoder/decoder 配对;ASE/AMP 用 GAIL 的对抗判别器隐式建模先验,不需要 encoder。VAE 路线 latent 更可解释、能像「词典」一样采样;GAIL 路线更简单、scale 更好。后来社区偏向了 GAIL。

世界模型不会带来 model-bias 吗?

会。论文承认:「large randomness can negatively impact the stableness」,所以实际用世界模型的均值而不是采样做 rollout,并且只用它做训练监督、推理时仍然跑真仿真器。这种「训练用 surrogate,部署用真器」是 model-based RL 的标准纪律。

30 分钟动作数据算多吗?

非常少。这恰恰是 ControlVAE 的卖点——配合 VAE 的泛化能力和数据平衡策略,少量数据 + 多任务共训就能学出多种技能。后续规模化的工作(PHC 等)才把数据扩到 AMASS 整个数据集。

MPC 和 model-based learning 各适合什么场景?

论文说:MPC 适合做实验工具(验证 loss 设计合不合理),但采样数有限、结果不够平滑;model-based learning 适合做产品,能训出稳定可部署的高层策略。两者用同一个世界模型。