TD-MPC2: Temporal Difference MPC for Continuous Control

一句话定位

TD-MPC2是一种用于连续控制的隐式世界模型方法,通过时序差分学习结合模型预测控制,在低样本复杂度下实现高性能的连续控制任务。

前置依赖

  • World Models (2019): Haarnoja et al. 提出的分离式世界模型架构
  • Dreamer (2020): 基于世界模型的强化学习,使用变分推断
  • Soft Actor-Critic (2018): SAC算法的最大熵框架
  • MuZero (2020): 隐式世界模型 + MCTS规划
  • Temporal Difference Learning: RL中的TD(λ)框架
  • Model Predictive Control (MPC): 基于模型的预测控制框架

核心思想

TD-MPC2的核心洞察是:将世界模型学习与价值估计统一到时序差分框架中,无需显式重建原始观察

传统世界模型方法面临挑战:

  1. 重建损失过于关注像素细节:无关的背景变化浪费模型容量
  2. VAE后验坍缩:KL散度可能导致潜在变量失效
  3. 复合误差累积:多步预测导致误差指数增长

TD-MPC2提出隐式世界模型 + 时序差分MPC

  • 不重建观察,只学习紧凑的状态表征
  • 端到端训练价值函数,避免两步走误差
  • 使用**想象轨迹(IrTrjectory)**进行规划,而非显式树搜索

模型结构图

输入: 原始观察 o_t
    │
    ▼
┌──────────────────────────────────┐
│         编码器 (Encoder)           │
│  f: O → Z (如 ResNet, CNN)       │
│  将观察编码为潜在状态 z_t ∈ R^D    │
└──────────────────────────────────┘
    │
    ▼
┌──────────────────────────────────┐
│       隐式世界模型 (World Model)   │
│  g: (z_t, a_t) → z_{t+1}         │
│  预测下一潜在状态 (无监督)          │
└──────────────────────────────────┘
    │
    ├── ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─┤
    │                                                              │
    ▼                                                              ▼
┌───────────────────────┐                        ┌───────────────────────┐
│   立即奖励预测 h(z,a)   │                        │    价值估计 V(z)       │
│   (reward prediction)  │                        │    (value estimate)   │
└───────────────────────┘                        └───────────────────────┘
    │
    ▼
┌─────────────────────────────────────────────────────────────────┐
│                     想象轨迹展开 (Imagine Rollout)                 │
│  z_t ──a_0──> z_{t+1} ──a_1──> z_{t+2} ──...──> z_{t+H}          │
│  累计 r_0 + r_1 + ... + r_{H-1} + γ^H V(z_{t+H})                 │
└─────────────────────────────────────────────────────────────────┘
    │
    ▼
┌──────────────────────────────────┐
│       模型预测控制 (MPC)           │
│  选择最大化累积奖励的动作序列      │
└──────────────────────────────────┘

TD-MPC2架构详解

                    ┌─────────────────────────────────────────┐
                    │              智能体 (Agent)               │
                    │  ┌─────────┐   ┌─────────┐   ┌─────────┐  │
                    │  │ Encoder │   │  World  │   │ Reward  │  │
                    │  │  f(o)   │   │  Model  │   │  Head   │  │
                    │  │ z_t     │──▶│  g(z,a) │──▶│  h(z,a) │  │
                    │  └─────────┘   └─────────┘   └─────────┘  │
                    │       │                           │         │
                    │       │                           │         │
                    │       ▼                           ▼         │
                    │  ┌─────────┐                       │         │
                    │  │  Value  │◀──────────────────────┘         │
                    │  │   V     │   价值头 (Value Head)          │
                    │  │  Head   │                               │
                    │  └─────────┘                               │
                    └─────────────────────────────────────────┘
                              │
                              ▼
                 ┌────────────────────────────┐
                 │    想象轨迹优化 (i.e.规划)   │
                 │  从当前 z_t 开始,生成H步    │
                 │  动作序列,最大化回报估计    │
                 └────────────────────────────┘

