文章目录
- 前言
- 一、如何产生这个想法
- (TRPO -> ) PPO -> MAPPO -> HAPPO -> MAT
- 二、多智能体优势值分解定理
- 三、transformer 在MAT的应用
- 四、伪代码简述
- 五、实验效果
前言
正好有节课让我们调研最新的自己的方向的新论文,找到一篇自己觉得比较可行,效果看起来比较好的论文CommFormer
https://arxiv.org/pdf/2411.00382,发现他又是基于之前的论文改进的,于是就查到了MAT和HAPPO以及MAPPO。
好巧不巧,发现他们的代码几乎也是一体同源,后根据对论文里发表作者的大学查看,推测估计这几篇都是一个团队里的人发表的。
由于时间有限(下周讲PPT),虽然都看懂了文章,但是对于代码的修改止步于MAT,复刻完MAT了但是应该还有漏洞,以至于现在的效果不太好,故这里先讲下MAT的论文。
MAT论文:https://arxiv.org/pdf/2205.14953
MAT代码:github代码
MAT的效果展示十分不错。
以下不对论文的结构进行按章节解读,按自己理解解读。
(由于本篇文章也会用于演讲,所以,可能会有一些专业术语的解释以及图解)
参考算法推导:(强烈推荐)
1.强化学习 | 策略梯度 | Natural PG | TRPO | PPO
2.强化学习 | Multi Agents | Trust Region | HATRPO | HAPPO
一、如何产生这个想法
(TRPO -> ) PPO -> MAPPO -> HAPPO -> MAT
TRPO(Trust Region Policy Optimisation 信任区域策略优化算法):原理示意图如下:
PPO(Proximal Policy Optimisation近端策略优化算法):工业界常用的RL算法,也是大模型RLHF(RLHF (Reinforcement Learning from Human Feedback) ,即以强化学习方式依据人类反馈优化语言模型)的基础算法。(chatgpt背后用到了RLHF)
MAPPO:https://arxiv.org/pdf/2103.01955
对于之前的研究,MAPPO,只是简单的套用CTDE范式(即:集中式训练分散式执行),并模仿MADDPG多智能体的训练算法,将PPO从单智能体拓展到多智能体MAPPO上,采用了PPO之前有论文中研究的多种有效的tricks,在星际争霸SMAC和谷歌足球google football的环境下,取得了不错的效果,文章主要贡献在于,拓展并提出了5个在使用MAPPO时的设置参数建议。
(作者给出了两套代码,一套参数共享的,一套参数不共享。(该论文第11页伪代码下方说明)
参数共享:所有智能体共享一套参数,同一个actor网络参数,critic网络参数,智能同质的情况下。
参数不共享:每个智能体都有自己的独立的一套参数,即actor网络参数,critic网络参数)
)
HAPPO: (H :Heterogeneous)https://arxiv.org/pdf/2109.11251
1.针对上述MAPPO缺乏理论的收敛依据,提出并证明了多智能体优势值分解引理(multi-agent advantage decomposition lemma),并借此严格证明了算法的单调改进性。
2.针对MAPPO会出现的信用分配问题,例:在参数共享下(单个智能体不知道自己对总回报贡献了多少),参数不共享下(单个智能体不知道自己动作的奖励比其他智能体动作的奖励高多少)
利用优势值分解定理,解决了MAPPO用于异构智能体时造成的次优解的问题,将其推广到异构智能体上,这也是算法名字的由来。
效果上,智能体越多,越比MAPPO好。
(该作者从TRPO严格证明->多智能体的TRPO(HATRPO)->多智能体的HAPPO,附录近10页公式)
(由此,作者只给出了参数不共享的一套代码。)
来自该论文作者的blog图:生动展示上述出现的信用分配问题
MAT:(Muti-Agent transformer)
由HAPPO的优势值分解定理灵感所激发。
作者发现,由于优势值分解定理隐含的一个想法是,需要得到前一个智能体的动作,才能更新下一个智能体的动作,于是发现这跟transformer的文本自回归生成及其类似,于是将transformer架构引入进来,将其构造成一个 序列模型建模问题(squense model)。
HAPPO的存在问题:
优势值分解定理导致的情况是在一个智能体更新完得到它的优势值,再更新下一个智能体,导致计算效率低下。
MAT针对此引入transformer,将其计算并行化,加快计算效率,将传统的RL训练模式改造成类似于transformer训练的范式。
算法取得了惊人的效果。
二、多智能体优势值分解定理
这里重点讲下优势值分解定理是什么,为什么简单将信任区域学习拓展到多智能体会失败?
在单智能体中,信任区域学习会带来策略的稳定改进,简单的引入只能导致所有智能体在自己的范围内策略改进,可能会导致团体的的回报的下降,上述的两人开车的图。
在单个的智能体的优势值:𝐴𝜋(𝑠,𝑎)≜𝑄𝜋(𝑠,𝑎)−𝑉𝜋(𝑠),减掉的baseline是状态s的状态价值函数。
简单的想法是,我想令我当前的智能体在前一个智能体动作的达到的价值上,再做出一个动作,当前动作的价值希望比上一个价值更高。
简单写法:𝐴𝜋(𝑠,𝑎1,a2) = 𝑄𝜋(𝑠,𝑎1,a2) - 𝑄𝜋(𝑠,𝑎1) (两个智能体的情况下,第二个智能体的优势值)
(那么两个智能体的情况下,第1个智能体的优势值:𝐴𝜋(𝑠,𝑎1)≜𝑄𝜋(𝑠,𝑎1)−𝑉𝜋(𝑠))
理解:两个智能体的情况下,第二个智能体的优势值 就是第二个智能体在第一个智能体已经动作完它的动作a1之后,执行动作a2的相对好坏。
拓展到多个智能体就是多智能体优势值的定义:
HAPPO作者又多想一步:第一个智能体的优势值为A1,第二个智能体的优势值为A2(在第一个智能体更新的基础上)。。。
所有的智能体加起来之和就是联合智能体函数了。
例:
图来自参考2
三、transformer 在MAT的应用
原transformer框架:
此论文的transformer框架:
可以看出大体的框架和本论文的transformer框架大体一致,区别在于在此论文encoder的第二个attention还是采用的是masked attention,这与实际要解码的内容有关。
在原transformer论文中, 比方说 encoder 中文 decoder英文
encoder采用自注意机制:输入源句子 : 输出语句间的语义关系
decoder的第一个masked muti-head attention: 使用 senquence masked 为了使得 decoder 不能看见未来的信息
第二个muti-head attention :未使用masked,是因为解码器需要根据源语言句子(由编码器处理后的表示)来生成目标语言句子,此时需要全面了解源语言句子的信息,因此不应限制其关注范围。
举一个小例子来展示transformer在语言模型上是如何应用的:
推理阶段:准备两个正确的句子 中文:我喜欢吃苹果 英文 i like eating apples
1.编码器输入input :我喜欢吃苹果 解码器输入:起始标记(0 或start)
中间步:编码器输出语义到解码器的第二个attention 充当K,V(键值)
2.解码器最终输出 i (根据概率选择最大)
3.编码器输入input :我喜欢吃苹果 解码器输入:i
(将输出的i当作输入给解码器,这就是为什么解码器的开头是Outputs(shift right的原因)) -- 第一个难理解的地方
4.解码器最终输出 like
5.编码器输入input :我喜欢吃苹果 解码器输入:i like
此时attention 中的mask才发挥作用:--第二个比较难理解的地方
因为上一步计算I时是没有like的信息的,所以这里要屏蔽掉
之后类推 ->decoder最终输出i like eating apples
…
在此论文:(作者有一个很棒的gif 生动展示了 transformer是怎么做的 in https://sites.google.com/view/multi-agent-transformer)
(A-C框架下RL,有一个actor,一个critic)
编码器被看作一个输出价值的价值模拟器,替代了之前的critic
解码器被看作一个输出价值的动作模拟器,替代了之前的actor
encoder采用自注意机制:输入每个智能体的状态,输出每个智能体的状态函数
decoder的第一个mask self attention:这个和transformer一样,计算第二个智能体动作时,要屏蔽掉第一个智能体的未来信息
decoder的第二个mask self attention:可能这里作者还是觉得未来的动作应该屏蔽,所以这里还是做了mask。(作者这里并没有明确表述)
四、伪代码简述
最后这里伪代码,我们便能知道这个算法的总体架构了
在推理阶段使用transformer来进行对环境的探索
在训练阶段,将encoder的输出当成V函数的拟合,decoder的输出当成策略的拟合,最终通过类似于PPO的算法计算损失,来进行梯度下降。
五、实验效果
实验效果嘎嘎棒,领先于之前他们团队提出的MAPPO和HAPPO。
并且在他们网站上有更好的视频演示。