具身智能中终止决策的解耦:区分世界完成与自我终止
1. 项目概述当智能体说“完成”时它真的完成了吗在具身智能Embodied AI的研究和开发中我们常常训练智能体去完成一个具体的任务比如“把红色的积木放到蓝色的盒子旁边”。当智能体停止行动并输出一个“任务完成”的信号时我们通常就认为它成功了。但最近我和团队在复现和测试一些前沿的导航、操作任务时遇到了一个非常微妙且普遍的问题智能体停止行动到底是因为它“认为”世界状态已经满足了任务目标我们称之为世界完成还是因为它“累了”、“卡住了”或者“觉得太难了”而主动放弃了我们称之为自我终止这个区别至关重要却常常被忽略。想象一下你让一个机器人去厨房拿一瓶水。机器人走到厨房门口停住了然后报告“任务完成”。作为评估者你可能会困惑它是“认为”走到门口就算完成错误的世界完成判断还是它“觉得”门打不开所以放弃了自我终止在标准的强化学习或模仿学习框架下智能体输出一个“终止”动作环境就给出一个奖励通常是稀疏的、最终的成功奖励然后一个训练周期结束。这里隐含了一个危险的假设终止动作总是与任务的成功或失败相关联。但实际上终止动作可能源于多种与任务目标无关的内部状态比如探索的随机性、策略的置信度不足或者仅仅是遇到了无法逾越的感知或行动障碍。“Done, But Not Sure”这个标题精准地捕捉了这种不确定性。它指向了具身智能评估中的一个核心混淆源我们无法从单一的终止信号中清晰地区分智能体是“完成了世界”还是“终结了自己”。不解决这个问题我们对智能体能力的评估就是有噪声的甚至可能是误导的。一个频繁自我终止的智能体可能会被误判为效率低下或无法完成任务而一个胡乱判断世界完成的智能体则可能被误认为在作弊或利用了奖励函数的漏洞。这篇内容就是想和大家深入聊聊我们是如何理解、拆解并尝试解决这个“ disentangling”解纠缠难题的其中涉及到的模型设计、训练技巧和评估方法都是我们在实际项目中踩过坑、流过汗才总结出来的。2. 核心问题拆解终止信号背后的“罗生门”要解决问题首先得把问题本身掰开揉碎看清楚。智能体的“终止”决策本质上是一个在部分可观测马尔可夫决策过程POMDP中的动作选择。但这个动作的动机是复合的我们可以从两个正交的维度来剖析它。2.1 世界完成基于环境状态的理性判断世界完成是智能体根据其感知到的环境状态或对状态的信念判断任务目标是否已经达成。这是一种外向的、基于目标的决策逻辑。它的理想判断依据应该是任务定义的黄金标准。理想情况在一个完美的导航任务中智能体通过传感器“看到”自己与目标点的距离小于某个阈值比如0.5米于是触发“完成”动作。这里的因果链是清晰的感知到目标状态 - 判断满足条件 - 决定终止。现实挑战然而现实是骨感的。智能体的感知是不完美的有噪声、有遮挡它对“目标状态”的理解可能是有偏差的比如把颜色相近的物体认错甚至任务目标本身可能就是模糊的或多义的。更常见的是在基于学习的框架中智能体并不是直接比对黄金标准而是学习了一个“价值函数”或“成功分类器”。当这个函数输出“成功概率很高”时它就终止。问题在于这个学习到的函数可能会过拟合到一些虚假的相关性上。例如在某个训练环境中任务成功总是伴随着“靠近某面特定的墙”那么智能体可能就学会了“靠近那面墙就终止”而不是真正去检查任务目标。这就导致了虚假的世界完成。注意区分“真实世界完成”和“虚假世界完成”是评估的关键。前者是智能体能力的体现后者则是策略缺陷或奖励设计漏洞的产物。2.2 自我终止源于智能体内部的“放弃”机制自我终止与外部世界是否满足目标无关它源于智能体内部的状态是一种内向的、基于策略或元认知的决策。我们可以把它理解为智能体的“止损机制”或“策略瓶颈”。信心不足智能体对下一步该做什么感到极度不确定策略熵值很高。与其冒着执行一个大概率错误动作的风险不如“安全地”停止。这在基于不确定性的探索策略中很常见。资源耗尽/疲劳虽然不像生物体会疲劳但智能体的决策循环可能有内部状态。例如一些模型会有一个隐式的“步数预算”概念或者长期规划失败导致的计算资源“耗尽感”从而触发终止。无法处理的感知当前观测到的状态如一张极其模糊或怪异的图像完全在训练分布之外智能体“懵了”不知道如何映射到动作空间于是选择“不作为”即终止。探索性终止特别是在训练早期智能体可能需要随机地终止一些回合以收集关于“终止后会发生什么”即最终奖励的数据。这是一种探索策略的一部分。自我终止在训练中有时是必要的它防止智能体陷入无意义的循环或危险状态。但在评估时我们需要将其与因任务成功而终止的情况区分开否则无法准确衡量智能体解决任务的能力。2.3 混淆带来的评估灾难当这两种终止原因混杂在同一个“Done”信号里时会引发一系列问题奖励函数污染在强化学习中我们通常在任务成功时给予一个大的正奖励失败时给予负奖励或零奖励。如果智能体因自我终止如“觉得太难”而停止并且也收到了一个奖励信号哪怕是零这个信号就会错误地更新价值函数影响学习。它可能学会“在感到困难时尽早停止以减少损失”而不是“努力克服困难去完成任务”。性能指标失真最常用的指标是成功率Success Rate。如果一个智能体因为频繁自我终止而导致很多回合提前结束未到达目标成功率会很低我们可能认为它能力差。但另一种情况更隐蔽一个智能体学会了“虚假的世界完成”它总是在接近但不完全满足目标时就宣布成功。如果我们的成功判定标准不够严格它的成功率会虚高让我们误以为它很厉害。策略学习陷入局部最优智能体可能发现与其冒险去完成真正困难的任务部分不如找到一个可以触发“虚假完成”的捷径状态然后一直重复这个策略。这就像学生不去努力学习解题而是学会了如何让老师误以为他完成了作业。诊断和调试困难当智能体表现不佳时开发者很难快速定位问题。是因为感知模块不行规划模块有bug还是这个“终止决策”模块出了问题不把终止原因拆开调试就像在迷雾中开枪。3. 解耦之道模型、训练与评估的三重奏要解开这个结我们需要在智能体的架构设计、训练流程和评估体系三个层面同时下功夫。这不是一个单一的技巧而是一套组合拳。3.1 架构设计给终止决策装上“探照灯”核心思想是在智能体的决策网络中显式地分离出“世界完成判断器”和“自我终止判断器”。虽然它们最终会汇总成一个“是否终止”的二元决策但内部的逻辑流是分开的。一种可行的网络结构设计如下共享的特征编码器首先智能体的观测图像、激光雷达、关节角度等通过一个共享的骨干网络如CNN或Transformer进行编码得到一个环境状态特征向量s_enc。世界完成分支这个分支以s_enc为输入输出一个标量p_world表示在当前状态下任务目标已被完成的概率。这个分支的训练信号应该来自于环境的真实任务完成标签如果可获取或者由一个独立的、基于真实物理状态的验证器来提供监督。它的目标是成为一个准确的“目标达成检测器”。自我终止分支这个分支同样以s_enc为输入但同时也可以接入一些“内部状态”特征如当前回合的步数、历史动作的熵、价值函数的不确定性估计等。它输出一个标量p_self表示智能体因内部原因想要放弃的概率。这个分支的训练更具挑战性因为“自我终止”的标签很难直接定义。一种方法是采用弱监督或自监督基于不确定性的标签当智能体策略网络输出的动作概率分布熵值超过某个高阈值时标记为“可能需要自我终止”的候选时刻。基于价值函数的标签当对未来累积奖励的预测价值函数长期处于低水平且没有上升趋势时可能意味着陷入了死局。基于探索的启发式标签在训练中故意在一些随机时刻强制终止并观察这些时刻的特征让分支学会识别“无进展”的模式。终止决策融合最终的终止概率p_done由两个分支共同决定。一个简单而有效的融合方式是p_done max(p_world, p_self)或者p_done 1 - (1-p_world)*(1-p_self)。这意味着只要任何一个分支认为应该终止智能体就会倾向于终止。在推理时我们可以分别记录p_world和p_self从而在事后分析中知道每次终止的主导原因。实操心得在初期我们尝试过更复杂的融合方式比如让一个小的门控网络来学习权重。但发现这增加了训练难度且容易过拟合。max操作在概念上清晰世界完成和自我终止是“或”的关系在实践中也足够鲁棒建议作为基线方案。3.2 训练策略为两个分支提供“营养餐”有了分离的架构下一步就是如何有效地训练它们防止两个分支相互干扰或其中一个“偷懒”。对于世界完成分支监督信号来源这是关键。理想情况下环境模拟器应该能提供一个绝对可靠的“任务完成”布尔标签。例如在机器人抓取任务中当目标物体被稳定抓握并移动到位时模拟器可以基于物理引擎的状态直接给出标签。使用这个标签作为监督信号以交叉熵损失训练该分支。数据平衡任务完成的时刻正样本通常远少于未完成的时刻负样本。需要采用重采样或加权的损失函数防止分支偏向于永远预测“未完成”。课程学习初期可以在一些简单的、易于判断是否完成的任务场景中预训练这个分支让它先学会基本的模式再放到复杂环境中微调。对于自我终止分支自监督信号构建这是我们探索的重点。我们设计了一个基于“进展停滞检测”的自动标签生成器。在训练过程中我们维护一个短期的时间窗口如最近50步。我们计算窗口内某个“进展指标”的变化。这个指标可以是到目标距离的减少量、任务相关子目标完成的数量、甚至是价值函数值的增量。如果连续多个窗口如3个的进展指标平均值接近于零或为负并且当前的价值函数预测值很低我们则将当前时刻标记为“自我终止候选”正样本。同时对于那些最终被环境判定为“任务成功”的时刻我们将其标记为强烈的自我终止负样本因为成功了就不应该自我放弃。辅助损失函数为了避免自我终止分支变得“懒惰”总是预测不终止我们引入了一个稀疏的正则化项鼓励其在训练过程中偶尔做出终止预测但其预测必须与上述自监督标签尽可能一致。与策略网络协同训练自我终止分支和主策略网络决定移动、抓取等动作的网络是共同进化的。策略网络学会避免陷入会触发自我终止的状态而自我终止分支则学会更精准地识别真正的死胡同。这形成了一个有益的竞争循环。3.3 评估体系超越成功率的“体检表”当智能体具备了分离的终止判断能力后我们的评估方式也必须升级。不能再只看一个笼统的“成功率”。我们建议引入一个包含以下维度的评估协议解耦的成功率真实世界完成率在所有回合中由p_world主导且超过阈值且环境验证确实成功的比例。这衡量了智能体“正确判断成功”的能力。虚假世界完成率由p_world主导终止但环境验证失败的比例。这暴露了智能体目标理解错误或奖励黑客行为。合理自我终止率由p_self主导终止并且根据我们的“进展停滞”事后分析确实处于无进展状态的比例。这衡量了智能体“合理放弃”的能力。不合理自我终止率由p_self主导终止但事后分析发现其实仍有很大机会成功的比例。这衡量了智能体“过早放弃”的倾向。终止决策可解释性分析可视化在任务轨迹中p_world和p_self随时间的变化曲线。一个健康的智能体在接近目标时p_world应稳步上升p_self保持低位在陷入困境时p_self应上升。对于错误终止的案例通过观察哪个分支的概率异常高可以快速定位问题根源是感知错误导致世界完成判断出错还是策略缺陷导致过早放弃面对干扰的鲁棒性测试故意在环境中引入临时性干扰比如突然的视觉遮挡、动作噪声增大等观察智能体的终止行为。一个鲁棒的智能体在面对临时干扰时p_self可能会短暂升高但不应立即触发终止而是应该等待干扰消失其p_world判断也不应因干扰而波动过大。4. 实战演练在模拟视觉导航任务中的具体实现为了让大家有更具体的感受我以AI2-THOR模拟器中的一个经典视觉导航任务为例详细走一遍流程。任务目标是让智能体在室内环境中根据给定的目标物体名称如“微波炉”导航到该物体附近并发出“完成”信号。4.1 环境与基线模型设置我们使用PyTorch框架智能体采用基于RGB-D图像和物体目标名称嵌入的模型。基线模型是一个标准的端到端DRL如DD-PPO模型其策略网络在输出移动动作前进、左转、右转等的同时也输出一个额外的“终止”动作概率。这个概率由一个全连接层直接从共享特征中产生即我们之前说的“混合终止”模式。基线模型的痛点在训练中我们发现智能体经常在离目标物体还有一段距离的门口或角落就停止了。通过可视化其价值函数我们发现这些位置在训练数据中经常出现因为布局相似导致智能体产生了“到达这类结构就等于任务快结束了”的虚假关联从而触发终止。这就是典型的“虚假世界完成”与“自我终止”混淆的结果——我们无法确定它是认错了目标还是觉得穿过门太难而放弃。4.2 引入解耦终止模块我们对网络结构进行改造import torch import torch.nn as nn import torch.nn.functional as F class DecoupledTerminationAgent(nn.Module): def __init__(self, visual_encoder, text_encoder, action_dim): super().__init__() self.visual_encoder visual_encoder self.text_encoder text_encoder # 共享的特征融合层 self.fusion nn.Linear(visual_encoder.feature_dim text_encoder.feature_dim, 512) # 主策略分支输出导航动作 self.policy_head nn.Linear(512, action_dim) # 世界完成分支 self.world_completion_head nn.Sequential( nn.Linear(512, 256), nn.ReLU(), nn.Linear(256, 1), nn.Sigmoid() # 输出概率 p_world ) # 自我终止分支 # 输入除了融合特征还包括步数占比和最近动作熵 self.self_termination_head nn.Sequential( nn.Linear(512 2, 256), # 2 用于步数占比和动作熵 nn.ReLU(), nn.Linear(256, 1), nn.Sigmoid() # 输出概率 p_self ) def forward(self, visual_obs, goal_text, step_ratio, action_entropy): vis_feat self.visual_encoder(visual_obs) txt_feat self.text_encoder(goal_text) fused torch.cat([vis_feat, txt_feat], dim-1) fused F.relu(self.fusion(fused)) # 主动作逻辑 action_logits self.policy_head(fused) # 世界完成概率 p_world self.world_completion_head(fused) # 自我终止概率拼接内部状态 internal_state torch.tensor([step_ratio, action_entropy], devicefused.device).unsqueeze(0) termination_input torch.cat([fused, internal_state], dim-1) p_self self.self_termination_head(termination_input) # 融合终止概率采用或逻辑 p_done 1 - (1 - p_world) * (1 - p_self) return action_logits, p_done, p_world, p_self4.3 训练流程的关键调整世界完成分支的监督AI2-THOR可以查询智能体与目标物体的精确距离。我们设定一个成功阈值如1.5米。在每一个时间步如果智能体与目标物体的距离小于阈值我们就生成一个“世界完成”标签y_world1否则为0。用二元交叉熵损失L_world BCE(p_world, y_world)来训练这个分支。这里有一个重要技巧我们只对智能体“首次”进入成功区域的时间步及其后少量步数给予正标签避免智能体停在成功区域内时p_world持续被强化为1这有助于它学会“到达即触发”而不是“停留即保持”。自我终止分支的自监督标签进展指标我们定义progress -delta(distance_to_goal)即到目标距离的减少量所以距离减少时 progress 为正。停滞检测维护一个长度为L20的队列存储最近的progress值。计算队列的均值和标准差。如果均值接近0abs(mean) epsilon且标准差很小表明进展停滞。价值判断同时我们有一个独立训练的价值函数网络V(s)。如果当前状态的V(s)值很低且长期没有上升趋势。当“停滞检测”和“低价值”条件同时满足超过N10步时我们将当前时刻标记为y_self1。同时所有y_world1的时刻强制设置y_self0。损失函数为L_self BCE(p_self, y_self)。总损失函数智能体的总损失是策略梯度损失或模仿学习损失、价值函数损失、L_world和L_self的加权和。我们需要仔细调整L_world和L_self的权重防止其中一个主导训练。我们的经验是从较小的权重开始如0.1根据两个分支在验证集上的表现逐步调整。4.4 评估结果与分析训练完成后我们在一组未见过的测试场景中进行评估。我们对比了基线模型混合终止和解耦模型。评估指标基线模型 (混合终止)解耦模型 (Ours)说明传统成功率68%72%环境验证的成功率解耦模型略有提升。真实世界完成率N/A70%由p_world主导且环境验证成功的比例是核心能力指标。虚假世界完成率N/A2%p_world主导但实际失败说明误判率很低。合理自我终止率N/A18%p_self主导且事后分析确属无进展的回合避免了浪费步数。平均完成步数145128解耦模型因能合理放弃无望回合平均步数更优。关键失败案例可诊断性困难容易基线失败难归因解耦模型可通过p_world/p_self比例快速定位是“看错了”还是“放弃了”。从结果可以看出解耦模型不仅在传统成功率上有所提升更重要的是它提供了清晰的诊断维度。例如我们发现那2%的“虚假世界完成”大多发生在目标物体被严重遮挡但旁边有一个类似物体如不同品牌的微波炉的情况下。这说明我们的视觉编码器对细粒度特征的辨别力仍需加强。而那18%的“合理自我终止”主要发生在目标物体被锁在另一个房间而智能体没有开门权限的场景中这种放弃是明智的。5. 避坑指南与进阶思考在实际操作中我们遇到了不少坑这里总结一下希望大家能绕开。5.1 常见问题与解决策略问题自我终止分支过于“激进”导致智能体过早放弃。现象训练初期智能体动不动就触发自我终止根本无法进行有效探索。排查检查自监督标签生成逻辑。可能是“进展停滞”的阈值设得太敏感或者价值函数V(s)在训练初期本身就不准给出了普遍的低估值。解决课程学习在训练初期完全禁用或大幅降低自我终止分支的损失权重让智能体先专注于探索和世界完成判断。动态阈值让“停滞”检测的阈值随着训练步数逐渐收紧。初期放宽条件后期严格。改进价值函数使用更稳定的价值函数学习方法如TD(λ)并在早期使用蒙特卡洛回报作为标签减少bootstrap误差。问题两个分支“打架”训练不稳定。现象p_world和p_self的预测剧烈波动损失值震荡。排查可能是两个分支从共享特征中提取了相互冲突的模式或者损失权重不平衡。解决特征解耦在共享编码器之后为两个分支分别设计独立的前几层网络给予它们一定的特征分离能力。梯度截断/屏蔽计算p_done的梯度时可以尝试只回传到贡献更大的那个分支例如如果p_world p_self则主要用L_world的梯度更新世界完成分支及其之前的共享层而屏蔽或减小L_self的梯度影响。交替训练不是每个batch都同时更新两个分支。可以交替进行一个batch只更新世界完成分支和策略网络下一个batch再更新自我终止分支。问题在真实机器人上部署时环境完成标签y_world难以获取。现象模拟器中可以轻易查询物理状态但真实世界没有绝对坐标和完美传感器。解决多模态验证器训练一个独立的、基于多传感器如RGB-D相机末端力觉的分类器来实时判断任务是否成功。这个分类器可以在模拟器中预训练再在真实数据上微调。人机交互监督在初期通过人工干预提供少量“成功/失败”的标签用于微调世界完成分支。结合半监督学习利用大量无标签数据。弱化监督如果不追求精确的p_world概率可以将其改为一个“任务相关度”评分与自我终止概率结合使用。重点仍然在于区分两种终止动机。5.2 对未来的延伸思考解耦终止决策只是一个起点它打开了许多有趣的研究和应用方向可解释性与人机交互智能体在决定终止时如果能同时给出“因为我看到了目标”世界完成或“因为我觉得过不去了”自我终止的解释将极大增强人机协作的信任和效率。我们可以将p_world和p_self的数值以及它们所依据的视觉注意力区域作为解释输出给人类操作员。分层强化学习中的子目标终止在分层强化学习中高层控制器负责设定子目标底层执行器完成子目标。子目标的“完成”判断同样面临混淆问题。将这里的解耦思想应用到子目标层面可以让高层策略更清晰地知道底层是成功了还是放弃了从而做出更合理的后续规划。终身学习与主动请求帮助自我终止机制可以进化为“主动请求帮助”机制。当p_self很高时智能体不一定直接停止而是可以触发一个“求助”信号让人类或其他智能体介入。这为构建更鲁棒、更协作的智能系统提供了基础。这项工作给我的最大体会是在追求智能体“性能”指标的同时绝不能忽视其决策过程的“透明度”和“可诊断性”。把一个黑箱的“完成”信号拆开里面可能藏着智能体认知世界的真实逻辑也可能暴露了训练环境的潜在偏见。作为构建者我们有责任去厘清这些信号这不仅是为了更好的评估更是为了构建更可靠、更可信的具身智能。

相关新闻