Skip to content

规划与控制:CEM-MPC 与潜在 Actor-Critic

有了世界模型,智能体如何用它来选择动作?L02 的推球任务停在了这一步:RSSM 已经能预测某个候选动作会让小球发生什么。这一部分要问的是,这个预测怎样变成真正的那一推。它是 P03 的直接前置,也为后续架构比较提供规划语境。这里介绍三种规划机制:从最直觉的随机搜索,到 Dreamer 的想象训练,再到 TD-MPC 的混合方案。

在介绍三种规划机制之前,还需要先补上一种世界模型架构:MuZero。我们把它放在规划部分,是因为它最核心的特征与树搜索密不可分。它的世界模型就是为了支持搜索而设计的,如果只讲表示而不讲使用者,系统仍然是不完整的。

常见误区

在介绍三种机制本身之前,有三个关于"用世界模型做规划"意味着什么的假设值得先澄清。

"规划就是像 MuZero 那样做树搜索。" MCTS 只是使用预测价值的一种具体方式,和 MuZero 在离散动作上做树形搜索的设计绑定在一起。CEM-MPC 从不构建树:它并行采样整段动作序列,再围绕表现最好的样本重新拟合分布。Dreamer 的 Actor-Critic 在决策时根本不做搜索,策略网络早已通过在想象轨迹上反向传播训练好了,每个真实步只需直接输出一个动作。树搜索是 MuZero 这个具体设计的特性,不是使用世界模型预测的必要条件。

"世界模型必须可微分才能用来规划。" CEM-MPC 把模型当作黑箱,只需要它能向前滚动,从不对它求梯度。可微分性恰恰是 Dreamer 的 Actor-Critic 用来换取样本效率的特性,不是规划本身强加的前提。TD-MPC 把这一点分离得很清楚:它用可微分的一致性损失训练潜在动力学,但在决策时依然用不需要梯度的 CEM 搜索。

"优化器越是用力压榨世界模型给出的奖励预测,找到的动作就越好。" 这忽略了模型利用问题:激进的优化器同样可能找到那些"因为模型在那里犯了错"而得分高的动作,而不是因为这些动作真的好。这正是 CEM-MPC 每一步都重新规划、而不是照单执行一次搜索结果的原因,也是 Dreamer 限制想象步数并定期用真实数据重新训练的原因,还是 TD-MPC 用 TD 自举抑制累积模型误差的原因。三种机制都花了真功夫去提防模型自身的盲区,而不是更信任它。

这三种误区共享同一个根源:把某个具体系统的工程选择,MCTS、可微分反向传播,或不受约束的优化,误当成了用世界模型规划的普遍属性。真正因机制而异的问题要窄得多:优化器是否需要梯度,是否需要搜索树,以及如何防止自己利用模型本身的误差。

MuZero 与反事实型范式

还有一类任务把反事实推理做到极致:反事实型范式,不预测像素,只在抽象的价值或奖励层面做出正确预测。MuZero(Nature, 2020)把世界模型分解为三个函数:

  • 表示函数 hθ:把过去观测 o1:t 压缩为内部隐状态 s0=hθ(o1:t)
  • 动力学函数 gθ:给定上一步隐状态和候选动作,预测即时奖励和新隐状态:rk,sk=gθ(sk1,ak)
  • 预测函数 fθ:从隐状态预测策略先验和价值:pk,vk=fθ(sk)

三个函数端到端联合训练,总损失为:

lt(θ)=k=0K[lr(ut+k,rtk)+lv(zt+k,vtk)+lp(πt+k,ptk)]+cθ2

