Model-based 不是一个固定算法。先问:计算发生在每次决策时,还是提前训练时? 再问有没有可用的导数、动作是否连续、约束能不能违反。这样选 planner 比按名字追热点更有用。

CEM:不用导数,也能搜索动作

假设未来 5 步,每步一个连续动作。给这 5 个坐标各设均值和标准差,采样 100 条序列;用模型预测并打分,留下最好的 10 条;再用它们更新均值和标准差,重复几轮。数字只是自拟示例,不是推荐默认参数。

CEM 易并行,不要求模型可微;但动作维度与时域一长,搜索空间很快变大。Elite 太少或方差(variance)过早塌缩,会漏掉另一条好路线。MPC 执行第一个动作后重新规划,也可把上次的后续序列平移作 warm start。

把它缩到单步就能手算。小车在 2,执行动作 $u$ 后到 $2+u$,cost 为 $(2+u)^2+0.1u^2$。假设这一轮采到了以下 4 个动作,保留 cost 最低的两个:

候选(candidate)动作 u 预测终点 Cost,越低越好 是否保留
-2 0 0.4 是
-1 1 1.1 是
0 2 4 否
1 3 9.1 否

用保留的 -2、-1 重新拟合高斯,均值变为 -1.5,标准差为 0.5(最大似然估计,分母用 2)。下一轮围绕这里重新采样,不是把均值直接宣布成最优动作。工程上常给标准差设下限,或平滑新旧参数,避免太早只搜一个点。

这个例子的真正最优动作是多少?

直接求导:$2(2+u)+0.2u=0$,得到 $u=-2/1.1\approx-1.8182$。候选里最好的 -2 和 elite 均值 -1.5 都不是它。CEM 只是把下一轮搜索移到更有希望的区域,不会因为挑了 elite 就获得解析最优解。

LQR:一个能算到底的特例

考虑已知的线性 dynamics $x_{t+1}=Ax_t+Bu_t$,最小化二次 cost,$Q,Q_f$ 半正定、$R$ 正定,没有额外动作约束。这里沿用控制里的记号:$x$ 是状态、$u$ 是动作,$Q,Q_f,R$ 是 cost 矩阵,不是前几篇的动作价值(action value) Q:

$$ J=\sum_{t=0}^{T-1}(x_t^\top Qx_t+u_t^\top Ru_t)+x_T^\top Q_fx_T. $$

如果下一步 cost-to-go 是 $V_{t+1}(x)=x^\top P_{t+1}x$,代入 Bellman 并对 $u$ 求导:

$$ u_t^*=-K_tx_t,\qquad K_t=(R+B^\top P_{t+1}B)^{-1}B^\top P_{t+1}A. $$

把最优 $u$ 代回得到 Riccati 递推:

$$ P_t=Q+A^\top P_{t+1}A-A^\top P_{t+1}BK_t,\qquad P_T=Q_f. $$

实际代码解线性方程,不显式求逆。这是把二次函数配方的多维版本:线性转移加二次 cost,使得 Bellman 更新后依旧是二次函数。

手算最后 1 步:$A=B=Q=R=Q_f=1$,$x=2$。最小化 $4+u^2+(2+u)^2$,导数 $4u+4=0$,所以 $u=-1$,cost 为 6。若硬约束 $|u|\le0.2$,这个无约束解已不可用,不能继续声称最优控制是 $-1$。

再多算一步,就能看到反馈增益怎么来

沿用 $A=B=Q=R=Q_f=1$,这次还有 2 个动作可执行。终点 $P_2=1$;倒着算:

时间 下一步 $P$ 当前反馈增益 $K$ 当前 $P$
$t=1$ 1 $1/(1+1)=0.5$ $1+1-1\times0.5=1.5$
$t=0$ 1.5 $1.5/(1+1.5)=0.6$ $1+1.5-1.5\times0.6=1.6$

从 $x_0=2$ 开始,第一步 $u_0=-1.2$、到 $x_1=0.8$;第二步 $u_1=-0.4$、到 $x_2=0.4$。总 cost 为 $4+1.44+0.64+0.16+0.16=6.4$,也等于 $P_0x_0^2=1.6\times4$。

