多智能体强化学习值函数分解:VDN、QMIX、QTRAN对比与选型 很多刚接触多智能体强化学习MARL的人第一个绕不开的问题就是团队里的每个个体都在按自己的策略做决策可全局的奖励却迟迟上不去问题出在哪如果你也卡在这个坎上那大概率需要认真了解一下值函数分解Value Function Factorization这条技术路线而VDN、QMIX、QTRAN正是这条线上最有代表性的三个名字。这篇内容我会把三种算法的设计动机、数学直觉、优势短板、适用场景一次性讲透并且会结合我实际跑实验时踩过的坑来补充一些代码和调参层面的经验而不是只停留在公式层面。无论你是刚入门MARL的研究生还是在工程里被多智能体协作问题折磨的工程师这篇都应该能帮你建立起一个清晰的选择框架。1. 为什么需要值函数分解全局奖励与局部决策的矛盾1.1 从团队赢了我该怎么动说起先想一个最简单的场景两个机器人要合力把一个箱子推到目标点但每个机器人只能看到自己面前的局部地形看不到队友的位置。环境给予的奖励是团队共享的——箱子到达目标点两个机器人同时获得正奖励箱子卡住两个机器人同时得不到奖励。问题来了每个智能体的策略网络或者Q网络输入的都是各自的局部观测可奖励却来自全局状态。如果每个智能体只顾着自己眼前的Q值最大化很容易出现各动各的、互相拆台的局面。比如一个机器人往左推另一个往右推箱子原地不动谁都拿不到奖励。这就引出了MARL里最核心的矛盾决策是分布式的每个智能体独立决策但学习目标是全局的整个团队的收益。1.2 集中训练、分布执行为什么是主流为了解决这个矛盾学界和工业界形成了一套主流范式CTDECentralized Training with Decentralized Execution也就是集中训练、分布执行。这个范式很好理解训练的时候我们是上帝视角可以把全局状态、所有智能体的观测和动作都拿来用训练出一个联合价值函数或者联合策略但部署的时候每个智能体只能靠自己的局部观测做决策不能依赖全局信息。这就带来了一个技术需求我们需要设计一种方法让全局最优和局部最优之间建立起可靠的关系。具体来说就是当每个智能体都根据自己的局部Q网络选出最优动作时这个联合动作在全局Q函数里也应当是最优的。值函数分解就是干这件事的。1.3 值函数分解在这一框架下的位置值函数分解的思路非常直觉如果全局的联合Q值 ( Q_{tot}(s, a) ) 可以被表示成某种个体Q值的组合那么在执行阶段每个智能体只需要计算自己的 ( Q_i(o_i, a_i) )取argmax就能保证整体动作是最优的。VDN、QMIX、QTRAN三种算法本质上就是对这个组合方式给出了三种不同的答案。它们都可以看作是在CTDE框架内用不同的结构去拟合全局Q函数与个体Q函数之间的关系。搞懂了这一点你再看它们的公式和网络结构就会清晰很多。2. 它们共同的安全网IGM一致性原则2.1 什么是IGM为什么要死磕这个原则如果你读过几篇值函数分解的论文大概率会碰到一个叫IGM的缩写全称是Individual-Global-Max个体全局最大化一致性。这个原则是VDN、QMIX、QTRAN共同的理论地基没有它这三种算法都站不住脚。IGM的定义可以这样理解对于任意全局状态 ( s ) 和联合动作 ( a )如果全局Q值的argmax恰好等于每个智能体各自Q值的argmax的组合那么这个系统就满足IGM原则。用大白话说就是每个智能体选自己觉得最好的动作组合在一起恰好就是全局最好的动作。这个要求看起来理所当然但在数学上非常强因为它要求个体Q值和全局Q值之间有一个非常严格的保序关系。一旦满足IGM分布执行的安全性就有了保证——你不必担心智能体各自为战导致全局效果变差。2.2 三种算法如何在实现中落实IGMVDN用最简单的加法来满足IGM( Q_{tot} \sum_i Q_i )。因为如果每个 ( Q_i ) 都取最大值那么它们的和自然也是最大值IGM自然成立。QMIX用单调性来满足IGM它要求全局Q值对每个个体Q值都单调不减( \partial Q_{tot} / \partial Q_i \ge 0 )。这样当每个 ( Q_i ) 都达到最大值时( Q_{tot} ) 也必然达到最大值IGM同样成立但Q_{tot}的表达能力比加法强了不少。QTRAN想得更远它希望在更弱的假设下也能满足IGM通过引入一个状态价值的修正项来绕开单调性的限制理论上可以表达更多的任务类型。这里我建议你在读下面每一节时都时刻把IGM放在脑子里这个算法的结构是如何保证IGM的为了这个保证它付出了什么表达力上的代价这两个问题想清楚了VDN、QMIX、QTRAN之间的差异就自然浮出水面了。3. VDN的加法世界简单有效但天花板太低3.1 VDN的核心结构联合价值等于个体价值之和VDNValue Decomposition Networks是2017年提出的它做的事情非常朴素直接把全局Q值定义为所有智能体个体Q值的和。[ Q_{tot}(\tau, a) \sum_{i1}^n Q_i(\tau_i, a_i) ]这里的 ( \tau_i ) 是第 i 个智能体的观测历史或当前观测。每个智能体维护自己的一个Q网络输入自己的观测输出各个动作的Q值训练时把所有人的输出加起来用全局奖励去监督这个加和。这个结构有几个非常明显的好处实现极简单不需要设计复杂的混合网络个体Q网络加一个求和操作就完了。训练稳定梯度从 ( Q_{tot} ) 反向传播到每个 ( Q_i ) 时梯度路径清晰不容易出现数值问题。可扩展性好智能体数量增加时只是多加几个Q网络复杂度自然增长。我第一次实现VDN的时候整个训练代码量不到QMIX的一半而且它在一个多智能体协作搬运的玩具环境里表现相当不错。如果只是想验证一个环境或者任务设定是否合理VDN绝对是最快的baseline。3.2 加法假设在哪些任务上会直接失效加法分解的问题也非常明显它假设个体Q值对整个团队价值的贡献是可叠加的可现实中的协作关系往往是非线性的。举个最经典的例子两个智能体分别控制两个开关只有两个开关同时按下门才会打开并获得奖励。如果智能体1按下开关、智能体2没按门不开单智能体Q值 ( Q_1 ) 对应的实际回报很低反过来也一样。而两个开关同时按下的回报并不是单开关回报的简单相加。VDN在处理这种协作触发器式的任务时会因为加法结构的表达力不足而无法准确建模真实的 ( Q_{tot} )。本质上它只能表达个体效用函数之间的相加关系而对于乘积交互互补依赖这类非线性关系加性分解就抓瞎了。还有一个实际训练中常见的问题VDN在训练过程中如果某个智能体的Q值方差特别大会直接污染其他智能体的学习信号因为它是一股脑全部加起来做梯度回传的。我在一次实验里就遇到过这样的情况环境里有个捣乱智能体动作噪声极大结果所有智能体都学不好换成QMIX后明显缓解。所以VDN的定位应该是简单、稳健的baseline适合任务中智能体之间的交互是近似独立或者弱耦合的场景。一旦发现个体行为之间存在明显非线性协同就该考虑更强的分解方式了。4. QMIX的单调性补丁实践中能打理论上受限4.1 混合网络做了什么从加法到非线性QMIXQMIX: Monotonic Value Function Factorisation for Deep Multi-Agent Reinforcement Learning2018是值函数分解家族里最有名、被引用最多、实战表现也最稳的一种。它没有再让个体Q简单相加而是引入了一个混合网络Mixing Network把个体Q值映射成全局Q值。具体结构上QMIX由三部分组成Agent网络每个智能体的Q网络输入观测输出个体Q值 ( Q_i )。混合网络接收所有个体的 ( Q_i ) 以及一个由全局状态 ( s ) 生成的权重最终输出 ( Q_{tot} )。超参数网络Hypernetwork输入全局状态 ( s )生成混合网络的权重和偏置。这里最精妙的设计是混合网络的权重由全局状态动态生成且所有权重被强制为非负的。这样 ( Q_{tot} ) 对每个 ( Q_i ) 的偏导数要么为正、要么为零从而保证了单调性。4.2 单调性约束为什么能保证一致性单调性的价值在于它建立了一个个体变好全局就变好的保序关系。具体推理是如果每个 ( Q_i ) 都在自己的动作空间上选了最大值那么由于 ( Q_{tot} ) 对每个 ( Q_i ) 都是单调不减的此时 ( Q_{tot} ) 也必然取到最大值。这就是QMIX满足IGM的方式。它比VDN的加法表达力更强因为即使权重非负混合网络本身仍然是一个非线性函数可以建模智能体之间的非线性交互只是这种交互必须满足单调的方向约束。实际表现也确实亮眼在SMAC星际争霸多智能体挑战的多个地图上QMIX稳定地优于VDN成为了MARL领域论文里最常见的对比基线之一。我个人的体感也是如此在需要智能体之间有协同、但又不需要互相牺牲的任务里QMIX往往很快就能得到不错的表现。4.3 QMIX的短板交互方向冲突时怎么办QMIX的单调性假设虽然带来了稳定性和实用性但也给它的表达力画了一条天花板它假设所有智能体对全局价值的贡献方向是一致的。什么意思呢设想一个任务中智能体A需要故意做一件表面上降低自己局部回报的事来给智能体B创造机会。在这样的情况下( Q_{tot} ) 对 ( Q_A ) 的偏导在某个局部区域应当是负的——A的个人Q值降低但全局Q值反而升高。可单调约束不允许这种情况发生。经典的验证例子是开关倒置switch任务两个智能体分别需要决定打开或关闭自己的开关最优策略是一个开、一个关。如果两个智能体都选开或都选关全局回报就低。这种策略组合里的个体Q值和全局Q值之间存在明显的此消彼长关系单调性假设就彻底失效了。我在复现QMIX并测试这类角色分化任务时观察到的现象是训练曲线一开始还能上升但始终无法达到理论最优值策略会陷入一种两个开关都开的次优平衡因为QMIX的单调约束让网络很难表达A降、B升才能让全局最优这一类结构。所以QMIX的适用场景应该是智能体之间有非线性协作、但整体方向一致的任务。它非常适合做默认选型但如果你明确知道任务里存在利益冲突或角色互换式的协作模式就要警惕单调性假设会不会成为瓶颈。5. QTRAN的理论完备与工程灾难想证明全对却处处不稳5.1 QTRAN想打破什么从加法和单调到一般映射QTRANQTRAN: Learning to Factorize with Transformation for Cooperative Multi-Agent Reinforcement Learning2019的出现就是为了挑战QMIX的单调性假设。QTRAN的作者指出了一个关键点单调性只是IGM的充分条件并不是必要条件。也就是说即使 ( Q_{tot} ) 对某个 ( Q_i ) 不是单调的IGM依然可能成立。QMIX因为给自己加上了单调这个限制实际上丢掉了一大类可以用值函数分解解决的问题。QTRAN的做法是引入一个可学习的转换函数 ( f(s) )让真实的 ( Q_{tot} ) 和个体Q值之和之间建立一层更灵活的关系。它不再要求 ( Q_{tot} ) 等于 ( \sum Q_i ) 的某个单调函数而是引入一个带有状态价值修正项的约束通过优化这个约束来间接满足IGM。在思路上QTRAN比VDN和QMIX都更接近一般完备解理论上它可以在不依赖强结构假设的情况下恢复任意满足IGM的联合Q函数。这在当时的理论分析上是非常漂亮的。5.2 为什么理论上更完备实战却经常拉胯然而我在实际复现和测试QTRAN时体验和QMIX形成了鲜明对比理论很美工程很痛。QTRAN的主要问题集中在这几点训练极不稳定QTRAN需要同时优化多个目标包括原始Q函数、转换后的辅助Q函数、以及它们之间的约束项。多目标之间的平衡很难拿捏训练曲线经常大幅震荡。对超参数极其敏感约束项的权重系数、辅助网络的结构设计、学习率之间的微小变化都会导致结果剧烈波动。我做了一组消噪实验仅仅把约束项系数从1.0改成0.5同一张地图上的成功率就从75%掉到了不到30%。收敛速度慢由于有额外的辅助优化目标QTRAN达到同样性能所需的环境交互步数通常明显多于QMIX。更麻烦的是QTRAN在复杂场景下的实际表现经常不如QMIX哪怕任务本身存在非线性交互。这背后的原因和我在前面提到的IGM实现方式有关QMIX通过结构非负权重网络直接保证了单调性而QTRAN是通过一个软约束去逼近IGM逼近过程本身就有误差误差累积以后训练出的个体Q网络在分布执行时会出现局部最优和全局最优偏离的问题。所以对QTRAN的正确认知应该是它证明了可以在不依赖单调假设的情况下做分解这条理论路径但它不是一个拿来即用的工程算法。它的价值更多体现在启发后来的工作比如QPLEX等而不是作为日常实验里的主力算法。读论文时理解QTRAN的思想非常有价值但如果你在做一个实际项目一开始就把QTRAN作为首选算法很可能踩进调参的泥潭里出不来。6. 一张表直接看懂三种算法的定位差异为了帮你快速建立对比视角我把VDN、QMIX、QTRAN在几个关键维度上的差异整理成了一张表对比维度VDNQMIXQTRAN分解形式加法( Q_{tot} \sum Q_i )带权混合网络权重非负引入状态修正项的一般映射IGM实现方式直接成立和取argmax通过单调性约束保证通过软约束近似逼近表达非线性交互弱中限单调方向强理论完备训练稳定性高高低实现复杂度低中高超参数敏感度低中高适用场景弱耦合协作非线性协作但方向一致存在非单调交互的理论研究实战推荐度适合做baseline默认首选谨慎使用从这张表可以得出一个非常直接的结论如果你不知道该选哪个先用QMIX如果任务简单、交互弱VDN足够只有在验证算法思想或处理特定非单调任务时才需要考虑QTRAN。另外值得提一句的是近年来值函数分解的方向已经有了一些更新的变体比如QPLEX通过优势函数分解来突破单调性限制还有基于图网络的分解方法、基于Transformer的分解方法等。但不管后面的花活怎么变它们的理论基础都离不开VDN、QMIX、QTRAN这三块基石尤其是IGM原则始终是判断算法有效性的核心标尺。7. 选型与调参我踩过的坑和可复用的经验7.1 先跑VDN再换QMIX别一上来就挑战高难度每次有人问我做多智能体协作任务应该用什么算法我的第一反应都是先用VDN把环境reward设计、观测空间、动作空间这些基础检查做好再上QMIX。这不是说VDN有多强而是因为它简单、稳定非常适合用来排查环境本身有没有问题。如果连VDN在这个环境里都完全学不出任何有效策略那大概率不是算法的锅而是环境奖励太稀疏、观测信息不足或者状态表示不合理。这些问题不先解决后面换更复杂的算法只会更迷茫。我自己就吃过这个亏有一段时间在自定义环境里直接上QMIX结果训练曲线一直平台期折腾了一周发现是reward里有个符号写反了环境根本没给到正确的梯度信号。换成VDN做冒烟测试之后几分钟就定位出了问题。7.2 QMIX调参的几个关键旋钮当你确认环境本身没问题后如果QMIX仍然表现不佳按以下顺序排查通常效率最高混合网络的学习率实验里我发现混合网络和agent网络的学习率应该分开设置混合网络稍微低一点比如agent网络用1e-4混合网络用5e-5往往更稳。因为混合网络参数量小且直接决定全局Q值学习率太大容易震荡。探索率衰减速度QMIX依赖充足的探索来收集多样化的经验探索率衰减太快会出现策略早熟衰减太慢则收敛慢。一般建议衰减周期设为训练总步数的60%-70%。target网络软更新系数默认的tau0.005在某些任务上偏小导致目标Q值更新过慢。如果发现训练曲线有滞后性震荡可以试着把tau加大到0.01-0.02。经验回放buffer大小多智能体场景中最怕数据分布偏移buffer太小时个体Q网络容易被局部经验带偏建议至少覆盖最近10万条以上转移样本。7.3 警惕个体Q学好了联合Q还是不对的陷阱用QMIX的时候还有一个很容易被忽略的坑单个智能体的Q值可能已经学得很好但混合网络没有把全局信息有效利用起来。我在一个需要智能体按角色分工的任务里遇到过这样的情况单独看每个agent网络的Q值曲线都已经收敛得漂漂亮亮了可整体的任务成功率就是上不去。后来排查发现问题出在混合网络的输入侧——它只顾着拟合 ( Q_{tot} ) 的数值却没有把角色分工这个结构性信息编码进来。解决办法是改进了超参数网络的结构让全局状态生成权重时对不同的智能体进行更细粒度的区分并且把智能体自身的embedding一并输入到混合网络中。改动之后训练曲线明显好了很多。这个经验也提醒我即使QMIX本身是通用算法具体到任务上还是值得针对性地调整混合网络的信息注入方式的。7.4 什么时候才需要考虑QTRAN这类复杂变体最后说一个选型上的原则算法复杂度永远应该跟着任务复杂度走不要为了先进而上更重的模型。如果任务本身只是几个智能体的简单协同VDN就能胜任没必要上QMIX如果QMIX已经完全够用也没必要执着于QTRAN或QPLEX。QTRAN更适合出现在论文研究和理论探索中而不是生产环境的默认配置。当你确实遇到了单调性假设解决不了的任务时我更建议先看看QPLEX或者基于Transformer的分解方式它们在不牺牲稳定性的前提下比QTRAN更容易落地。我在跑实验时还有一个习惯每次换新算法之前都会把同一组超参数先在VDN和QMIX上各跑一遍作为对比基线。这个操作成本很低但能帮你快速判断新算法带来的增益是真的还是仅仅因为随机种子和调参运气。多智能体强化学习的方差本来就大没有基线对照的结论往往是靠不住的。