各符号含义:K 是展开步数(unroll steps,每次训练往前展开多少步)。lrlvlp 分别是奖励、价值、策略三个预测头的损失函数。ut+k 是从真实交互中收集的实际奖励(训练目标)。rtk 是动力学函数预测的奖励。zt+kn 步自举的目标价值(用真实奖励加上若干步后的价值估计构造)。πt+k 是 MCTS 搜索后产生的改进策略(访问频次分布,作为策略头的训练目标)。cθ2 是 L2 正则化项(权重衰减,c 是正则化系数,防止参数过大导致过拟合)。隐状态 sk 没有任何语义约束,不需要对应真实的环境状态,不需要能够重建像素,唯一的要求是:"从 sk 出发,能准确预测奖励、价值、策略"。这是 MuZero 与 PlaNet/Dreamer 最根本的设计差异。

MuZero 维护三个预测头:

预测头预测目标作用
reward head即时奖励 rt评估当前步的好坏
value head未来累计价值 V(st)引导 MCTS 搜索方向
policy prior动作概率分布 π(ast)减少 MCTS 需要搜索的分支数

三个预测头通过展开的动力学函数在真实交互数据上联合训练。

MuZero 的隐式世界模型:表示函数、动力学函数和预测函数的三模块架构
Schrittwieser et al. (2020) MuZero 的三函数结构:表示函数 h 将历史观测压缩为隐状态 s。动力学函数 g 在隐状态空间中模拟动作转移并预测即时奖励。预测函数 f 从隐状态输出策略先验和价值估计,驱动 MCTS 搜索。隐状态无需对应真实像素,只需支撑准确的奖励和价值预测。

只要这三个预测头准确,潜在状态 st 长什么样并不重要,对 agent 来说,"真实还原世界"不一定是最优目标。MuZero 在围棋(不给棋规)、国际象棋、将棋、57 款 Atari 游戏上全部达到超人水平,同时不依赖任何真实模型或环境规则。

📖 MCTS(Monte Carlo Tree Search,蒙特卡洛树搜索):从当前状态出发,反复进行四个步骤:①选择:沿树向下,选择 UCB 分数(Upper Confidence Bound,置信上界,UCB=Q(s,a)+clnN/na,其中 Q 是该动作的平均价值,N 是父节点总访问次数,na 是该动作被访问次数,c 是探索系数。UCB 平衡"选已知好的动作"和"探索访问少的动作")最高的节点。②扩展:在叶节点尝试一个新动作。③模拟/评估:用神经网络估计新节点的价值(MuZero 直接用 value head,无需 rollout)。④反向传播:将价值估计沿路径向上更新。重复数百次后,访问次数最多的动作就是"经过充分搜索认为最优的动作"。MuZero 对 AlphaZero 的关键扩展:支持单智能体域(非双人博弈)和中间步骤奖励(Atari),价值目标用 n 步自举而非终局胜负。

机制一:CEM 射击法 MPC

📖 CEM 与 MPCCEM(Cross-Entropy Method,交叉熵方法)是一种基于采样的优化算法:先从一个分布(如高斯)中采样大量候选解,保留目标值最优的一小部分精英样本,再用它们重新拟合分布,反复迭代,使采样逐渐集中到高质量区域。这里用 CEM 在动作序列空间中搜索最优动作,因此称为"射击法"(shooting method)。MPC(Model Predictive Control,模型预测控制)则规定如何使用搜索结果:每个时间步都用模型预测未来 H 步,选出最优动作序列,但只执行第一个动作,下一步再重新规划。即使模型不完美,频繁重规划也能及时纠正误差。

一句话描述:随机采样一批动作序列,在模型中"想象"执行,选出预期回报最高的序列,只执行第一步,然后重复。

算法步骤

CEM-MPC 规划循环(每步执行一次)

输入:当前状态 s_t,世界模型 f,奖励模型 r,规划步数 H,精化轮数 K

1. 初始化动作分布:μ ← 0, σ ← 1

