扩散模型如何解决具身智能预测难题:原理、落地与工程实践 具身智能这两年热度一直很高但真正动手做过的朋友都清楚最难啃的骨头往往不是感知也不是底层的运动控制而是预测。机器人要在物理世界里可靠地干活必须在动作发生之前预判“接下来画面会变成什么样”“这个操作会带来什么后果”“哪条动作轨迹最稳妥”。我这两年在相关项目里反复折腾过各种预测方案从确定性网络到变分方法最后发现扩散模型在具身模型预测这个场景里解决了很多让人头疼的痛点。这篇文章就把我在实操中的理解、踩过的坑和一些能直接落地的经验梳理出来希望能帮到正在做机器人学习、世界模型或者生成式控制方向的朋友。1. 具身预测已成基建但为什么偏偏是扩散模型先说一个基本判断预测能力直接决定一个具身系统的上限。导航要预测前方障碍物的运动抓取要预测物体被夹持后的形变和滑动长程任务要预测多步操作后的场景状态。这些预测质量差了后面的规划和控制都会被带偏。而扩散模型恰好是一个天然适合做预测的生成框架它不像传统方法那样只输出一个“最可能答案”而是能输出一整个未来可能性分布。1.1 具身模型预测究竟在预测什么很多刚接触这个领域的人会把“预测”理解成一个纯视觉问题比如预测下一帧图像。但在具身模型里预测的内容远不止视觉像素我习惯把它拆成三个层次。第一是观测级预测。就是预测未来的视觉观测机器人通过摄像头看到当前画面要估算接下来若干帧最可能出现的画面。这在机器人避障、操作反馈、异常检测里都非常关键。比如机械臂在往前推进的时候提前“看到”即将碰撞到障碍物的画面就能在真正接触前刹住车。第二是状态转移预测。本质上是对物理动力学的建模给定当前状态和某个动作预测物体或机器人本身会转移到什么状态。这里的状态可以是关节角度、物体位姿、速度等结构化向量。这个预测是规划器的核心依赖机器人要评估“我推一下这个杯子它会朝哪个方向滑”就得靠这类模型。第三是策略级预测。直接预测未来一段时间的动作序列或者控制指令。这类任务通常和模仿学习、强化学习结合模型根据当前观测输出一条完整的动作轨迹。扩散模型在这一层也很有优势因为它可以捕捉“多个合理动作方案”的问题而不是硬生生地把多模态动作压成一个平均值。这三层在实际系统里往往共生。一个完整的世界模型可能同时做状态转移预测和视觉想象再往下游的规划器提供打分和模拟能力。搞清楚自己到底要预测哪一层才能决定扩散模型的输入输出结构怎么搭。1.2 传统预测方法的两个硬伤在没有扩散模型之前主流预测方案是普通的前馈神经网络和循环网络。它们能工作但有两块明显的天花板。第一个硬伤是单峰假设。很多预测网络的训练目标是最小化均方误差等价于拟合条件期望。当一个未来状态在数据里存在多个合理分支时比如同一张桌面场景下抓取一个杯子可以向左摆也可以向右放模型学到的是这些分支的平均值预测出一个“既不像左也不像右”的模糊结果。在图像预测里这种模糊现象尤其明显预测出来的下一帧总是雾蒙蒙的关键物体的轮廓糊成一片。第二个硬伤是误差累积导致的长时间漂移。网络在做多步预测时通常把上一步的输出当作下一步的输入然后进行自回归。每一次预测都有一点点误差连续叠加几十步之后预测出来的状态可能已经严重偏离物理现实甚至出现穿模、物体凭空消失之类的问题。常规的对策是训练时加噪声、加约束但都治标不治本。后来大家也试过用对抗生成网络和变分自编码器来处理多峰预测。对抗训练的不稳定在机器人数据这种高维连续空间里会被放大训练过程中判别器和生成器很容易此消彼长最后模型根本不收敛。变分自编码器虽然稳定但因为它用高斯分布约束隐变量生成的样本经常过度平滑细节丢失严重用来预测未来帧时还是不够理想。1.3 扩散模型补位的底层逻辑扩散模型真正的优势在于它是生成模型并且非常擅长逼近复杂分布。它在图像生成领域已经被反复验证能生成细节丰富且多样性极高的样本。当我把它迁移到具身预测任务时发现几乎天然的契合预测本质上就是一个条件生成问题给定当前观测和动作历史生成未来的观测或动作轨迹。扩散模型的生成过程是一步步去噪的从随机噪声开始逐步还原成目标数据。这个过程带来的好处有两个第一每一步去噪都能利用一个显式的“干净程度”衡量标准即当前噪声水平这让训练比对抗生成网络稳定得多第二因为生成的起点是随机噪声模型在采样时可以探索多种可能性天然支持多峰输出。同样是抓取杯子模型可以生成“向左摆”和“向右放”两条完全不同的合理轨迹而不是一条居中、不伦不类的折中轨迹。另外扩散模型的条件控制机制非常灵活。无论是图像观测、语言指令还是动作历史都可以作为条件注入模型。我在实际项目里甚至可以把“目标位置的语义描述”和“当前关节角度”拼接在一起做条件效果依然稳定。这一点对于具身模型这种多模态输入场景特别关键。在开始深入实操之前我想先说明一件事下面要讨论的扩散模型原理我会尽量用最少公式讲清楚因为我知道很多做机器人工程的朋友并不关心论文里的理论推导他们只想知道这东西怎么跑起来、为什么能工作、坏的时候坏在哪里。2. 扩散模型原理从图像生成到未来预测的机制迁移扩散模型的核心机制并不复杂它由两个方向相反的随机过程构成前向过程把数据逐步加噪变成噪声反向过程学习如何从噪声逐步把数据还原出来。区别只在于图像生成里的“数据”是照片而具身预测里的“数据”是未来帧、状态序列或动作轨迹。2.1 前向加噪与反向去噪一图流理解前向过程可以简单理解为给定一个干净的真实样本 x0在前向的每一步 t 上按照一个预定义的系数表 ᾱt给它叠加一个高斯噪声 ε得到逐渐模糊的 xt。这个过程完全由公式控制不需要训练。用生活里的类比来说前向过程就是把一张清晰的照片逐步浸入墨水中一开始还能看出轮廓到最后变成一片随机噪点。反向过程则相反训练一个神经网络去学习“从噪声中把墨水一点一点拨开”的逆过程。训练完成后只要输入一组随机噪点网络就能一步步把它还原成一幅和真实数据分布一致的画面。预测任务里的输入不是照片而是未来状态或者动作轨迹。如果我们要预测未来 N 步的状态序列那么 x0 就是这段真实的状态序列。模型需要学习的是在给定当前观测的情况下从噪声版本的未来序列中还原出干净的未来序列。公式可以写成这样x_t √(ᾱt) x0 √(1 - ᾱt) ε 其中 ε 服从标准正态分布。训练的损失也很直白就是让网络预测出来的噪声和真实注入的噪声做均方误差。网络本质上不需要直接输出未来序列它只需要学会“在当前含噪序列和条件信息下噪声大概长什么样”然后减去噪声就得到了干净的估计。这个设计让训练变得非常稳我在实际调参中很少遇到梯度爆炸或者模式崩溃这在对抗生成网络时代是想都不敢想的。2.2 条件如何注入观测、动作与语言指令三通道扩散模型在具身预测中几乎一定会用到条件信息因为纯粹的噪声到未来序列的生成没有任何意义必须有条件约束它。我常用的做法是把条件分为三个通道分别编码再注入网络。第一个通道是观测信息。图像观测走视觉编码器关节角度和末端位姿等低维状态走另一个全连接编码器。第二个通道是动作历史。过去若干步的动作指令对预测至关重要尤其是状态转移预测时“我刚刚做了什么”直接决定“接下来会怎样”。第三通道是目标或者语义意图。如果有自然语言指令可以用语言编码器提取特征如果没有语言也常用一个向量表示目标终点坐标或任务ID。注意这三个通道在项目里的具体处理方式可以不同。有的模型在编码后向网络中间层拼接有的通过交叉注意力机制和主分支交互还有的用逐层调节方法把条件映射成缩放和平移参数。我个人的经验是对于空间关系敏感的任务比如视觉预测交叉注意力效果好对于低维状态和动作序列预测简单拼接就足够了过度复杂反而增加训练成本。还有一点非常实用条件信息还可以被用来做无分类器引导这是让扩散模型在预测时可控性大增的关键技巧。具体做法是训练时以一定概率把条件置空推理时对“有条件预测”和“无条件预测”的结果做差值放大让生成结果更贴近条件。用公式表示就是ε_pred ε_uncond w * (ε_cond - ε_uncond)这里的 w 是引导权重。w 越大模型越倾向于输出和条件强相关的预测但代价是多样性降低。这个参数我在具身预测任务里一般先设到 1.0 到 2.0 之间再根据具体任务微调。2.3 在具身预测中扩散模型采样是“想象”的过程扩散模型的推理阶段是一个逐步去噪的采样过程在很多论文里叫采样器。具身预测任务和图像生成的采样有一个不同图像生成希望最终结果有足够的多样性和艺术性但具身预测往往希望结果既合理又贴合物理约束。好在 DDIM 这类采样器提供了平衡手段它几乎不损失质量的把原本需要上千步的去噪过程压缩到几十步这对机器人实时性要求高的场景特别重要。我发现一个很形象的比喻机器人在实际执行动作前用扩散模型生成多步预测相当于是“在脑子里快速播放一段可能发生的未来视频”。每生成一种未来就可以让规划器评估一下这种未来的收益和风险选出最稳妥的一条再执行。更妙的是由于采样起点是随机噪声每次生成的未来都有差异这给系统带来了天然的探索能力这在强化学习里是个不可多得的优点。多步采样还有一个重要细节叫保持时序一致性。比如预测未来五帧的图像五个帧之间必须连续平滑不能突然跳变。如果每一帧独立生成机器人看起来会觉得这个世界在抽搐。这个问题后面我放到常见问题环节细说因为太容易踩坑了。3. 扩散模型在具身预测中的三类典型落地为什么说扩散模型在具身预测中能有三类不同落地方式因为具身模型的上下游需求差异很大。我按自己实践过的项目把它们分成三段观测级生成、动作级生成、世界模型级评估。这三类覆盖了从低层感知到高层规划的大部分场景。3.1 观测级预测机器人的“脑内视频播放”第一类落地是直接预测未来视觉观测。这通常表现为一个条件视频预测模型输入当前几帧观测和可选的动作信息输出未来若干帧高分辨率图像。这个能力在机器人防碰撞、操作过程可视化、数据增强上都很有用。比如在机械臂接近易碎物品的场景里观测级预测可以让系统提前几十毫秒看到“继续推进会产生碰撞”的画面从而触发避让。我做这类任务时的一个核心经验是不要直接自回归地一帧接一帧预测因为误差会指数级累积。更好的做法是输入带噪的完整未来片段进行联合去噪再通过时序注意力机制保证帧间一致性。生成出来的未来视频虽然偶尔有细节模糊但整体物理规律是自洽的。这类模型训练的数据主要来自于机器人在真实环境或仿真环境中执行脚本动作时录制的多视角视频。数据规模通常要求不小但好消息是观测级预测模型不太依赖精确的动作标签只要有视频序列和粗略的动作信息就能训练这在真实机器人数据采集难度大的背景下很关键。3.2 动作级预测生成一整段控制指令序列第二类落地是直接生成动作指令序列这是扩散模型在具身领域里相当火的方向。常规的模仿学习模型从观测直接映射到一个确定动作这样在演示数据包含多种行为方式时会失效因为同样的观测可能对应完全不同的动作。比如一个物体摆在桌上有的演示是从左边绕过去抓有的演示是从右边绕过去抓确定性模型最终学出一个“从中间穿过去”的错误策略。扩散模型动作级预测的核心思路是不再要求模型从观测到动作做单值映射而是从观测到动作分布做生成建模。模型输入当前观测和任务条件输出一整段动作轨迹这个轨迹在执行时按时间戳依次发送给底层控制器。我在实际的机器人插拔、搬运、倒水等操作任务中都验证过这类方案效果比普通行为克隆提升了非常多尤其面对多峰演示时优势很明显。这种方案的落地要点在于动作空间的维度通常不高主要是关节角度或末端笛卡尔坐标所以去噪网络不需要像处理图像那样巨大这使得推理速度可以做到非常高。在某些项目上我们用几十步去噪就能生成一秒钟的动作序列在实机上可以达到近乎实时的闭环频率。3.3 世界模型级预测评估“如果这样做会怎样”第三类落地是我个人最看好的方向就是让扩散模型扮演世界模型的角色用来做“假设推演”。给定当前状态和一个候选动作或候选策略扩散模型想象出未来若干步的状态然后把这种未来状态交给价值模型或者任务成本函数来打分。规划器会对多个候选动作重复这个过程挑出评分最高的执行。这有点类似下棋时的“想几步棋”每一步棋都先在脑中走一遭再评估落子后的局面。在实践中这种方案可以从两种程度上实现。轻量级做法是让扩散模型只预测低维状态变化比如物体位姿、速度、接触力等不需要生成图像速度快能和模型预测控制算法结合。重量级做法是让扩散模型预测高维观测甚至点云、深度图像信息量大适合复杂操作场景但算力消耗也大。这一类落地里扩散模型真正解决的是“未来可能性多样性”的问题。真实物理世界中一个动作可能导致多个不同结果比如推一个不确定摩擦力的滑块可能推远也可能推偏价值评估需要覆盖这些分支而不是只按平均结果打分。扩散模型天然能采样出多分支的想象结果这让规划器做决策时的鲁棒性明显提升。4. 架构选型与训练工程细节理论说得再多最终还是要落实到工程实现上。这一部分分享我在实际项目里的架构选择和训练细节都是可以直接参考的配置和流程。4.1 数据准备与预处理具身模型的预测效果很大程度上取决于数据质量我见过太多项目花了大量时间调模型结构最后发现瓶颈根本不在模型而在数据没对齐或者没做预处理。首先要保证状态、动作和观测在时间戳上严格对齐。机器人系统里有传感器延迟、控制指令缓存如果动作比观测早几十毫秒训练出来的模型会学到错误的因果关系。我处理这个问题的方法是录制数据时统一用同一个系统时钟打时间戳离线再对观测和动作做插值重采样让每个状态元组的时间粒度一致。其次是归一化。动作序列和状态向量往往有不同的量纲关节角度在零点几弧度末端速度可能到每秒数米。如果不归一化扩散模型的训练会很别扭。我的习惯是对每个特征维度做 z-score 标准化保存均值和方差用于推理时的反标准化。图像观测则按常规做法归一化到 [-1, 1]。还有一个常被忽略的点数据多样性。如果训练数据里每条轨迹都很相似扩散模型学到的分布就会非常窄预测出来的未来虽然合理但缺乏分支。想要让模型具备多峰预测能力必须在采集数据时主动覆盖不同行为模式比如不同起始位置、不同操作风格、不同目标位置。这是我踩过最深的一个坑后面还会再提。4.2 网络架构怎么选扩散模型的主干网络选型直接影响预测质量和速度。我的经验是把场景分为三类来选。处理图像观测为主的任务比如视频预测和视觉想象默认选类似 U-Net 的编码-解码结构因为它在多层特征图上既有下采样提取语义又有上采样恢复细节。配合注意力模块后对这种高分辨率图像生成任务非常合适。U-Net 的缺点是计算量大但我实际用下来在 64×64 到 128×128 分辨率下还是能接受的。处理状态序列和动作序列为主的任务比如动作级预测和低维动力学预测我更倾向于使用类似 Transformer 的结构在业界有一个常见名字叫扩散 Transformer它把序列数据切成若干小块作为 token通过自注意力机制建模长距离依赖。动作序列里的各时间步之间往往有强相关性比如机械臂先抬升再平移再下降这种相关性用注意力能捕捉得比卷积网络更好。处理视频预测或者多帧点云预测时可以考虑三维卷积网络或者混合架构。三维卷积天然适合时空联合建模能够同时考虑空间和时间维度上的特征但参数量和显存消耗也更大。我的做法是视频预测用 U-Net 加三维卷积模块的组合既保留空间细节又建模时序关系纯点云任务则先编码成体素特征再用三维稀疏卷积处理。需要补充一点主干网络的大小要和数据量匹配。如果只有几万条轨迹数据却上了一个几亿参数的模型结果通常是严重的过拟合模型把训练集里的场景背了下来换一个环境就崩溃。遇到这种情况优先缩小网络而不是盲目堆数据。4.3 训练细节和超参数扩散模型的训练损失我已经在上文提过就是预测噪声的均方误差。但在实际工程里还有几个细节对训练结果影响非常大。第一个是时间步采样策略。原始扩散模型在训练时从 0 到最大扩散步数 T 里均匀随机采样一个时间步。后来我发现在具身预测任务里小时间步和大时间步的信息量差异很大单纯均匀采样会让模型在小噪声区域的状态还原不够精细。现在很多方案采用一个简单有效的改进在训练时让时间步 t 的采样概率偏向中间或中小噪声区域或者使用从 0 到 T 的对数均匀采样。这个改动不大但对生成的细节提升明显。第二个是条件信息随机丢弃的概率。前面铺垫过无分类器引导依赖训练时的条件丢弃。这个概率设多高很关键。设太高模型训练时会经常失去条件信息最终训出来的主干在无条件生成上花费了过多精力条件生成反而变弱设太低推理时引导效果不明显。我一般把它设在 0.1 到 0.2 之间这是一个在多个项目里都验证过比较稳的范围。第三个是模型参数的指数移动平均。扩散模型在训练后期容易出现权重振荡使用指数移动平均能显著稳定采样质量。我通常把衰减系数设在 0.995 到 0.999 之间训练结束后用移动平均后的权重做推理。这种做法几乎是扩散模型项目里的标准配置非常推荐直接照抄。另一个容易被忽视的是梯度裁剪。序列生成类任务的损失并非总是平滑偶尔会出现一条异常样本把梯度带飞表现为损失突然跳到无穷大。加一个全局梯度裁剪到 1.0基本可以消除训练崩溃。这个操作我已经养成肌肉记忆了新项目一定初始就带上。4.4 推理部署优化模型训练完只是第一步部署到真机上才是终考。扩散模型在推理时最大的问题是迭代去噪次数太多导致延迟高。标准的图像扩散模型做 50 步采样才能在视觉上可接受但机器人控制周期通常只给几十毫秒预算。我的优化路线通常分四步走。第一步换用更高效的采样器。DDIM 能把采样步数从上千压到 100 步以内而 DPM-Solver 这类求解器在 20 步以内就能得到不错结果数学上更solid一些。如果任务不苛刻直接用 DPM-Solver 把步数砍到 10 到 20 步这是最便宜、见效最快的优化。第二步做步数蒸馏。用训练好的多步采样模型作为老师监督一个少步数甚至单步的学生模型。蒸馏后的模型虽然多样性略有下降但速度可以做到近乎实时。在纯动作预测任务里因为输出维度低蒸馏后甚至能跑到 100 Hz 以上。第三步使用半精度推理。扩散模型的噪声预测网络在 FP16 精度下通常只有极小的精度损失但计算速度接近翻倍。如果模型里用了注意力层注意在混合精度训练阶段就把归一化层考虑清楚否则推理时会出现数值异常。第四步也是最容易被忽略的是减少不必要的空间分辨率。预测未来帧时不是所有区域都需要高分辨率。我会先对观测做语义分割或者显著性检测只在高相关区域使用高分辨率生成背景区域直接用低分辨率填充。这个优化方案实现起来有一定的额外研发成本但省下来的计算量相当可观。5. 常见问题与排查技巧实录做扩散模型在具身预测里的落地必然会遇到一些反复出现的经典问题。我把自己经历过的问题整理成一份排查笔记包括现象、原因和解决路径大家可以把它当作一个速查表。5.1 输出模糊、过度平滑这是最常遇到的第一个问题。做视频预测时生成出来的未来帧模模糊糊虽然整体结构没错但关键物体边缘糊成一团做动作预测时生成的轨迹往往比演示数据柔和很多该急停的地方不急停。导致这个现象的原因通常有四个引导权重太低模型过于偏向多样性和随机性训练步数不足网络还没学会刻画高频细节数据本身模式太单一分布太窄还有可能是时间步采样方式导致小噪声区域训练不充分。我的排查顺序是先把无分类器引导权重调到 2.0 左右看生成结果是否变得尖锐。如果没有变化检查训练损失曲线看是否还在下降。如果基本持平说明数据问题需要回看训练集里的轨迹多样性。如果是在小噪声区域不行那就把时间步采样策略改成偏重小时间步重新训练几十轮。5.2 多步预测误差累积和多帧不一致另一个我踩过的大坑是长时间预测时画面崩坏或者动作序列断裂。扩散模型虽然单步预测很准但如果把它生成的一步结果作为输入再预测下一步误差会逐渐放大几十步之后预测结果已经和物理规律冲突。一条实用的对策是训练时采用噪声条件训练即在预测下一段序列时给输入观测也加入随机噪声。这样模型会学会在输入受到轻度扰动时依然保持预测稳定推理时的误差累积就会被大大抑制。另一条对策是针对视频预测的在生成多帧时使用自回归重加噪策略每生成下一帧前都对已有帧加少量噪声再做去噪相当于不断修正前面的误差。5.3 推理太慢无法上真机如果部署到真机上发现延迟超标先不要盲目砍模型结构而应该检查推理管线的瓶颈在哪里。有时候瓶颈并不在扩散模型的步数上而在图像预处理、特征编码甚至结果后处理。我的一个强烈建议是区分主路径和支路径。控制主路径里能不用扩散模型就不用它用一个轻量级的确定性网络做快速预测只在需要多样化假设或异常检测时才触发扩散模型进行多候选采样。这种混合架构在实践中既保证了速度又保留了扩散模型的多模态能力。我在一个操作项目中做过对比单一扩散模型方案的闭环频率只有 5 Hz混合架构提升到了 30 Hz同时预测准确性几乎没有下降。5.4 条件信息不敏感预测结果和输入完全无关还有一种很隐蔽的问题模型训练完以后不管给它什么条件输出的预测分布基本都差不多好像条件信息完全没起作用。这种情况十有八九是条件信息在维度上被主体分支淹没或者在特征融合阶段被压缩得太狠。解决办法有三个。第一在编码条件时增加独立的条件编码器保证条件特征的表达能力足够强。第二在训练时刻意增加条件丢弃的实现方式让模型意识到条件信息的存在能够降低损失这相当于逼着模型学会利用条件。第三检查引导权重推理时如果引导权重为 0 或者低于 1.0条件影响会被削弱。我调试复现过很多次大部分最后都发现是第二个原因加一个更强的引导之后立刻改善。5.5 与强化学习结合时的梯度问题最后一个想讲的是扩散模型作为策略或世界模型和强化学习结合时的一个特殊问题。强化学习通常需要计算策略的梯度但扩散模型的生成过程是一个多步采样梯度很难直接反传到采样起点。一个常见方案是采用重参数化技巧或得分匹配来绕过这个困难实现起来有一定复杂度。我的经验是如果刚接触这个方向建议先在离线强化学习或者纯净模仿学习场景里把扩散预测模型跑通再往在线强化学习扩张。直接把扩散模型放进依赖策略梯度的在线算法里坑会非常深往往需要改奖励函数、改采样温度、加熵正则等一系列操作新手很容易一头扎进去。常见问题典型原因优先排查方向输出模糊/过度平滑引导权重低、训练不足、数据模式单一调高引导权重检查损失曲线检查数据多样性多步预测发散误差累积、输入扰动导致级联漂移加噪声条件训练、自回归重加噪推理延迟高采样步数多、模型过大换高效采样器、步数蒸馏、混合架构条件信息不敏感条件特征过弱、引导不足加条件编码器、调高引导权重强化学习梯度问题多步采样不可导重参数化、先在离线场景跑通6. 我的个人体会与几个避坑建议做了这么多扩散模型和具身预测相关的项目我越来越觉得一个道理扩散模型不是银弹它只是把“分布建模”这个以前很难做好的事情做扎实了。选型之前最好先想清楚任务本身是不是真的有多峰预测需求如果任务只有一个标准答案那用一个简单的确定性网络就够了不必拉上扩散模型增加复杂度。我在实际项目中体会最深的是数据多样性远比网络结构重要。同样的扩散模型在一份覆盖了多种操作风格的轨迹数据上训练和在一条死板的自动录制数据上训练效果差距是天壤之别。所以项目早期就应该在采集环节花心思主动设计多种演示路径给模型创造合理多峰的条件。最后分享一个小技巧可以考虑在系统里把扩散模型拆成一个可插拔模块而不是把整个控制链路都交给它。我最近的一个项目里主预测路径用的还是轻量级确定性模型只让扩散模型在“检测到不确定性高”的时候介入做多假设推演。这种分层设计既保证了日常运行的实时性又保留了对边缘场景的想象力覆盖。如果你正在设计新的具身预测系统不妨试试这种思路会比单一模型方案稳妥得多。