数学推导

1. 编码器

编码器 将原始观察映射到紧凑潜在空间:

潜在空间维度通常设为

2. 隐式世界模型

世界模型 预测下一潜在状态:

关键设计:确定性转移,不预测分布。这简化了规划过程,因为:

  • 给定 是唯一确定的
  • 允许反向传播通过dynamics

3. 奖励预测头

奖励头是一个小型MLP,预测立即奖励。这用于想象轨迹中的奖励累积。

4. 价值估计

价值头输出状态 的价值估计

5. 想象轨迹与回报估计

TD-MPC2的核心规划机制。给定当前状态 ,生成 步想象轨迹:

for h = 0 to H-1:
    a_h = action_head(noise + z_{t+h})  # 从当前状态采样动作
    z_{t+h+1} = g(z_{t+h}, a_h)
    r_h = h(z_{t+h}, a_h)
    
G_imagine = Σ_{i=0}^{H-1} γ^i r_i + γ^H V(z_{t+H})

6. 时序差分学习

TD-MPC2使用时序差分(TD)学习训练价值函数。对于n步回报:

TD误差:

价值损失:

7. 端到端训练目标

总损失函数:

7.1 价值损失

其中 是延迟目标网络计算的价值估计。

7.2 奖励损失

7.3 动作损失(策略学习)

其中 是通过想象力回滚估计的Q值。

7.4 动力学损失

8. 模型预测控制公式

在每个时间步,执行以下优化:

其中 由世界模型前向展开。

实际实现中使用**交叉熵方法(CEM)**进行优化:

1. 初始化动作序列分布 (高斯混合)
2. for iteration = 1 to N:
       采样M个动作序列
       使用世界模型计算每个序列的价值
       更新分布:保留top-k样本,重新拟合高斯
3. 返回均值作为规划动作

9. 多步预测与复合误差

TD-MPC2通过以下技术缓解复合误差:

  1. 短期想象+价值估计:不进行超长视界预测
  2. 亚稳态表示:编码器学习对任务相关的状态抽象
  3. TD学习:直接优化价值函数,不依赖完美世界模型

数学上,可证明在某些条件下,即使世界模型有误差,价值估计仍是无偏的:

足够大且价值估计无偏时,上式逼近真值。

训练细节

训练循环

1. 使用当前策略与环境交互
2. 存储转换 (o_t, a_t, r_t, o_{t+1}) 到replay buffer
3. 定期采样batch进行训练:
   a. 用编码器处理观察
   b. 计算动力学/奖励/价值损失
   c. 更新网络参数
4. 周期性更新目标网络

超参数

  • 潜在维度:
  • 想象视界:
  • CEM迭代次数:
  • CEM样本数:
  • 折扣因子:
  • 目标网络更新频率: 每1000步
  • Batch size: 256
  • Replay buffer: 100万步

分布式实现

TD-MPC2支持分布式数据收集:

  • 多个actor并行收集数据
  • 中心replay buffer
  • 单learner更新网络

与Dreamer/MuZero的比较

特性DreamerMuZeroTD-MPC2
世界模型概率(VAE)确定性确定性
规划方法CEMMCTSCEM
状态空间变分后验抽象状态隐表示
价值学习重建回报n步回报TD学习
适用场景连续控制离散/连续连续控制
样本效率中等

推理/rollout过程

def forward(obs, num_steps=10):
    z = encoder(obs)
    actions = []
    
    for t in range(num_steps):
        # CEM优化
        best_action = cem_planning(z, horizon=5)
        actions.append(best_action)
        
        # 世界模型前向
        z = world_model(z, best_action)
    
    return actions

优点与局限

优点

  1. 高样本效率: 在DMC套件上,TD-MPC2用10倍少的样本达到与Dreamer相当性能
  2. 训练稳定: 端到端TD学习,避免变分推断的优化困难
  3. 连续控制友好: CEM优化自然处理连续动作空间
  4. 隐式世界模型: 避免像素级重建的浪费
  5. 可扩展性强: 分布式数据收集支持大规模训练

