ControlVAE: Model-Based Learning of Generative Controllers for Physics-Based Characters
论文信息: ACM Transactions on Graphics, 2023, Heyuan Yao et al., Peking University
Link: 项目主页
一、核心问题
1.1 研究背景
基于物理的角色控制器可以被公式化为生成模型:
- 潜在空间中的样本被解码为具体的角色动作
- 目标是学习多样化的技能表示和通用的控制策略
现有生成控制方法的局限:
| 方法 | 代表工作 | 局限性 |
|---|---|---|
| 自动编码器 | Merel et al. 2018, 2020 | 需要大量专家策略蒸馏 |
| 条件 VAE | Won et al. 2022 | 使用标准正态先验,技能解耦不佳 |
| 对抗模仿学习 | AMP (Peng 2021, 2022) | 需要训练两个间接监督的系统,训练不稳定 |
| MCP | Peng et al. 2019 | 技能表示能力有限 |
1.2 核心问题
如何学习一个生成式控制器,能够:
- 从多样化的无组织动作序列中学习丰富的技能潜在表示
- 通过潜在空间采样生成真实的人类行为
- 让高层控制策略复用学到的技能完成各种下游任务
- 训练过程稳定高效
1.3 现有方法及其局限性
VAE 在角色控制中的应用:
- 通常使用标准正态分布 N(0,I) 作为先验 p(z)
- 问题:这种状态无关的先验不能有效地解耦不同技能的表示
观察到的问题:
- 角色频繁快速切换技能
- 导致抽搐的动作和偶尔摔倒
- 下游控制策略效率低下(如方向控制任务中难以保持恒定方向)
原因分析:
- 状态无关的先验分布没有提供足够的信息用于正则化
- 编码器计算出不一致的技能分布
- 相同的技能在不同状态下被编码到潜在空间的不同部分
1.4 本文方法
论文提出了 ControlVAE 框架:
核心创新:
-
状态条件先验分布 (State-Conditional Prior)
- p(z|s) 而非 p(z)
- 根据当前角色状态生成更合适的技能嵌入
- 在下游任务中表现优于非条件先验
-
基于世界模型的学习 (Model-Based Learning)
- 学习可微的世界模型近似模拟系统动力学
- 世界模型提供直接监督信号
- 实现高效稳定的训练
-
数据平衡策略 (Data Balancing)
- 解决简单动作占用过多训练样本的问题
- 确保困难技能也能被有效学习
框架能力:
- 从多样化无组织动作序列学习
- 潜在空间采样生成真实行为
- 支持各种下游任务(高度控制、方向控制、转向控制、风格控制)
二、核心贡献
-
ControlVAE 框架
- 基于 VAE 的生成式控制策略
- 状态条件先验分布
- 可微世界模型
-
模型强化学习算法
- 使用世界模型进行直接监督
- 训练稳定高效
- 支持多种下游任务
-
数据平衡技术
- 基于状态价值的采样
- 确保困难技能的学习
-
多样化任务演示
- 高度控制、方向控制、转向控制
- 风格迁移和控制
三、大致方法
3.1 框架概述
┌─────────────────────────────────────────────────────────────────┐
│ ControlVAE System │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 输入:无组织动作数据集 D = {τ̃_i} │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ ControlVAE (生成式控制策略) │ │
│ │ - 编码器 q(z|s_t, s_{t+1}): 状态转移 → 技能嵌入 │ │
│ │ - 解码器/策略 π(a|s,z): 状态 + 技能 → 动作 │ │
│ │ - 条件先验 p(z|s): 状态 → 技能先验分布 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ World Model (世界模型) ω(s'|s,a) │ │
│ │ - 预测下一状态:给定当前状态和动作 │ │
│ │ - 可微,允许梯度反向传播 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ 训练:最大化 ELBO + 动作正则化 │
│ 使用世界模型生成合成轨迹进行训练 │
│ │
│ 下游任务:训练高层策略 μ_g(s) → z │
│ 使用学到的技能嵌入完成特定任务 │
│ │
└─────────────────────────────────────────────────────────────────┘
3.2 核心组件
(1) 生成过程
ControlVAE 基于变分自编码器 (VAE) 框架。
ELBO (Evidence Lower Bound): $$\mathcal{L} = \mathbb{E}{q(z|s_t,s{t+1})}[\log p(s_{t+1}|s_t,z)] - D_{KL}(q(z_t|s_t,s_{t+1}) | p(z_t|s_t))$$
- 第一项:重建损失(鼓励准确预测下一状态)
- 第二项:KL 散度(鼓励后验分布接近先验分布)
(2) 状态条件先验
标准 VAE 先验的问题:
- p(z) = N(0,I) 是状态无关的
- 导致技能表示不一致
本文的条件先验: $$p(z_t|s_t) \sim \mathcal{N}(\mu_p(s_t; \theta_p), \sigma_p^2 I)$$
- 均值 μ_p 是神经网络,输入是当前状态 s_t
- 方差 σ_p 是超参数
- 根据当前状态生成合适的先验分布
(3) 策略表示
技能条件策略: $$\pi(a_t|s_t, z_t) \sim \mathcal{N}(\mu_\pi, \Sigma_\pi)$$
- 均值 μ_π(s_t, z_t; θ_π) 是神经网络
- 输入:状态 s_t 和技能 z_t
- 输出:动作分布(PD 控制器目标)
(4) 编码器
近似后验分布: $$q(z_t|s_t, s_{t+1}) \sim \mathcal{N}(\mu_q(s_t, s_{t+1}), \sigma_q^2 I)$$
- 输入:状态转移 (s_t, s_{t+1})
- 输出:技能嵌入 z_t
训练技巧:设置 μ_q 使得 KL 散度计算简化: $$D_{KL}(q | p) = \frac{\mu_q^T \mu_q}{2\sigma_p^2}$$
四、训练细节
4.1 世界模型
模型结构
世界模型学习预测下一状态: $$\omega(s_{t+1}|s_t, a_t) \sim \mathcal{N}(\mu_\omega(s_t, a_t), \Sigma_\omega(s_t, a_t))$$
输出:
- 均值 μ_ω(s_t, a_t): 预测的下一状态
- 协方差 Σ_ω(s_t, a_t) = diag(σ_ω²): 预测不确定性
世界模型训练
损失函数: $$\mathcal{L}\omega = \mathbb{E}{s_t, a_t, s_{t+1}}[||s_{t+1} - \mu_\omega(s_t, a_t)||W^2 + ||\log \sigma\omega + \frac{(s_{t+1} - \mu_\omega)^2}{2\sigma_\omega^2}||_1]$$
- 第一项:状态预测误差
- 第二项:不确定性校准
训练方式:
- 从经验缓冲区采样真实轨迹
- 最小化预测误差
4.2 ControlVAE 训练
损失函数
总损失: $$\mathcal{L} = \mathcal{L}{rec} + \mathcal{L}{kl} + \mathcal{L}_{act}$$
重建损失: $$\mathcal{L}{rec} = \sum{t=0}^{T-1} \gamma^t \mathbb{E}{q, \pi}[||\tilde{s}{t+1} - \mu_\omega(s_t, a_t)||_W^2]$$
- s̃_{t+1}: 参考轨迹的下一状态
- s_t: 合成轨迹的当前状态
- a_t: 策略生成的动作
KL 损失: $$\mathcal{L}{kl} = \sum{t=0}^{T-1} \gamma^t \frac{||\mu_q(s_t, \tilde{s}_{t+1})||_2^2}{2\sigma_p^2}$$
动作正则化: $$\mathcal{L}{act} = \sum{t=0}^{T-1} \gamma^t (w_{a1}||a_t||1 + w{a2}||a_t||_2^2)$$
- 防止过度的控制输入
- 产生更平滑的动作
合成轨迹生成
训练过程:
- 从参考轨迹 D 中选择随机起始状态 s̃_0
- 使用策略 π(a|s,z) 在世界模型 ω 中展开轨迹
- 技能 z_t 从后验 q(z|s_t, s̃_{t+1}) 采样
- 使用重参数化技巧保证梯度反向传播
折扣因子:γ = 0.95
- 降低不准确状态的权重
- 合成轨迹会随时间偏离真实轨迹
4.3 数据平衡策略
问题
- 数据集中包含多样化技能(走路、跑步、跳跃、起身等)
- 简单动作(如走路)产生更长的模拟轨迹
- 占据经验缓冲区,使 ControlVAE 难以学习困难技能
解决方案:基于状态的采样
状态价值计算: $$V_t^* = \sum_{k=0}^{T-t} \gamma^k r_{t+k} + \gamma^{T+1-t} V_{T+1}$$ $$V_t = (1-\alpha)V_t + \alpha V_t^*$$
奖励定义: $$r_t = \exp(-||W(\tilde{s}_t - s_t)||_1 / T_V)$$
- T_V = 20: 温度参数
- 跟踪误差越小,奖励越高
采样概率: $$P(s_t) \propto \frac{1}{\max(0.01, V_t)}$$
- 低价值状态(困难技能)有更高采样概率
- 每 200 个 epoch 更新一次价值
4.4 轨迹采样器
数据增强策略:
- 在模拟过程中随机切换参考动作片段
- 鼓励学习动作之间的新过渡
- 新的起始状态也使用数据平衡策略选择
效果:
- 许多切换会导致角色摔倒(姿势/速度不匹配)
- 角色在训练中自动学习恢复策略
- 鼓励先验分布嵌入多样化的动作过渡
4.5 训练算法
Algorithm 1: ControlVAE Training
输入:动作数据集 D
1: 初始化世界模型 ω, ControlVAE (π, q, p)
2: B ← ∅ // 经验缓冲区
3: for epoch = 1, ... do
4: // 轨迹收集
5: while |B'| < N_B' do
6: 根据状态价值从 D 采样起始状态 s̃_0
7: s_0 ← s̃_0
8: for t = 0, 1, ... do
9: z_t ← q(z|s_t, s̃_{t+1}) // 重参数化采样
10: a_t ← π(a|s_t, z_t)
11: s_{t+1} ← ω(s_t, a_t) // 模拟或世界模型
12: if 摔倒或超时 then break
13: end for
14: 存储轨迹到 B'
15: end while
16: B ← B ∪ B' // 替换最旧的轨迹
17:
18: // 更新世界模型
19: for step = 1, ..., 8 do
20: 从 B 采样批次 {τ*}
21: 计算 L_ω 并更新 ω
22: end for
23:
24: // 更新 ControlVAE
25: 从 B 采样起始状态生成合成轨迹
26: 计算 L_rec + L_kl + L_act
27: 更新 π, q, p
28:
29: // 更新状态价值
30: if epoch % 200 == 0 then
31: 根据轨迹更新 V_t
32: end if
33: end for
4.6 实现细节
| 参数 | 值 |
|---|---|
| 经验缓冲区大小 N_B | 50,000 |
| 每 epoch 轨迹数 N_B' | 2,048 |
| 最大轨迹长度 T_max | 512 |
| 世界模型批次大小 N_w | 512 |
| 世界模型轨迹长度 T_w | 8 |
| ControlVAE 批次大小 N_VAE | 512 |
| ControlVAE 轨迹长度 T_VAE | 24 |
| 折扣因子 γ | 0.95 |
| 早终止时间 T_term | 1 秒 |
| 早终止距离 d_max | 0.5m |
网络架构:
- 所有网络使用 3 层 MLP
- 隐藏层维度:512
- ReLU 激活
训练时间:
- 20,000 次迭代
- 约 50 小时(4 线程并行)
- CPU: Intel Xeon Gold 6240 @ 2.60GHz
- GPU: NVIDIA GTX 2080Ti
五、下游任务
训练好 ControlVAE 后,可以学习高层策略来完成各种任务。
5.1 高度控制
任务:控制角色的身高
损失函数: $$\mathcal{L}_g = H \cdot h_0$$
- h_0: 角色根关节高度
- H ∈ {-1, 1}: 任务参数
- H = -1: 蹲下直到躺在地上
- H = 1: 站起来并尽可能跳高
5.2 方向控制
任务:朝目标方向以目标速度移动
损失函数: $$\mathcal{L}g = w{\theta_h}|\theta_h^* - \theta_h| + w_v \frac{|v^* - v|}{\max(v^*, 1)}$$
- θ_h: 当前朝向
- v: 当前速度
- θ_h^*: 目标朝向
- v^*: 目标速度 [0, 3] m/s
- 权重:(w_θ, w_v) = (2.0, 1.0)
5.3 转向控制
任务:同时控制朝向和行进方向
损失函数: $$\mathcal{L}g = w{\theta_h}|\theta_h^* - \theta_h| + w_{\theta_v}|\theta_v^* - \theta_v| + w_v \frac{|v^* - ||\bar{v}_0||_2|}{\max(v^*, 1)}$$
- θ_v: 行进方向角度
- v_0: 根节点线速度的平面分量
5.4 风格控制
任务:在完成目标的同时保持特定风格(如跛行、悲伤行走)
方法:使用对抗训练
损失函数: $$\mathcal{L}g = \mathcal{L}{g'} + w_D \mathcal{L}_D + w_C \mathcal{L}C + w_r \mathcal{L}{reg}$$
- L_{g'}: 目标任务损失
- L_D: 对抗损失(区分真实/生成动作)
- L_C: 分类器损失(确保正确的技能)
- L_{reg}: 正则化项
鉴别器训练: $$\min_D \mathbb{E}{\tau_c}[(D(s_t, s{t+1}; c) - 1)^2] + \mathbb{E}{\tau_g}[(D(s_t, s{t+1}; c) + 1)^2] + w_g \mathbb{E}_{\tau_c}[||\nabla D||^2]$$
六、实验与结论
6.1 角色模型
- 自由度: 未指定(标准人形角色)
- 动作数据集: 包含走路、跑步、跳跃、起身等多样化长序列
6.2 评估结果
重建能力
- 使用学到的后验 q(z|s,s') 作为跟踪控制
- 角色准确执行输入动作
- 在动作切换时自动平滑过渡
- 极端情况下摔倒后自动恢复(起身动作不在数据集中)
随机采样
- 从条件先验 p(z|s) 随机采样
- 角色执行多样化技能:
- 停止然后开始走路
- 随机转向
- 单脚跳、跳跃等
6.3 学习曲线
- 约 10,000 次迭代后开始收敛
- 动作质量持续提升
- 完整训练 20,000 次迭代
6.4 下游任务表现
| 任务 | 描述 | 结果 |
|---|---|---|
| 高度控制 | 蹲下/站起/跳跃 | ✅ 能够精确控制 |
| 方向控制 | 朝目标方向移动 | ✅ 保持目标方向和速度 |
| 转向控制 | 独立控制朝向和行进 | ✅ 实现解耦控制 |
| 风格控制 | 保持特定行走风格 | ✅ 自然风格迁移 |
七、局限性
-
训练时间
- 约 50 小时(虽有并行)
- 对于实时应用仍然较长
-
世界模型误差累积
- 合成轨迹随时间偏离真实轨迹
- 使用折扣因子缓解但不能完全解决
-
技能表示维度
- 固定维度的潜在空间可能限制技能多样性
- 更复杂的技能可能需要更大的潜在空间
-
早终止策略
- 头部跟踪误差阈值可能过于简单
- 某些技能(如地面动作)可能被错误终止
-
数据依赖性
- 需要多样化的动作数据集
- 数据集中没有的技能难以学习
八、启发
8.1 方法学启发
-
条件先验的优势
- 状态条件先验比标准正态先验更有效
- 提供额外的上下文信息
- 类似思想可应用于其他生成模型
-
模型强化学习的价值
- 世界模型提供直接监督信号
- 训练更稳定、样本效率更高
- 避免了奖励工程的困难
-
数据平衡的重要性
- 简单样本会主导训练
- 需要显式平衡策略
- 基于价值的采样是有效方法
8.2 与相关工作对比
| 方法 | 先验类型 | 学习方式 | 技能多样性 |
|---|---|---|---|
| ControlVAE | 状态条件 | 模型强化学习 | 高 |
| AMP | 无显式先验 | 对抗模仿 | 高 |
| ASE | 球形均匀 | 对抗 + 无监督 | 非常高 |
| MCP | 组合权重 | 强化学习 | 中等 |
8.3 实际应用价值
- 游戏动画: 生成多样化 NPC 行为
- 虚拟现实: 实时角色控制
- 机器人: 技能学习和迁移
- 影视动画: 自动生成中间动作
九、遗留问题
9.1 开放性问题
-
潜在空间结构
- 技能在潜在空间中如何组织?
- 能否实现更细粒度的技能控制?
-
零样本技能组合
- 能否组合已学技能完成新任务?
- 如何实现技能的层次化表示?
-
世界模型改进
- 能否使用更强大的世界模型(如 Transformer)?
- 如何处理长视野预测?
-
多角色泛化
- 能否在一个模型中学习多个角色的技能?
- 如何实现形态学迁移?
9.2 未来方向
论文提到的未来工作:
- 扩展到更复杂的技能
- 与高层任务规划结合
- 改进世界模型准确性
十、关键公式总结
| 公式 | 含义 |
|---|---|
| p(z_t | s_t) = N(μ_p(s_t), σ_p²I) |
| L = L_rec + L_kl + L_act | ControlVAE 总损失 |
| L_rec = Σ γ^t E[ | |
| V_t ∝ 1/max(0.01, V_t) | 数据平衡采样概率 |
| L_g = L_g' + w_D L_D + w_C L_C | 风格控制损失 |
十一、代码与资源
- 项目主页: https://github.com/HeyuanYao/ControlVAE
- 代码: GitHub 开源
- 视频: 项目主页提供演示视频
笔记说明:ControlVAE 提出了一种基于模型的学习框架,结合 VAE 和世界模型实现高效的生成式控制。理解本文有助于学习基于物理的角色控制中的生成模型方法,与 AMP、ASE 等工作形成对比和互补。