ASE: Large-Scale Reusable Adversarial Skill Embeddings for Physically Simulated Characters

论文信息: ACM Transactions on Graphics (SIGGRAPH 2022), Xue Bin Peng et al., NVIDIA/UC Berkeley/University of Toronto

Link: arXiv:2205.01906


一、核心问题

1.1 研究背景

人类能够完成各种复杂的运动任务,这得益于我们通过多年练习积累的大量通用运动技能库(general-purpose motor skills)。这些技能不仅能让我们执行复杂任务,还能为学习新任务提供强大的先验指导(priors)。

然而,传统的基于物理的角色动画方法采用的是从零开始训练(tabula rasa approach)的范式:

  • 每个新任务都要重新训练一个专用的控制策略
  • 即使是走路、跑步这样的基础技能,也要为每个新任务重新学习
  • 需要大量手动设计奖励函数,工程工作量巨大

1.2 核心问题

如何赋予智能体大量通用的、可复用的技能库,使其能够灵活地应用于各种新任务?

灵感来自计算机视觉和 NLP 领域:这些领域通过大规模预训练 + 下游任务微调的范式取得了巨大成功。论文希望将这种范式引入到物理角色控制领域。

1.3 现有方法及其局限性

方法类型代表性工作局限性
基于优化的方法轨迹优化、强化学习需要手动设计奖励函数,工作量大;不同技能需要不同的启发式设计
基于运动跟踪的方法跟踪参考动作数据难以应用于大规模多样化数据集;需要运动规划器来选择跟踪哪个动作
对抗运动先验 (AMP)Peng et al. 2021虽然能从无结构数据集学习,但每个任务都要从头训练
层次化模型先训练低级技能再组合通常使用运动跟踪,限制了模型产生数据集中未出现行为的能力
无监督强化学习最大化互信息技能发现在复杂高维系统中难以发现有用的行为;难以产生自然的人体运动

1.4 本文方法

论文提出了 ASE (Adversarial Skill Embeddings,对抗技能嵌入) 框架:

核心思想

  1. 预训练阶段:从大规模无标注动作数据集中学习一个通用的低级技能策略 \(\pi(a|s, z)\)
    • 使用对抗模仿学习 + 无监督技能发现
    • 学习多样化的技能库,而不需要精确匹配任何特定动作
  2. 任务训练阶段:针对新任务训练一个高级策略 \(\omega(z|s, g)\)
    • 通过指定潜在技能变量 \(z\) 来控制低级策略
    • 不需要额外的动作数据

关键创新

  • 结合了对抗模仿学习(保证运动质量)和无监督强化学习(保证技能多样性)
  • 使用连续潜在空间表示技能,支持技能之间的平滑插值
  • 能够从超过 100 个多样化动作片段的大规模数据集中学习

二、核心贡献

  1. 可扩展的对抗模仿学习框架

    • 使物理模拟角色能够学习大量复杂、通用的运动技能
    • 技能可以复用于广泛的下游任务
  2. 大规模无结构动作数据训练

    • 能够处理包含 100+ 多样化动作片段的数据集
    • 利用 NVIDIA Isaac Gym 并行模拟器,使用相当于十年的模拟经验进行预训练
  3. 提高技能多样性和迁移效果的设计决策

    • 球形潜在空间设计
    • 多样性目标函数
    • 鲁棒的恢复策略
  4. 无需下游任务动作数据

    • 预训练的低级策略可以使用简单的任务奖励函数完成各种任务
    • 自动生成复杂自然的策略

三、大致方法

3.1 框架概述

flowchart TB
    subgraph PreTraining["预训练阶段 (Pre-training)"]
        M["动作数据集 M<br/>(无标注)"] --> D["判别器 D<br/>(真假判别)"]
        M --> q["编码器 q<br/>(技能识别)"]
        D --> pi["低级策略 π(a\|s,z)<br/>(技能条件策略)"]
        q --> pi
    end

    subgraph Transfer["任务训练阶段 (Transfer)"]
        g["任务目标 g"] --> omega["高级策略 ω(z\|s,g)"]
        s["状态 s"] --> omega
        omega --> pi_fixed["低级策略 π(a\|s,z)<br/>(预训练,固定)"]
        pi_fixed --> output["输出:动作 a"]
    end

3.2 两阶段训练

阶段 1:预训练 (Pre-training)

输入:无标注的动作片段数据集 \(M = {m_i}\)

目标:训练低级技能策略 \(\pi(a|s, z)\)

  • \(s\): 状态(角色身体配置)
  • \(a\): 动作(关节目标旋转)
  • \(z\): 潜在技能变量

