恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
扩散模型与向量化并行:VOiLA如何革新POMDP在线决策
首页
资讯中心
/
扩散模型与向量化并行:VOiLA如何革新POMDP在线决策
扩散模型与向量化并行:VOiLA如何革新POMDP在线决策
发布时间:2026/8/24 10:12:16
1. 项目概述当扩散模型遇见在线决策最近在搞一个挺有意思的项目叫VOiLA。这名字听起来有点玄乎但说白了它想解决的是一个机器人、自动驾驶或者游戏AI领域里非常经典又头疼的问题在信息不全的环境里如何快速做出靠谱的决策想象一下你是一个在浓雾中开车的司机你只能看到前方几米的路况不知道弯道后面有没有车也不知道路边会不会突然窜出个小动物。这时候你不能停下来等雾散必须一边开一边根据有限的、不断更新的信息快速规划接下来的动作——是减速、变道还是保持这就是典型的部分可观测马尔可夫决策过程问题简称POMDP。传统解法要么算得慢要么在复杂场景下表现不佳。VOiLA的思路很“暴力美学”它把近年来在图像生成领域大杀四方的扩散模型给“搬”了过来但不是用来生成图片而是用来生成未来可能的状态轨迹。更关键的是它利用了GPU的并行计算能力把整个在线规划过程给向量化了实现了“批量思考”从而在保证决策质量的前提下把速度提到了一个实用级别。这就像是你本来只能一条路一条路地模拟开车现在可以同时模拟成千上万条不同的驾驶路线然后瞬间选出最优的那条。这个项目对于从事机器人控制、强化学习、自动驾驶决策系统开发的朋友来说是个非常值得深挖的方向。它不只是简单应用了一个时髦的模型而是巧妙地结合了深度生成模型、概率推理和高性能计算为解决实时决策这个老大难问题提供了一个新颖且高效的框架。2. 核心思路拆解为什么是扩散模型向量化2.1 POMDP与在线规划的经典困境要理解VOiLA的巧妙之处得先看看它要解决的传统难题。POMDP模型包含几个核心部分状态、动作、观测、状态转移概率、观测概率和奖励函数。智能体看不到真实状态只能通过观测来猜然后根据猜测选择一个动作目标是最大化长期累积奖励。经典的在线规划算法比如蒙特卡洛树搜索的POMDP变体或者基于采样的粒子滤波方法其核心思路是“猜”一堆可能的状态粒子然后为每个状态模拟未来可能发生的剧情rollout最后评估哪个动作带来的平均回报最高。这个过程有两个致命瓶颈序列性模拟未来是一个接一个的“如果-那么”故事线展开本质上是串行的。即使使用多个粒子每个粒子的轨迹生成也难以并行。维度灾难状态空间稍微复杂一点比如连续状态、高维观测需要采样的粒子数和模拟的轨迹数就会指数级增长计算量瞬间爆炸。这就导致了一个尴尬局面算法理论上很美但一放到真实机器人或游戏里决策速度跟不上环境变化成了“马后炮”。2.2 扩散模型的降维打击从去噪到轨迹生成扩散模型最初用于图像生成其核心思想是学习一个从简单噪声分布到复杂数据分布如图片的逆过程。训练时它逐步给清晰图片加噪声直到变成纯随机噪声生成时则学习如何从噪声中一步步“去噪”恢复出清晰的图片。VOiLA的作者看到了其中的关联生成一条未来的状态-动作轨迹和生成一张图片在数学形式上可以统一看待。一条轨迹可以看作是一个高维的时间序列数据点。扩散模型在这里扮演了一个“万能轨迹分布学习器”的角色。训练阶段我们收集大量状态动作序列数据或者利用动力学模型生成大量模拟轨迹。扩散模型学习这些轨迹数据所隐含的分布。它学会的不仅仅是动力学更重要的是在给定部分历史上下文当前信念状态下未来“好”的轨迹长什么样——那些能获得高奖励的轨迹模式。规划阶段当智能体处于某个不确定的状态信念状态时我们将这个当前状态作为条件输入给训练好的扩散模型。然后我们从噪声开始让扩散模型进行多步“去噪”采样。每一次采样都不是生成一个像素而是生成一整个未来时间段内的状态和动作序列。这相当于一次性“幻想”出了一条完整的未来可能路径。这样一来传统方法中需要耗时进行大量前向模拟rollout的过程被扩散模型的一次前向推理从噪声到轨迹替代了。模型内部通过神经网络参数隐式地编码了复杂的动力学和奖励信息生成轨迹的质量和多样性都很有保障。注意这里的关键在于扩散模型生成的是整条轨迹而非下一个状态。这避免了自回归模型如Transformer逐个时间步生成带来的误差累积和速度慢的问题。这也是“自回归模型和扩散模型有啥区别”在这个场景下的核心答案自回归是“串行造句”扩散是“并行完形填空”。2.3 向量化并行GPU的狂欢如果只是用扩散模型替代rollout那可能只是换了一种更强大的序列生成器并行性问题依然存在。VOiLA的第二个精髓在于“向量化”。传统采样规划中我们为了评估一个动作可能需要为成百上千个粒子状态分别生成若干条轨迹。这个过程逻辑上是并行的但实现上往往还是循环处理。VOiLA的做法是将所有这些独立的规划任务——为不同的候选动作、在不同的初始粒子状态上——全部打包成一个巨大的张量运算。批量信念状态将当前时刻的信念状态通常表示为一批粒子组织成张量。批量候选动作将待评估的多个候选动作也扩展成张量。条件拼接将信念状态和每个候选动作进行拼接形成一批“条件上下文”。并行去噪将这批条件上下文一次性输入扩散模型。模型在GPU上可以并行地为每一个“条件”生成一条或多条完整的轨迹。由于扩散模型的前向传播本身是高度向量化的矩阵运算这种批处理能极大程度地榨干GPU的算力。并行评估生成轨迹后计算每条轨迹的累计奖励回报也可以并行进行。这个过程我称之为“撒网式规划”。不是一条鱼一条鱼地钓序列模拟而是撒下一张大网批量生成一次捞起一堆可能的结果然后立刻挑出最好的。这对于需要毫秒级响应的在线应用如无人机避障、实时策略游戏至关重要。3. 核心实现细节与实操要点3.1 扩散模型的设计与训练VOiLA中的扩散模型并非直接照搬图像领域的U-Net而是需要针对时序轨迹数据设计网络结构。网络架构选择 通常采用基于Transformer或时序卷积网络的架构。因为轨迹数据是时间序列需要模型能很好地捕捉长期依赖。一个常见的实践是使用DiT的变体将轨迹的每个时间步的状态-动作对视为一个“词元”通过位置编码注入时序信息再用多层Transformer块进行特征交互。条件注入方式 这是决定规划效果的关键。当前智能体的信念状态如何作为条件指导轨迹生成信念状态通常是一组加权粒子需要先进行聚合例如计算状态分布的均值和方差或通过一个编码器网络得到固定维度的表征。然后将这个条件表征在扩散模型的每一步去噪过程中通过交叉注意力或自适应层归一化机制注入到网络中。这样生成的轨迹才会是与当前不确定性上下文相符的、合理的未来展望。训练数据与目标数据来源可以是专家演示数据、通过传统规划器在模拟环境中收集的数据甚至是随机策略产生的海量数据配合奖励标注。数据的质量和覆盖度直接影响模型学到的“常识”。损失函数通常采用扩散模型标准的噪声预测损失。即给定加噪的轨迹、噪声级别和时间步让模型预测所添加的噪声。训练的目标是让模型学会在任意噪声水平下根据条件恢复出干净的、符合数据分布的轨迹。实操心得 训练这类用于规划的扩散模型一个常见的坑是“模式崩溃”——模型只学会生成几种保守的、平均的轨迹缺乏多样性。这在高风险决策中是致命的。解决方法除了确保数据多样性还可以在训练时引入分类器无关引导的技术通过调节一个引导尺度在推理时灵活控制生成轨迹的“冒险程度”与“保守程度”从而在探索和利用之间取得平衡。3.2 信念状态表示与更新在POMDP中智能体维持一个对当前状态的置信度分布即信念状态。VOiLA需要与之高效交互。粒子滤波作为表示 最灵活且常用的方法是使用粒子滤波。信念状态就是一组加权的状态粒子。VOiLA规划时可以直接将这一批粒子作为条件输入的一部分。每个粒子都代表一种对世界的可能解释为它们并行生成轨迹最终评估动作时再根据粒子权重进行加权平均这样能更全面地考虑不确定性。信念更新 执行一个动作并收到新的观测后信念状态需要更新。这部分VOiLA本身不涉及需要外接一个标准的粒子滤波器或贝叶斯更新器。更新后的新信念状态又作为下一轮规划的条件。因此在实际系统中VOiLA模块是嵌入在一个“感知-规划-执行”循环中的规划器组件。注意事项 粒子数量是一个需要权衡的超参数。粒子太少不能充分表达不确定性粒子太多会成倍增加VOiLA批量规划的负担因为条件数量增加。在实践中可以采用分层采样的策略先用少量粒子进行快速的动作筛选对最有希望的几个动作再用更多的粒子进行精细评估。3.3 规划-执行循环的工程实现将VOiLA集成到一个实时的自主系统中需要仔细设计流水线。感知接口系统从传感器获取原始观测通过一个感知模块如神经网络将其转换为状态空间的特征表示并传递给信念状态更新器。信念更新信念更新器根据旧信念、执行过的动作和新观测计算出当前时刻的新信念状态如一组粒子。VOiLA规划动作候选集生成根据当前信念生成一组待评估的候选动作。这可以是通过简单启发式如上一时刻动作的邻域、或者一个轻量级策略网络产生的。批量条件构建将信念粒子与每个候选动作两两组合构建成批量的规划条件。扩散模型推理将批量条件输入到加载好的扩散模型中进行去噪采样。这里通常使用DDIM采样器因为它可以用更少的步数如20-50步获得高质量样本比原始DDPM的1000步快得多这对在线规划是必须的。轨迹评估对每条生成的轨迹快速计算其累计奖励可能需要一个预先定义或学到的奖励模型。动作选择对同一个候选动作对应的多条轨迹来自不同粒子的回报进行加权平均按粒子权重得到该动作的期望回报。选择期望回报最高的动作。执行与循环将选出的动作发送给执行器如机器人控制器执行一个时间步长然后回到步骤1。性能优化点模型量化与剪枝将训练好的扩散模型进行量化可以在几乎不损失精度的情况下大幅减少内存占用和加速推理。CUDA图优化对于固定的计算图如固定步数的DDIM采样可以使用CUDA Graph将其捕获消除内核启动开销特别适合这种需要反复执行的循环。异步流水线当VOiLA在为当前时刻规划时GPU可以同时并行处理下一时刻信念更新所需的部分计算实现计算隐藏。4. 实战构建一个简单的VOiLA规划器我们以一个经典的连续状态POMDP问题为例LightDark环境。智能体在一个一维直线上需要定位并移动到目标点。它的位置观测精度依赖于环境的光照强度在“亮”的区域观测噪声小在“暗”的区域观测噪声大。智能体不知道自己的确切初始位置。4.1 环境与问题定义状态智能体的真实位置s(标量)。动作移动力a(标量限制在[-1, 1])。观测带噪声的位置读数o s noise噪声方差与位置有关s越接近0光照越暗噪声方差越大。动力学s_{t1} s_t a_t process_noise。奖励负的移动成本如-0.01 * a_t^2加上到达目标点例如s5时的大奖励如10以及时间惩罚。目标在位置不确定性下高效地移动到目标点。4.2 训练数据收集与扩散模型训练我们首先需要一个扩散模型它能生成在给定初始不确定性下通向高回报的轨迹。数据生成import numpy as np import torch def generate_rollout(belief_particles, policy, env, horizon20): 用某个策略在环境中生成一条轨迹状态-动作序列 states, actions [], [] belief belief_particles for _ in range(horizon): # 基于信念选择动作这里policy可以是随机的用于广泛探索 a policy(belief) # 环境执行得到新状态和观测真实环境交互 next_state, obs, reward, done env.step(a) # 更新信念简化这里假设我们知道真实动力学用粒子滤波更新 belief update_belief(belief, a, obs) states.append(next_state) actions.append(a) if done: break # 补零使长度一致 traj_len len(states) if traj_len horizon: states.extend([0]*(horizon - traj_len)) actions.extend([0]*(horizon - traj_len)) return np.array(states), np.array(actions), traj_len # 生成大量轨迹数据 dataset [] for _ in range(100000): # 随机初始化信念一组粒子 init_belief np.random.randn(50) * 2 # 50个粒子初始位置不确定性较大 # 使用随机策略或简单启发式策略 states, actions, _ generate_rollout(init_belief, random_policy, env) # 计算轨迹累计回报 reward calculate_trajectory_reward(states, actions) # 将初始信念 状态-动作轨迹 回报作为一条数据 # 注意信念需要编码为一个固定维度的向量例如粒子集的均值和方差 belief_feat np.array([init_belief.mean(), init_belief.std()]) trajectory np.stack([states, actions], axis-1) # 形状: (horizon, 2) dataset.append((belief_feat, trajectory, reward))模型训练 使用PyTorch框架定义一个适合时序数据的扩散模型。这里简化展示一个基于MLP的噪声预测网络骨架。import torch.nn as nn class TrajectoryDiffusionModel(nn.Module): def __init__(self, horizon, state_action_dim, belief_feat_dim, hidden_dim256): super().__init__() self.horizon horizon self.state_action_dim state_action_dim # 本例中为2 (状态动作) # 时间步编码 self.time_embed nn.Sequential( nn.Linear(1, 128), nn.SiLU(), nn.Linear(128, hidden_dim) ) # 信念条件编码 self.belief_embed nn.Sequential( nn.Linear(belief_feat_dim, 128), nn.SiLU(), nn.Linear(128, hidden_dim) ) # 主干网络将带噪轨迹映射为预测的噪声 # 输入: noisy_trajectory (batch, horizon, state_action_dim) # 输出: predicted_noise (batch, horizon, state_action_dim) self.main_net nn.Sequential( nn.Linear(state_action_dim hidden_dim*2, 512), # 拼接轨迹、时间、信念特征 nn.SiLU(), nn.Linear(512, 512), nn.SiLU(), nn.Linear(512, state_action_dim) ) def forward(self, noisy_traj, timestep, belief_feat): # noisy_traj: (B, T, D) # timestep: (B,) # belief_feat: (B, belief_dim) B, T, D noisy_traj.shape # 时间编码 t_emb self.time_embed(timestep.view(B, 1).float() / 1000.0) # (B, hidden_dim) t_emb t_emb.unsqueeze(1).repeat(1, T, 1) # (B, T, hidden_dim) # 信念编码 b_emb self.belief_embed(belief_feat) # (B, hidden_dim) b_emb b_emb.unsqueeze(1).repeat(1, T, 1) # (B, T, hidden_dim) # 拼接所有特征 x torch.cat([noisy_traj, t_emb, b_emb], dim-1) # (B, T, D2*hidden_dim) # 通过主干网络 # 这里为了处理时序可以先用一个线性层混合特征然后reshape用1D卷积或Transformer处理 # 为简化我们假设用一个全连接层处理每个时间步独立同分布实际应用需用CNN或Transformer x x.reshape(B*T, -1) pred_noise self.main_net(x) pred_noise pred_noise.reshape(B, T, D) return pred_noise训练循环就是标准的扩散模型训练随机采样数据、随机加噪、让网络预测噪声、计算MSE损失、反向传播。4.3 在线规划器实现训练好模型后我们实现VOiLA规划器。class VOiLAPlanner: def __init__(self, diffusion_model, horizon, action_dim, num_particles50, num_candidate_actions10, num_trajectories_per_condition5): self.model diffusion_model self.horizon horizon self.action_dim action_dim self.num_particles num_particles self.num_candidates num_candidate_actions self.num_traj num_trajectories_per_condition self.sampler DDIMSampler(self.model) # 假设有一个DDIM采样器封装 def plan(self, belief_particles): belief_particles: (num_particles, state_dim) 返回: 最优动作 (action_dim,) # 1. 生成候选动作 # 简单策略以当前信念均值附近采样或使用一个快速策略网络提议 belief_mean belief_particles.mean(axis0) candidate_actions np.random.uniform(-1, 1, size(self.num_candidates, self.action_dim)) # 可以加入当前信念均值作为候选之一 candidate_actions np.vstack([belief_mean, candidate_actions]) # 2. 构建批量条件 # 信念特征化计算每个粒子的特征这里简化直接用粒子状态作为特征 # 实际中可能需要编码网络 belief_feat belief_particles # (P, state_dim) # 将每个粒子与每个候选动作配对 # 使用广播机制构建批量条件 P belief_particles.shape[0] C candidate_actions.shape[0] # 重复信念特征 C 次 belief_cond np.repeat(belief_feat, C, axis0) # (P*C, state_dim) # 平铺候选动作 P 次 action_cond np.tile(candidate_actions, (P, 1)) # (P*C, action_dim) # 拼接成规划条件这里我们将初始动作也作为条件的一部分。 # 更复杂的做法是把动作作为整个轨迹生成过程的全局条件。 # 简化将初始动作拼接到信念特征后作为条件输入。 condition np.concatenate([belief_cond, action_cond], axis1) # (P*C, state_dimaction_dim) condition torch.FloatTensor(condition).to(device) # 3. 批量扩散采样生成轨迹 # 采样噪声 batch_size P * C noise torch.randn(batch_size, self.horizon, self.state_action_dim).to(device) # state_action_dim state_dim action_dim # 使用DDIM采样以condition为条件 # 这里self.sampler需要能够接受条件输入 generated_trajectories self.sampler.sample(noise, condition) # 形状: (P*C, T, state_action_dim) # 将轨迹拆分为状态和动作部分 generated_states generated_trajectories[:, :, :self.state_dim] generated_actions generated_trajectories[:, :, self.state_dim:] # 4. 并行评估轨迹回报 # 假设有一个快速计算回报的函数 rewards self._compute_reward(generated_states, generated_actions) # (P*C,) rewards rewards.reshape(P, C) # 重塑为 (粒子数 候选动作数) # 5. 动作选择考虑粒子权重这里假设粒子等权重 # 对每个候选动作计算其在不同粒子下的平均回报 expected_returns rewards.mean(axis0) # (C,) best_action_idx expected_returns.argmax() best_action candidate_actions[best_action_idx] return best_action def _compute_reward(self, states, actions): # 简化的奖励计算实际中可能更复杂 # states: (B, T, state_dim), actions: (B, T, action_dim) goal 5.0 distance_cost -0.01 * (actions**2).sum(dim-1) # (B, T) goal_reward (torch.abs(states[:, :, 0] - goal) 0.5).float() * 10.0 # 假设状态第一维是位置 time_penalty -0.1 total_reward (distance_cost goal_reward time_penalty).sum(dim1) # (B,) return total_reward4.4 集成与测试循环最后将规划器嵌入到与环境的交互循环中。planner VOiLAPlanner(trained_model, horizon20, action_dim1) belief initialize_belief() # 初始化粒子群 for episode in range(num_episodes): obs env.reset() belief update_belief_from_obs(belief, None, obs) # 初始更新 done False while not done: # VOiLA规划 action planner.plan(belief) # 执行动作 next_obs, reward, done, _ env.step(action) # 更新信念 belief update_belief(belief, action, next_obs)5. 常见问题、调优与避坑指南在实际实现和调试VOiLA系统时会遇到不少挑战。下面是一些常见问题和我踩过坑后总结的经验。5.1 扩散模型训练不稳定或生成轨迹质量差问题表现训练损失震荡不收敛生成的轨迹物理上不可行如速度突变、或多样性极低。排查与解决数据质量检查首先检查训练数据。轨迹数据中是否包含大量无效或冲突的样本奖励标注是否合理可以可视化一些训练样本看状态-动作序列是否平滑、符合动力学约束。网络容量与架构用于轨迹生成的扩散模型需要足够强的表达能力。尝试增加网络深度/宽度或者将简单的MLP backbone替换为1D时序卷积网络或Transformer。对于长规划时域Transformer的注意力机制能更好地捕捉远程依赖。条件注入确保信念条件信息被有效地注入到去噪过程的每一步。交叉注意力通常是比简单拼接更强大的方式。检查条件特征是否在训练过程中出现了梯度消失或爆炸。损失函数与归一化确保输入模型的轨迹数据已经过适当的归一化如减去均值、除以标准差。对于包含不同物理量纲的状态和动作可以考虑分别归一化。尝试使用Huber损失代替MSE它对异常值更鲁棒。采样器选择训练时使用DDPM的加噪过程但推理时强烈推荐使用DDIM。DDIM可以用少得多的步数如20-50步获得与DDPM 1000步相媲美的质量这对在线规划是革命性的。调整DDIM的eta参数可以权衡生成速度与多样性。5.2 规划速度不满足实时性要求问题表现单次规划耗时超过决策周期如100ms无法在线运行。排查与解决批量大小与模型复杂度这是最主要的瓶颈。减少num_candidate_actions候选动作数和num_trajectories_per_condition每个条件生成的轨迹数能线性降低计算量。需要通过实验找到性能与速度的平衡点。可以使用两阶段规划先用一个超快但粗糙的策略或随机采样筛选出少量如3-5个最有希望的动作再对这少量动作用VOiLA进行精细评估。模型优化对训练好的扩散模型进行动态量化或半精度推理可以显著减少内存占用和加速计算且精度损失通常很小。使用TensorRT或ONNX Runtime等推理优化引擎能进一步释放GPU性能。采样步数这是扩散模型推理的核心耗时点。在满足规划质量的前提下尽可能减少DDIM的采样步数。通常20-30步是一个不错的起点。CUDA图与内核融合对于固定的计算图模型架构、采样步数固定使用torch.cuda.graph捕获可以消除Python端开销和多次内核启动开销尤其适合这种在循环中反复调用的场景。CPU-GPU流水线将信念更新、候选动作生成等非扩散模型计算放在CPU上进行与GPU上的扩散模型推理并行可以隐藏部分延迟。5.3 规划结果短视或冒险问题表现智能体倾向于选择能立即获得小奖励的动作而忽视长期回报或者在某些情况下做出过于冒险、容易导致失败的决策。排查与解决奖励函数设计这是根本原因。检查奖励函数是否对长期目标有足够的引导。考虑增加稀疏奖励的稠密化或者引入基于模型的奖励塑形。在训练数据中确保包含足够多展示长期规划优点的轨迹。分类器无关引导这是扩散模型领域控制生成内容属性的强大工具。可以训练一个额外的奖励预测模型在采样过程中用这个模型的梯度来引导去噪过程朝向高回报区域。通过调节引导尺度可以控制智能体的“保守”与“激进”程度。公式上去噪时的预测噪声会加上一个引导尺度乘以奖励预测模型对带噪轨迹的梯度。规划时域增加扩散模型生成的轨迹长度。但要注意时域太长会增加模型学习难度和推理成本。一个折中方法是使用分层规划上层VOiLA生成一个粗糙的长期“子目标”序列下层用一个简单的局部控制器跟踪这些子目标。5.4 信念表示与模型条件不匹配问题表现当环境的不确定性模式与训练数据差异较大时规划性能急剧下降。排查与解决鲁棒的条件编码不要直接将原始粒子输入模型。使用一个信念编码器网络将粒子集映射到一个固定维度的、信息丰富的表征向量。这个编码器可以和扩散模型一起进行端到端训练或者单独预训练例如通过一个自监督任务如预测未来观测。数据增强在生成训练数据时主动增加信念状态的多样性。不仅包括不同的均值位置还要覆盖不同的不确定性形状方差、多模态分布。可以在粒子滤波更新时人为注入额外的噪声或使用不同的提议分布来增加数据覆盖范围。在线自适应在部署过程中如果发现规划持续失败可以收集在线交互数据对扩散模型或信念编码器进行微调。这属于在线学习或元学习的范畴需要谨慎设计以防止灾难性遗忘。5.5 内存占用过高问题表现在批量生成大量轨迹时GPU内存溢出。排查与解决梯度检查点在模型推理时默认不需要保存梯度。但在使用分类器引导时可能需要计算梯度。此时可以开启梯度检查点来节省内存。分批次规划如果(粒子数 * 候选动作数)太大无法一次性送入GPU可以将其分成多个小批次进行规划然后聚合结果。虽然会增加延迟但可以解决内存问题。使用更小的模型在模型精度和大小之间权衡。可以通过知识蒸馏用一个大模型教一个小模型或者直接进行网络剪枝。VOiLA将扩散模型的强大生成能力与GPU的并行计算优势结合为POMDP在线规划打开了一扇新的大门。它尤其适合那些状态-动作空间连续、动力学复杂、且对实时性要求高的场景。虽然实现起来有一定门槛涉及到深度生成模型训练、概率推理和高性能计算等多个领域但其带来的性能提升是显著的。从我个人的实验来看一旦调通整个流水线看到智能体在充满不确定性的环境中流畅地做出长远、高效的决策那种成就感是非常足的。这个方向目前还有很多可以探索的地方比如如何与基于世界模型的方法结合如何处理更复杂的多模态信念以及如何让整个系统在现实世界中更加鲁棒。