DeepMimic: Example-Guided Deep Reinforcement Learning of Physics-Based Character Skills
论文信息: ACM Transactions on Graphics (SIGGRAPH 2018), Xue Bin Peng et al., UC Berkeley/UBC
Link: 项目主页
一、核心问题
1.1 研究背景
基于物理的角色动画领域有一个长期目标:将数据驱动的行为指定与物理模拟执行系统相结合,从而实现:
- 对扰动的真实响应
- 对环境变化的适应能力
传统方法的局限:
| 方法类型 | 特点 | 局限性 |
|---|---|---|
| 运动跟踪控制器 | 显式跟踪参考动作 | 难以修改动作;恢复能力有限;实现复杂 |
| 手工设计奖励的 RL | 用强化学习合成控制器 | 动作不自然;需要大量人工设计奖励 |
| GAIL 等模仿学习 | 从数据学习奖励函数 | 运动质量仍不如传统动画方法 |
| DeepLoco (Peng 2017) | 添加模仿项到奖励函数 | 固定初始状态;仅适用于 locomotion |
数据使用方式对比:
| 方法 | 数据角色 | 使用方式 | 约束强度 | 灵活性 |
|---|---|---|---|---|
| 运动跟踪 | Ground Truth | 逐帧跟踪参考动作 | 硬约束 | 低 |
| 纯 RL | 不使用 | 仅靠奖励函数引导 | 无约束 | 高(但动作不自然) |
| GAIL | Discriminator 正样本 | 对抗学习区分真假 | 软约束 | 中 |
| DeepLoco | 奖励函数参考(模仿项) | r_pose 鼓励姿势接近参考动作 | 软约束 | 中(仅 locomotion) |
| DeepMimic | 奖励函数参考 | 直接奖励相似度 + RSI | 软约束 | 高 |
关键区别:
- 运动跟踪:数据是"必须跟随的轨迹",控制器被绑死在参考动作上
- 纯 RL:完全不使用动作数据,只靠奖励函数,容易产生"奇怪但有效"的步态
- GAIL:数据是"真样本",用于训练判别器,但训练不稳定
- DeepLoco:数据是"风格参考",通过 r_pose 奖励模仿,但固定初始状态,只能学 locomotion
- DeepMimic:数据是"鼓励相似的目标",策略有自由度调整动作以完成任务 + RSI 支持动态动作
1.2 核心问题
如何构建一个系统,能够:
- 接受艺术家或动捕演员提供的一组参考动作
- 生成有目标的、物理真实的行為
- 对扰动有鲁棒性
- 能够完成用户指定的任务目标
1.3 现有方法及其局限性
现有 RL 方法的挑战:
- 难以指定自然运动的奖励函数
- 没有生物力学模型时,容易产生不自然步态
- 需要人工设计奖励函数(如效率惩罚、冲击惩罚等)
什么是生物力学模型? 关于"生物体应该如何运动"的先验知识。DeepMimic 从运动捕捉数据中隐式学习这种先验(通过 r_pose 奖励鼓励姿势接近真人动作),而不是显式建模肌肉 - 骨骼系统或手工设计运动学约束。
DeepLoco 的局限:
- 固定初始状态
- 无法完成高度动态的动作
- 仅展示在 locomotion 任务上
1.4 本文方法
论文提出了 DeepMimic 框架:
核心思想:
- 直接奖励学习到的控制器产生与参考动画数据相似的动作
- 同时实现额外的任务目标
- 结合深度强化学习 (PPO) 与动作模仿
关键创新:
- 相位感知策略 (Phase-Conditioned Policy)
- 参考状态初始化 (Reference State Initialization, RSI)
- 早终止 (Early Termination, ET)
- 多动作整合方法
能力展示:
- 处理关键帧动作
- 高度动态的动作(后空翻、旋转)
- 重定向动作
- 多种角色(人形、Atlas 机器人、恐龙、龙)
二、核心贡献
-
数据驱动的物基动画框架
- 结合目标导向的强化学习与动作数据
- 动作数据可以是 motion capture clips 或关键帧动画
-
高质量运动生成
- 产生的动作质量远超先前工作
- 在无扰动情况下,与参考动作几乎无法区分
-
多动作整合方法
- 多 clip 奖励(max 操作符)
- 用户触发的多技能策略
- 使用价值函数评估过渡可行性的序列策略
-
广泛验证
- 多种角色形态
- 大量技能(locomotion、杂技、武术动作)
三、大致方法
3.1 框架概述
架构变化:相比 DeepLoco (218),DeepMimic 放弃了分层 RL 架构,采用单一策略网络。
方面 DeepLoco (218) DeepMimic (201) 架构 分层 (HLC + LLC) 单一策略 原因 需要环境感知 + 路径规划 参考动作已包含时序信息 训练 分开训练(先 LLC 后 HLC) 端到端训练
┌─────────────────────────────────────────────────────────────────┐
│ DeepMimic Framework │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 输入:参考动作片段 {q̂_t} (mocap 数据或关键帧) │
│ │
│ 强化学习设置: │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 状态 s_t = [p_t, v_t, q_t, ω_t, 相位 φ] │ │
│ │ 动作 a_t = 关节目标位置/速度 (PD 控制器) │ │
│ │ 奖励 r_t = ω_I * r_I + ω_G * r_G │ │
│ │ r_I: 模仿奖励 (跟踪参考动作) │ │
│ │ r_G: 任务奖励 (完成目标) │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ 训练技巧: │
│ - 参考状态初始化 (RSI): 从参考动作的随机状态开始 episode │
│ - 早终止 (ET): 失败时立即终止 episode │
│ │
│ 输出:物理模拟控制器 π(a|s) │
│ │
└─────────────────────────────────────────────────────────────────┘
3.2 方法详解
强化学习公式
强化学习基础:如需了解强化学习的完整数学框架(MDP、贝尔曼方程、价值函数等),请参考 DeepLearningNotes - 强化学习基础
MDP 定义:
- 状态空间 \(S\)
- 动作空间 \(A\)
- 转移动力学 \(p(s'|s, a)\)
- 奖励函数 \(r(s, a, s')\)
- 折扣因子 \(\gamma\)
策略目标: $$\max _{\theta} J(\theta) = \mathbb{E} _{\tau \sim \pi _{\theta}} \left[ \sum _{t=0}^{T} \gamma^t r_t \right]$$
使用 PPO (Proximal Policy Optimization) 算法训练。
PPO 详解:关于 PPO 算法的原理和推导,参考 DeepLearningNotes - Policy Based 算法
四、训练细节
4.1 策略表示
状态空间
$$s_t = [p_t, v_t, q_t, \omega_t, \phi_t]$$
| 变量 | 维度 | 含义 |
|---|---|---|
| \(p_t\) | - | 关节位置 |
| \(v_t\) | - | 关节速度 |
| \(q_t\) | - | 关节方向 |
| \(\omega_t\) | - | 关节角速度 |
| \(\phi_t\) | - | 相位 (关键!) |
相位表示
对于循环动作(如走路、跑步): $$\phi_t = \frac{t \mod T _{cycle}}{T _{cycle}} \in [0, 1]$$
- \(T _{cycle}\): 动作周期长度
- 相位作为策略输入,帮助跟踪进度
动作空间
动作指定 PD 控制器的目标:
- 目标关节旋转 \(q^{target}\)
- 目标关节速度 \(\omega^{target}\)
4.2 奖励函数设计
总奖励
$$r_t = \omega_I r_t^I + \omega_G r_t^G$$
- \(r_t^I\): 模仿奖励
- \(r_t^G\): 任务奖励
- \(\omega_I, \omega_G\): 权重
模仿奖励分解
$$r_t^I = w_p r_t^p + w_v r_t^v + w_e r_t^e + w_c r_t^c$$
权重:\(w_p=0.65, w_v=0.1, w_e=0.15, w_c=0.1\)
(1) 姿势奖励 \(r_t^p\) - 匹配关节方向
$$r_t^p = \exp\left[-2 \sum_j ||\hat{q} _t^j \ominus q _t^j||^2\right]$$
- \(\hat{q} _t^j\): 参考动作第 \(j\) 关节方向
- \(q _t^j\): 模拟角色第 \(j\) 关节方向
- \(\ominus\): 四元数差
(2) 速度奖励 \(r_t^v\) - 匹配关节速度
$$r_t^v = \exp\left[-0.1 \sum_j ||\hat{\dot{q}} _t^j - \dot{q} _t^j||^2\right]$$
(3) 末端执行器奖励 \(r_t^e\) - 匹配手脚位置
$$r_t^e = \exp\left[-40 \sum_e ||\hat{p} _t^e - p _t^e||^2\right]$$
- \(e \in\) {左脚,右脚,左手,右手}
(4) 质心奖励 \(r_t^c\) - 匹配质心位置
$$r_t^c = \exp\left[-40 ||\hat{p} _t^c - p _t^c||^2\right]$$
任务奖励示例
(1) 导航任务 $$r_t^G = \exp\left[-0.25 (v^* - d^* \cdot \dot{x} _t^{root})^2\right]$$
- \(v^*\): 目标速度
- \(d^*\): 目标方向
(2) 打击任务 $$r_t^G = \begin{cases} 1, & \text{target hit} \ \exp[-4||p _t^{tar} - p _t^e||^2], & \text{otherwise} \end{cases}$$
4.3 关键训练技巧
参考状态初始化 (RSI)
问题:学习高度动态动作(如后空翻)非常困难
- 需要从精确的起跳条件开始
- 从固定初始状态开始,agent 很难偶然发现成功的翻转
解决方案:RSI (Reference State Initialization)
- 每个 episode 开始时,从参考动作的随机状态启动
- 让 agent 早期就能接触到"有希望的状态"
效果:
- 加速学习
- 使高度动态动作的学习成为可能
早终止 (Early Termination, ET)
目的:提高训练效率
终止条件:
- 检测到跌倒(躯干接触地面)
- 某些链接低于高度阈值
- 超过最大时间步
好处:
- 快速淘汰失败轨迹
- 专注于成功的样本
4.4 多动作整合方法
方法 1: 多 Clip 奖励
$$r_t^I = \max _j r_t^{I,j}$$
- \(r_t^{I,j}\): 第 \(j\) 个 clip 的模仿奖励
- 策略自行选择最适合当前情况的 clip
- 无需手工设计运动规划器
方法 2: 技能选择器
训练:
- 策略输入包含 one-hot 向量 \(g_t\)(目标技能)
- 只优化当前选中技能的模仿奖励
使用:
- 用户可以运行时指定要执行的技能序列
方法 3: 组合策略
训练:
- 为每个技能训练独立策略 \(\pi_i\)
过渡:
- 使用价值函数 \(V(s)\) 评估从技能 \(i\) 过渡到技能 \(j\) 的可行性
- 选择 \(V_j(s)\) 最高的过渡
五、实验与结论
5.1 实现细节
| 设置 | 值 |
|---|---|
| 算法 | PPO |
| 价值函数 | TD(λ) |
| 优势函数 | GAE(λ) |
| 网络 | 3 层 MLP [1024, 512, 256] |
| 更新频率 | 每 2000 步 |
| 批次大小 | 512 |
5.2 角色模型
| 角色 | DOF | 特点 |
|---|---|---|
| 人形 | 34 | 标准 biped |
| Atlas | - | 机器人 |
| T-Rex | - | 双足恐龙 |
| Dragon | - | 四足飞龙 |
5.3 学习结果
技能学习统计
| 技能 | 周期 (s) | 样本数 (M) | 归一化回报 |
|---|---|---|---|
| Backflip | 1.75 | 72 | 0.729 |
| Cartwheel | 2.72 | 51 | 0.804 |
| Walk | 1.26 | 61 | 0.985 |
| Run | 0.80 | 53 | 0.951 |
| Headspin | 1.92 | 112 | 0.640 |
| Dance | 1.62-2.53 | 67-79 | 0.82-0.86 |
观察:
- 简单 cyclic 技能(走路、跑步)收敛快、回报高
- 复杂技能(头转、后空翻)需要更多样本
多技能结果
| 方法 | 优点 | 缺点 |
|---|---|---|
| 多 Clip 奖励 | 自动选择 clip | 可能偏好某些 clip |
| 技能选择器 | 用户可控 | 需要显式指定 |
| 组合策略 | 模块化 | 过渡可能不平滑 |
5.4 任务表现
导航任务
- 能够跟踪目标方向行走/跑步
- 对速度变化有响应
打击任务
- 能够用脚/手击中目标
- 适应目标位置变化
鲁棒性测试
- 对外部推力有恢复能力
- 能够处理形态变化
六、局限性
-
训练时间
- 复杂技能需要数千万步样本
- 训练时间可能长达数小时到数天
-
技能过渡
- 某些技能之间的过渡不平滑
- 需要仔细设计过渡条件
-
长序列动作
- 对于非常长的动作序列,性能可能下降
- 相位表示对于非循环动作不适用
-
重定向限制
- 形态差异过大时,动作质量下降
- 需要调整奖励权重
-
计算成本
- 需要大量并行模拟
- 对 GPU 资源要求高
-
参考动作质量依赖
- 模仿奖励权重较高,参考动作质量直接影响学习效果
- mocap 数据有噪声 → 学到抖动动作
- 关键帧动画僵硬 → 动作僵硬
- 对比:DeepLoco 可通过任务项平衡,对参考动作质量要求较低
七、启发
7.1 方法学启发
-
模仿 + 任务的平衡
- 纯模仿:动作自然但无目标
- 纯任务:有目标但动作不自然
- DeepMimic: 两者结合,兼顾质量和功能
-
RSI 的重要性
- 对于困难任务,从"中间状态"开始学习
- 类似课程学习的思想
-
相位表示的力量
- 对于循环动作,相位是关键输入
- 帮助策略跟踪动作进度
7.2 工程实践启发
-
奖励函数设计
- 使用指数形式使奖励平滑
- 权重设置需要经验
-
终止条件
- 早终止加速训练
- 但太严格可能错过潜在成功样本
-
网络架构
- 全连接网络足够处理大多数技能
- 对于更复杂任务可能需要更深的网络
7.2 与 DeepLoco (2017) 的对比
DeepMimic 是 DeepLoco 的直接继承者,两者在奖励函数形式上相似,但在多个关键方面有本质区别。
7.2.1 奖励函数对比
两篇论文的奖励函数都采用指数形式相似度奖励,数学形式几乎一样。
| 组件 | DeepLoco | DeepMimic |
|---|---|---|
| 姿势奖励 | r_pose:关节角度接近参考动作 | r^p:关节方向匹配 |
| 速度奖励 | r_vel(权重 0.05) | r^v:关节速度匹配 |
| 末端奖励 | r_end:脚落在目标位置(权重 0.2) | r^e:手脚位置匹配 |
| 质心奖励 | r_com:质心速度(权重 0.1) | r^c:质心位置匹配 |
| 其他 | r_root(骨盆高度)、r_heading(朝向) | 无 |
结论:奖励函数数学形式几乎一样,都是指数形式的相似度奖励。主要差别不在 loss 定义。
7.2.2 关键差别
| 维度 | DeepLoco | DeepMimic | 影响 |
|---|---|---|---|
| 相位表示 | 固定递增 + 双线性变换 | 从参考动作时间戳提取 | 中 |
| 参考动作选择 | 动态选择 + 风格插值 | 固定 clip 或 max 选择 | 中 |
| 初始化 | 固定初始状态 | RSI(从参考动作随机状态开始) | 大 |
| 终止 | 标准终止 | 早终止(跌倒立即结束) | 大 |
| RL 算法 | CACLA | PPO | 中 |
| 适用范围 | locomotion only | 任意物理技能 | 结果 |
7.2.3 相位表示差别
DeepLoco 的相位:
- φ 按时间固定递增(每步 1 秒)
- 使用双线性相位变换强制网络分阶段
- 适合循环步态,不适合非循环动作
DeepMimic 的相位:
- φ = (t mod T_cycle) / T_cycle
- 从参考动作的时间戳来
- 可以处理非循环动作(如后空翻只有 1 次)
7.2.4 参考动作使用方式
DeepLoco:
- 有多个参考动作库(10 个 mocap 片段)
- 每一步根据当前状态和目标,动态选择最匹配的
- 好处:可以平滑切换,支持风格插值
- 风格奖励:r_pose = exp(-Σwᵢ·d² - w_style·c_style)
DeepMimic:
- 可以只用一个 clip,也可以多个 clip
- 多 clip 时用 max 操作符:r^I = max_j(r^I,j)
- 策略自己决定"现在像哪个 clip"
- 不支持风格插值,专注于精确跟踪
7.2.5 训练技巧差别(最关键!)
RSI 的作用(关键!):
DeepLoco:
- 每个 episode 从"站立不动"开始
- 很难学会后空翻(需要蹲下→起跳)
- 只能学 locomotion 类任务
DeepMimic:
- 从参考动作的随机状态开始 episode
- 可能从"半空中"开始,直接学习空中控制
- 可以学后空翻、侧手翻、跳舞等任意技能
7.2.6 任务奖励的权重平衡
| 方面 | DeepLoco | DeepMimic |
|---|---|---|
| 设计哲学 | "风格模仿" | "精确跟踪 + 任务" |
| r_end 权重 | 0.2(重要) | 无独立项(包含在 r^e 中) |
| 灵活性 | 为了踩对位置可牺牲姿势 | 更强调像参考动作 |
DeepLoco 的 r_end(落脚点)是任务导向的:
- 当 r_pose 和 r_end 冲突时,网络会权衡
- 可能为了踩到 HLC 指定的目标位置,牺牲姿势相似度
DeepMimic 的 r^e(末端位置)是模仿的一部分:
- 手脚位置也要像参考动作
- 不为了外部任务牺牲姿势
7.2.7 总结
| 方面 | DeepLoco | DeepMimic |
|---|---|---|
| 历史地位 | 开创性工作 | 集大成者 |
| 核心贡献 | 分层控制 + 环境感知 | RSI + 通用技能学习 |
| 适用场景 | 导航、避障、运球 | 杂技、舞蹈、武术、导航 |
| 关系 | 奠基者 | 站在肩膀上改进 |
一句话:DeepMimic 的奖励函数与 DeepLoco 形式相似,但通过 RSI 让动态动作可学习、相位表示更通用、PPO 比 CACLA 更稳定,从而将适用范围从 locomotion 扩展到任意物理技能。
7.3 与后续工作的联系
- AMP (2021): 改进对抗运动先验
- ASE (2022): 学习可复用技能嵌入
- PDE (2023): 运动扩散模型
- 本文是 Physics-Based Character Control 深度学习的奠基工作之一
八、遗留问题
8.1 开放性问题
-
自动奖励权重调整
- 当前需要手动设置 \(w_p, w_v, w_e, w_c\)
- 能否自适应调整?
-
零样本重定向
- 能否直接迁移到完全不同的形态?
- 如从人到四足动物
-
长视野规划
- 当前是反应式策略
- 如何整合长期规划?
-
与 mocap 数据的更深度融合
- 当前只用位置/方向
- 能否利用力/力矩数据?
8.2 未来方向
论文提到的未来工作:
- 更复杂的技能组合
- 自动技能发现
- 与高层任务规划结合
九、关键公式总结
| 公式 | 含义 |
|---|---|
| \(r_t = \omega_I r_t^I + \omega_G r_t^G\) | 总奖励 |
| \(r_t^I = w_p r_t^p + w_v r_t^v + w_e r_t^e + w_c r_t^c\) | 模仿奖励分解 |
| \(r_t^p = \exp[-2 \sum_j | |
| \(r_t^v = \exp[-0.1 \sum_j | |
| \(\phi_t = (t \mod T _{cycle}) / T _{cycle}\) | 相位 |
十、代码与资源
- 项目主页: https://xbpeng.github.io/projects/DeepMimic
- 代码: 官方未公开完整代码,但有多个开源实现
- isaacgymenvs 包含类似实现
- mimicmotion 等
笔记说明:DeepMimic 是 Physics-Based Character Control 领域里程碑式的工作,首次展示了深度强化学习可以学习高度动态的物理技能。理解本文是学习后续 AMP、ASE 等工作的基础。