阅读Qatten:A General Framework for Cooperative Multiagent Reinforcement Learning

写在前面:还是那句话,不要怕理论,一个知识点一个知识点地理解。胡适说:“怕什么真理无穷,进一步有一步的欢喜”。


题目作者

在这里插入图片描述
2020.06,arXiv,v2。天津大学Jianye Hao老师组的工作,一作的Yaodong Yang也很厉害,可以重点关注郝老师他们组里的工作。

摘要

这篇同样是值分解路线下的一篇工作,作者认为之前的VDN,QMIX将 Q t o t , Q i Q_{tot},Q_i Qtot,Qi之间的关系做了假设限制(加性、单调),且缺少理论分析,而QTRAN虽然没有限制二者的关系,但是比较难优化求解,在实际QTRAN的使用中往往是松弛了一些约束最终导致实验的性能不是特别好。在本篇工作里,作者从理论上推导了 Q t o t , Q i Q_{tot},Q_i Qtot,Qi之间的关系,然后据此提出了一个基于attention的值分解框架Qatten。

方法

理论证明

重要理论推导⬇,作者证明了 Q t o t , Q i Q_{tot},Q_i Qtot,Qi之间关系应该为:在这里插入图片描述
具体的证明论文里有,简单写一下:
参考知乎的这篇文章: 知乎
在这里插入图片描述
再加上附录里这段证明:
在这里插入图片描述
注知识点:公式13是多元函数在0点的泰勒展开形式。

实际方法

认真看这个式子:
在这里插入图片描述
Q t o t Q_{tot} Qtot看似是 Q i Q_i Qi的加权线性组合,当然这里的 λ i . h \lambda_{i.h} λi.h和其他智能体Q有关,在这里作者使用了attention机制来逼近 λ \lambda λ,具体的算法框架图:
在这里插入图片描述
λ \lambda λ是用全局状态和每个智能体的特征算的attention,在这个框架的左上角有两种对h求和的方式,一种是直接加,一种是加权组合,从后续的Ablation Study中加权组合的性能更好,作者认为这种加权的组合可以更好描述 Q t o t Q_{tot} Qtot Q i Q_i Qi之间的关系,缓解了注意力机制所加的boundedness,(可能提供了对每个 Q i Q_i Qi权重的上界和下届吧)。

实验

在相对复杂的SMAC地图上和其他sota算法的比较:
在这里插入图片描述

写在后面

其实粗鲁一点看Qatten,尤其是不加对h再次组合的部分,感觉好像是VDN的加权组合版本,但是当然attention机制的表示性是非常强大的,从实验上也能看出这种框架相比VDN还是很有优势的,这个后续可能可以深入研究推广;另外作者从理论上分析了 Q t o t Q_{tot} Qtot Q i Q_i Qi之间的关系,而且在这个框架上由 λ \lambda λ可以看出 Q t o t Q_{tot} Qtot对于不同智能体的关注,相比QMIX的黑箱,对于理解总的价值函数和每个智能体的关系、对于算法的可解释性都有一定的帮助,实验结果那里也有一定的可视化分析感兴趣的朋友可以再看看。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`cuda::memcpy_async` 和 `cooperative_groups::memcpy_async` 都是异步的内存拷贝函数,但是它们的使用场景和特点略有不同。 `cuda::memcpy_async` 是 CUDA Runtime API 中提供的异步内存拷贝函数,它可以在主机和设备之间进行数据拷贝,并且可以在拷贝过程中执行其他的 CUDA 操作。这个函数的使用方法和 `cudaMemcpy` 类似,但是需要额外传入一个 `cudaStream_t` 参数来指定使用的 CUDA 流。与 `cudaMemcpy` 不同的是,`cuda::memcpy_async` 不会阻塞主机线程,而是立即返回并在后台执行数据拷贝。因此,它可以提高程序的并发性能,特别是在数据量较大的情况下。 `cooperative_groups::memcpy_async` 是 CUDA cooperative groups 库中提供的异步内存拷贝函数,它是在协作线程组(cooperative thread groups)中进行的数据拷贝。与 `cuda::memcpy_async` 不同的是,这个函数只能在协作线程组中使用,而且需要传入一个 `cooperative_groups::coalesced_group` 参数来指定线程组。由于协作线程组中的线程可以协同工作,因此这种方式可以进一步提高内存拷贝的效率。 综上所述,`cuda::memcpy_async` 和 `cooperative_groups::memcpy_async` 都是异步内存拷贝函数,但是使用场景和特点略有不同。`cuda::memcpy_async` 可以在主机和设备之间进行数据拷贝,并且可以在拷贝过程中执行其他的 CUDA 操作;而 `cooperative_groups::memcpy_async` 则是在协作线程组中进行的数据拷贝,可以进一步提高内存拷贝的效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值