里程碑
数据集CMU MoCap
物理感知
实时
输入模态proprioception

DeepMimic:给 RL 一个「参考动作」,它会自己学会后空翻

Xue Bin Peng, Pieter Abbeel, Sergey Levine, Michiel van de Panne(UC Berkeley + UBC)。SIGGRAPH 2018 / arXiv:1804.02717。 locomotiondeep RL + 模仿线索 T01

🧠 一句话心智模型:让模拟器里的角色「照着动捕演员的动作抄」——但不是逐帧硬抄(会摔),而是用 RL 学一个策略:每一步看「当前姿态 + 参考动作现在到第几帧了」,输出「每个关节用力到什么角度」。两个不起眼的小 trick——从参考动作随机初始化(RSI)和摔了就重启(ET)——让它能学会后空翻、旋风踢、恐龙走路这种「飞行 + 接触」的高难动作。

🎯 为什么重要:RL 学动作之前,看起来都像「抽风」

2018 年前,深度 RL 让模拟角色学走路,确实能走,但动作极其难看——上身乱晃、步态怪异、姿态僵硬。问题不在 RL 算法本身,而在reward 太天真:「向前走 = 好」会鼓励它用任何扭曲方式向前。手工设计「美观」reward 几乎不可能。

核心矛盾:RL 强大之处是能探索,但探索出来的解往往是「能完成任务但不像人」的歪门邪道。怎么把它引向「像人」的那部分解空间?答案是给它一段参考动作,让 reward 函数里包含「和参考动作有多像」这一项。

以前也有人这么干(Da Silva 2008, DeepLoco 2017),但效果有限、只能学走路。DeepMimic 把这件事做到了极致:一个框架、25+ 种技能(后空翻、旋风踢、平衡木、跳马、爬行、匍匐前进、起身、头转……),而且对摔打、推力、地形变化都鲁棒。

💡 核心思想:状态里有「参考动作的指针」,reward 里有「像不像」

DeepMimic 的状态、动作、reward 三个组件都很朴素,但合起来非常强大:

参考动作(动捕数据 / 关键帧)q̂_0, q̂_1, ..., q̂_T 例:后空翻 1.75s 的 50 帧姿态序列 状态 s_t · 关节相对位置 · 旋转(四元数) · 线/角速度 · 目标 g_t(方向等) 🔑 相位 φ ∈ [0,1] 「参考动作到第几帧了」 策略 π_θ(a|s,g) 2 FC 层 (1024, 512) + 线性输出 动作 a_t 不是直接出力矩! 而是 PD 控制器的 目标关节角度 → PD 算出实际力矩 → 物理模拟器更新状态 (30Hz 控制 / 1.2kHz 物理) 物理模拟器返回下一状态 s_{t+1} + reward r_t
图 1:DeepMimic 数据流。状态里有个 相位变量 φ("参考动作现在到哪一帧了"),策略用这个 φ 知道当前该模仿哪个目标姿态。动作不是力矩,是 PD 控制器的目标角度——让 RL 不必学底层动力学。

Reward 由两部分组成(任务时 $\omega^I = 0.7, \omega^G = 0.3$):

$$r_t = \omega^I r_t^I + \omega^G r_t^G, \quad r_t^I = w^p r_t^p + w^v r_t^v + w^e r_t^e + w^c r_t^c$$

其中 $r^I$ 是模仿 reward(姿态 0.65 + 速度 0.1 + 末端位置 0.15 + 质心 0.1),$r^G$ 是任务 reward(比如「向目标方向走」)。

🛠️ 两个让高难动作「能学会」的关键 trick

设计心智为什么必要
① Reference State Initialization(RSI)每个 episode 开始,从参考动作的随机一帧初始化角色状态不是总从「后空翻起跳」开始(否则永远学不会落地)。RSI 让角色在训练初期就能遇到「腾空最高点」这种高 reward 状态,从而知道「往这边走是好的」
② Early Termination(ET)角色摔倒(躯干触地)就立刻结束 episode,剩余步给 0 reward不这么干,大部分训练数据会是「躺在地上挣扎」——网络容量被浪费在建模这些无效状态。ET 相当于对数据分布做 curate,让训练聚焦在有用的轨迹上
③ PD 控制器作动作接口RL 输出 PD 控制器的目标关节角,而非直接力矩PD 控制自带局部反馈和阻尼,比直接学力矩稳定得多;让 RL 聚焦在「宏观动作」而非「底层肌肉控制
④ 多片段整合Multi-clip reward(取 max)/ skill selector(one-hot)/ composite policy(用 value function 选)一个策略学不会所有技能;这三种方法分别适合「同类动作(多种走路)」、「按指令切换」、「差异大的动作库」
🔮 直觉:为什么 RSI + ET 是后空翻的「必需品」?
后空翻这种动作,「起跳 → 飞行 → 落地」三段必须串起来。若固定初始状态(站起来),策略必须先学起跳才能碰到飞行段——但起跳要靠「能稳稳落地」这个未来 reward 撬动,鸡生蛋蛋生鸡。RSI 直接把角色扔到飞行段,让它先学会「这个姿势下怎么落地」,再反向链式学起跳。ET 则保证它不会一直躺在地上摸鱼。这两个 trick 让「学一个动作」从「学会 1 个连续动作」简化成「学会 N 个状态到状态的局部映射」

