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需要大量专家策略蒸馏
条件 VAEWon et al. 2022使用标准正态先验,技能解耦不佳
对抗模仿学习AMP (Peng 2021, 2022)需要训练两个间接监督的系统,训练不稳定
MCPPeng et al. 2019技能表示能力有限

1.2 核心问题

如何学习一个生成式控制器,能够

  1. 从多样化的无组织动作序列中学习丰富的技能潜在表示
  2. 通过潜在空间采样生成真实的人类行为
  3. 让高层控制策略复用学到的技能完成各种下游任务
  4. 训练过程稳定高效

1.3 现有方法及其局限性

VAE 在角色控制中的应用

  • 通常使用标准正态分布 N(0,I) 作为先验 p(z)
  • 问题:这种状态无关的先验不能有效地解耦不同技能的表示

观察到的问题

  • 角色频繁快速切换技能
  • 导致抽搐的动作和偶尔摔倒
  • 下游控制策略效率低下(如方向控制任务中难以保持恒定方向)

原因分析

  • 状态无关的先验分布没有提供足够的信息用于正则化
  • 编码器计算出不一致的技能分布
  • 相同的技能在不同状态下被编码到潜在空间的不同部分

1.4 本文方法

论文提出了 ControlVAE 框架:

核心创新

  1. 状态条件先验分布 (State-Conditional Prior)

    • p(z|s) 而非 p(z)
    • 根据当前角色状态生成更合适的技能嵌入
    • 在下游任务中表现优于非条件先验
  2. 基于世界模型的学习 (Model-Based Learning)

    • 学习可微的世界模型近似模拟系统动力学
    • 世界模型提供直接监督信号
    • 实现高效稳定的训练
  3. 数据平衡策略 (Data Balancing)

    • 解决简单动作占用过多训练样本的问题
    • 确保困难技能也能被有效学习

框架能力

  • 从多样化无组织动作序列学习
  • 潜在空间采样生成真实行为
  • 支持各种下游任务(高度控制、方向控制、转向控制、风格控制)

二、核心贡献

  1. ControlVAE 框架

    • 基于 VAE 的生成式控制策略
    • 状态条件先验分布
    • 可微世界模型
  2. 模型强化学习算法

    • 使用世界模型进行直接监督
    • 训练稳定高效
    • 支持多种下游任务
  3. 数据平衡技术

    • 基于状态价值的采样
    • 确保困难技能的学习
  4. 多样化任务演示

    • 高度控制、方向控制、转向控制
    • 风格迁移和控制

三、大致方法

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)$$

  • 防止过度的控制输入
  • 产生更平滑的动作

合成轨迹生成

训练过程

  1. 从参考轨迹 D 中选择随机起始状态 s̃_0
  2. 使用策略 π(a|s,z) 在世界模型 ω 中展开轨迹
  3. 技能 z_t 从后验 q(z|s_t, s̃_{t+1}) 采样
  4. 使用重参数化技巧保证梯度反向传播

折扣因子:γ = 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_B50,000
每 epoch 轨迹数 N_B'2,048
最大轨迹长度 T_max512
世界模型批次大小 N_w512
世界模型轨迹长度 T_w8
ControlVAE 批次大小 N_VAE512
ControlVAE 轨迹长度 T_VAE24
折扣因子 γ0.95
早终止时间 T_term1 秒
早终止距离 d_max0.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 下游任务表现

任务描述结果
高度控制蹲下/站起/跳跃✅ 能够精确控制
方向控制朝目标方向移动✅ 保持目标方向和速度
转向控制独立控制朝向和行进✅ 实现解耦控制
风格控制保持特定行走风格✅ 自然风格迁移

七、局限性

  1. 训练时间

    • 约 50 小时(虽有并行)
    • 对于实时应用仍然较长
  2. 世界模型误差累积

    • 合成轨迹随时间偏离真实轨迹
    • 使用折扣因子缓解但不能完全解决
  3. 技能表示维度

    • 固定维度的潜在空间可能限制技能多样性
    • 更复杂的技能可能需要更大的潜在空间
  4. 早终止策略

    • 头部跟踪误差阈值可能过于简单
    • 某些技能(如地面动作)可能被错误终止
  5. 数据依赖性

    • 需要多样化的动作数据集
    • 数据集中没有的技能难以学习

八、启发

8.1 方法学启发

  1. 条件先验的优势

    • 状态条件先验比标准正态先验更有效
    • 提供额外的上下文信息
    • 类似思想可应用于其他生成模型
  2. 模型强化学习的价值

    • 世界模型提供直接监督信号
    • 训练更稳定、样本效率更高
    • 避免了奖励工程的困难
  3. 数据平衡的重要性

    • 简单样本会主导训练
    • 需要显式平衡策略
    • 基于价值的采样是有效方法

8.2 与相关工作对比

方法先验类型学习方式技能多样性
ControlVAE状态条件模型强化学习
AMP无显式先验对抗模仿
ASE球形均匀对抗 + 无监督非常高
MCP组合权重强化学习中等

8.3 实际应用价值

  • 游戏动画: 生成多样化 NPC 行为
  • 虚拟现实: 实时角色控制
  • 机器人: 技能学习和迁移
  • 影视动画: 自动生成中间动作

九、遗留问题

9.1 开放性问题

  1. 潜在空间结构

    • 技能在潜在空间中如何组织?
    • 能否实现更细粒度的技能控制?
  2. 零样本技能组合

    • 能否组合已学技能完成新任务?
    • 如何实现技能的层次化表示?
  3. 世界模型改进

    • 能否使用更强大的世界模型(如 Transformer)?
    • 如何处理长视野预测?
  4. 多角色泛化

    • 能否在一个模型中学习多个角色的技能?
    • 如何实现形态学迁移?

9.2 未来方向

论文提到的未来工作:

  • 扩展到更复杂的技能
  • 与高层任务规划结合
  • 改进世界模型准确性

十、关键公式总结

公式含义
p(z_ts_t) = N(μ_p(s_t), σ_p²I)
L = L_rec + L_kl + L_actControlVAE 总损失
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 等工作形成对比和互补。