连续控制中的 World Model
一句话定位
连续控制任务中的世界模型需要处理高维连续动作空间、长期规划和多模态行为,问题比离散控制更复杂,需要专门的规划方法。
前置依赖
- 强化学习基础(连续控制、动作空间)
- MPC/CEM 轨迹优化
- 2-MPC - MPC 方法
- 5-actor-critic与imagination - 想象增强
核心思想
连续控制对世界模型提出了特殊挑战:
- 动作空间连续:无法枚举所有动作,需要 gradient-based optimization 或 sampling
- 高精度要求:控制精度直接影响系统稳定性
- 时序依赖长:机器人控制通常需要长时序规划
- 多模态行为:同一状态可能存在多种合理控制策略
连续控制 vs 离散控制的对比:
| 维度 | 离散控制 | 连续控制 |
|---|---|---|
| 动作空间 | ||
| 规划方法 | 枚举、树搜索 | 优化、采样 |
| 世界模型精度要求 | 中等 | 高 |
| 探索复杂度 | 低 | 高 |
| 典型任务 | 游戏、棋类 | 机器人、自动驾驶 |
模型结构图
┌─────────────────────────────────────────────────────────────┐
│ 连续控制中的 World Model 架构 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────┐ ┌──────────────────┐ ┌─────────────┐ │
│ │ 观测 o │───▶│ Encoder/Decoder │───▶│ 潜在状态 z │ │
│ └─────────┘ └──────────────────┘ └──────┬──────┘ │
│ │ │
│ ┌──────────────────────────────────────────────▼──────┐ │
│ │ World Model │ │
│ │ p(z'|z, a) (连续动作输入) │ │
│ │ r = f(z, a) (回报预测) │ │
│ └──────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ 规划器 │ │
│ │ CEM / iCEM / Model-predictive Planning │ │
│ │ (处理连续动作空间) │ │
│ └──────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
数学推导
1. 连续动作空间的处理
连续动作的 CEM 规划:
与离散动作不同,连续动作需要采样连续的分布参数:
设每步动作为
动作分布(每步独立高斯):
CEM 更新(连续动作):
2. 为什么连续动作更难
挑战 1:探索空间指数级
- 离散:
个动作, 条轨迹 - 连续:无穷动作,搜索空间无界
挑战 2:局部最优陷阱
连续空间的局部最优更多,且更难逃出。
挑战 3:动作精度敏感
机器人控制中,
3. TD-MPC 处理连续控制
TD-MPC (Temporal Difference Model Predictive Control) 是一种专门用于连续控制的 MBRL 方法。
核心思想:
将 TD learning 与 MPC 结合,在规划过程中同时考虑:
- 即时回报:
- 未来价值:
通过 value function 估计
动作评分函数:
规划目标:
其中
4. iCEM (implicit CEM)
iCEM 是一种改进的 CEM,专门为连续控制设计:
与标准 CEM 的区别:
| 特性 | CEM | iCEM |
|---|---|---|
| 分布表示 | 参数化高斯 | 精英轨迹集合 |
| 优化方式 | 显式分布更新 | 隐式优化 |
| 局部最优 | 容易陷入 | 更鲁棒 |
| 收敛速度 | 快(早期) | 慢但稳定 |
iCEM 算法:
def iCEM(world_model, s_0, H, K=64, M=8, N=10):
"""iCEM 连续控制规划"""
# 初始化精英轨迹
elite_trajs = [np.random.randn(H, action_dim) for _ in range(M)]
for it in range(N):
# 采样
trajs = []
for _ in range(K):
# 混合采样:精英扰动 + 随机
if len(elite_trajs) > 0:
base = elite_trajs[np.random.randint(len(elite_trajs))]
traj = base + np.random.randn(H, action_dim) * noise_std
else:
traj = np.random.randn(H, action_dim)
trajs.append(traj)
# 评估
returns = []
for traj in trajs:
R = evaluate_trajectory(world_model, s_0, traj)
returns.append(R)
# 选择精英
elite_indices = np.argsort(returns)[-M:]
elite_trajs = [trajs[i] for i in elite_indices]
# 返回第一个动作
best_traj = elite_trajs[-1]
return best_traj[0]5. 连续控制任务的规划 horizon 选择
Horizon 与模型误差的关系:
设模型误差为
误差累积:
选择依据:
| 任务类型 | Horizon 典型值 | 依据 |
|---|---|---|
| 快速响应 | 1-5 | 低延迟要求,模型误差优先 |
| 运动控制 | 10-20 | 平衡规划质量与误差 |
| 任务规划 | 50+ | 长时序目标,模型精度要求高 |
自适应 Horizon:
部分方法动态调整 horizon:
训练细节
连续控制的特殊训练挑战
| 挑战 | 描述 | 解决策略 |
|---|---|---|
| 动作精度 | 高精度控制要求 | 精细化模型训练,ensemble |
| 多模态 | 同一任务多种解法 | 混合高斯策略,多峰分布 |
| 探索效率 | 连续空间探索困难 | guided exploration, resampling |
| 稳定训练 | 连续控制不稳定 | target network, gradient clipping |
训练数据收集策略
1. 随机策略 + 筛选:
- 使用随机策略收集数据
- 只保留高回报片段训练模型
2. 使用已训练策略引导:
- 用当前策略收集数据
- 平衡利用与探索
3. DADS/MI 等技能发现:
- 先发现多模态技能
- 再用各技能数据训练模型
模型架构选择
潜在空间维度:
| 任务复杂度 | 潜在维度 | 示例 |
|---|---|---|
| 简单 | 10-50 | 2D locomotion |
| 中等 | 50-200 | 机器人操作 |
| 复杂 | 200-1000 | 复杂操作、自动驾驶 |
Encoder/Decoder 设计:
- 图像输入:CNN encoder + VAE decoder
- 低维状态:MLP encoder +确定性/随机转换
推理/rollout/planning 过程
在线控制流程
class ContinuousController:
def __init__(self, world_model, planner, actor=None):
self.model = world_model
self.planner = planner # CEM / iCEM / TD-MPC
self.actor = actor # 如果用 actor-critic
def step(self, obs):
"""每个控制周期调用一次"""
# 编码观测
z = self.model.encode(obs)
# 规划(可选)
if self.planner:
a = self.planner.plan(z)
else:
# Actor 直接输出
a = self.actor(z)
return a
def control_loop(self, env, max_steps=1000):
"""控制循环"""
obs = env.reset()
for t in range(max_steps):
a = self.step(obs)
obs, r, done, _ = env.step(a)
if done:
break滚动 Horizon 控制
┌─────────────────────────────────────────────────────────┐
│ 滚动 Horizon 控制 │
├─────────────────────────────────────────────────────────┤
│ │
│ t=0: [a_0, a_1, ..., a_{H-1}] → 执行 a_0 │
│ t=1: [a_1, a_2, ..., a_H] → 执行 a_1 │
│ t=2: [a_2, a_3, ..., a_{H+1}] → 执行 a_2 │
│ ... │
│ │
│ 每个时间步重新规划,应对环境变化 │
└─────────────────────────────────────────────────────────┘
优点与局限
优点
- 高精度:连续控制可实现精细动作
- 自然映射:与世界模型无缝结合
- 实时控制:在线规划适合实时系统
局限
- 搜索困难:连续空间搜索复杂度高
- 模型精度要求高:控制精度依赖模型精度
- 局部最优:优化器容易陷入局部最优
与前后内容的衔接
- 前置:5-actor-critic与imagination - 想象增强方法
- 后置:7-探索与记忆 - 连续控制中的探索策略
- 关联:TD-MPC、MuZero、Dreamer 等都适用于连续控制
可复现实现要点
import torch
import numpy as np
class ContinuousWorldModel:
"""连续控制的世界模型"""
def __init__(self, obs_dim, action_dim, latent_dim=128):
self obs_encoder = nn.Sequential(
nn.Linear(obs_dim, 256),
nn.ReLU(),
nn.Linear(256, latent_dim)
)
# 转换器和奖励预测器
self.transition = nn.Sequential(
nn.Linear(latent_dim + action_dim, 256),
nn.ReLU(),
nn.Linear(256, latent_dim)
)
self.reward_net = nn.Sequential(
nn.Linear(latent_dim + action_dim, 128),
nn.ReLU(),
nn.Linear(128, 1)
)
def predict(self, z, a):
"""预测下一状态和奖励"""
za = torch.cat([z, a], dim=-1)
z_next = z + self.transition(za) # residual 预测
r = self.reward_net(za)
return z_next, r
class ContinuousCEMPlanner:
"""连续控制的 CEM 规划器"""
def __init__(self, world_model, action_dim, action_bound,
horizon=10, n_samples=256, n_elite=16, n_iterations=5):
self.model = world_model
self.action_dim = action_dim
self.action_bound = action_bound
self.horizon = horizon
self.n_samples = n_samples
self.n_elite = n_elite
self.n_iterations = n_iterations
def plan(self, z):
"""规划连续动作"""
# 初始化分布
mu = np.zeros(self.horizon * self.action_dim)
sigma = np.ones(self.horizon * self.action_dim)
for _ in range(self.n_iterations):
# 采样
trajs = np.random.normal(mu, sigma, (self.n_samples, self.horizon, self.action_dim))
# 裁剪到动作范围
trajs = np.clip(trajs, -self.action_bound, self.action_bound)
# 评估
returns = self.evaluate_trajectories(z, trajs)
# 选择精英
elite_idx = np.argsort(returns)[-self.n_elite:]
elite_trajs = trajs[elite_idx]
# 更新分布
mu = elite_trajs.mean(axis=(0, 1))
sigma = elite_trajs.std(axis=(0, 1)) + 1e-6
# 返回第一个动作
best_traj = elite_trajs[-1]
return best_traj[0]
def evaluate_trajectories(self, z, trajs):
"""评估轨迹"""
returns = []
for traj in trajs:
z_cur = z.clone()
R = 0
gamma = 1.0
for h in range(self.horizon):
a = traj[h]
z_next, r = self.model.predict(z_cur, torch.tensor(a))
R += gamma * r.item()
z_cur = z_next
gamma *= 0.99
returns.append(R)
return np.array(returns)章节摘要
连续控制中的世界模型面临高维连续动作空间、高精度要求和长时序规划等挑战。与离散控制不同,连续控制需要使用 gradient-based 或 sampling-based 的规划方法。CEM/iCEM 和 TD-MPC 是两种主要的连续控制规划方法。前者通过优化动作序列分布,后者通过结合 TD learning 与 MPC 来处理连续动作。连续控制的成功关键在于世界模型的精度和规划 horizon 的合理选择。
关键词
continuous control, world model, TD-MPC, iCEM, continuous action space, CEM, robotics, motion control, trajectory optimization, continuous planning