基于模型的强化学习:用世界模型与MPC破解样本效率难题

发布时间:2026/9/28 5:10:34
基于模型的强化学习:用世界模型与MPC破解样本效率难题 伯克利深度强化学习课程CS285是全球被引用最多、也最常被推荐的强化学习公开课之一。第 15 讲把话题从无模型方法切换到基于模型的强化学习Model-Based Reinforcement Learning刚好回答了一个工程里反复出现的问题为什么同样的连续控制任务无模型算法要上百万次环境交互基于模型的方法却能用几万次甚至更少交互就达到足够实用的控制效果。这一讲的技术主线是学习环境动态模型然后利用模型完成规划或训练增强涉及四个关键词世界模型World Model、模型预测控制MPC、Dyna 式学习、模型偏差Model Bias。从课程主题看这一讲的重点不在堆数学公式而在回答“模型能带来什么收益”和“模型误差会怎样破坏这些收益”。对于做机器人控制、自动驾驶模拟、游戏 AI或者正在准备强化学习面试的人来说这部分内容值得逐段吃透。这篇文章会按第 15 讲的核心逻辑重新整理一遍覆盖基于模型方法的能力边界、世界模型如何训练、MPC 与 CEM 的规划流程、Dyna 框架的收益分析与模型偏差处理并给出一套可以用于验证理解的代码和实验思路。目标读者是想把理论变成代码的算法工程师以及需要当面讲清楚 model-based 与 model-free 区别的候选人。1. 第 15 讲核心知识速览项目类型公开课讲义 算法框架解析课程来源伯克利深度强化学习课程2026 春季第 15 讲核心主题基于模型的强化学习Model-Based RL解决的核心问题降低强化学习所需的真实环境交互次数关键技术世界模型、模型预测控制、随机射击、CEM、Dyna核心观察点样本效率、模型泛化能力、策略稳定性前置知识MDP、策略梯度、时序差分、Q-Learning 基础最容易踩的坑模型偏差导致策略越学越差典型应用场景机器人控制、自动驾驶模拟、游戏 AI、工业流程优化接口能力不涉及属于算法课程内容工程封装可自行扩展基于模型的强化学习指的是智能体在学习过程中维护一个或多个对环境动态的估计模型。这个模型可以显式预测“状态转移 奖励”也可以隐式建模高维观测的低维潜在表示。和经典无模型强化学习相比它最大的变化是不再把每一步决策都押在真实环境交互上而是允许智能体在内部模型里做想象、规划和试错。关键的一句话总结是无模型强化学习用“大量真实交互”换泛化能力基于模型强化学习用“一部分真实交互 模型想象”换样本效率。2. 为什么需要基于模型的强化学习样本效率问题先看无模型强化学习的瓶颈。以连续控制任务为例策略梯度类方法在 MuJoCo 环境中动辄需要数百万步环境交互。每一步交互在仿真器里代价不高但在真实机器人、真实产线或者真实自动驾驶测试中成本会被放大几个量级。一次真实机器人试验的耗时就足以让训练循环失去意义。基于模型的思路非常直接既然环境存在动力学规律为什么不让智能体先学一个动力学模型再用这个模型来“仿真”未来的状态和奖励这样一来真实环境只在采集训练数据和定期纠偏时被调用大部分训练和规划过程都发生在模型内部。课程里通常会把两类收益分开讲规划式收益模型直接用于搜索动作序列例如 MPC、随机射击、CEM。数据增强式收益模型生成额外的模拟轨迹喂给无模型学习器例如 Dyna、MBPO。这两个方向并不互斥实际系统里经常同时出现。一条典型流水线是真实交互一小批训练世界模型用模型做 MPC 选出动作再把生成的模拟数据交给策略网络更新。从课程编排来看第 15 讲的位置非常重要。前面几讲已经建立了策略梯度、Q-Learning、Actor-Critic 这些无模型工具第 15 讲开始把“环境模型”放回决策循环里也为后面讲解离线强化学习、元强化学习、基于模型的探索埋下伏笔。3. 世界模型怎么学一个有监督学习问题在世界模型训练这一块课程处理得比大多数论文更贴近工程直觉模型学习几乎等价于一个有监督回归问题。设当前状态为 s_t当前动作为 a_t环境下一状态和奖励分别为 s_{t1} 和 r_t。世界模型要拟合的就是条件概率p_θ(s_{t1}, r_t | s_t, a_t)在连续状态空间里常见做法是让网络输出下一状态的均值与方差用高斯负对数似然作为损失函数在离散状态空间里则输出各类状态的概率分布用交叉熵。更工程化的做法还会额外输出奖励的头因为奖励预测的精度直接决定规划结果的排序。训练数据来自真实的轨迹采样。课程通常会强调一个容易被忽略的设计点模型的训练数据分布必须和策略当前访问的状态分布尽量一致。随机采样得到的数据可以覆盖更大范围但信噪比低高探索策略采集的数据更贴合后续规划所需区域但一旦策略偏移模型在新区域就会失效。所以世界模型的更新不是“一次性训练完”而是与策略更新交替进行。每一轮真实交互后模型都要跟着新数据继续微调。这也带来了第一个可观察指标如果模型 loss 在下降但真实环境 return 也在下降大概率不是模型“不够准”而是模型“在不该准的地方准”策略已经钻了模型的空子。4. 用世界模型做规划MPC、随机射击与 CEM有了模型之后最直接的使用方式就是规划。课程里会从最简单的随机射击开始再升级到 CEM 和更完整的 MPC 框架。4.1 随机射击随机射击的思路是最朴素的从当前状态出发随机采样 N 条长度为 H 的动作序列用世界模型推演每一条序列的未来轨迹计算累计奖励然后选择累计奖励最高的动作序列中的第一个动作执行。执行完这个动作后环境返回真实下一状态再重复上述过程。这个算法最简单的实现只需要三个组件动作采样器、模型推演器、累计奖励评估器。它甚至不需要训练策略网络因此非常适合用来验证“世界模型本身是否可用”。代码层面的关键逻辑可以参考下面的伪代码import numpy as np # model.predict(state, action) - (next_state, reward) # 这里 model 代表已经训练好的世界模型 def random_shooting_action(model, state, horizon, num_candidates, action_low, action_high): action_dim np.asarray(action_high).shape[0] # 随机采样 num_candidates 条候选动作序列 actions np.random.uniform( action_low, action_high, size(num_candidates, horizon, action_dim), ) best_idx -1 best_return -np.inf for i in range(num_candidates): s state total_return 0.0 for t in range(horizon): s, r model.predict(s, actions[i, t]) total_return r if total_return best_return: best_return total_return best_idx i # 只执行最优序列的第一个动作 return actions[best_idx, 0]随机射击的问题在于采样效率低。动作空间维度和规划视界一旦增大纯随机采样的轨迹质量会急剧下降。课程在这里通常会引导到 CEM。4.2 交叉熵方法 CEMCEM 不直接在所有动作空间里随机采样而是维护一个高斯分布通过多轮迭代让分布逐渐向高回报区域集中。每一轮迭代做三件事先从当前分布采样一批动作序列用模型评估每条轨迹的累计回报保留其中表现最好的 top 精英轨迹再根据精英轨迹更新高斯分布的均值和协方差。这样做的好处是只靠少量前向推演就能在几十轮迭代内把动作分布收敛到相对优秀的区域。和随机射击相比CEM 更适合高维动作空间也是 PETS 等经典基于模型方法的核心规划组件。下面是 CEM 规划的伪代码def cem_action(model, state, horizon, num_candidates, elite_ratio, action_low, action_high, cem_iters3): action_dim np.asarray(action_high).shape[0] mean np.zeros((horizon, action_dim)) std np.ones((horizon, action_dim)) for _ in range(cem_iters): actions np.random.normal(mean, std, size(num_candidates, horizon, action_dim)) costs evaluate_trajectories(model, state, actions) # 返回越小越好 elite_count max(1, int(num_candidates * elite_ratio)) elite_idx np.argsort(costs)[:elite_count] elite_trajs actions[elite_idx] mean elite_trajs.mean(axis0) std elite_trajs.std(axis0) return mean[0]需要说明的是伪代码中的evaluate_trajectories是轨迹评估入口通常会累加每一步的回报也可以额外加入控制代价或模型不确定性惩罚。4.3 模型预测控制与闭环特性MPC 不只是算法更像是一种使用框架。每个控制周期都会重新规划一次动作序列只执行第一步然后在新状态上重新规划。这种“滚动优化 闭环执行”的方式能显著缓解模型误差的影响因为规划器不会在一条错误的长期轨迹上走太远。课程里通常会给出一个直观结论MPC 框架下模型做近期预测时精度比较高长期预测的累积误差由滚动优化来兜底。这也是为什么模型偏差在低维连续控制任务里往往还能承受。5. Dyna 式学习模型增强策略训练规划不是使用模型的唯一方式。Dyna 类方法走的是另一条路把世界模型当作一个经验生成器给无模型策略学习器不断喂模拟数据。经典的 Dyna 流程是这样的智能体先在真实环境里走几步把真实经验存入缓冲区同时用这些真实经验回归世界模型之后从缓冲区采样若干个状态作为起点用世界模型向前推演若干步生成一批模拟轨迹最后把“真实轨迹 模拟轨迹”混合起来更新策略。从课程角度理解Dyna 的价值有两点让策略学习器获得更充足的数据尤其是状态空间中探索不到的区域。让无模型学习器在最熟悉的框架上工作不需要重新设计值函数或策略优化器。但代价也很明显模拟数据不是免费的模型误差会随着模拟长度增加而放大。课程在处理 Dyna 时通常会给出一个关键比例也就是每一条真实轨迹到底配多少条模拟轨迹。这个比例需要由实验调出来没有万能答案。# Dyna 风格训练循环用于理解真实交互与模型学习交替流程 for iteration in range(max_iters): # 1. 真实环境交互 real_samples collect_real_samples(policy, stepsreal_steps) real_buffer.add(real_samples) # 2. 用真实样本更新世界模型 train_world_model(world_model, real_buffer) # 3. 用模型生成模拟轨迹 start_states real_buffer.sample_states(batch_size) for _ in range(model_steps): simulated simulate_trajectory(world_model, start_states, policy) model_buffer.add(simulated) # 4. 策略学习器同时消费真实和模拟数据 update_policy(policy, real_buffer.sample(), model_buffer.sample())工程实现时还有两个细节值得注意。第一模拟轨迹的起始状态最好从真实缓冲区采样而不是从模型生成的末端状态继续推演否则误差叠加会更快。第二模拟轨迹长度通常要短于真实轨迹长度MBPO 等工作已经把“短视界模型利用”变成了一种理论上有保障的设计。6. Model-Based 与 Model-Free 的选择什么时候值得用课程把两种范式放在一起对比本质上是在帮学习者建立一个选择框架。对比维度无模型强化学习基于模型的强化学习样本效率低通常需要百万级交互相对高经典任务中常有一个数量级以上提升最终策略质量通常较高政策直接优化依赖模型精度模型差则策略上限低环境适应方式直接调整策略先调整模型再由模型带动策略实现复杂度中等高需要维护模型和规划器主要失败模式探索效率差、策略方差大模型偏差累积、规划耗时长适合场景仿真成本低、需要极致表现真实交互昂贵、需要快速试错一个比较稳妥的经验是如果环境交互成本低且你追求最终性能极限无模型方法仍然是主力。如果真实交互很贵比如机器人、工业设备、自动驾驶场景那么基于模型方法更值得优先尝试。第 15 讲反复出现的警告是不要在模型还没准的时候硬用模型。模型预测误差在随机状态上的表现可能很好但策略会把轨迹推向训练分布边缘让模型在边缘区域的表现快速恶化。这就是“模型偏差导致策略越学越差”的典型过程。7. 模型偏差与不确定性处理模型偏差是这一讲必须理解的核心风险。模型总是用有限数据拟合近似函数任何学到的模型都存在与真实动态不一致的区域。当规划器或 Dyna 生成器在这些区域里“发现”一条高回报路径时它其实是在利用模型误差。结果就是模拟训练时 return 很高真实环境中评估却完全崩掉。课程通常会给几种缓解思路按工程成本从低到高排列短视界规划只用模型预测未来 5 到 20 步减少误差累积。真实交互纠偏每隔一定真实步数强制在真实环境中采集新轨迹并重新训练模型。模型集成同时训练多个动力学模型用它们的预测均值作为规划依据用预测方差估计不确定性。不确定性惩罚规划评估时对高不确定性轨迹施加惩罚项避免规划器利用模型盲区。模型校准让模型不仅输出均值还要输出置信区间并在高置信区域才信任模型。模型集成是性价比很高的方案。实现上并不复杂随机初始化多个网络用不同数据子集或不同随机种子训练规划时把每个模型的预测结果取平均。集成带来的方差估计还能用于 CEM 评估阶段让规划器自动规避高不确定区域。这也解释了为什么经典论文 PETS 会选择集成模型 CEM 的组合而不是追求单个网络的高精度。8. 经典论文与扩展方向如果只看第 15 讲建议把以下几个方向作为课后延伸DynaSutton 在 1991 年提出的经典框架是所有模型增强方法的思想源头。PILCO基于高斯过程模型的概率动态模型是早期样本高效控制代表作。PETS集成模型 CEM 规划是比较容易复现的基于模型控制基线。MBPO短视界模型增强策略优化明确了模型利用中的视界权衡。Dreamer在潜在空间学习世界模型再把规划和学习放到低维表示空间适合高维图像观测。World Models序列 VAE 循环网络 控制器组合是视觉世界模型的经典案例。这些论文的共同问题意识是模型不只为了预测准确而是为了让策略更快、更稳地学习。所以在复现这些方法时不要只盯着模型 loss要看真实环境 return、模型预测误差、模拟数据利用率三个指标。下一讲通常会继续讨论如何把基于模型的方法和无模型方法混合或者把基于模型的思想引入探索与元学习。提前在 CartPole、Pendulum、HalfCheetah 这类标准环境上把 MPC、CEM、Dyna 都跑通一遍会让后面内容轻松很多。9. 环境准备与前置技能这门课不需要重型软件栈但学习体验非常依赖环境准备好。建议按下面的清单检查。项目建议操作系统Linux 或 macOS 优先Windows 需要额外处理 MuJoCo 依赖Python 版本3.10 或 3.11 均可按课程任务环境要求调整深度学习框架PyTorch版本与 CUDA 匹配即可仿真环境Gymnasium 配合 MuJoCo或使用课程提供的环境接口数学基础概率论、梯度下降、MDP 概念任务管理一条命令能启动训练脚本记录日志和模型参数一个用于打基础的环境准备流程参考# 创建独立 Python 环境避免污染系统环境 conda create -n mbrl python3.10 -y conda activate mbrl # 安装 PyTorchCPU 版用于理解算法逻辑GPU 版用于提速 pip install torch # 安装 Gymnasium用于构建和验证强化学习环境 pip install gymnasium # 安装 MuJoCo 相关依赖具体版本以官方文档为准 pip install mujoco如果遇到 GPU 显存不足不必焦虑。基于模型的强化学习在入门阶段完全可以用 CPU 跑小环境模型训练和规划推演所需的计算量远小于大语言模型或大视觉模型。10. 功能验证与效果评估一套可执行的上手流程课程内容如果只是读一遍很难留下真实印象。建议按下面四步做一轮动手验证。10.1 第一步在简单环境里实现随机射击选择 CartPole 或 Pendulum 这类低维环境先不做任何策略网络直接用随机射击规划动作。规划视界取 20 到 30 步候选轨迹数 500 到 1000 条。验证成功标准智能体能在 CartPole 上稳定保持杆子不倒一段时间。只要模型预测的是环境真实状态转移随机射击就能实现最基本的控制这也说明世界模型是可用。10.2 第二步把随机射击升级成 CEM在同样的环境里把随机采样换成 CEM 的迭代优化。对比随机射击与 CEM 在相同候选轨迹数和相同视界下的平均回报。通常你会看到 CEM 在前 20 轮迭代内就明显减少无效动作。10.3 第三步加入一个真正的动力学模型用一个小型多层感知机拟合 s_{t1} 和 r_t输入是当前状态和动作输出是下一状态和奖励。训练数据可以通过随机策略在环境中采集也可以直接使用经验回放缓冲区。这一阶段重点看两个指标模型在验证集上的预测误差以及 MPC 控制效果。如果模型预测误差很低但控制效果差问题几乎一定出在规划参数上比如视界太长或候选轨迹数太少。10.4 第四步实现模型集成把单个模型扩展到 3 到 5 个模型集成规划时用集成均值。观察真实环境 return 的稳定性。集成模型的回报波动通常会比单模型更低这是模型偏差缓解最直观的体现。一个示意运行命令如下实际请对齐自己的工程代码python run_mbrl_demo.py \ --env CartPole-v1 \ --algo cem \ --horizon 30 \ --candidates 1000 \ --cem_iters 3 \ --ensemble_size 5这套流程不需要复杂业务场景也能覆盖第 15 讲的大部分核心机制。11. 资源占用与性能观察基于模型强化学习的计算开销和普通深度强化学习不一样。它有两个阶段世界模型训练阶段本质是监督学习计算量和模型参数量、输入维度、数据量直接相关。连续控制任务里模型往往很小训练一个 epoch 可能只需要几秒到几十秒。规划阶段则是推理密集型任务。每走一步真实环境规划器要跑 H × N 次前向预测。H 是规划视界N 是候选轨迹数。假设 H30、N1000、集成模型为 5 个那每一步决策就要跑 15 万次前向预测。这个数字一乘就会发现规划阶段的耗时可能远超模型训练阶段。所以性能观察要分开看训练时用nvidia-smi观察 GPU 利用率小模型可能跑不满 GPU此时瓶颈在数据加载和 CPU 端规划循环。规划时观察 CPU 利用率很多规划器是纯 Python 循环GPU 未必被调用。候选轨迹数和视界是规划耗时的主要调节旋钮优先减这两个参数。如果追求更快的决策频率可以考虑向量化推演把整批候选轨迹一次性送给模型用批量前向减少 Python 循环开销。这也是工程落地时最实用的优化手段。12. 常见问题与排查方法问题现象可能原因排查思路解决方向模型训练 loss 很低但 MPC 控制效果差模型只在训练数据分布内准确规划把轨迹推向分布外区域画出模型预测轨迹与真实轨迹的偏差集成模型、扩大探索数据、缩短规划视界模拟训练时 return 高真实环境评估崩模型偏差被策略利用对比模拟轨迹和真实轨迹的分歧程度提高真实交互比例加入不确定性惩罚样本效率没有明显提升Dyna 模拟数据比例太小或模拟长度太长检查模拟步数与真实步数比值调整模拟比例改成短视界模拟高维图像观测训练不动直接预测像素级状态学习难度过高观察像素预测质量改用潜在空间模型参考 Dreamer规划耗时太长控制频率跟不上候选轨迹数或视界设置过大分析单步决策耗时构成向量化批量前向减小 H 或 N训练曲线极不稳定模型更新与策略更新节奏失配检查模型更新频率固定一个较小的模型更新间隔如果遇到训练发散第一步不是调网络结构而是把真实样本量和模拟样本量比例打出来看一眼。很多基于模型方法的失败都源自模拟数据过度占据训练分布。13. 最佳实践与学习建议基于模型的强化学习入门门槛不高但做好很难。给几条可操作建议。先跑通确定性问题再碰复杂动力学。CartPole 这类环境能让模型预测误差和策略优化速度之间的关系变得非常直观。直接上高维连续控制环境你会分不清问题是出在模型、规划器还是策略学习器。把真实环境 return 和模型预测误差当作两个独立指标每天记录。课程中理论推导不会替你发现工程问题真实反馈才是调试信号。不要迷信模型精度。一个在验证集上平均误差很小的模型可能在策略访问的高回报区域里有系统性误判。如果能用集成模型给每一条候选轨迹打一个不确定性分再把这些不确定性显示出来会比只盯着 loss 更有效。涉及真实机器人、自动驾驶或工业控制场景时建议遵守安全边界。模型输出的动作在部署前必须经过硬约束检查真实测试需要有急停机制任何自动决策系统都不应在未经校验的情况下直接接管高风险对象。这不是课程理论问题而是工程上线的基本红线。14. 总结第 15 讲最有价值的收获是理解了强化学习里“直接学策略”和“先学世界模型再做决策”两条路线之间的关系。基于模型的强化学习不是万能药它的优势建立在样本效率上代价则是模型偏差可能让策略越学越差。建议第一次动手时把重心放在三件事用随机射击熟悉 MPC 闭环流程用 CEM 体验候选轨迹优化的差异再用模型集成观察策略稳定性的变化。把这一轮跑完之后再去看 PETS、MBPO、Dreamer 这些经典工作会顺畅很多。这门课把这部分放在课程中段也该有明显意图基于模型的思想不是孤立技巧而是后续离线强化学习、元学习和探索方法共同依赖的基础设施。吃透这一讲后面的路会好走很多。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询