1. 从感知到决策商汤这次到底在做什么商汤科技这些年给外界的印象一直停留在“人脸识别”“图像处理”这类感知层面的能力上。但如果你仔细看它近两年的技术布局会发现一个很明显的转向从“看懂世界”往“做对决策”走。这个转向的核心载体就是OpenDILab和DI-star这两个项目。先说清楚这两个东西是什么。OpenDILab是一个开源的决策智能平台DI-star是基于这个平台做出来的一个星际争霸AI。星际争霸这个游戏懂行的人都知道它是决策智能领域公认的“硬骨头”——不完全信息、实时对抗、操作空间巨大、策略深度极高。能在这个游戏里做到职业选手水平意味着决策智能这套东西真的跑通了。那为什么商汤要花大力气做这件事逻辑其实不复杂。感知智能解决的是“这是什么”的问题比如识别一张图里有没有猫、有没有人脸。但产业里真正值钱的问题往往是“接下来该怎么做”——工厂产线怎么调度、物流路径怎么优化、游戏AI怎么打、自动驾驶怎么决策。这些问题光靠感知解决不了必须要有决策能力。我个人的判断是商汤这一步走得挺聪明。感知智能的市场已经卷成红海安防、金融、零售这些场景的AI渗透率已经很高了增量空间有限。但决策智能不一样它面对的是更复杂的系统性问题门槛更高附加值也更大。OpenDILab和DI-star就是它在这个方向上的技术底座和标杆案例。这篇文章我会从几个角度拆解这件事决策智能到底难在哪、OpenDILab这个平台的设计思路、DI-star在星际争霸里是怎么做决策的、以及这套东西对产业应用意味着什么。不管你是做AI工程的、搞强化学习的还是单纯对AI技术演进感兴趣应该都能从中拿到一些有用的东西。2. 决策智能到底难在哪从感知到决策的鸿沟2.1 感知智能和决策智能的本质区别很多人会把感知和决策混为一谈觉得AI能识别图片了那让它做决策应该也不难。这个想法很危险。感知智能的本质是模式识别——给一个输入输出一个标签或一组数值。它的评价标准很清晰准确率、召回率、F1值。你训练一个图像分类模型准确率到99%就算很好了。但决策智能完全是另一回事。决策的本质是在一个动态环境里根据当前状态选择动作目标是最大化长期收益。这里面的关键词是“动态”和“长期”。动态意味着环境会变你的决策会改变环境环境变了又会影响你下一步的决策。长期意味着你不能只看眼前一步的收益要考虑这个动作对未来的影响。举个生活化的例子。感知智能就像你看到一个红绿灯识别出它是红的。决策智能就像你开车到路口不仅要看到红灯还要判断是该刹车、该减速、还是该变道而且要考虑后面有没有车、旁边车道能不能变、变过去之后会不会堵。这里面涉及的信息量、时间压力、后果权重完全不是一个量级。2.2 决策智能的三大核心挑战决策智能难难在三个地方。第一个是状态空间爆炸。在星际争霸里每一帧的游戏状态包括几百个单位的位置、血量、能量、冷却时间还有地图上的资源分布、敌方单位的可见信息。这个状态空间的维度轻松上到几千甚至上万维。传统的搜索算法在这种维度下根本跑不动必须要有函数逼近能力也就是用神经网络来压缩和表示状态。第二个是动作空间巨大且连续。星际争霸里每个单位可以执行的动作包括移动、攻击、释放技能、建造、采集等等而且移动是连续坐标。假设你有50个单位每个单位有10种可能的动作那动作组合就是10的50次方。这个数字比宇宙中的原子数量还大。怎么在这个空间里高效搜索是决策智能的核心难题。第三个是奖励稀疏且延迟。在游戏里你做一个操作可能几十秒甚至几分钟后才知道这个操作是对是错。比如你提前派了一个农民去侦察这个决策的价值可能要到两分钟后你发现对方在偷矿才体现出来。这种延迟奖励让信用分配变得极其困难——你很难知道到底是哪一步操作导致了最终的胜利或失败。注意很多团队在做决策智能项目时最容易低估的就是奖励设计。奖励函数设计不好模型要么学不到东西要么学到一堆“钻空子”的奇怪策略。这个坑我后面会详细说。2.3 为什么商汤选择星际争霸作为突破口商汤选择星际争霸作为DI-star的应用场景这个选择很有讲究。星际争霸在决策智能领域的地位相当于ImageNet在计算机视觉领域的地位。它提供了一个标准化的、有明确胜负标准的、复杂度足够高的测试环境。更重要的是星际争霸的决策问题具有很好的可迁移性。你在星际争霸里学到的决策能力——资源分配、多单位协同、实时对抗、不完全信息下的博弈——这些能力在产业场景里都能找到对应。比如物流调度就是资源分配多机器人协作就是多单位协同自动驾驶就是实时对抗和不完全信息决策。OpenDILab作为平台DI-star作为标杆应用这个组合的逻辑是先用一个足够难的游戏证明技术实力然后把平台开源出来让更多人基于这个平台去解决产业问题。这个思路和当年谷歌做AlphaGo、后来做AlphaStar的路数很像但商汤更强调开源和生态。3. OpenDILab平台拆解决策智能的工程底座3.1 OpenDILab的整体架构设计OpenDILab不是一个单一的工具而是一整套决策智能的工程框架。它的设计目标很明确让做决策智能的人不用从零造轮子把精力集中在算法和场景上。从架构上看OpenDILab大致分成四层。最底层是环境层负责对接各种决策环境包括游戏环境、仿真环境、真实系统接口。这一层的核心工作是标准化——不管底层是什么环境对上层暴露的接口都是一致的。第二层是算法层集成了主流的强化学习算法、模仿学习算法、搜索算法等。第三层是训练层负责任务调度、分布式训练、超参数管理、模型版本控制。最上层是应用层提供面向具体场景的解决方案和工具链。这个分层设计的好处是解耦。你想换一个环境只需要改环境层的适配器你想试一个新算法只需要在算法层加一个实现你想扩大训练规模只需要调整训练层的资源配置。每一层的变化不会影响其他层。3.2 环境抽象让不同场景说同一种语言OpenDILab最核心的设计之一是它的环境抽象接口。做过强化学习的人都知道不同环境的接口千差万别。有的环境用step函数返回next_state, reward, done, info有的环境用reset和render分开有的环境状态是字典有的是数组。这种不一致性导致算法很难复用。OpenDILab定义了一套标准的环境接口包括几个关键方法reset用于初始化环境step用于执行动作并返回结果render用于可视化close用于释放资源。所有接入OpenDILab的环境不管底层是星际争霸还是机器人仿真还是交易系统都必须实现这套接口。这个设计看起来简单但实际价值很大。它意味着你在星际争霸上调试好的算法换一个环境只需要改环境适配器算法代码一行不用动。这对于算法迭代效率的提升是巨大的。3.3 分布式训练把训练时间从周压到天决策智能的模型训练计算量通常比感知模型大一到两个数量级。原因很简单感知模型是静态数据训练决策模型是动态交互训练。每一步决策都要和环境交互交互本身就有开销而且交互是串行的——你不可能跳过前面的步骤直接到后面。OpenDILab的分布式训练方案核心思路是并行采样、集中训练。它启动多个环境实例每个实例独立跑策略采集数据采集到的数据汇总到一个中心缓冲区然后训练进程从缓冲区采样更新模型。这样采样的并行度上去了训练效率就上去了。具体实现上OpenDILab支持多种并行模式。一种是多进程并行在同一台机器上启动多个环境进程。另一种是多机并行在不同机器上分布环境实例。还有一种是异步并行采样和训练完全解耦采样进程持续往缓冲区写数据训练进程持续从缓冲区读数据两边互不等待。实操心得分布式训练最容易踩的坑是数据一致性问题。多个采样进程同时往缓冲区写数据如果缓冲区实现没有做好锁机制会出现数据覆盖或读取到不完整数据的情况。OpenDILab在这方面做了不少工程优化但如果你自己改缓冲区实现一定要小心。3.4 算法库从DQN到PPO到更复杂的组合OpenDILab的算法库覆盖了主流的强化学习算法。从最基础的DQN、DDPG到更现代的PPO、SAC再到面向多智能体的QMIX、MADDPG基本上你能想到的都有。但OpenDILab的算法库不只是把论文复现一遍。它做了很多工程上的优化比如算法组件的模块化。在OpenDILab里一个算法被拆成几个独立的组件特征提取器、策略网络、价值网络、经验回放缓冲区、探索策略。你可以自由组合这些组件比如用ResNet做特征提取用LSTM做序列建模用PPO做策略优化。这种模块化设计让算法定制变得非常灵活。另外OpenDILab还提供了一些面向特定场景的算法变体。比如针对星际争霸这种多单位控制的场景它实现了基于注意力机制的多智能体策略网络能够动态关注不同单位的信息。这种场景化的算法优化是OpenDILab区别于通用强化学习库的地方。4. DI-star实战星际争霸AI的决策逻辑4.1 DI-star的整体技术方案DI-star是OpenDILab在星际争霸场景下的旗舰应用。它的目标是让AI在星际争霸的完整对局中达到人类职业选手的水平。这个目标听起来很狂但DI-star确实做到了相当高的水平。DI-star的技术方案可以概括为分层决策模仿学习强化学习微调。分层决策是指把星际争霸的决策分成几个层次宏观战略层决定整体战术方向比如是快攻还是运营中观战术层决定具体的部队编成和进攻时机微观操作层决定每个单位的具体动作。这种分层设计降低了决策的复杂度每一层只需要关注自己层面的问题。模仿学习是指先用人类高手的对局数据训练一个基础模型。这个阶段的目标不是让AI超越人类而是让AI学会人类的基本操作和战术套路。强化学习微调是指在这个基础模型之上用自我对弈的方式继续训练让AI探索出超越人类的策略。4.2 状态表示怎么把星际争霸的画面变成神经网络能吃的数字星际争霸的状态表示是个大问题。游戏画面是像素级的直接扔给神经网络不是不行但效率太低。DI-star的做法是结构化状态表示——从游戏引擎里直接提取结构化的信息包括单位的位置、类型、血量、能量、冷却时间地图的资源分布敌方的可见信息等。这些信息被组织成几个不同的特征图。比如单位特征图是一个三维张量维度是[地图高度, 地图宽度, 单位特征数]。每个位置上的向量表示该位置有哪些单位、什么类型、什么状态。这种表示方式既保留了空间信息又压缩了数据量。另外DI-star还用了时序特征。星际争霸是个实时游戏很多信息是随时间变化的。DI-star用LSTM或Transformer来建模时序依赖让AI能够记住之前发生了什么从而做出更合理的决策。4.3 动作空间设计从几千个操作里选出最优解星际争霸的动作空间巨大DI-star的做法是动作参数化。它不直接枚举所有可能的动作而是把动作分解成几个维度动作类型移动、攻击、建造等、目标单位、目标位置。每个维度用一个独立的网络头来预测最后组合成一个完整动作。这种参数化设计的优势是动作空间从指数级降到了线性级。假设有10种动作类型、50个可选单位、100个可选位置直接枚举是10×50×10050000个动作。但参数化之后只需要分别预测动作类型10分类、目标单位50分类、目标位置100分类总输出维度只有160。这个降维效果非常显著。注意动作参数化虽然降低了输出维度但也引入了新的问题——不同维度之间的依赖关系。比如你选了“攻击”这个动作类型那目标位置就必须是敌方单位所在的位置不能是空地。DI-star通过掩码机制来处理这种依赖在预测每个维度时把不合法的选项屏蔽掉。4.4 训练流程从模仿到超越DI-star的训练分三个阶段。第一阶段是监督学习预训练。用大量人类高手的对局数据训练模型预测人类玩家的动作。这个阶段的目标是让模型学会基本操作比如怎么采矿、怎么造兵、怎么编队。这个阶段的数据量很大训练时间也最长。第二阶段是自我对弈强化学习。让模型和自己对打赢了给正奖励输了给负奖励。这个阶段的目标是让模型探索出超越人类的策略。因为人类数据里可能有一些次优的习惯自我对弈可以让模型摆脱这些限制。第三阶段是针对性微调。针对模型在自我对弈中暴露出的弱点设计特定的训练场景进行强化。比如模型如果总是被空投骚扰打崩就专门训练它应对空投的能力。这三个阶段的训练时间加起来在OpenDILab的分布式框架下大概需要几周时间。如果用单机训练可能要几个月。这就是工程框架的价值——它不能让你少写代码但能让你少等时间。5. 从游戏到产业决策智能的落地路径5.1 游戏AI的技术迁移逻辑很多人会问星际争霸打得好跟产业应用有什么关系这个问题问得好。游戏AI和产业AI之间确实存在一道鸿沟但这道鸿沟是可以跨越的。跨越的关键在于问题抽象。星际争霸的决策问题抽象出来就是在一个动态环境中有多个可控制的实体需要在资源约束下通过一系列决策达到某个目标。这个抽象框架和很多产业问题是对应的。比如物流调度多个配送车辆就是多个可控制实体配送路线就是决策序列时间和油耗就是资源约束准时送达就是目标。比如工厂排产多条产线就是多个可控制实体生产顺序就是决策序列原材料和产能就是资源约束按时交付就是目标。比如自动驾驶多个交通参与者就是多个实体驾驶动作就是决策序列安全和时间就是约束到达目的地就是目标。5.2 产业落地的三个关键适配把游戏AI的技术迁移到产业需要做三个关键适配。第一个是环境适配。游戏环境是现成的产业环境需要你自己搭建。你需要把真实的业务系统抽象成一个决策环境定义清楚状态是什么、动作是什么、奖励是什么。这个工作往往比算法本身更耗时。第二个是奖励适配。游戏里的奖励很明确——赢了1输了-1。产业里的奖励往往很模糊——什么叫“调度得好”是成本最低还是效率最高还是客户满意度最高这些目标之间可能还有冲突。奖励设计不好模型学出来的策略可能完全不符合业务需求。第三个是安全适配。游戏里AI做错决策大不了输一局。产业里AI做错决策可能造成真实损失。所以产业落地必须要有安全机制比如动作约束、人工兜底、渐进式上线等。5.3 OpenDILab在产业场景的扩展方向OpenDILab作为平台它的产业扩展方向主要有几个。一个是仿真环境建设。商汤在推动建立更多面向产业场景的仿真环境比如交通仿真、物流仿真、能源调度仿真。这些仿真环境可以让算法在虚拟世界里先跑起来验证效果后再上真实系统。另一个是算法工具链的完善。产业场景对算法的要求跟游戏不一样。游戏追求的是极致性能产业追求的是稳定可靠、可解释、可控制。OpenDILab在往这个方向补工具比如增加策略可解释性分析、增加安全约束模块、增加人机协同接口。还有一个是行业解决方案的沉淀。商汤在把DI-star上积累的经验封装成面向特定行业的解决方案。比如面向物流行业的智能调度方案、面向制造行业的智能排产方案。这些方案不是通用的而是针对行业特点做了深度定制。6. 实操避坑指南决策智能项目的常见问题6.1 奖励设计最容易翻车的地方奖励设计是决策智能项目里最容易翻车的地方。我见过太多项目算法没问题、工程没问题就是奖励设计得不对导致模型学出来的策略完全不能用。常见的奖励设计错误有几种。一种是奖励太稀疏模型跑了半天一个正奖励都没拿到根本学不动。解决办法是设计中间奖励比如在星际争霸里除了最终胜负还可以给击杀单位、占领资源点等中间事件奖励。另一种是奖励太密集模型学会了刷奖励比如一直采矿不进攻因为采矿有稳定的小奖励。解决办法是平衡短期奖励和长期奖励或者用奖励折扣因子来调节。还有一种更隐蔽的错误是奖励与目标不一致。比如你想让模型学会“高效调度”但你的奖励函数只考虑了“准时送达”结果模型学会了把所有资源都投入到最紧急的订单上导致其他订单全部延迟。这种问题需要通过多目标优化或者约束条件来解决。实操心得奖励设计没有银弹。我的经验是先设计一个粗略的奖励函数跑一个小规模实验观察模型学出来的策略然后根据观察结果调整奖励。这个过程通常要迭代好几轮。6.2 训练不稳定决策智能的顽疾训练不稳定是决策智能的顽疾。感知模型训练通常很稳定loss曲线平滑下降。决策模型的训练曲线经常是上蹿下跳有时候训练着训练着性能突然崩了。造成训练不稳定的原因很多。一个是数据分布漂移模型更新后采集的数据分布变了导致训练目标也跟着变。另一个是信用分配困难稀疏奖励下很难判断哪个动作导致了最终结果。还有一个是探索与利用的平衡探索太多学不到稳定策略探索太少又容易陷入局部最优。应对训练不稳定有几个实用技巧。一个是梯度裁剪限制梯度的大小防止参数更新过猛。另一个是目标网络用一个延迟更新的目标网络来计算价值减少训练目标的波动。还有一个是经验回放把历史数据存起来反复利用减少数据分布漂移的影响。6.3 评估困难怎么知道模型真的变强了决策智能的评估比感知智能难得多。感知模型用测试集算个准确率就行了决策模型不行。因为决策模型的性能依赖于对手、依赖于环境、依赖于初始条件。评估决策模型通常用几种方法。一种是固定对手评估让模型和一组固定的基准对手对战看胜率。另一种是自我对弈评估让模型和不同版本的自己对战看新版本是否稳定击败旧版本。还有一种是人类评估让人类玩家和模型对战看人类的感受。这几种方法各有优劣。固定对手评估的问题是基准对手可能不够强模型赢了也说明不了什么。自我对弈评估的问题是可能陷入循环新版本赢了旧版本但实际能力没提升。人类评估的问题是成本高、主观性强。注意评估决策模型时一定要用多个维度的指标。只看胜率是不够的还要看决策质量、资源利用效率、鲁棒性等。我见过一些模型胜率很高但决策过程很丑陋这种模型在产业场景里往往不可用。6.4 常见问题速查表问题现象可能原因排查方向解决思路模型完全不学习奖励设计错误检查奖励函数是否合理重新设计奖励增加中间奖励训练曲线剧烈波动学习率过大检查学习率和梯度大小降低学习率增加梯度裁剪模型陷入局部最优探索不足检查探索策略增加探索噪声使用熵正则化模型过拟合训练数据太少检查数据量和多样性增加数据使用数据增强推理速度太慢模型太大检查模型参数量模型剪枝知识蒸馏多智能体不协作信用分配错误检查多智能体奖励设计使用反事实基线集中训练分散执行7. 决策智能的未来从单点突破到系统能力7.1 多AI协作决策智能的下一个前沿DI-star展示的是单个AI在特定任务上的决策能力。但产业场景往往需要多个AI协作。比如一个智能工厂里有负责调度的AI、负责质检的AI、负责设备维护的AI这些AI需要协同工作。多AI协作的难点在于通信和协调。每个AI有自己的目标和信息怎么让它们共享信息、协调动作、避免冲突是个复杂的问题。目前学术界在研究的方向包括基于通信的多智能体强化学习、基于博弈论的协调机制、基于市场机制的资源分配等。商汤的OpenDILab也在往这个方向布局。它提供了一些多智能体算法的实现比如QMIX、MADDPG还提供了一些通信机制的实现。但多AI协作在产业里的落地还需要更多的工程实践。7.2 决策大模型把决策能力预训练出来大模型在感知和生成领域的成功让人开始思考决策能力能不能也预训练出来这个想法很有吸引力。如果能像训练GPT那样用海量决策数据预训练一个决策大模型然后针对具体任务微调那决策智能的门槛会大大降低。目前这个方向有一些初步探索。比如用离线强化学习从大量历史决策数据中学习通用策略用Transformer建模决策序列用对比学习学习状态表示。但这些探索还处于早期离实用还有距离。主要的挑战在于决策数据的获取比文本数据难得多。文本数据网上到处都是但决策数据需要和环境交互才能产生成本高、速度慢。另外决策任务的多样性也比文本任务大很难用一个统一的目标函数来预训练。7.3 人机协同决策智能的务实路径在完全自主的决策智能成熟之前人机协同是一条更务实的路径。人机协同的核心思想是AI负责处理大量常规决策人类负责处理异常情况和关键决策。这种模式在产业里已经有了一些应用。比如在金融风控里AI负责初步筛选人类负责复核可疑交易。在医疗诊断里AI负责初步筛查人类医生负责最终诊断。在物流调度里AI负责日常调度人类负责处理突发情况。人机协同对AI的要求跟完全自主不一样。它不要求AI做到100%正确但要求AI能够知道自己不知道——在不确定的时候主动请求人类介入。这需要AI有不确定性估计能力还需要有清晰的人机交互接口。OpenDILab在这方面也有一些工具支持比如不确定性估计模块、人机交互接口。但人机协同的落地更多是产品设计问题而不是算法问题。怎么设计交互流程、怎么分配决策权限、怎么建立信任这些都需要在实际场景中摸索。8. 我个人的一些实践体会做决策智能项目这些年踩过的坑比走过的路还多。有几个体会特别深。第一个体会是不要一上来就追求端到端。很多团队觉得端到端很酷直接从原始输入到最终决策。但实际做下来端到端往往训练困难、调试困难、解释困难。分层决策虽然看起来不够优雅但工程上更可控。DI-star也是分层决策的架构这说明分层是有道理的。第二个体会是仿真环境的质量决定项目上限。决策智能依赖大量交互数据这些数据主要来自仿真环境。如果仿真环境不够真实模型在仿真里学得再好上真实系统也会崩。所以做决策智能项目一定要在仿真环境建设上投入足够资源。第三个体会是评估比训练更重要。训练一个模型不难难的是知道这个模型到底行不行。我见过太多项目模型训练出来了但没人能说清楚它到底比基线好多少、在什么情况下会失效。这种项目上线后往往出问题。所以评估体系一定要在项目早期就建立起来。第四个体会是决策智能是系统工程不是算法竞赛。算法只是其中一环环境、数据、工程、评估、部署每一环都很重要。只关注算法忽略其他环节项目很难成功。最后分享一个小技巧如果你刚开始做决策智能项目建议从简单的环境入手比如CartPole、MountainCar这种经典控制问题。在这些环境上把整个流程跑通——环境搭建、算法实现、训练调参、评估部署——然后再迁移到复杂环境。这样虽然看起来慢但实际上快因为你在简单环境上踩的坑在复杂环境上一样会遇到但排查成本低得多。
阅读完成 · 觉得有帮助?