局限

  1. 计算密集推理: CEM优化需要多次世界模型前向
  2. 超参数敏感: CEM参数需要仔细调优
  3. 局部最优: CEM可能陷入局部最优,尤其是高维动作空间
  4. 表示学习不足: 无重建目标可能导致表示质量下降
  5. 长视界规划有限: 想象视界受限于复合误差

与前后内容的衔接

前置依赖

TD-MPC2继承了多代世界模型的发展:

  • World Models的分层结构 → TD-MPC2的编码器+世界模型
  • Dreamer的价值学习 → TD-MPC2的TD框架
  • MuZero的隐式模型 → TD-MPC2的确定性dynamics

后置发展

TD-MPC2的思想影响了后续工作:

  • DreamerV3 (2023): 结合TD-MPC2的TD学习与Dreamer的变分方法
  • Prodigy (2024): 改进TD学习的收敛性
  • 掩码世界模型: 探索重建与对比学习的结合

可复现实现要点

编码器实现

class Encoder(nn.Module):
    def __init__(self, obs_shape, latent_dim):
        super().__init__()
        self.conv = nn.Sequential(
            nn.Conv2d(obs_shape[0], 32, 4, stride=2),
            nn.ReLU(),
            nn.Conv2d(32, 64, 4, stride=2),
            nn.ReLU(),
            nn.Conv2d(64, 128, 4, stride=2),
            nn.ReLU(),
        )
        self.fc = nn.Linear(...)
        self.fc_out = nn.Linear(128, latent_dim)
    
    def forward(self, obs):
        x = self.conv(obs)
        x = x.reshape(x.size(0), -1)
        return self.fc_out(torch.relu(self.fc(x)))

世界模型实现

class WorldModel(nn.Module):
    def __init__(self, latent_dim, action_dim):
        super().__init__()
        self.net = nn.Sequential(
            nn.Linear(latent_dim + action_dim, 1024),
            nn.ReLU(),
            nn.Linear(1024, 1024),
            nn.ReLU(),
            nn.Linear(1024, latent_dim),
        )
    
    def forward(self, z, action):
        x = torch.cat([z, action], dim=-1)
        return self.net(x)

CEM规划实现

def cem_planning(world_model, z_init, horizon, num_iters=10, num_samples=100):
    mean = torch.zeros(horizon, action_dim)
    std = torch.ones(horizon, action_dim)
    
    for _ in range(num_iters):
        # 采样
        actions = torch.randn(num_samples, horizon, action_dim) * std + mean
        actions = actions.to(z_init.device)
        
        # 评估
        returns = []
        z = z_init
        for h in range(horizon):
            z = world_model(z, actions[:, h])
            r = reward_head(z, actions[:, h])
            returns.append(r)
        returns = torch.stack(returns)
        G = (returns * gamma ** torch.arange(horizon)).sum(dim=0)
        
        # 更新分布
        top_k = G.topk(num_samples // 10, dim=0).indices
        mean = actions[top_k].mean(dim=0)
        std = actions[top_k].std(dim=0)
    
    return mean[0]

章节摘要

TD-MPC2是连续控制世界模型的重要里程碑,通过隐式世界模型与时序差分学习的结合,实现了高效样本的连续控制。核心创新在于:确定性dynamics避免概率模型的训练困难,CEM规划自然适配连续动作空间,端到端TD学习直接优化价值函数。与MuZero在离散/混合空间的MCTS规划形成对比,TD-MPC2展示了CEM优化在连续控制中的有效性。

关键词

  • TD-MPC2, 时序差分学习, 隐式世界模型, 模型预测控制
  • 交叉熵方法(CEM), 想象轨迹, 连续控制
  • 样本效率, 价值估计, 确定性dynamics