训练目标函数: $$\max_{\pi} -D_{JS}(d_{\pi}(s, s') || d_M(s, s')) + \beta I(s, s'; z | \pi)$$

  • 第一项(模仿目标):鼓励策略产生真实行为,匹配数据集的边际状态转移分布
  • 第二项(技能发现目标):鼓励策略学习多样化技能,最大化技能与行为的互信息

阶段 2:任务训练 (Transfer)

输入:任务特定的奖励函数 \(r_G(s, a, s', g)\)

目标:训练高级策略 \(\omega(z|s, g)\)

  • 接收状态 \(s\) 和任务目标 \(g\)
  • 输出潜在技能 \(z\) 来控制低级策略

关键:低级策略\(\pi\)在任务训练阶段保持固定,不需要动作数据

对比 AMP (198) 的"先验需要重新训练"问题

方面AMP (198)ASE (199)
判别器每任务重新训练 D预训练后固定,所有任务复用
低级策略每任务重新训练 \(\pi\)预训练后固定
任务训练完整训练 (D + \(\pi\))只训高级策略 \(\omega\)
样本效率~50M 步/任务~5M 步/任务 (10 倍提升)

解决方案核心

预训练阶段(一次性投资):
├─ 训练判别器 D (学习通用风格先验)
├─ 训练低级策略 π(a|s,z) (学习技能库)
└─ 完成后固定 D 和 π

任务训练阶段(可复用):
├─ 任务 1:只训练 ω₁(z|s,g₁),判别器 D 作为便携式先验
├─ 任务 2:只训练 ω₂(z|s,g₂),D 和 π 都不变
└─ 任务 3:只训练 ω₃(z|s,g₃),...

关键设计:判别器在任务训练时作为"便携式运动先验": $$r_t = w_G r_G(s, a, s', g) - w_S \log(1 - D(s, s'))$$

  • \(D\) 的参数固定,不更新
  • 提供风格奖励,保证动作质量

四、训练细节

强化学习基础:如需了解强化学习的完整数学框架(MDP、贝尔曼方程、价值函数等),请参考 DeepLearningNotes - 强化学习基础

4.1 对抗模仿学习

判别器训练

判别器\(D(s, s')\)用于区分数据集转移和策略产生的转移:

$$\min_D -\mathbb{E}{d_M}[\log D(s, s')] - \mathbb{E}{d_{\pi}}[\log(1 - D(s, s'))] + w_{gp}\mathbb{E}[||\nabla D||^2]$$

其中:

  • \(d_M\): 数据集的状态转移分布
  • \(d_{\pi}\): 策略的状态转移分布
  • \(w_{gp}\): 梯度惩罚系数,提高训练稳定性

策略的对抗奖励

$$r_{adv} = -\log(1 - D(s_t, s_{t+1}))$$

4.2 技能发现目标

问题:AMP 的模式崩溃

在 AMP 中,策略可能只学会数据集的一部分技能(如只学会走路),因为:

  • 对抗奖励 r = -log(1-D) 只鼓励"骗过判别器"
  • 没有鼓励多样性的机制
  • 策略"偷懒":找到一种能拿高分的动作就不再探索

ASE 的解决方案:互信息最大化

$$I(s, s'; z | \pi) = H(s, s' | \pi) - H(s, s' | z, \pi)$$

含义作用
H(s,s' | π)边际状态转移熵整体行为要多样化
H(s,s' | z, π)条件状态转移熵每个技能要独特

直观理解

最大化 I(s,s'; z | π) = 

  最大化 H(s,s' | π)    整体行为分布要广
- 最小化 H(s,s' | z, π) 每个技能的行为要集中

结果:
- z₁ → 走路(集中)
- z₂ → 跑步(集中)
- z₃ → 跳跃(集中)
- ...
- 所有 z 覆盖的行为 → 多样化

为什么互信息能让 z 控制行为?

关键问题:z 是随机采样的,怎么确保策略 π 的输出和 z 有关系?

没有互信息时会发生什么

如果只用对抗奖励 r_adv = -log(1-D(s,s')):

1. 策略发现"走路"能骗过判别器
2. 不管 z 是什么,都输出"走路"
3. z 和行为没有关系 → z 失去控制能力
4. 模式崩溃:只学会一种技能

有互信息最大化时

奖励 = r_adv + β × log q(z|s, s')

训练过程:
1. 策略 π(a|s, z) 尝试用不同 z 产生不同行为
2. 编码器 q(z|s, s') 尝试从行为中识别出 z
3. 如果 z₁ 和 z₂ 产生相同行为 → 编码器无法区分 → log q 变低 → 奖励变低
4. 策略被迫让不同 z 产生不同行为 → 建立 z 与行为的因果关系

迭代过程:
- 迭代 1:z₁→乱动,z₂→乱动,q 无法区分 → 奖励低
- 迭代 2:z₁→像走路,z₂→像跑步,q 开始区分 → 奖励变高
- 迭代 3:z₁→走路(确定),z₂→跑步(确定),q 准确识别 → 奖励最高

结果:z 控制了输出!

变分下界的意义: $$I(s, s'; z | \pi) \geq H(z) + \mathbb{E}{p(z)}\mathbb{E}{p(s,s'|z,\pi)}[\log q(z|s, s')]$$

含义作用
H(z)先验熵(固定)z 是均匀采样,已经最大化
E[log q]编码器识别准确度最大化此项 = 强制 z 与行为相关

结论:z 本身没有意义,但通过互信息最大化,策略学会了让 z 有意义——不同 z 对应不同技能,z 就获得了控制能力。

技能编码器

由于潜在空间是超球面,使用von Mises-Fisher 分布: $$q(z|s, s') = \frac{1}{Z}\exp(\kappa \mu_q(s, s')^T z)$$

  • \(\mu_q(s, s')\): 均值(归一化)
  • \(\kappa\): 缩放因子
  • \(Z\): 归一化常数

编码器训练目标: $$\max_q \mathbb{E}{p(z)}\mathbb{E}{d_{\pi}(s,s'|z)}[\kappa \mu_q(s, s')^T z]$$

技能编码器与 CVAE 的关系

ASE 的技能编码器借用了 CVAE(Conditional Variational Autoencoder) 的变分推断思想,但整体架构不是完整的 CVAE。

CVAE 的 ELBO: $$\log p(x) \geq \mathbb{E}{q(z|x)}[\log p(x|z)] - D{KL}(q(z|x) | p(z))$$

ASE 的变分互信息下界: $$I(s, s'; z | \pi) \geq H(z) + \mathbb{E}{p(z)}\mathbb{E}{p(s,s'|z,\pi)}[\log q(z|s, s')]$$

组件CVAEASE
Encoderq(z|x) 从数据编码 zq(z|s,s') 从行为编码 z
"Decoder"p(x|z) 从 z 重建数据π(a|s,z) 从 z 生成动作
训练目标ELBO = 重建 - KL只有 E[log q](互信息下界)
KL 约束需要(后验接近先验)不需要(z 先验固定均匀)
潜在空间高斯 N(0,I)球面 vMF 分布

关键区别

  1. ASE 没有完整的 Encoder-Decoder 结构

    • CVAE:联合训练 Encoder + Decoder
    • ASE:编码器 q 单独训练,策略 π 用 RL 训练(不是变分推断)
  2. ASE 的策略 π 不是传统解码器

    • CVAE 解码器:最大化重建似然 p(x|z)
    • ASE 策略 π:最大化累积奖励(对抗奖励 + 互信息)
  3. ASE 不需要 KL 散度项

    • CVAE:需要 KL 约束后验接近先验
    • ASE:z 的先验是固定均匀分布,不需要约束

总结

ASE = GAN(判别器)+ CVAE 思想(编码器)+ RL(策略)

├─ 判别器 D(s,s'):来自 GAN,提供"动作质量"信号
├─ 编码器 q(z|s,s'):来自 CVAE 思想,用于互信息估计
└─ 策略 π(a|s,z) / ω(z|s,g):强化学习,不是变分推断

4.3 策略的最终训练目标

$$\begin{aligned} \max_{\pi} \mathbb{E}{p(Z)}\mathbb{E}{p(\tau|\pi,Z)} & \left[ \sum_{t=0}^{T-1} \gamma^t \left( -\log(1 - D(s_t, s_{t+1})) + \beta \log q(z_t|s_t, s_{t+1}) \right) \right] \ & - w_{div} \mathbb{E} \left[ \left( \frac{D_{KL}(\pi(\cdot|s,z_1), \pi(\cdot|s,z_2))}{D_z(z_1, z_2)} - 1 \right)^2 \right] \end{aligned}$$

最后一项是多样性目标,鼓励:

  • 相似的潜在变量\(z_1, z_2\)产生相似的动作分布
  • 不同的潜在变量产生不同的动作分布

多样性目标的作用

问题解决方案
z 随机采样,可能与输出无关多样性目标强制不同 z 产生不同行为
策略可能对 z 不敏感KL 散度项鼓励策略对 z 敏感
潜在空间可能不均匀鼓励平滑插值,支持技能过渡

直观理解

多样性目标 = (KL 散度 / z 距离 - 1)²

- 如果 z₁ 和 z₂ 很接近 (距离小)
  → KL 散度应该小 (行为相似)
  → 否则目标函数惩罚

- 如果 z₁ 和 z₂ 离得远 (距离大)
  → KL 散度应该大 (行为不同)
  → 否则目标函数惩罚

结果:潜在空间平滑,支持技能插值

4.4 潜在空间设计

球形潜在空间

选择:\(Z = {z : ||z|| = 1}\),均匀分布在球面上

采样方法: $$\bar{z} \sim \mathcal{N}(0, I), \quad z = \bar{z} / ||\bar{z}||$$

优势

  • 有界潜在空间,减少低质量样本
  • 便于高级策略的探索 - 利用任务训练
  • 支持技能插值

4.5 提高响应性的设计

问题

标准训练可能导致策略对潜在变量变化不响应(在 episode 开始时采样\(z_0\)后,后续改变\(z\)无效)

解决方案

  1. 时序潜在变量序列:\(Z = {z_0, z_1, ..., z_{T-1}}\)

    • 每个时间步条件于不同的\(z_t\)
    • 鼓励模型学习技能之间的转换
  2. 多样性目标:鼓励不同\(z\)产生不同行为

为什么需要时序潜在变量?

如果整个 episode 只用一个 z₀:
- 策略可能学会"忽略后续的 z"
- z 只在开始时有效,后续无法切换技能

使用时序序列 Z = {z₀, z₁, ..., z_{T-1}}:
- 每个时间步都条件于不同的 z_t
- 策略必须"时刻关注 z 的变化"
- 支持技能之间的平滑过渡

例如:
- t=0: z₀=走路 → 角色开始走路
- t=10: z₁=跑步 → 角色切换到跑步
- t=20: z₂=跳跃 → 角色跳跃

4.6 鲁棒恢复策略

训练技巧:在预训练时,每个 episode 有 10% 概率从随机跌倒状态开始

  • 从随机高度和方向放下角色
  • 学习从跌倒中恢复的策略

好处:恢复策略可以无缝集成到下游任务,不需要为每个新任务单独训练恢复能力

4.7 高级策略设计

动作空间设计

高级策略\(\omega\)输出未归一化的潜在变量\(\bar{z}\): $$\omega(\bar{z}|s, g) = \mathcal{N}(\mu_{\omega}(s, g), \Sigma_{\omega})$$

然后归一化:\(z = \bar{z} / ||\bar{z}||\) 后输入低级策略

探索 - 利用权衡

  • 训练初期:\(\mu_{\omega} \approx 0\),在球面上均匀采样(高探索)
  • 训练后期:\(\mu_{\omega}\)远离原点,集中在有效技能(高利用)
  • 通过调整距原点距离来控制技能分布的熵

z 与状态 s 的关系

关键理解:ASE 中 z 与状态 s 的关系在不同阶段是不同的。

阶段z 的来源z 与 s 的关系
预训练从 p(z) 随机采样无关(独立于 s)
任务训练从 ω(z|s,g) 采样有关(通过 ω 关联)
推理从 ω(z|s,g) 采样有关(通过 ω 关联)

预训练阶段

z 从球面均匀分布随机采样:
1. ž ~ N(0, I)
2. z = ž / ||ž||
3. 策略 π(a|s, z) 学习"对任何 z 都能执行"

关键:z 与 s 无关,策略必须学会"对于任何 z 都能执行对应技能"
→ 互信息最大化强制不同 z 产生不同行为
→ 学到真正解耦的技能库

任务训练/推理阶段

z 从高级策略 ω(z|s,g) 输出:
1. ž ~ N(μ_ω(s,g), Σ_ω)
2. z = ž / ||ž||
3. 低级策略 π(a|s, z) 执行

关键:ω 学习"给定状态 s 和目标 g,应该用什么 z"
→ z 与 s 的关联是后天学习的,不是先验设计的
→ 高级策略可以灵活学习任何 z-s 映射

与 ControlVAE (202) 的区别: | 方面 | ASE (199) | ControlVAE (202) | |------|-----------|------------------| | 预训练先验 | p(z) 球面均匀(与 s 无关) | p(z|s) 状态条件高斯(与 s 有关) | | z 与 s 关联 | 后天学习(通过 ω) | 先天设计(通过 p(z|s)) | | 技能解耦 | 真正解耦(z 独立于 s) | 可能不够解耦 | | 灵活性 | 高(ω 可学习任何映射) | 低(p(z|s) 固定) |

ASE 的设计优势

  1. 预训练时 z 与 s 无关 → 策略学会"对任何 z 都能执行" → 真正的技能库
  2. 任务训练时学习 ω(z|s,g) → 灵活适应不同任务需求
  3. 技能多样性由互信息保证,不是由先验设计

运动先验

为了提高下游任务的运动质量,使用预训练的判别器作为便携式运动先验

$$r_t = w_G r_G(s_t, a_t, s_{t+1}, g) - w_S \log(1 - D(s_t, s_{t+1}))$$

  • \(r_G\): 任务奖励
  • \(-\log(1 - D)\): 风格奖励(来自判别器)
  • 判别器参数在任务训练时固定

4.8 模型架构

组件架构
低级策略 \(\pi\)[1024, 1024, 512] FC + ReLU, 输出高斯分布
价值函数 \(V\)[1024, 1024, 512] FC + ReLU, 单输出
编码器 \(q\) + 判别器 \(D\)共享网络,分离输出层
高级策略 \(\omega\)[1024, 512] FC + ReLU

4.9 角色模型

  • 37 自由度人形角色
  • 配备剑和盾
  • 状态空间:120D(根高度、旋转、速度,关节旋转/速度,手脚位置等)
  • 动作空间:31D(PD 控制器目标关节旋转)

4.10 训练算法

Algorithm 1: ASE 预训练
1: 输入 M: 参考动作数据集
2: D ← 初始化判别器
3: q ← 初始化编码器
4: π ← 初始化策略
5: V ← 初始化价值函数
6: while not done do
7:   B ← ∅ 初始化数据缓冲区
8:   for trajectory i = 1, ..., m do
9:     Z ← 从 p(z) 采样潜变量序列 {z₀, z₁, ..., z_{T-1}}
10:     τᵢ ← 用π和 Z 收集轨迹
11:     记录 Z 到 τᵢ
12:     for t = 0, ..., T-1 do
13:       r_t ← -log(1 - D(s_t, s_{t+1})) + β log q(z_t|s_t, s_{t+1})
14:       记录 r_t 到 τᵢ
15:     end for
16:     存储 τᵢ 到 B
17:   end for
18:   更新编码器 q (Eq. 13)
19:   更新判别器 D (Eq. 14)
20:   用 PPO 更新策略π和价值函数 V (Eq. 15)
21: end while

五、实验与结论

5.1 下游任务

论文设计了多种任务来评估模型能力:

(1) Reach(精确控制)

  • 目标:将剑尖移动到目标位置
  • 奖励:\(r_G = \exp(-5 ||x^* - x^{sword}||^2)\)
  • 评估:物理数据驱动的逆运动学能力

(2) Speed(速度控制)

  • 目标:沿目标方向以目标速度移动
  • 目标速度范围:\(v^* \in [0, 7]\) m/s
  • 评估:利用不同运动技能的能力

(3) Steering(转向控制)

  • 目标:沿目标方向移动,同时面向目标朝向
  • 评估:组合不同技能的能力

(4) Interact(交互任务)

  • 目标:跑到目标位置并击倒它
  • 评估:复杂任务规划和技能组合

5.2 实验结果

定性结果

  • 角色能够自然地完成各种任务
  • 技能库包含:行走、跑步、转身、蹲伏、踢腿、剑挥砍、盾击等
  • 能够自动组合不同技能完成任务

定量结果

  • 与从零训练的方法相比,样本效率显著提升
  • 在复杂任务上成功率更高
  • 运动质量更高(通过判别器评分)

5.3 消融实验

变体描述结果
无技能发现只用对抗模仿技能多样性降低
无多样性目标移除\(w_{div}\)项模式坍塌更严重
高斯潜在空间\(\mathcal{N}(0,I)\)而非球形低质量样本更多
无恢复训练不从跌倒状态开始抗干扰能力弱

六、局限性

  1. 数据集依赖性

    • 运动质量依赖于训练数据集的多样性
    • 数据集中没有的运动类型难以生成
  2. 计算资源需求

    • 需要大规模并行模拟(使用 NVIDIA Isaac Gym)
    • 预训练时间长(相当于十年的模拟经验)
  3. 技能粒度

    • 潜在空间的语义解释性有限
    • 难以精确控制特定技能属性
  4. 任务范围

    • 主要评估了 locomotion 和简单交互任务
    • 更复杂的操作任务(如抓取物体)未充分探索
  5. 角色泛化

    • 技能绑定到特定角色形态
    • 迁移到不同体型的角色需要重新训练
  6. 预训练成本

    • 预训练需要大量样本(约 1B 步)
    • 但这是"一次性投资":训练完成后,所有下游任务可以复用
    • 对比 AMP (198) 的"每个任务重新训练先验": | 方法 | AMP | ASE | |------|-----|-----| | 先验训练 | 每任务重新训练 | 预训练一次,所有任务复用 | | 10 个任务总时间 | 10×(T_pre + T_task) | T_pre + 10×(0.1×T_task) |
    • 当有 5+ 下游任务时,ASE 的总训练时间显著低于 AMP

七、启发

7.1 方法学启发

  1. 预训练 + 微调范式在物理控制中的成功应用

    • 类似于 NLP 和 CV 领域的 BERT、GPT 等预训练模型
    • 为物理角色控制提供了一个通用基础模型
  2. 对抗学习 + 无监督学习的结合

    • 对抗学习保证质量
    • 无监督学习保证多样性
    • 两者的平衡很重要
  3. 潜在空间设计的重要性

    • 球形空间优于高斯空间
    • 有界空间减少异常行为
    • 便于探索 - 利用权衡的编码

7.2 工程实践启发

  1. 大规模并行训练的必要性

    • 物理模拟需要大量样本
    • GPU 并行模拟是关键
  2. 鲁棒性训练技巧

    • 随机初始状态提高抗干扰能力
    • 这种简单技巧非常有效
  3. 模块化设计

    • 低级策略固定,只需训练高级策略
    • 降低下游任务的训练难度

7.3 与其他工作的联系

  • AMP (Adversarial Motion Priors) 的关系:

    • AMP 每个任务从头训练,ASE 预训练可复用
    • ASE 可以看作 AMP 的扩展和改进
  • DILOW/VAE 等表示学习的关系:

    • 都使用互信息最大化
    • ASE 专门针对物理控制设计
  • DeepLoco (2017) 的关系:

    • 两者都使用分层 RL 架构
    • 但分层目的和训练方式不同(见 8.1.1 节详细对比)

八、与相关工作的对比

8.1 ASE vs AMP:核心区别

ASE (2022) 是 AMP (2021) 的直接扩展,两者都来自同一研究团队(Xue Bin Peng et al.)。

核心洞察

两篇论文都使用了类似的对抗训练方式(GAIL 变体),但解决的问题不同。

  • AMP:解决动作评价问题——用对抗学习替代人工设计的跟踪误差函数
  • ASE:解决技能复用问题——让学到的技能可以复用于多个下游任务

(0) 核心问题对比

维度AMP (2021)ASE (2022)
核心问题如何让动作评价无需人工设计如何让技能可以复用于多个任务
要解决的痛点跟踪方法需要精心设计误差函数、相位同步、动作选择器AMP 每任务从零训练,无法复用已学技能
解决方案对抗运动先验(判别器自动评价动作质量)预训练技能库 + 两阶段训练
类比评价标准从"人工规则"变成"像不像视频"先学基本功,新任务只学怎么组合基本功

(1) 训练范式对比

维度AMPASE
训练阶段单阶段(联合训练策略 + 判别器)两阶段(预训练 + 任务训练)
潜在空间✓ 球形潜在空间 \(Z={z:
技能多样性依赖数据集对抗模仿 + 互信息最大化
技能复用✗ 每任务重新训练✓ 低级策略固定
数据规模单任务小数据集100+ 动作片段
编码器✓ \(q(z
多样性目标✓ 鼓励不同\(z\)产生不同行为

(2) 目标函数对比

AMP 的训练目标: $$\max_{\pi} \mathbb{E}\left[\sum \gamma^t \left(w_G r^G_t + w_S r^S_t\right)\right]$$

  • \(r^G\): 任务奖励
  • \(r^S = -\log(1-D(s,s'))\): 风格奖励

ASE 的预训练目标: $$\max_{\pi} -D_{JS}(d_{\pi} || d_M) + \beta I(s, s'; z | \pi)$$

  • 第一项:对抗模仿(同 AMP)
  • 第二项:互信息最大化(新增,用于技能发现)

ASE 的任务训练奖励: $$r_t = w_G r_G(s,a,s',g) - w_S \log(1 - D(s, s'))$$

  • 判别器\(D\)作为便携式运动先验(预训练后固定)

(3) 架构对比

AMP 架构

flowchart LR
    s["状态 s + 控制信号 g"] --> pi["策略 π(a|s,g)"]
    pi <--> D["判别器 D(s,s')"]
    pi --> pd["PD 控制器"]
    pd --> sim["物理仿真"]

ASE 架构

flowchart TB
    subgraph PreTrain["预训练阶段"]
        s1["状态 s + 技能 z"] --> pi_pre["低级策略 π(a|s,z)"]
        pi_pre <--> D_pre["判别器 D(s,s')"]
        s1 --> q["编码器 q(z|s,s')"]
        q --> D_pre
    end

    subgraph TaskTrain["任务训练阶段"]
        s2["状态 s + 任务目标 g"] --> omega["高级策略 ω(z|s,g)"]
        omega --> z_out["技能 z"]
        z_out --> pi_fixed["低级策略 π(a|s,z)<br/>(固定)"]
        pi_fixed --> pd2["PD 控制器"]
        pd2 --> sim2["物理仿真"]
    end

(4) 训练效率对比

方法预训练样本任务训练样本每任务训练时间
AMPN/A~50M 步T
ASE~1B 步~5M 步/任务T_pre + n × 0.1T

结论:当有 10+ 下游任务时,ASE 的总训练时间显著低于 AMP。

(5) 技能多样性对比

AMP 的模式坍塌问题

给定大数据集(走路、跑步、跳跃...)
AMP 可能只学会其中一小部分技能
忽略其他动作

ASE 的解决方案

互信息最大化:I(s, s'; z | π) = H(s,s'|π) - H(s,s'|z,π)

- 最大化边际熵:整体行为要多样
- 最小化条件熵:每个技能要独特

结果:
z₁ → 走路,z₂ → 跑步,z₃ → 跳跃...

(6) 核心设计哲学对比

问题AMP 的方案ASE 的方案
如何保证动作质量?判别器区分真实/生成同左(预训练后固定)
如何保证技能多样?依赖数据集多样性互信息最大化 + 多样性目标
如何实现技能组合?任务奖励引导自动涌现高级策略组合低级技能
如何复用先验知识?✗ 每任务重新训练✓ 低级策略固定
如何适应新任务?完整重新训练只训高级策略

(7) AMP 的局限性 → ASE 的动机

AMP 论文中明确指出的问题(原文引用):

"当前工作的局限性:
- 动作先验需要针对每个任务从零开始训练
- 理想情况下,动作先验应该可以迁移到不同任务"

ASE 的解决方案

预训练阶段:
- 学习通用技能库 π(a|s,z)
- 使用互信息最大化保证多样性
- 训练判别器作为"便携式运动先验"

任务训练阶段:
- 固定低级策略 π
- 只训练高级策略 ω(z|s,g)
- 样本效率提升约 10 倍

(8) 两篇论文的关系

flowchart TB
    subgraph AMP["AMP (2021)"]
        direction TB
        A1["对抗模仿学习"]
        A2["任务 + 风格分离"]
        A3["无需动作选择器"]
        A4["核心贡献:动作评价无需人工设计"]
    end

    subgraph ASE["ASE (2022)"]
        direction TB
        B1["继承 AMP 的对抗学习"]
        B2["新增:预训练范式"]
        B3["新增:技能发现(互信息)"]
        B4["新增:可复用技能库"]
        B5["核心贡献:技能可复用"]
    end

    AMP --> ASE

    style AMP fill:#e1f5fe
    style ASE fill:#fff3e0

关键洞察

  1. ASE 是 AMP 的自然扩展:同一团队在 AMP 基础上的迭代工作
  2. 训练方式相似:都用了对抗模仿学习(GAIL 变体)
  3. 解决的问题不同
    • AMP:如何让动作更自然、无需人工设计奖励
    • ASE:如何让学到的技能可以复用于多个任务

8.1.1 理解 AMP 与 ASE 的类比

想象学习做菜:

AMP (2021) 解决的问题:
┌─────────────────────────────────────────┐
│  传统方法:需要厨师长详细告诉你            │
│         "盐放多少克、炒多久"              │
│              ↓                          │
│  AMP:给你看一些菜的视频,你自动学会        │
│        "像这样炒菜"                       │
│              ↓                          │
│  核心:评价标准从"人工规则"                │
│       变成"像不像视频"                    │
└─────────────────────────────────────────┘

ASE (2022) 解决的问题:
┌─────────────────────────────────────────┐
│  AMP 的问题:每学一道新菜都要从头看视频    │
│              ↓                          │
│  ASE:先花几年学会各种基本功              │
│      (切、炒、蒸、煮)→ 预训练          │
│              ↓                          │
│  新任务:只需要学"怎么组合基本功"          │
│         不需要重新学基本功 → 微调        │
│              ↓                          │
│  核心:基本功可以复用                     │
└─────────────────────────────────────────┘

8.2 ASE vs 其他物理控制方法

(1) 与 DeepMimic 对比

维度DeepMimicASE
训练方式单技能跟踪多技能预训练
数据需求每技能一个动捕片段大规模无标注数据集
奖励设计需要精确跟踪奖励对抗奖励 + 互信息
技能复用

(2) 与 Feature-Based Control 对比

维度Feature-BasedASE
设计方式手工设计特征 + 优化数据驱动学习
动作质量中等(动态性差)极高(接近动捕)
泛化能力低(每动作重新设计)高(预训练可复用)

(3) 与 ControlVAE 对比

维度ControlVAEASE
先验类型状态条件高斯球面均匀分布
学习方式世界模型 + ELBO对抗 + 互信息
技能表示连续潜在空间离散技能库(隐式)

(4) 与 DeepLoco (218) 对比:分层 RL 的差异

ASE 和 DeepLoco 都使用分层 RL,但分层目的和训练方式完全不同

维度DeepLoco (2017)ASE (2022)
分层目的时间尺度分离技能抽象分离
高层频率2Hz(每 0.5 秒决策)任务训练时(不限频率)
低层频率30Hz(每 0.033 秒执行)预训练后固定,推理时调用
高层输出步法计划 (p̂₀, p̂₁, θ̂_root)技能代码 z(连续向量)
低层输入状态 + 步法目标状态 + 技能代码
训练方式分开训练(先 LLC 后 HLC)两阶段(预训练 + 任务训练)
复用性同一 LLC 可用于多个 HLC同一 π 可用于多个 ω
接口设计手工设计(两步位置 + 朝向)学习得到(潜在空间 z)
参考动作风格引导(r_pose 奖励)技能库来源(预训练数据)
技能多样性多个 LLC 风格(直腿、高抬腿等)单一 π 的连续潜在空间

DeepLoco 的分层逻辑

时间尺度分离:
├─ HLC:宏观规划(往哪走)
└─ LLC:微观控制(怎么走)

好处:
- 同一个 LLC 可以被多个 HLC 任务复用
- 但每个 LLC 只能是一种风格

ASE 的分层逻辑

技能抽象分离:
├─ 高级策略 ω:选择技能(用什么 z)
└─ 低级策略 π:执行技能(z 对应的行为)

好处:
- 单一 π 包含多样化技能库
- z 是连续空间,支持平滑插值
- 预训练后 π 固定,所有任务复用

关键区别

  1. DeepLoco 的接口是手工设计的(步法计划),ASE 的接口是学习得到的(潜在变量 z)
  2. DeepLoco 需要多个 LLC实现不同风格,ASE 单一 π通过不同 z 实现多技能
  3. DeepLoco 的 LLC 不固定(每风格一个),ASE 的 π 完全固定(所有任务复用)

九、遗留问题

9.1 开放性问题

  1. 技能的可解释性

    • 潜在空间的每个维度代表什么?
    • 能否实现更细粒度的技能控制?
  2. 数据集扩展

    • 如果使用更大规模数据集(如 AMASS)会怎样?
    • 能否学习更复杂的技能(如体操动作)?
  3. 多角色泛化

    • 能否训练一个模型适用于多个角色?
    • 形态学变化的鲁棒性如何?
  4. 与语言模型的结合

    • 能否用自然语言指定技能?
    • 与 LLM 结合实现指令驱动的角色控制?
  5. 实时应用

    • 推理速度能否满足游戏实时要求?
    • 模型压缩和加速的可能性?

9.2 未来方向

  1. 层级强化学习的深化

    • 更多层级的抽象
    • 自动发现技能层级结构
  2. 多模态条件

    • 结合视觉、语言、动作等多种条件
    • 更丰富的交互方式
  3. 在线学习

    • 任务执行过程中持续改进
    • 适应新环境和扰动

十、关键公式总结

公式含义
\(\max_{\pi} -D_{JS}(d_{\pi} || d_M) + \beta I(s,s';z | \pi)\)预训练总目标
\(r_{adv} = -\log(1 - D(s, s'))\)对抗奖励
\(I(s, s'; z | \pi) = H(s, s' | \pi) - H(s, s' | z, \pi)\)互信息分解
\(r_t = w_G r_G(s, a, s', g) - w_S \log(1 - D(s, s'))\)任务训练奖励

十一、代码与资源

  • 项目主页: https://xbpeng.github.io/projects/ASE/
  • 代码: 项目主页提供
  • 数据集: 论文未公开具体数据集,但表示代码和数据将公开

笔记说明:本文是 SIGGRAPH 2022 的重要工作,将预训练范式引入物理角色控制,对后续研究影响深远。理解本文有助于学习后续的 Physics-Based Character Control 相关方法。第八部分详细对比了 ASE 与 AMP 及其他相关工作的区别,并解释了两者解决的核心问题差异。