QMIX(2018):单调值函数分解强化学习
1 、研究背景和动机
一、先给你一句“人话版结论”
QMIX 研究的是: 在一群人必须各自独立行动的情况下,能不能用一个“聪明的总评分规则”,让每个人只顾把自己做好,最终团队一定不会跑偏。
二、问题从一个“团队打游戏”的故事开始
场景:五个玩家一起打副本(纯合作)
- 每个人:
- 只能看到自己屏幕的一小块
- 自己操作角色(走位、攻击)
- 副本结束:
- 只给一个“团队评分”
- 没有“个人得分”
三、第一种天真做法:各练各的(IQL)
比喻版本
“别管别人,你就假装自己一个人打游戏,看自己按什么键之后,团队评分高,就多用这个操作。”
会发生什么?
- A 在练走位
- B 在练输出
- C 在乱跑探索
- D 在换打法
- E 也在试新东西
环境天天在变 “昨天这个操作还行,今天怎么不行了?”
四、第二种极端:一个“总指挥大脑”(集中式 Q / COMA)
比喻版本
“算了,你们都别自己想了 我来做一个超级教练 看全场录像、所有操作 告诉你们: ‘你们五个人一起按这五个键,最好’。”
问题来了
- 五个人
- 每人 10 个操作
- 算法复杂
- 信号嘈杂
- 学起来慢
五、第三种尝试:简单加分制(VDN)
比喻版本
“那我这样打分吧: 团队总分 = A 的表现 + B 的表现 + C 的表现 + ……”
- 每个人都有一个“个人评分器”
- 团队分 = 所有人分数相加
好处
- 每个人只看自己分数
- 执行超级简单
- 稳定、好学
但问题是……
“单看个人,都一般 配合在一起,突然很强”
- A 抗伤害
- B 输出
- C 控制
只会算“1+1=2”的合作
六、QMIX 的关键顿悟(非常重要)
我们真正需要的,不是把团队分数“完全拆开”,而是保证“做决策时不会冲突”。
我不在乎你们的分数是怎么合成的,我只在乎:“每个人各自选最好的操作, 拼在一起是不是团队最优?”
七、QMIX 的核心比喻:
“只要总评分规则是单调的,就不会带偏团队”
什么叫“单调”?用人话说:
你个人表现变好, 团队评分绝对不会因此变差。
一个“团队评分器”, 它可能很复杂、非线性、弯弯绕绕, 但它有一条铁律:任何一个人变强,团队一定不会吃亏。
一个非常直观的生活类比
- 每个人有自己的绩效分
- 公司总绩效不是简单相加
- 可能有协同
- 有加权
- 有非线性规则
“只要你个人绩效更好,公司总绩效绝不会因此下降。”
八、为什么这个想法“刚刚好”?
它同时解决了三件事:
✅ 1. 可以集中训练
- 训练时:
- 用全局状态
- 用复杂网络
- 用“聪明”的评分规则
✅ 2. 执行时完全去中心化
- 每个人只看:
- 自己的局部 Q
- 各自选:
- 自己最优动作
✅ 3. 比 VDN 表达力强得多
- 不只是加法
- 可以学复杂协作
- 但仍然安全可拆
2、模型网络结构
一、先给你一张“全局地图”(对应图 b)
图 (b) 在说什么?
Agent 1 Agent 2 ... Agent N
↓ ↓ ↓
Q1 Q2 ... Qn
↓↓↓
Mixing Network
↓
Q_tot
每个 Agent 只负责算“我自己现在干这件事好不好”,Mixing Network 负责把这些“个人判断” 合成为一个“团队判断”。
二、先从最简单的地方讲:Agent 网络(图 c)
图 (c):每个 Agent 自己的小脑袋
1️⃣ Agent 能看到什么?
- 自己的局部观测 ota
- 自己上一步做了什么 ut−1a
2️⃣ Agent 内部在干什么?
(o_t^a, u_{t-1}^a)
↓
MLP
↓
GRU ——> h_t^a(记忆)
↓
MLP
↓
Q_a(τ^a, ·)
- MLP:把“我现在看到的东西”整理一下
- GRU: 👉 帮 Agent 在心里记住: “刚才发生了什么,我现在大概处在什么局势”
- 输出:
- 对自己所有动作的 Q 值
每个 Agent 都在问: “在我自己看来,现在选哪个动作对我最好?”
3️⃣ 执行阶段怎么选动作?
- Agent 自己:
- 对 Qa做
argmax - 加一点 ε-探索
- 对 Qa做
三、关键创新来了:Mixing Network(图 a)
1️⃣ Mixing Network 是干嘛的?
把所有 Agent 的 Q 值 合成一个团队 Q:Qtot
2️⃣ 一个非常重要的比喻(先理解直觉)
- 每个 Agent 的 Q: 👉 是“我自己现在打几分”
- Mixing Network: 👉 是“公司如何根据个人表现算总 KPI”
- 很复杂
- 非线性
- 会随“公司当前局势”变化
任何一个员工评分提高, 公司总评分绝不会下降。
3️⃣ 这条铁律在图里怎么体现?
🔴 红色部分:Hyper Network(超网络)
🔵 蓝色部分:Mixing Network(混合网络)
Hyper Network 在干什么?
- 输入:全局状态 st 👉 只在训练时能看到
- 输出:
- Mixing Network 的权重 W1,W2
- 偏置项
局势分析员 根据当前战场局势, 动态调整“公司算分规则”。
为什么权重要是“非负的”?
所有权重 ≥ 0
非负权重意味着什么?(非常重要)
如果某个 Agent 的 Q 变大, 那么 Q_tot 一定不会变小。
4️⃣ Mixing Network 自己在干什么?
- 输入:
- Q1,Q2,…,Qn
- 用 Hyper Network 生成的权重
- 输出:
- Qtot
一个“带保险的加权组合器”
- 权重可以变
- 结构可以复杂
- 但永远不做“坑队友”的事
四、把三张图连成一个完整“动画”
⏱ 时间步 t 发生了什么?
① 每个 Agent(图 c)
- 看自己的局部观测
- 用 GRU 和记忆
- 算自己的 Qa
- 选动作 uta
② 环境执行动作
- 所有动作一起执行
- 给一个 共享奖励 r
③ 训练时(图 a + b)
- 所有 Agent 的 Qa 被送进 Mixing Network
- 全局状态 sts_tst 送进 Hyper Network
- 动态生成 Mixing Network 的权重
- 得到 Qtot
④ 用 Qtot做 DQN 更新
- TD 误差
- 回放缓冲区
- 标准 Q-learning
执行阶段会发生什么?
每个 Agent 的小脑袋 各自 argmax 自己的 Q
五、你现在该“真正理解”的 3 个关键点
✅ 1️⃣ QMIX 不是在算“你贡献了多少”
“我保证你各自贪心选,不会毁掉团队最优。”
✅ 2️⃣ Hyper Network 的作用不是通信
让“团队评分规则”随局势变化
✅ 3️⃣ 单调性是 QMIX 一切设计的核心
个体变好 → 团队不可能变差
六、用一句话帮你“记住这张图”
**QMIX 的结构 =多个“只看自己”的 Agent
- 一个“看全局、但永远不会坑人的”混合评分器。**