📊 结果:25+ 种高难技能,且鲁棒到能抗 720N 推力

角色DoF状态维 / 动作维学会的技能
Humanoid(人形)34197 / 36Walk, Run, Jog, Jump, Backflip, Frontflip, Sideflip, Cartwheel, Spin, Spinkick, Kick, Punch, Dance A/B, Vault 1/2-Handed, Crawl, Roll, Balance Beam, Getup, Headspin, Baseball Pitch, Landing
Atlas(机器人,169.8kg)31184 / 32Walk (0.988), Run (0.846), Backflip (0.630), Spinkick (0.477)
T-Rex(恐龙,关键帧)55262 / 64Walk (0.979)
Dragon(龙,关键帧)79418 / 94Walk (0.990) —— 当时深度 RL 处理过的最大动作空间
维度数字(来自 PDF)
算法PPO + TD(λ) + GAE(λ),γ=0.95,λ=0.95,clip ε=0.2
训练数据~60M 样本 / 单技能,论文称需「several days per skill」(CPU 训练)
控制 / 物理频率策略 30Hz,物理模拟 1.2kHz(Bullet)
鲁棒性Run 可抗 720N × 0.2s 前向/300N 侧向推力;Spinkick 690N 前向/600N 侧向;Walk 240N 前向/300N 侧向
retargeting同一参考动作可迁移到 Atlas(4× 重)、月球重力(1.622 m/s²)、不规则地形
RSI + ET 消融(Table 5)Backflip 不用 RSI:return 看似不低(0.730 vs 0.791),但动作退化成「站着向后小跳」,永远学不会真正的空中翻(论文原话:"never learns to perform a full mid-air flip");不用 ET:return 暴跌至 0.379,角色摔倒后躺着模仿动作(local optima)——可见 ET 才是保住动态技能的关键
纯任务 reward(无模仿)「扔球」任务学会的是「抱着球跑向目标」——能完成任务但动作难看
关键洞察:DeepMimic 证明了「RL + 参考动作」可以学会接触密集 + 飞行 + 全身协调的高难技能,且训练时间能压到天级。它把深度 RL 在动画领域从「能走」推到了「能后空翻」——是 physics-based character animation 的分水岭。

🌐 在领域中的位置

手工控制器(SIMBICON 等) 纯 RL 学步(DeepLoco 等,动作难看) DeepMimic(RL + 参考动作 + RSI/ET)⭐ Adversarial Motion Prior(AMP)/ PhysDiff(扩散+物理)

DeepMimic 是 「数据驱动 + 物理执行」范式的奠基作。它的核心思想——「用动作捕捉定义『像不像』,用 RL 解决『怎么做』」——后来被 AMP(用判别器替代直接 reward)、PhysDiff(用扩散生成参考动作)等继承。关联线索:T04 物理角色动画谱系

❓ 常见误区

DeepMimic 是模仿学习吗?

不是常规的模仿学习(行为克隆)。它是强化学习——reward 函数里包含「与参考动作的相似度」。BC 是监督学习(直接学「状态→动作」映射),DeepMimic 是 RL(学「怎么行动才能让 reward 最大」)。它能产生参考动作里没有的恢复 / 调整行为,因为它有探索。

RSI 是不是「作弊」?

不算。RSI 只在训练时用,推理时不用。它的作用是「让训练初期遇到高 reward 状态」,相当于课程学习一个好的初始状态分布。最终学到的策略在任何初始状态下都能跑。

它和 PhysDiff 啥关系?

PhysDiff 里的「物理投影策略」就是 DeepMimic 风格的模仿策略——同样的 PPO + 4 项 reward + PD 控制。只不过 DeepMimic 模仿的是动捕数据,PhysDiff 模仿的是扩散去噪的中间产物。可以说 PhysDiff = 扩散 + DeepMimic

为什么 60M 样本就够了?

因为参考动作大大缩小了搜索空间。纯 RL 学走路要亿级样本;DeepMimic 把搜索空间限制在「像参考动作的解」附近,所以 60M 够了。这也是数据/知识注入对 RL 的价值——不是让 RL 更聪明,而是让问题更小。