MADRL - COMA, VDAC
多智能体强化学习算法 - COMA, VDAC (Algorithm & Code)
1. COMA算法
1.1. COMA算法原理
COMA算法构建了AC算法的“值分解”类似的架构。
COMA算法的核心特点包括:
- 使用一个集中式的critic网络,在训练的过程中可以获取所有智能体的信息;
- 采用 counterfactual baseline (CB,反事实基线)来解决信用分配的问题(类似于值分解);
- Critic网络要能够对CB进行高效计算。
在任务协作的多智能体系统中,奖励函数是全局共享的(所有智能体共享奖励信号),因此只需要设置一个critic网络。这导致所有的智能体优化目标完全一致。对每个actor网络而言,从critic网络反向传播过来的误差是相同的。这种“吃大锅饭”式的训练方式显然是低效的,因为每个actor网络对整体性能的贡献是不一样,贡献大的反向传播的误差应该要稍微小些,贡献小的其反向传播误差应该要大一些。这同时造成了“懒惰智能体”的现象:一些智能体因为对整体贡献不大,出现消极训练。
回顾一下,在基于值分解的方法中,各个智能体的贡献通过对Q值进行分解,并反馈到到各个智能体来衡量的。在COMA中,研究对象是AC算法。作者的思路是利用critic网络输出的Q值,Q值分解利用CB。
具体来说,作者受到了差分奖励 (difference rewards) 思想的启发。智能体 执行动作 的贡献,是通过它在同等条件下执行一个设定的的默认动作 来衡量的。这里的同等条件是指相同状态且其他智能体依然保持动作不变。
EXAMPLE: 表示智能体 执行动作 后获得的Q值,其中 表示其余智能体的动作集合; 表示智能体 执行默认动作 后获得的奖励。这两个奖励值的差值, 定义为智能体 执行动作 后对整体Q值的贡献。此处的 就是CB。这个差值越大,说明智能体 的贡献越大。
问题的关键是,默认动作并不好确定。
作者的解决方案是直接利用actor网络的输出来确定这个默认动作。具体来说,critic网络的输入包括 和 ,输出是 。COMA的做法是以智能体 的Q值期望来代替 CB。贡献度 形式化的表述是:
图1. COMA算法的结构
我们结合图1(c),再来体会一下公式(1)。图1(c)给出了COMA算法中critic网络的设计细节。
它的输入是:
- ,当前全局状态;
- ,智能体 的局部观测;
- ,当前智能体的编号(文中假设智能体同质,所有智能体共享critic和actor网络参数,在critic引入一个区分位来区分不同的智能体);
- ,所有智能体在 时刻的动作集合;
- ,除了智能体 之外,所有智能体在 时刻的动作集合;
输出是,,表示智能体 在 时刻的各个工作的 Q 值。它们就是公式 (1) 中的 。
REMARK:
- 如何得到?
- 为何critic网络同时输入了 和 ? 是全局状态, 是智能体 对于全局状态从自身视角出发的局部观测。这两个信息在很多环境下并不相同,都是需要的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?