2. FOR k = 1 to K(精化轮):
   a. 从 N(μ, σ²) 采样 N 条动作序列:{a^(i)_{t:t+H}}
   b. FOR 每条序列 i:
        展开想象轨迹:s^(i)_{t+1} = f(s_t, a^(i)_t), ..., s^(i)_{t+H}
        计算累计奖励:R^(i) = Σ_{h=0}^{H-1} γ^h · r(s^(i)_{t+h}, a^(i)_{t+h})
        # γ(gamma)是折扣因子,0 < γ < 1,使未来奖励的权重随步数指数衰减
        # γ=0.99 表示 100 步后的奖励仍值当前的 0.99^100 ≈ 0.37 倍
   c. 选出 Top-K 条序列(按 R^(i) 降序)
   d. 用 Top-K 序列重新拟合:μ ← mean(Top-K), σ ← std(Top-K)

3. 执行 μ 的第一个动作:a_t ← μ[0]

手算一遍:假设某一轮精化里采样了 5 条候选动作序列,展开想象后算出的累计奖励分别是 R=[3.0, 7.0, 1.0, 9.0, 4.0],取 Top-K(K=2):按 R 降序排列后保留前两名,也就是第 4 条(R=9.0)和第 2 条(R=7.0)。用这两条精英序列重新拟合分布:

μnew=9.0+7.02=8.0,σnew=(9.08.0)2+(7.08.0)22=1.0=1.0

下一轮采样就会以 μ=8.0,σ=1.0 为中心重新采样,比这一轮更集中在高回报区域,这就是 CEM 让搜索逐轮收缩的完整机制。

第一轮采样覆盖范围广但精度低,找到"高回报区域大概在哪里"。后续几轮用精英序列重新拟合分布,让采样范围逐渐向高回报区域收缩。

局限:在高维连续动作空间(如机械臂同时控制 7 个关节)随机搜索效率极低。这是 TD-MPC 要解决的核心问题:用 Q 函数引导搜索,而不是盲目采样。

优点:简单、无梯度、易于实现,对世界模型的可微分性没有要求。

机制二:潜在空间中的 Actor-Critic(Dreamer 的做法)

📖 Actor-Critic 架构:由两个网络组成,Actor(策略网络 πθ(a|s))负责"决策",Critic(价值网络 Vϕ(s))负责"评估"。Critic 提供的基准(baseline)大幅降低了梯度估计的方差,使训练更稳定。

Dreamer 的核心洞察:与其在真实环境里收集大量数据训练策略,不如在世界模型的想象轨迹中训练,速度快、无风险、可微分。

训练流程

  1. 想象展开:从当前潜在状态 zt 出发,用 Actor 采样动作,RSSM 滚动预测 H
  2. Critic 估值:对每个想象状态计算 V(zh),用 λ-return 构造训练目标
  3. Actor 优化:Actor 通过反向传播(跨越整条想象轨迹)最大化 Critic 预测的累计价值
  4. 世界模型更新:用真实环境数据(重建损失 + KL)更新 RSSM 和编码器

λ-return 的直觉:纯蒙特卡洛需要等 episode 结束才能得到真实回报,方差高。纯 TD 只看一步,偏差大。λ-return 是两者的插值,用"前 k 步真实奖励 + 第 k+1 步 Critic 估值"构造 k 步回报,再对所有 k 加权平均。λ1 信任真实 rollout,λ0 信任 Critic。

为什么可微分很重要:Actor 的梯度直接从 RSSM 的可微分动力学中流过,比蒙特卡洛采样估计策略梯度精确得多。

模型漏洞(Model Exploitation)问题:Policy 可能找到模型里高奖励但真实世界不成立的动作,用高频抖动动作在世界模型里获得高分,但这个动作在真机上只会损坏电机。Dreamer 系列的解决思路是定期用真实环境数据更新世界模型,同时限制想象展开的步数,但这个问题并没有被根本解决。

CEM 在高维动作空间效率低,Actor-Critic 有模型漏洞风险。TD-MPC 的核心价值,正是把两者结合起来同时缓解这两个问题。