论文链接:https://papers.nips.cc/paper/6042-learning-to-communicate-with-deep-multi-agent-reinforcement-learning.pdf
(这篇论文是COMA三部曲中的第(一)篇:让Agent学会如何去通信)
该论文主要解决了在多智能体
和每个智能体只能部分观测
情况下,各个智能单位间如何通信的问题。通过强化学习的方式最终使得智能体能够学会如何进行通信(即学出一种通信协议)。最终学习出的协议其实是一个|m|维的向量,添加到Q网络的输入中起到影响决策的作用。
整个论文分为三个部分:
通讯
和多智能体协同
的任务假设出的任务必须具备以下3个条件:需要个体之间配合完成
、 个体观测不完整(即单个个体无法感知环境中所有信息)
、个体决策带有时序性
。所有Agent都有共同的学习目标:采取不同的行为使得一个Reward总值最大化,这个总值是所有Agent全局共享
的。
在学习场景中,每个Agent不仅可以采取一个与环境互动的行为,还可以采取一种”通讯“行为——通过一个有带宽限制的通道告诉其他Agent一些自身观测到的环境信息。由于部分可观测性和通讯受限性,Agent需要学习出一种通讯协议来规划协同他们的自身行为。
该论文使用中心式学习
-去中心式执行
的方法,即训练过程中各单位之间可以进行无限制通讯,学习完成后最终应用时会受到通讯限制。论文中一共提出了两种approach:
1- Reinforced Inter-Agent Learning (RIAL)
用一个循环的Deep Q-Learning网络(RNN + DQN)来解决部分可观测问题,其中,RIAL又有2种不同的变种方法:
(a) 每一个agent单独学习一个属于自己的Neural Network,将其余agent看作是环境的一部分。
(b) 只训练一个global的Neural Network,所有agent共享这个网络的参数。
2- Differentiable Inter-Agent Learning (DIAL)
尽管在RIAL的第二种变种方法中,通过参数共享的方式模拟了agent之间的信息共享,但是却没有很好的模拟agent与agent之间"通讯"的过程。DIAL的设计思路中使得在训练过程中,不同agent之间可以传输真正的”梯度消息“,在原文中被称为"real-valued message"。
阅读本论文需要用到以下几个知识背景:
论文的环境设定概括为以下几个规则:
在每一个agent上训练一个DRQN网络,每个agent的Q-network可以表示为
Q a ( o t a , m t − 1 a , h t − 1 a , u a ) Q^a(o_t^a, m_{t-1}^a, h_{t-1}^a, u^a) Qa(ota,mt−1a,ht−1a,ua)
其中:
o t a → o_t^a \qquad \rightarrow \qquad ota→ agent当前的环境观测
m t − 1 a → m_{t-1}^a \qquad \rightarrow \qquad mt−1a→来自其他agent在上一时刻观测到的消息
h t − 1 a → h_{t-1}^a \qquad \rightarrow \qquad ht−1a→ agent自身的hidden state,hidden state取决于该agent之前遇到的state history
u a → u^a \qquad \rightarrow \qquad ua→ 当前agent采取的行为u
将整个 Q Q Q- N e t Net Net 网络划分为两个 Q Q Q网络 Q u Q_u Qu 和 Q m Q_m Qm,u网络是用来评价环境的Q-value,m网络用来评价通信行为的Q-value,也就是说, Q Q Q- N e t Net Net 会有两个输出|U|和|M|,动作选择器(Action Select)会根据这两个值分别选择“环境行为”和“通讯行为”。在training过程中,会调整网络参数使得U值最大,然后才是使M值最大,这意味着“环境行为”要比“通讯行为”更值得关注。RIAL整个示意图如下:
图中是两个不同的agent,上层是Agent 2,下层是Agent 1,横轴是时间轴。红色箭头代表计算的梯度信息。Agent 1观测到环境信息 o t 1 o_t^1 ot1,并接收到来自上一个时刻Agent 2发来的通讯信息 m t − 1 2 m_{t-1}^2 mt−12,以及自身的隐藏状态信息 h t − 1 1 h_{t-1}^1 ht−11,将这3个参数输入到 Q Q Q- N e t Net Net中会得到两个output值|U|和|M|,这两个值输入Action Select模块中选择出两个行为 m t 1 m_t^1 mt1(通讯行为)和 u t 1 u_t^1 ut1(环境行为)。注意:通讯行为 m t 1 m_t^1 mt1是没有reward,也没有梯度信息;只有环境行为 u t 1 u_t^1 ut1与环境交互之后才能够获取一个来自环境的reward并计算梯度,回传到 Q Q Q- N e t Net Net 更新网络参数。
因此,在RIAL中,参数更新只是在单agent网络上进行更新,由于 m t m_t mt行为没有reward,梯度无法在多个agent中间传递,所以无法给出agent做出这一次通讯行为后效用评判。RIAL模型更像是在训练agent“我接收到的来自其他agent的通讯信息在我这次决策中所占的比重是多少”。也就是说,这样的训练模型只能教会agent“信不信”来自其余agent的通讯信息,而无法教会agent在这一时刻应不应该“发送”通讯信息。
训练所使用的模型
Q u Q_u Qu 和 Q m Q_m Qm两个模型都使用DQN网络模型,但是做了以下两个变动:
参数共享的变种方法
RIAL的一种参数共享的变种方法中提到,让所有Agent共享一个神经网络,利用参数共享的方式来加快收敛速度。这种情况下,agent一共需要学习两个Q网络这两个网络的输入一样,只是最后训练的时要拟合的target值不一样。
Q u ( o t a , m t − 1 a , h t − 1 a , u t − 1 a , m t − 1 a ′ , a , u t a ) Q_u({o_t^a, m_{t-1}^a, h_{t-1}^a, u_{t-1}^a, m_{t-1}^{a'}, a, u_t^a }) Qu(ota,mt−1a,ht−1a,ut−1a,mt−1a′,a,uta)
Q m ( o t a , m t − 1 a , h t − 1 a , u t − 1 a , m t − 1 a ′ , a , u t a ) Q_m({o_t^a, m_{t-1}^a, h_{t-1}^a, u_{t-1}^a, m_{t-1}^{a'}, a, u_t^a }) Qm(ota,mt−1a,ht−1a,ut−1a,mt−1a′,a,uta)
Note
: a a a 是该agent在所有agent队伍中的索引值(编号)
两个Qfunciton的接收相同的Input值,但在训练的时候一个最大化|U|值,一个最大化|M|值。
在5.1中也提到了,DIAL方法的缺点在于无法在不同agent中传递梯度。DIAL方法允许agent在采取一次通讯行为 m t m_t mt之后得到一个回报值,以此来告诉agent这一次采取通讯行为的效用。DIAL将“通讯行为”直接替换成了“把一个agent网络的输出直接传输到另一个agent网络的输入”,这样就为通讯行为建立了一个可以反向传播reward的通道。为了实现这个方法,该方法把原来的 Q Q Q网络改为了一个名叫 C C C- N e t Net Net 的网络。
C网络接收2个input:
C网络输出2个output:
Q(·),这是state-action的Q值,用于输入action select进行行为的选择。
m t a m_t^a mta,这是一个实数向量 (real-value vector),这个向量不会传入action select模块,而是转换成消息直接传递给下一个agent。怎么转换成消息呢?这个向量从C-Net输出后会经过DRU(discretise/regularise unit,离散合法化单元)进行数据处理, D R U ( m t a ) = L o g i s t i c ( N ( m t a , σ ) ) DRU(m_t^a) = Logistic(N(m_t^a, \sigma)) DRU(mta)=Logistic(N(mta,σ)),其中 σ \sigma σ是这个模型的标准差。这一步的主要作用是将离散的信息向量转换成一个连续的分布。以上是在做中心式学习的时候的步骤,在最终去中心式执行(即模型训练好后要用于实际实验的时候)又需要将连续的分布做离散化处理。
以下是DIAL的数据传输示意图:
图中是两个不同的agent,上层是Agent 2,下层是Agent 1,横轴是时间轴。红色箭头代表计算的梯度信息。可以看到C-Net有两个输出,一个输出Q(·)输出了Action Select模块用于选择环境行为 u t 1 u_t^1 ut1,与环境互动后会得到一个reward返回给C-Net网络;另一个输出 m t 1 m_t^1 mt1(离散的实数向量)直接输入到DRU模块进行”离散转连续“变换后(变成了连续型的变量)输入到Agent 2的C-Net中,当Agent 2的C-Net得到了来自环境的回报 r t + 1 2 r_{t+1}^2 rt+12 后会回传给C-Net并去计算 m t 1 m_t^1 mt1的梯度信息,这样就能够将通讯行为所产生的梯度信息回传给Agent 1,用于通讯行为的梯度更新了。
Note
:为什么要进行DRL(离散转连续)这一步?这是因为,C-Net只能产生离散的向量信息(把输出层的所有神经元的输出值并在一起时一个离散的向量),但是离散的向量是无法进行梯度更新的(离散的数根本无法求导),因此将离散的数字想办法变成一个连续的分布,这样就可以进行梯度更新了。因此,要想建立两个Agent之间C网络的通信信道,并且能够通过计算行为的梯度进行更新,“离散-连续”转换是非常重要的一步,也是该论文的核心创新思想。
在RIAL和DIAL都是基于DQN的Loss来进行通讯行为的学习(环境行为两种方法都一样的),但学习的方式有以下几处不同:
DIAL中由接收方
直接传递给发送方
的误差梯度信息,这样能够更明显的建立“通讯”的行为相关性;而RIAL中没有建立“通讯行为”的“通道”,DQN误差是由“环境行为”和“通讯行为”共同导致的,最终“环境行为”导致的误差也会被看作是“通讯行为”的选择错误,但很有可能此时“通讯行为”并没有任何问题。
在RIAL中,直接使用DQN的Loss来进行学习,得到reward始终是一个一维非零的数值;而DIAL中回传的是一个|m|维的梯度信息,多维度比单维度能够包含更多的行为信息,可以学习到的知识更丰富。
在DIAL中可以处理连续型action问题,而RIAL只能处理离散型action问题。
在论文中使用了一个囚犯通信的场景进行算法实验,场景故事如下:
有n个囚犯被关在监狱中,他们每个人都被独立关在自己的小房间内,彼此间不能通信。每天监狱长会挑选其中一个囚犯来到审问室,审问室中只有一盏灯泡,被挑选的囚犯可以选择点亮或熄灭这盏灯泡。此外,在审问室中的囚犯可以拥有一次“猜测”的机会,猜测所有的囚犯都已经来过审问室了,如果发出猜测后确实所有囚犯都来过审问室了,那么所有囚犯被释放;如果猜测是错误的,则所有囚犯被处死。
在这个故事中,在审问室的囚犯拥有观测 o t a ∈ o_t^a \in ota∈ { 0 , 1 0, 1 0,1 },0代表灯是灭的,1代表灯是亮的,其余囚犯没有observation。在审问室的囚犯的环境动作空间 u t a ∈ u_t^a \in uta∈ { " T e l l " , " N o n e " "Tell","None" "Tell","None"},通讯行为$m_t^a \in $ { 0 , 1 0, 1 0,1 },即打开/关闭灯泡;而其他囚犯的动作空间只有{ " N o n e " "None" "None"}。通常情况下reward都是0,直到有人发起“猜测”行为,猜对则+1,猜错则-1。
下面是实验结果,其中n代表囚犯数。-NS代表不使用参数共享时的结果,即每个囚犯训练自身单独的网络。NoComm代表不加入通信因素的结果。
值得注意的是(b)图中的RIAL-NS的方法效果还没有不加入通信协议时好,这充分说明了要想让每一个agent独立学习一个属于自己的网络模型是相当困难的。