本章深入探讨如何将学习得到的世界模型用于机器人的规划与控制。我们将介绍模型预测控制(MPC)在学习系统中的应用,各种规划算法的原理与实现,Dreamer系列方法的演进历程,以及视频预测与动作规划的融合。通过本章学习,读者将掌握如何利用世界模型进行长期规划,实现样本高效的机器人控制。
模型预测控制(Model Predictive Control, MPC)是一种基于模型的优化控制方法,其核心思想是利用系统的动力学模型预测未来状态轨迹,并通过求解有限时域优化问题得到最优控制序列。与传统反馈控制不同,MPC显式考虑未来预测,能够处理约束并优化长期性能。
在每个时间步$t$,MPC求解以下有限时域最优控制问题:
\[\min_{u_{t:t+H-1}} \sum_{k=0}^{H-1} c(x_{t+k}, u_{t+k}) + c_f(x_{t+H})\]\(\text{s.t.} \quad x_{t+k+1} = f(x_{t+k}, u_{t+k}), \quad k = 0, ..., H-1\) \(\quad \quad x_{t+k} \in \mathcal{X}, \quad u_{t+k} \in \mathcal{U}\)
其中:
滚动时域原理(Receding Horizon): MPC采用滚动优化策略——虽然计算整个控制序列${u_t, …, u_{t+H-1}}$,但只执行第一个控制$u_t$,然后在下一时刻重新求解。这种策略提供了反馈机制,能够补偿模型误差和外部扰动。
MPC的优势:
将MPC应用于基于学习的系统面临独特挑战,这些挑战源于学习模型的特性和机器人任务的复杂性:
1. 模型不确定性与误差传播
学习得到的模型(如神经网络)存在多种不确定性来源:
误差传播问题尤其严重。设单步预测误差为$\epsilon$,在最坏情况下,$H$步预测的累积误差可达$O(\epsilon^H)$,呈指数增长。这限制了可用的预测时域长度。
2. 计算复杂度与实时性
神经网络模型带来的计算挑战:
对于一个$L$层深度的网络,$H$步展开的计算复杂度为$O(H \cdot L \cdot N^2)$,其中$N$是网络宽度。
3. 长期预测退化
长期预测面临的挑战:
实验表明,典型的神经网络动力学模型在10-20步后预测质量显著下降。
4. 分布偏移与安全性
执行过程中的分布偏移问题:
为应对模型不确定性,鲁棒MPC引入了多种策略来保证控制性能和系统安全性。这些方法的核心思想是显式考虑不确定性,设计在最坏情况或期望意义下最优的控制策略。
1. 管道MPC (Tube MPC)
管道MPC通过构建包含所有可能轨迹的”管道”来处理有界不确定性。其核心思想是将鲁棒控制问题分解为标称轨迹优化和局部反馈控制。
状态管道定义: \(\mathcal{X}_k = \{x : \|x - \bar{x}_k\|_Q \leq \epsilon_k\}\)
其中:
管道半径的递推计算: \(\epsilon_{k+1} = \|(A + BK)\epsilon_k\| + w_{max}\)
其中$K$是局部反馈增益,$w_{max}$是扰动界。
实际控制律: \(u(x) = \bar{u} + K(x - \bar{x})\)
这种分解允许在线只优化标称轨迹,大大降低计算复杂度。
2. 随机MPC (Stochastic MPC)
随机MPC将不确定性建模为概率分布,优化期望性能同时满足概率约束。
优化问题形式: \(\min_{\pi} \mathbb{E}_{w_k \sim p_w}\left[\sum_{k=0}^{H-1} c(x_{t+k}, \pi(x_{t+k})) + c_f(x_{t+H})\right]\)
\[\text{s.t.} \quad \Pr(x_{t+k} \in \mathcal{X}_{safe}) \geq 1 - \alpha\]其中$\alpha$是违反约束的容许概率。
场景树方法: 通过采样生成场景树近似随机优化:
确定性等价近似: 对于高斯不确定性,可使用确定性等价: \(J = \sum_{k=0}^{H-1} \left( \mathbb{E}[c(x_k, u_k)] + \lambda \cdot \text{Var}[c(x_k, u_k)] \right)\)
其中$\lambda$是风险规避参数。
3. 分布鲁棒MPC (Distributionally Robust MPC)
当不确定性分布本身不确定时,分布鲁棒方法考虑最坏情况分布:
\[\min_{u} \max_{p \in \mathcal{P}} \mathbb{E}_p[J(x, u)]\]不确定集$\mathcal{P}$的构造方法:
通过对偶理论,可将min-max问题转化为可解的凸优化。
4. 学习增强的鲁棒MPC
结合机器学习改进不确定性建模:
高斯过程MPC: 使用GP建模残差动力学: \(x_{t+1} = f_{nom}(x_t, u_t) + \delta(x_t, u_t)\) \(\delta \sim \mathcal{GP}(0, k(x, x'))\)
GP提供预测均值和方差,可用于管道半径计算: \(\epsilon_k = \beta \sqrt{\sigma^2_k(x_k, u_k)}\)
其中$\beta$根据所需置信水平选择。
集成模型不确定性: 使用模型集成量化认知不确定性: \(\sigma^2_{epistemic} = \text{Var}_{i \in ensemble}[f_i(x, u)]\)
使用神经网络作为动力学模型时,MPC优化面临独特的实现挑战。以下介绍实用的求解方法和优化技巧。
1. 基于梯度的优化
利用自动微分直接优化控制序列:
def gradient_based_mpc(x0, dynamics_model, horizon, lr=0.01, iterations=100):
# 初始化控制序列
controls = torch.zeros(horizon, action_dim, requires_grad=True)
optimizer = torch.optim.Adam([controls], lr=lr)
for iteration in range(iterations):
# 前向展开轨迹
states = [x0]
for t in range(horizon):
x_next = dynamics_model(states[-1], controls[t])
states.append(x_next)
# 计算成本
cost = 0
for t in range(horizon):
cost += stage_cost(states[t], controls[t])
cost += terminal_cost(states[-1])
# 反向传播和更新
optimizer.zero_grad()
cost.backward()
optimizer.step()
# 投影到可行域
with torch.no_grad():
controls.clamp_(u_min, u_max)
return controls.detach()
优化技巧:
2. 采样优化方法
基于采样的方法避免了梯度计算,更适合非平滑或离散控制空间。
交叉熵方法(CEM):
def cem_mpc(x0, dynamics_model, horizon, num_samples=100, elite_frac=0.1):
dim = horizon * action_dim
mean = np.zeros(dim)
cov = np.eye(dim)
for iteration in range(max_iterations):
# 采样控制序列
samples = np.random.multivariate_normal(mean, cov, num_samples)
samples = samples.reshape(num_samples, horizon, action_dim)
# 评估每个样本
costs = []
for i in range(num_samples):
cost = evaluate_trajectory(x0, samples[i], dynamics_model)
costs.append(cost)
# 选择精英样本
elite_idx = np.argsort(costs)[:int(num_samples * elite_frac)]
elite_samples = samples[elite_idx]
# 更新分布
mean = np.mean(elite_samples, axis=0).flatten()
cov = np.cov(elite_samples.reshape(len(elite_idx), -1).T)
# 添加噪声防止过早收敛
cov += 0.01 * np.eye(dim)
return mean.reshape(horizon, action_dim)
MPPI (Model Predictive Path Integral):
def mppi_mpc(x0, dynamics_model, horizon, num_samples=100, temperature=1.0):
# 初始控制序列
u_mean = torch.zeros(horizon, action_dim)
sigma = 0.1 * torch.ones_like(u_mean)
# 采样扰动
eps = torch.randn(num_samples, horizon, action_dim) * sigma
u_samples = u_mean + eps
# 评估轨迹
costs = torch.zeros(num_samples)
for i in range(num_samples):
costs[i] = evaluate_trajectory(x0, u_samples[i], dynamics_model)
# 计算权重(路径积分)
weights = torch.softmax(-costs / temperature, dim=0)
# 更新控制
u_mean = torch.sum(weights.unsqueeze(1).unsqueeze(2) * u_samples, dim=0)
return u_mean
3. 混合方法
结合梯度和采样的优势:
CEM-梯度混合:
微分动态规划(DDP)初始化:
本节深入介绍三种主流的基于模型的规划算法:交叉熵方法(CEM)、模型预测路径积分控制(MPPI)和迭代线性二次高斯(iLQG)。这些算法各有特点,适用于不同的问题场景。
交叉熵方法是一种基于重要性采样的随机优化算法,最初用于稀有事件仿真,后被广泛应用于机器人规划。CEM的核心思想是迭代地改进采样分布,使其集中在高质量解的区域。
理论基础
CEM源于信息论中的交叉熵最小化原理。给定目标分布$p^*$(集中在最优解),我们寻找参数化分布$q_\theta$使得:
\[\theta^* = \arg\min_\theta D_{KL}(p^* \| q_\theta) = \arg\min_\theta -\mathbb{E}_{p^*}[\log q_\theta]\]由于$p^$未知,CEM使用精英样本近似:将成本低于阈值$\gamma$的样本视为来自$p^$的样本。
算法流程
CEM通过以下迭代过程优化控制序列:
初始化分布: \(\mathcal{U} \sim \mathcal{N}(\mu_0, \Sigma_0)\) 其中$\mu_0 \in \mathbb{R}^{H \times d_u}$是均值,$\Sigma_0$是协方差矩阵
采样动作序列: \(U^{(i)} \sim \mathcal{N}(\mu, \Sigma), \quad i = 1, ..., N\)
评估轨迹: 对每个样本,展开动力学并计算成本: \(J^{(i)} = \sum_{t=0}^{H-1} c(x_t^{(i)}, u_t^{(i)}) + c_f(x_H^{(i)})\)
选择精英样本: 排序并选择成本最低的$K = \lceil \rho N \rceil$个样本: \(\mathcal{E} = \{i : J^{(i)} \leq J^{(K)}\}\)
更新分布参数: \(\mu_{new} = \frac{1}{K}\sum_{i \in \mathcal{E}} U^{(i)}\) \(\Sigma_{new} = \frac{1}{K}\sum_{i \in \mathcal{E}} (U^{(i)} - \mu_{new})(U^{(i)} - \mu_{new})^T + \epsilon I\)
其中$\epsilon I$是正则化项,防止协方差退化。
参数平滑(可选): \(\mu \leftarrow \alpha \mu_{new} + (1-\alpha)\mu_{old}\) \(\Sigma \leftarrow \alpha \Sigma_{new} + (1-\alpha)\Sigma_{old}\)
关键超参数选择
CEM的性能高度依赖于超参数设置:
高级变体
自适应协方差CEM: 动态调整协方差以平衡探索和利用: \(\Sigma_t = \beta_t \Sigma_{elite} + (1-\beta_t) \Sigma_{init}\) 其中$\beta_t$随迭代递增。
def parallel_cem(x0, dynamics_model, horizon):
# GPU批处理评估
samples = torch.randn(N, horizon, action_dim).cuda()
# 并行展开所有轨迹
trajectories = batch_rollout(x0, samples, dynamics_model)
costs = batch_evaluate(trajectories)
# 选择精英并更新
elite_idx = torch.topk(-costs, K).indices
return update_distribution(samples[elite_idx])
MPPI基于路径积分控制理论,将最优控制问题转化为期望估计:
理论基础: 最优控制的路径积分表示: \(u^* = u_0 + \frac{\mathbb{E}[\epsilon e^{-\frac{1}{\lambda}S(\tau)}]}{\mathbb{E}[e^{-\frac{1}{\lambda}S(\tau)}]}\)
其中:
MPPI算法:
1. 从当前控制序列添加噪声:u_k = u_nom + ε_k
2. 前向仿真N条轨迹
3. 计算轨迹成本S_i
4. 计算权重:w_i = exp(-S_i/λ) / Σ_j exp(-S_j/λ)
5. 更新控制:u_new = Σ_i w_i * u_i
MPPI vs CEM对比:
iLQG通过局部线性化和二次近似求解非线性最优控制:
前向传播: 沿着标称轨迹积分动力学: \(x_{k+1} = f(x_k, u_k)\)
反向传播: 计算值函数的二次近似: \(V(x) = \frac{1}{2}x^T V_{xx} x + V_x^T x + V_0\)
动力学线性化: \(\delta x_{k+1} = A_k \delta x_k + B_k \delta u_k\) 其中: \(A_k = \frac{\partial f}{\partial x}\bigg|_{x_k, u_k}, \quad B_k = \frac{\partial f}{\partial u}\bigg|_{x_k, u_k}\)
控制更新: \(\delta u_k^* = -K_k \delta x_k - k_k\) 其中: \(K_k = (Q_{uu} + B_k^T V_{xx}^{k+1} B_k)^{-1} B_k^T V_{xx}^{k+1} A_k\) \(k_k = (Q_{uu} + B_k^T V_{xx}^{k+1} B_k)^{-1}(Q_u + B_k^T V_x^{k+1})\)
正则化技巧:
Dreamer v1引入了基于隐状态的世界模型学习:
核心组件:
| 表示模型:$p(s_t | s_{t-1}, a_{t-1}, o_t)$ |
| 转移模型:$p(s_t | s_{t-1}, a_{t-1})$ |
| 观测模型:$p(o_t | s_t)$ |
| 奖励模型:$p(r_t | s_t)$ |
训练目标: 变分下界(ELBO): \(\mathcal{L} = \sum_t \left( \mathbb{E}_q[\log p(o_t | s_t) + \log p(r_t | s_t)] - \beta \text{KL}[q(s_t | \cdot) \| p(s_t | \cdot)] \right)\)
策略学习: 在想象轨迹上使用actor-critic: \(J(\pi) = \mathbb{E}_{\pi, p}\left[\sum_{t=0}^{H} \gamma^t r_t\right]\)
主要创新:
离散表示的优势:
KL平衡策略: \(\mathcal{L}_{KL} = \alpha \cdot \text{sg}(\text{KL}[q \| p]) + (1-\alpha) \cdot \text{KL}[\text{sg}(q) \| p]\)
其中sg表示停止梯度,$\alpha$控制平衡。
架构简化:
Symlog变换: \(\text{symlog}(x) = \text{sign}(x) \cdot \ln(|x| + 1)\)
这允许模型处理从Atari(奖励范围[-1, 1])到DMLab(奖励范围可达数千)的不同环境。
关键改进:
训练流程优化:
# 并行数据收集与模型训练
while not done:
# 环境交互(异步)
with env_workers:
collect_experience()
# 模型训练
for _ in range(model_train_steps):
batch = sample_batch()
update_world_model(batch)
# 策略改进
for _ in range(actor_train_steps):
imagine_trajectories()
update_actor_critic()
视频预测为机器人提供了直观的未来状态表示。主要架构包括:
1. 确定性预测模型 基于卷积LSTM或3D卷积的架构: \(\hat{I}_{t+1} = f_\theta(I_{t-k:t}, a_{t-k:t})\)
2. 随机视频预测 引入隐变量建模不确定性: \(p(I_{t+1} | I_{t}, a_t) = \int p(I_{t+1} | z_t, I_t, a_t) p(z_t | I_t) dz_t\)
常用架构:
直接在像素空间进行规划的挑战与解决方案:
视觉前瞻控制(Visual Foresight):
成本函数设计:
计算优化技巧:
# 批量视频预测
def batch_video_prediction(model, init_frames, action_sequences):
# action_sequences: [N_samples, T, action_dim]
# 并行预测N个动作序列的结果
predictions = model(
init_frames.repeat(N_samples, 1, 1, 1),
action_sequences
)
return predictions # [N_samples, T, H, W, C]
在学习的隐表示中进行规划可以提高效率:
World Models架构:
规划流程:
1. 编码当前观测:z_0 = encode(I_0)
2. 在隐空间rollout:
for t in range(H):
h_{t+1} = dynamics(h_t, a_t)
r_t = reward_model(h_t)
3. 优化动作序列最大化累积奖励
隐空间的优势:
结合高层符号规划和低层连续控制:
双层架构:
高层规划器 (离散/符号)
↓ 子目标
低层控制器 (连续/反应式)
↓ 动作
机器人执行
子目标生成方法:
时间抽象: 不同层次使用不同时间尺度:
机器人部署时需要适应新环境和任务:
1. 在线模型更新 持续收集数据更新世界模型: \(\theta_{t+1} = \theta_t - \alpha \nabla_\theta \mathcal{L}(D_{new} \cup D_{replay})\)
关键考虑:
2. 残差模型学习 学习标称模型的修正项: \(f_{true}(x, u) = f_{nominal}(x, u) + f_{residual}(x, u)\)
优势:
使模型能够快速适应新任务:
MAML目标: \(\min_\theta \sum_{\mathcal{T}_i} \mathcal{L}_{\mathcal{T}_i}(\theta - \alpha \nabla_\theta \mathcal{L}_{\mathcal{T}_i}(\theta))\)
机器人应用中的MAML:
def maml_update(model, tasks, inner_lr, outer_lr):
meta_loss = 0
for task in tasks:
# 内循环:任务特定适应
task_model = copy(model)
for _ in range(inner_steps):
loss = compute_loss(task_model, task.support_data)
task_model = task_model - inner_lr * grad(loss)
# 外循环:元参数更新
meta_loss += compute_loss(task_model, task.query_data)
# 更新元参数
model = model - outer_lr * grad(meta_loss)
return model
通过上下文编码实现快速适应:
架构设计: \(\pi(a|s) = f_\theta(s, c_\tau)\)
其中上下文$c_\tau$编码任务特定信息: \(c_\tau = g_\phi(\{(s_i, a_i, r_i)\}_{i=1}^k)\)
上下文推断方法:
在部署时进行快速适应:
自监督适应: 利用一致性损失适应新环境: \(\mathcal{L}_{consist} = \|f(x) - f(\mathcal{A}(x))\|^2\)
其中$\mathcal{A}$是数据增强。
伪标签方法:
主动探索: 设计探索策略收集信息丰富的数据: \(a^* = \arg\max_a \mathcal{I}(s_{t+1}; \theta | s_t, a)\)
处理不同时间尺度的预测:
多尺度架构:
通过组合基本模块实现泛化:
对象中心表示: 将场景分解为对象及其关系: \(s_t = \{o_i^t\}_{i=1}^N, \quad o_i = [\text{pose}, \text{shape}, \text{material}]\)
图神经网络动力学: \(o_i^{t+1} = f_{node}(o_i^t, \sum_{j \in \mathcal{N}(i)} f_{edge}(o_i^t, o_j^t, r_{ij}))\)
结构化因果模型: 显式建模因果关系: \(\begin{aligned} \text{gripper} &\rightarrow \text{object\_pose} \\ \text{object\_pose} &\rightarrow \text{reward} \end{aligned}\)
反事实推理: 回答”如果…会怎样”的问题:
Meta AI Research提出的Joint Embedding Predictive Architecture (JEPA)代表了世界模型的新范式。与传统的像素级预测不同,JEPA在抽象表示空间进行预测,避免了不必要的细节建模。
核心组件:
训练目标: \(\mathcal{L} = \|s_y - \hat{s}_y\|^2\)
关键创新:
任务设置:
实现细节:
# JEPA训练循环
for epoch in range(num_epochs):
for batch in dataloader:
# 编码当前和未来观测
s_current = encoder(batch.current_obs)
s_future = target_encoder(batch.future_obs)
# 预测未来表示
s_pred = predictor(s_current, batch.actions)
# 计算损失
loss = mse_loss(s_pred, s_future.detach())
# 更新参数
optimizer.step(loss)
# EMA更新目标编码器
update_target_encoder(encoder, target_encoder, tau=0.99)
定量评估:
关键发现:
本章系统介绍了基于模型的规划与控制方法,涵盖了从经典MPC到现代深度学习方法的完整谱系。关键要点包括:
核心公式回顾:
练习20.1:推导CEM算法的收敛性条件 提示:考虑精英样本的分布变化
练习20.2:比较MPPI和CEM的计算复杂度 提示:分析采样、评估和更新步骤
练习20.3:解释Dreamer中KL平衡的作用 提示:考虑前向KL和反向KL的区别
练习20.4:设计隐空间规划的成本函数 提示:考虑任务相关性和可微性
练习20.5:设计处理部分可观测性的MPC方法 提示:结合信念状态和鲁棒优化
练习20.6:分析层次化规划的最优性损失 提示:考虑抽象导致的次优性
练习20.7:提出结合物理先验的世界模型架构 提示:考虑归纳偏置和可解释性
练习20.8:设计在线元学习算法用于机器人适应 提示:结合MAML和在线学习
问题:长期预测中误差指数增长 症状:规划时域超过10步后性能急剧下降 解决方案:
问题:执行时遇到训练分布外的状态 症状:模型预测置信度低,控制不稳定 解决方案:
问题:规划时间超过控制周期 症状:控制频率低,响应滞后 解决方案:
问题:优化陷入次优解 症状:重复失败的动作模式 解决方案:
问题:性能对超参数极度敏感 症状:微小调整导致性能巨变 解决方案: