资讯动态

基于模型的强化学习MBRL:从动力学模型到样本高效决策

发布时间:2026/9/28 5:10:51 来源:尧图企业网站定制
深度强化学习发展到今天最让工程师头疼的问题已经不是“能不能学得会”而是“要花多少次真实交互才能学会”。无模型算法 DRQN、PPO、SAC 在标准 benchmark 上表现很出色但放到真实机器人、车端控制或工业场景时练一次要烧掉大量时间与硬件成本。伯克利 2026 春季深度强化学习课程第 16 讲把视角转向另一条主流路线基于模型的强化学习Model-Based Reinforcement LearningMBRL。这一讲的定位很清晰——当环境交互代价高、样本预算紧张时如何让智能体学会一个环境动力学模型再拿这个模型去“脑补”数据或直接做在线规划。本文围绕第 16 讲的核心内容展开整理了 MBRL 从原理到实现的完整笔记内容包括动力学模型的学习方法、利用模型的三种技术路线、Dyna-Q、PILCO、PETS、MBPO、Dreamer 等经典算法族的拆解以及代码级的 Dyna-Q 教学示例。无论你是刚开始学习深度强化学习的研究生还是已经在跑无模型 baseline、想提升样本效率的开发者这篇内容都适合收藏备用。1. 为什么需要基于模型的强化学习1.1 无模型强化学习的样本瓶颈先看一个常见的训练流程。使用 PPO 训练一个连续控制智能体每次 epoch 要在真实环境里采集数万步轨迹。CartPole 这类简单任务还好一两分钟就能跑完但换成 MuJoCo 里的 HalfCheetah、Humanoid或真实机械臂、无人机飞行每次 reset 都要重新上电、复位、等待物理系统稳定。样本效率低下意味着试错成本变成不可接受的工程成本。无模型强化学习的核心假设是不显式建模环境直接从交互数据中学习策略。这种方法通用性很强却有个隐含代价——决策和训练都依赖真实环境反馈。环境每次给出一个 reward 之前智能体已经付出了一次昂贵交互。基于模型的强化学习则不同。它先花一部分预算去学习环境如何转移[ s_{t1}, r_t f(s_t, a_t) ]一旦学到这个模型智能体就有办法“不碰真实环境”也能构造大量训练数据。这种先学世界模型、再用模型加速决策的思路是 MBRL 提升样本效率的根本原因。1.2 MBRL 的直观类比可以把 MBRL 类比成一个人学习开车。无模型的做法是直接坐到驾驶座上不停打方向盘通过撞路牙、踩错油门来积累经验。基于模型的做法是先找一个驾校模拟器或先在脑子里建立“打多大方向盘对应多大转弯”的心理模型在模拟器里把错误犯够了再上真车。这里的关键不在于模拟器是否完美而在于模型可以反复使用。模型哪怕只有 80% 的准确率用它生成的虚拟轨迹也能帮助策略提前避开明显错误的动作把真实环境的试错需求降到很低的水平。1.3 MBRL 解决什么问题MBRL 主要解决四类问题样本效率低用模型生成虚拟样本减少真实交互次数。真实环境不可频繁访问机器人硬件损耗、安全风险、环境 reset 成本高。多任务复用环境动力学模型在多个 reward 函数之间可迁移换任务不用重新学。规划与安全约束基于模型可以做前瞻提前评估一条轨迹是否危险。第 16 讲强调了一个重要观点无模型与基于模型不是水火不容现代算法经常把两者结合。例如 MBPO 用学习到的模型给 SAC 生成训练数据而策略更新仍走无模型范式。这种“模型辅助无模型”的范式是目前工程落地中最常见的一种。1.4 与规划、模仿学习的边界MBRL 很容易和另外几个概念混淆需要先分清边界。概念核心思想区别无模型 RL直接用真实轨迹更新策略不学环境模型基于模型 RL先学环境模型再通过模型规划或生成数据显式学习 (p(s|s,a))规划算法已知环境模型时搜索动作序列不涉及模型学习模仿学习从专家演示学习策略不依赖 reward也不一定学环境模型World Model学习状态转移与 reward 的生成模型是 MBRL 的组成部分但不等于完整 MBRL换句话说MBRL 的“模型”与“规划”是两个独立组件。学完模型之后你可以选择用它做 MPC 式规划也可以选择用它生成虚拟轨迹甚至可以两种同时用。2. 课程背景与知识前置2.1 本讲在课程中的位置伯克利 2026 春季深度强化学习课程的第 16 讲排在整个课程的中间偏后阶段。这个位置安排很讲究——前面几讲已经铺垫了策略梯度、Q-learning、Actor-Critic、SAC、PPO 等无模型算法。到了第 16 讲课程从“让智能体直接和真实环境战斗”转向“先让智能体理解环境”。这种安排在研究生课程和工业培训中都很典型学生已经具备无模型算法基础再引入模型可以更深入地理解样本效率的瓶颈。如果你还没学过这些前置内容看本讲会遇到一定障碍。建议至少要理解 MDP 的五个要素、策略 π、价值函数 V/Q、以及一次 rollout 的含义。2.2 需要掌握的先修概念MBRL 涉及的核心组件可以向后追溯为三类知识监督学习基础。动力学模型本质上是一个有监督回归问题输入 (s_t, a_t)输出 (s_{t1}) 和 (r_t)。你需要会搭一个 MLP 或别的小型神经网络并且训练时注意过拟合。时序预测基本思想。利用模型做多步 rollout 时会用到递归预测一次预测的误差会传导到下一次输入因此要理解误差累积。控制与规划基础。如果想要用好模型做决策至少要理解“给定模型如何搜索最优动作序列”。不要求你会主动控制但要知道 Model Predictive ControlMPC模型预测控制的基本思想每次只执行第一步然后滚动优化。2.3 实验环境与版本说明下面的示例基于通用 Python 环境和 PyTorch 风格代码。为了便于跨版本使用这里不对具体版本号做死限制但给出一个稳妥建议Python 3.9 或更高PyTorch 2.x 通用 API不需要特定新特性NumPy 用于数据采样与动作采样可视化可以选用 Gymnasium 环境但也可以自定义一个简单二维状态问题来跑通逻辑pip install numpy torch gymnasium安装时如果遇到环境名称冲突推荐使用虚拟环境隔离。无论 OpenAI Gym 还是 Gymnasium核心接口都是env.step(action)返回(next_state, reward, done, info)版本差异不会影响本文的核心教学思路。3. 从学习动力学模型到利用模型3.1 动力学模型的数学表达标准的 MDP 由状态空间 S、动作空间 A、状态转移概率 P、奖励函数 R 和折扣因子 γ 构成。在无模型强化学习中P 和 R 对算法是隐藏的。而在 MBRL 中我们试图学习它们的近似[ \hat{P}(s_{t1} | s_t, a_t), \quad \hat{R}(s_t, a_t) ]在实际工程中这两个函数通常通过同一个神经网络输出。输入是当前状态和动作输出是下一状态和即时奖励。有些实现还会输出终止概率这对 gym 类任务尤其重要——如果模型没有学到“某一状态会终止”规划器就会沿着一个不可能的轨迹继续搜索。如果环境是部分可观察的MDP 会变成 POMDP状态还需要编码历史信息。但第 16 讲围绕 MDP 展开教学示例也都是全状态可观察任务。3.2 如何用神经网络拟合动力学模型最朴素的实现方式是训练一个回归网络# 文件路径model_based_rl/learn_dynamics.py # 说明教学示意图重点演示动力学模型的训练接口 import torch import torch.nn as nn class DynamicsModel(nn.Module): def __init__(self, state_dim, action_dim, hidden_dim128): super().__init__() self.net nn.Sequential( nn.Linear(state_dim action_dim, hidden_dim), nn.ReLU(), nn.Linear(hidden_dim, hidden_dim), nn.ReLU(), nn.Linear(hidden_dim, state_dim 1), # 输出delta_state reward ) def forward(self, state, action): x torch.cat([state, action], dim-1) out self.net(x) delta_state out[..., :state_dim] reward out[..., state_dim:] return delta_state, reward模型输出的不是直接预测下一状态而是预测状态增量delta state。这种设计的动机很朴素当状态变化幅度远小于状态本身数值时直接回归下一状态会浪费大量网络容量去拟合静态部分而回归增量可以让网络专注于变化部分。训练时用真实轨迹数据构造监督信号# 文件路径model_based_rl/train_dynamics.py # 说明训练循环示意使用 MSE 损失回归 delta_state 与 reward def train_dynamics(model, dataset, optimizer, epochs50): model.train() for epoch in range(epochs): total_loss 0.0 for state, action, next_state, reward in dataset: delta_target next_state - state optimizer.zero_grad() delta_pred, reward_pred model(state, action) loss nn.functional.mse_loss(delta_pred, delta_target) \ nn.functional.mse_loss(reward_pred.squeeze(-1), reward) loss.backward() optimizer.step() total_loss loss.item() if epoch % 10 0: print(fEpoch {epoch}, Loss {total_loss:.4f})这里所有变量都按 batch 处理。dataset 是一个简单的列表也可以是标准 PyTorch Dataset。状态、动作、下一状态、奖励分别都是 float 张量。需要注意nn.functional.mse_loss对形状有要求loss 两端张量形状必须一致。实际实现中你需要检查 reward 的维度是[batch, 1]还是[batch]统一为某一形状后计算。这是很多初学者第一次自己写动力学模型时最常见的报错来源。3.3 三处核心细节归一化、递归预测、集成不确定性训练动力学模型并不难难的是让学到的模型在采样时可靠。第 16 讲把这三个细节作为重点强调过工程上值得反复检查。第一输入归一化。环境状态的量纲差异通常很大比如机械臂关节角度是 0.1 级别角速度却可能达到 5 甚至 10。如果不做 normalization神经网络很容易被大尺度特征主导。常规做法是记录训练数据每个维度的 mean 和 std在输入模型前做归一化在预测后反归一化。第二递归预测误差累积。规划器可能需要在模型上 rollout 50 步。每一步模型都有一点误差这些误差在递归预测中不断放大。后果是模型单步误差很小但多步预测完全偏离真实环境。缓解手段包括限制 rollout 长度、在 latent space 而不是原始状态空间预测、以及用集成模型量化不确定性。第三用集成ensemble捕捉不确定性。动力学模型只训练一次时网络会表现出“过度自信”。在数据稀少的区域它完全不知道自己不知道什么。PETS、MBPO 等方法使用多个动力学模型预测多个候选未来状态让规划器或策略考虑这种不确定性。集成模型通常训练 5 到 7 个网络每个网络使用同一批数据的不同子集或不同初始化预测时取均值或采样。4. 利用模型的两条核心技术路线学到的动力学模型本身不产生决策能力真正重要的是怎么使用模型。第 16 讲可以归纳出三种使用路径。4.1 路线一模型用于规划MPC 与随机优化在已知或已学到模型的情况下我们可以直接在模型上搜索最优动作序列。最基本的规划方式是 Random Shooting随机采样 N 条动作序列每条序列用模型 rollout H 步累计奖励最高的一条作为最终动作序列。然后执行序列的第一步到下一时刻重新规划。这就是 Model Predictive Control 的滚动时域思想。如果再进一步用交叉熵方法CEM迭代优化动作序列的分布效果会明显提升。CEM 的流程是初始化高斯分布反复采样并评估动作序列保留表现最好的 top-k 条用它们更新高斯分布的均值与方差。经过若干次迭代后采样出的动作分布会逐渐逼近最优区域。CEM 的优点是简单、不要求模型可微。即使动力学模型是黑盒网络也能通过采样方式评估轨迹。缺点是规划时间较长动作维度高时采样效率会下降。4.2 路线二模型用于生成训练数据Dyna 风格模型学习完成后可以像“数据工厂”一样不断生成虚拟轨迹再把这些轨迹喂给任意无模型强化学习算法。这种思想最早可以追溯到 Sutton 提出的 Dyna-Q。Q-learning 在真实环境中收集一批经验后利用学到的模型产生大量模拟样本用模拟样本继续更新 Q 表或 Q 网络。现代实现中 MBPO 做了重要改进模型 rollout 的步数不能太长。有一个很重要的现象如果用模型生成过长的轨迹模型误差会迅速累积生成的“虚拟数据”质量越来越低反而拖累策略学习。MBPO 论文中建议根据模型不确定性自适应调整 rollout 长度一般限制在 1 到 15 步之间。4.3 路线三潜在空间世界模型Dreamer 与 MuZero 思路在像素级任务中直接预测原始像素的下一个状态非常昂贵。Dreamer 的做法是先学习一个视觉表示模型把高维图像压缩成低维隐变量再在隐空间里学习世界模型、训练 Actor-Critic 策略。这种方法的优势在于rollout 在低维潜在空间中进行计算代价低且模型不需要重建完整图像。MuZero 的路线也类似它学习一个抽象状态表示并用其做蒙特卡洛树搜索。这两者既是 MBRL 的顶点算法也是生成式世界模型在现代强化学习中的典型代表。5. 经典 MBRL 算法族拆解5.1 Dyna-Q最小闭环系统Dyna-Q 是理解 MBRL 闭环流程最简单的入口。在真实环境执行动作收集经验。用经验更新 Q 值Q-learning。用经验学习环境模型。采样若干初始状态用模型生成多步经验。用模型经验继续更新 Q 值。重复上述流程。这个架构的问题也很明显模型一旦在某个区域不准确Q 值会被伪造数据误导。Dyna-Q 在简单栅格世界表现很好在连续控制场景则力不从心。5.2 PILCO概率模型与策略搜索PILCO 是 2011 年发表的算法用高斯过程Gaussian Process建模状态转移。不直接规划动作序列而是直接优化一个策略的参数使得模型预测的长期累积奖励最大化。PILCO 的优点是样本效率极高曾在真实机械臂任务上以极少的样本量学会摆动动作。缺点是高斯过程不适合高维状态和大型数据集计算复杂度高。它代表了“概率模型 模型内策略优化”这一流派。5.3 PETS采样式规划器的工程选择PETS 采用集成动力学模型配合 CEM 或随机采样做规划。它的核心设计是模型的不确定性不通过单一网络输出方差而是通过多个模型的预测分布来体现。PETS 在连续控制任务上展示了一个重要结论当模型是确定性集成模型时CEM 规划器可以比策略梯度方法达到更低样本复杂度。虽然最终性能有时不如无模型算法但它用很少的真实样本就能达到可接受水平非常适合真实环境。5.4 MBPO模型辅助无模型的现代范式MBPOModel-Based Policy Optimization是伯克利 2020 年前后比较有影响力的工作。它保留了 SAC 等无模型算法的策略更新同时利用动力学模型生成短轨数据。MBPO 的核心公式逻辑是真实数据采集之后用模型生成较短 rollout 的虚拟数据混合真实数据一起更新 SAC。其论文的核心洞察是模型 rollout 的最优长度取决于模型误差如果模型预测误差随步数增长就应该让 rollout 步数越短越好。实际实现里 rollout 步数一般取 1 到 15。MBPO 在不少标准 MuJoCo 任务上超过了主流无模型算法同时显著降低了真实环境交互次数。6. 一个完整的教学级示例Dyna-Q 风格模型辅助 Q-learning下面用一个简单的二维状态问题完整走一遍 MBRL 闭环。环境设定为一个一维小车状态为位置和速度动作是离散的推力 ([-1, 0, 1])目标是往右移动到达目标点。这不是某个标准 gym 环境目的是让你聚焦核心流程。6.1 问题定义状态(s[x, v])初始 (x \in [-0.5, 0.5])(v0)动作(a \in {-1, 0, 1})表示推力方向转移真实环境转移函数如下带一点随机噪声奖励接近目标 (x1) 时奖励为正超出边界则终止为了后续代码简洁我把环境封装为一个 Python 类。# 文件路径model_based_rl/toy_env.py import numpy as np class ToyEnv: def __init__(self): self.state None def reset(self): self.state np.array([np.random.uniform(-0.5, 0.5), 0.0]) return self.state.copy() def step(self, action): x, v self.state v v action * 0.1 v np.clip(v, -0.3, 0.3) x x v np.random.normal(0.0, 0.005) reward 1.0 if x 1.0 else 0.0 done x 1.0 or x -1.0 self.state np.array([x, v]) return self.state.copy(), reward, done, {}这里随机噪声很小模型有希望学到较准确的单步转移。这是教学设计中很重要的一点如果真实环境转移中随机噪声很大模型误差会掩盖学习算法的效果。6.2 实现一个可复用的动力学模型用第三节定义的 DynamicsModel 类做模型。别忘了状态增量的输出方式。# 文件路径model_based_rl/dyna_q.py import torch import torch.nn as nn import numpy as np class DynamicsModel(nn.Module): def __init__(self, state_dim2, action_dim1, hidden_dim64): super().__init__() self.net nn.Sequential( nn.Linear(state_dim action_dim, hidden_dim), nn.ReLU(), nn.Linear(hidden_dim, hidden_dim), nn.ReLU(), nn.Linear(hidden_dim, state_dim 1) ) def forward(self, state, action): x torch.cat([state, action], dim-1) out self.net(x) delta out[..., :2] reward out[..., 2:] return delta, reward6.3 规划器基于模型的 CEM 动作选择Q-learning 需要 argmax 动作。对于离散动作直接用模型查询就可以构造一个简单的 rollout 评估。这里用一个更直观的规划器来做动作选择采样多条动作序列在模型上 rollout选择累计奖励最高的序列首动作。# 文件路径model_based_rl/planner.py import numpy as np import torch def cem_plan(model, state, horizon10, num_samples100, top_k10): model.eval() # 动作空间-1, 0, 1 action_space np.array([-1.0, 0.0, 1.0]) # 初始化每个时刻动作分布的概率 probs np.ones((horizon, 3)) / 3.0 for iteration in range(3): scores [] action_seqs [] for _ in range(num_samples): actions [] for t in range(horizon): a_idx np.random.choice(3, pprobs[t]) actions.append(action_space[a_idx]) action_seqs.append(actions) # rollout s state.clone().float().unsqueeze(0) total_reward 0.0 for a_val in actions: a_tensor torch.tensor([[a_val]]).float() delta, reward model(s, a_tensor) s s delta total_reward reward.item() if s[0, 0].item() 1.0: total_reward 10.0 break scores.append(total_reward) # 选择 top_k idx np.argsort(scores)[-top_k:] # 更新分布对 top_k 序列的动作统计频率 new_probs np.zeros_like(probs) for i in idx: for t, a_val in enumerate(action_seqs[i]): a_idx int(np.where(action_space a_val)[0][0]) new_probs[t, a_idx] 1.0 probs new_probs / new_probs.sum(axis1, keepdimsTrue) # 返回第一步的最优动作 best_idx np.argmax(probs[0]) return action_space[best_idx]这个规划器非常朴素没有做归一化也不包含集成模型。它的价值在于展示“模型可用于搜索动作序列”这件事本身。实际项目里你会希望把 CEM 改成更稳定的高斯分布迭代并把模型预测做归一化处理。6.4 主训练循环主循环分为三块真实环境收集、模型更新、模型内规划决策。# 文件路径model_based_rl/main.py import torch import numpy as np from toy_env import ToyEnv from dyna_q import DynamicsModel from planner import cem_plan env ToyEnv() model DynamicsModel() optimizer torch.optim.Adam(model.parameters(), lr1e-3) buffer [] for episode in range(30): state env.reset() done False total_reward 0.0 while not done: # 1. 用模型规划动作 if len(buffer) 50: s_tensor torch.tensor(state).float() action cem_plan(model, s_tensor) else: action float(np.random.choice([-1.0, 0.0, 1.0])) next_state, reward, done, _ env.step(action) buffer.append((state.copy(), action, next_state.copy(), reward, done)) state next_state total_reward reward # 2. 每收集 20 条数据后训练一次模型 if len(buffer) % 20 0: states torch.tensor(np.array([b[0] for b in buffer])).float() actions torch.tensor(np.array([b[1] for b in buffer])).float().unsqueeze(-1) next_states torch.tensor(np.array([b[2] for b in buffer])).float() rewards torch.tensor(np.array([b[3] for b in buffer])).float() delta_target next_states - states delta_pred, reward_pred model(states, actions) loss torch.nn.functional.mse_loss(delta_pred, delta_target) \ torch.nn.functional.mse_loss(reward_pred.squeeze(-1), rewards) optimizer.zero_grad() loss.backward() optimizer.step() print(fEpisode {episode}: total_reward{total_reward:.2f})这里的模型训练使用了全部 buffer 数据。数据量小的时候不会有过拟合问题数据量变大后应该用 mini-batch 训练。另外真实交互中的探索噪声也很重要前 50 步使用完全随机动作是为了让模型先看到多样化的转移数据。6.5 预期现象与调参方向跑这个示例时你会看到前几 episode 因为模型数据不足规划效果不稳定数据积累后智能体逐渐学会向右侧移动。如果发现规划器选的动作始终无意义应该优先检查以下三点模型 loss 是否下降。如果不下降检查学习率、网络宽度和动作输入表示。规划器 rollout 时是否考虑了终止条件。示例里做了一个简单判断但实际可以更精细。真实环境噪声是否过大。噪声大时模型单步预测误差会直接破坏规划效果。7. 常见问题与排查思路问题现象常见原因解决思路模型训练 loss 不下降输入状态未归一化学习率过大或过小网络容量不足检查特征尺度做标准化调小学习率增加隐藏层宽度模型单步预测准但 rollout 轨迹发散模型误差不断累积未使用集成模型限制 rollout 长度引入集成模型估计不确定性规划器选的动作无意义奖励信号在模型中被忽略崩溃点未建模检查 reward head把终止概率加入模型预测模型生成数据训练策略后性能下降虚拟数据分布偏移rollout 步数太长减小 rollout 步数对模型数据加权或做阈值过滤算法前期探索严重不足模型还未覆盖状态空间在真实环境增加随机动作或 entropy 奖励模型过度相信未探索区域缺少 uncertainty 估计使用集成模型或直接预测方差规划耗时太长无法实时决策采样数过多模型推理太慢减少 CEM 迭代次数使用更小的模型考虑 latent rolloutMBRL 的排错思路和无模型 RL 不完全一样。无模型算法一出问题大家首先怀疑 reward 设计MBRL 里还要多一条核心链路从真实数据到模型训练从模型到规划结果每个环节都可能引入偏差。8. 工程化实践建议8.1 数据与日志MBRL 是一个典型的“数据往返”流水线。把真实交互数据、模型生成数据、策略更新数据分开记录。推荐在实验日志里记录真实环境的平均 reward动力学模型在真实轨迹上的单步 loss模型 rollout 的长期预测误差模型生成数据的占比规划器选出的动作序列长度与得分这些日志能帮助快速定位“模型学坏了还是规划器选错了”。8.2 在线模型更新要小心在真实环境中边交互边更新模型是 MBRL 的常态。但模型更新太频繁可能导致策略被同一批数据反复洗脑。实践中更推荐真实交互阶段尽量收集多样化数据不急着马上用模型数据开训等模型收敛或 loss 明显下降后再切换到模型内规划模式。这种“先学后规划”的流程比边学边规划更可控。8.3 安全与授权边界如果模型要用于真实机器人、自动驾驶、或任何直接接触物理世界的系统记住几个原则先在仿真环境完成模型验证。在接入真实系统前检查模型预测的置信区间。对超出训练分布的状态采取保守策略比如减速停机或切换到安全 fallback 策略。任何变更都需要测试环境验证、备份、最小权限。MBRL 的模型不确定性估计不只是学术指标它直接关系到真实系统是否安全。8.4 模型选择的工程权衡方案优点缺点单层 MLP 动力学模型实现简单、推理快单步误差大不确定性估计弱集成 MLP 模型不确定性估计更好鲁棒性高推理慢显存增加高斯过程模型样本效率极高不适合高维状态扩展性差概率模型输出方差单模型也能给置信区间方差估计容易不准Latent world model适合高维图像输入实现复杂度高训练稳定难度大对于后端、控制、机器人类应用建议从集成 MLP 模型入门。它既有不错的性能又不需要复杂的概率推断工具链。9. 下一步可以怎么学第 16 讲作为 MBRL 的系统性介绍覆盖了模型学习、规划、数据生成、潜在空间世界模型四条主线。从实践角度你可以按以下顺序继续深入先从本文的 Dyna-Q 示例跑通 MBRL 闭环理解数据如何流动。接着阅读 PETS 论文或代码重点关注集成模型的构造和 CEM 规划器。然后尝试将 MBRL 与自己熟悉的无模型算法结合例如在 SAC 基础上加入模型生成短轨数据这是 MBPO 的核心思路。最后如果想处理视觉任务可以学习 Dreamer 的 latent world model。如果在学习过程中遇到模型预测发散、规划器失效、训练不稳定等问题回到上面那张排错表逐步检查。环境交互成本越高的项目MBRL 的价值越明显但它的调试成本也集中在模型与环境之间的误差管理上。建议动手写一次完整训练循环亲手改一下 rollout 长度和集成数量你会比只看讲义更快理解为什么基于模型的强化学习算法会这样设计。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