直接上方法部分,前面的有时间再补。
主要思路:为每一个agent learn一个critic来选择性的关注来自其他agent的信息。
形式化:
第 个agent的Q函数表示为 其中 , 。 是一个双层的densenet, 是一个单层embedding函数。来自其他智能体的贡献通过加权求和后用 表示:
很容易看出, 就是智能体 对 的影响, 是加权系数。那这个 到底怎么计算?系数怎么确定?
先说用于描述其他智能体信息的,实际上是对智能体 的embedding,表达式为 。这里面的 和式(1)里面的定义的embedding函数是一样的,其输出左乘一个矩阵 (相当于变换 作用于嵌入函数)。而 函数则是逐元素的激活函数(文章里面使用的leaky ReLU)。
再说注意力机制的权重 ,直接看定义
即通过比较智能体 与 的嵌入,来确定,其中 。具体来说, 将 变为一个query, 将 变为一个key。(看表达式,列向量转置变成行向量,与经过两个变换后的行向量相乘,形式上就得到了标量,因为 和 基于相同的嵌入函数因此有相同的维数,且元素为二进制)。最后再来个softmax,并使用两个矩阵的维数进行归一化,防止梯度消失。
现在可以放Q函数的结构图了
Critic更新是通过最小化联合回归函数实现的
其中 , 和 表示目标Critics和目标policies, 用来平衡最大熵和回报。
Policy的更新的梯度计算方法为
上面这个公式,最基本的形式是 (原理参考这里),式(6)中基本思路是用 代替 ,实际使用了多智能体场景下的优势函数[1] 其中,
多说一句这个 ,表示固定其他智能体动作下某个动作的值函数的期望,这也是一种多智能体贡献分配的解决方案。进一步,在计算时是这样求期望的
(1)设计实验study the scalability
这部分实验使用的是Cooperative Treasure Collection这一env。这个环境以及后面另一个实验的环境都是基于multiagent particle environment framework。
(2)设计实验evaluate attention mechanism
这部分实验使用了一个叫做Rover-Tower的env
results
直接贴两个实验中Mean Episode Rewards训练曲线。
analysis
(1)Impact of Rewards and Required Attention分析了attention的作用并解释了右边的曲线中uniform MAAC比MADDPG差的原因:cooperative下rewards是all agents共享的,因此单个智能体的critic不需要聚焦来自其他智能体的信息来获取更高的reward(这一解释。。。感觉一般吧,可能是我没看懂\狗头);此外单个智能体的局部信息用来预测已经可以得到很好的分数了(既然足够了,MAAC还是比uniform MAAC好啊,这个回头再去看看代码)。
实验1(Cooperative Treasure Collection)中,场景设定是完全合作,每个智能体可以观察到全局的信息。在代码中,n_visible=7,表示每个智能体可以看到7个其他智能体和treasure。那么partial obsevation会不会使性能变差呢?于是分别设定n_visible=1、2、3、4、5、6,7,得到曲线如下。结果显示部分可观测时的回报比全部观测更高,这不符合常识,我们一般认为完全观测做出的决策会更优。代码里面有一个距离远近的排序,对于collector而言,知道离自己最近的几个treasures和agents已经足够了,所以n_visible=1、2、3的时候回报比较高?
(2)scalibility
直接看图,,,
MAAC
--algorithms
----attention_sac.py#算法
--envs
----mpe_scenarios
------fullobs_collect_trasures.py#从名字就能看出,这个是完全观测的,不是partial obs
------multi_speaker_listener.py#这两个场景和maddpg里面的场景基本一样
--utils
----agents.py
----buffer.py
----critic.py
----env_wrappers.py
----make_env.py
----misc.py
----policies.py
--main.py
(1)Cooperative treasure collections
场景描述:包含8个智能体(6个hunter(代码里面叫做collector),2个bank),其颜色和不同treasure颜色相对应(一样)。treasure有6个,每一个被收集者收集后会随机重生。hunter的任务就是收集treasure然后deposit(跑过去)到bank,而bank的任务就是尽可能多的收集hunters的treasure。
奖励设置:
对于hunter而言,既有共享奖励,又有属于自己的奖励:(a)收集到treasure它自己会得到全局的reward;(b)deposit会使得所有agents获得reward; (c)碰到其他agents则惩罚。
观测空间:np.concatenate([[位置(x,y)], [速度(v_x,v_y)], [收集到的treasure的类型编码(bank没有这个元素)], [离其他智能体的距离、速度、agent编码], [到treasures的距离、treasure类型编码]]),hunter的obsp一般是86维,bank的obsp是84维。
动作空间:one-hot:[上,下,左,右,stay]。
Optimizing Sequential Experimental Design with Deep Reinforcement Learning
GraphGPT: Graph Instruction Tuning for Large Language Models