这不是“走得更多反而比一阶段的 6 更差”:两个问题计入的阶段 cost 不一样。价值必须连同任务时域一起解释。反馈策略(policy)还会根据实际观测(observation)重算动作;若中途受到扰动,不能继续把原先的数值动作序列当作反馈控制。

约束不是最后随手 clip 一下

无约束 LQR 先求出动作再 clip,能让动作数值合法,却不保证整个轨迹(trajectory)是约束问题的最优解。因为今天用不了这么大的控制量,会改变明天的位置和剩余选择;应该在规划时就考虑它。

同样,CEM 里“撞墙罚很多分”和“所有候选必须满足安全约束”也不相同。有限惩罚下,优化器仍可能愿意用足够大的奖励(reward)交换一次违规。若没有找到可行候选,要明确失败后的处理,而不是把最不坏的违规序列包装成成功。

iLQR 与 shooting / collocation

iLQR 在当前轨迹附近把 dynamics 线性化、cost 二次化,向后解局部控制修正,再向前 rollout、做 line search。它复用 LQR 的结构,但只处理局部近似,不保证全局最优。

Shooting 只优化动作,状态由模型一路滚出来;长链的导数容易消失或爆炸。Direct collocation 把状态也作为优化变量,显式施加 dynamics 约束;变量更多,但可利用稀疏结构。这里说明机制,不实现完整约束求解器。

方案 优化哪些变量 需要什么 主要局限
Random shooting / CEM 动作序列 能反复调用模型和评分 搜索随维度、时域变难
Gradient shooting 动作序列 模型与 cost 的导数 长链梯度、局部最优
iLQR 轨迹附近的动作修正 可用的局部导数、二次近似 初始轨迹差时局部近似不可靠
Direct collocation 状态与动作,外加转移约束 约束优化器 更多变量、可行性与求解成本

MPC 是“观察后重新规划”的执行方式,不是这张表里的第五种优化器。里面可以放 CEM,也可以放别的求解器;不要把 planner 的选择和反馈频率混成一件事。

模型也可以用来训练,而不是在线搜索

MPC 把计算花在每次决策的搜索上;模型也可以在部署前用来造训练数据:Dyna / MBPO 从真实数据附近做短 rollout 训练 policy 或 Q,Dreamer 一类方法在潜在状态里想象轨迹再训练 Actor / Critic,规划器(planner)蒸馏(distillation)让一个快 policy 模仿规划结果;部署时都省掉了在线搜索,主要只剩 policy 推理(潜在状态方法还要先编码观测)。几种组合各付什么成本、在哪里失败,见规划和学习怎样互相喂;这里只提醒两点:latent state 若丢掉控制需要的信息,重建图像好看也不能补救;训练在模型里完成,也不等于部署安全已经得到验证。

怎么选一个起点

有已知线性近似、低维连续状态,先试能解释的控制基线(baseline);黑盒模型但评估便宜,可以试采样规划;决策延迟很严,就考虑把计算搬到训练时。每次报告都同时列:真实交互数、模型训练量、每次动作的搜索预算。

参考:MIT LQR 推导 · MBPO。接着读规划和学习怎样互相喂。

本页术语 10
方差 variance
估计量的波动幅度;重要性加权最容易在这里爆炸
候选 candidate
召回阶段捞出来、等待精排挑选的内容
动作价值 action value
先在指定状态执行某个动作,再遵循指定策略时的期望回报,即 Q
策略 policy
给定状态,规定怎样选动作;可以输出一个动作,也可以输出动作的概率分布
观测 observation
智能体实际收到的信息,可能只是环境完整状态的一部分
轨迹 trajectory
与环境交互得到的一串状态、动作和奖励;采样时也可能只保存其中一段
奖励 reward
RL 里指导策略更新的标量信号
规划器 planner
利用模型比较未来动作序列,再选择当前要执行的动作
蒸馏 distillation
用一个模型的输出训练另一个通常更小的模型
基线 baseline
用来比较新方法的参考方法或配置