文章目录
- 多智能体强化学习
- 训练和执行范式
- CTCE
- DTDE
- CTDE
- MARL符号表示
- 分布式学习(Independent Learning)
- 基于值函数的分布式学习(Independent value-based learning)
- 基于策略梯度的分布式学习(Independent policy gradient learning)
- 多智能体策略梯度算法
- 多智能体策略梯度定理
- 中心化的评论家(Centralised critics)
- 中心化的动作价值评论家(Centralised action-value critics)
- 反事实的动作价值估计(Counterfactual action-value estimation)
- 具有中心化动作价值估计的均衡选择(Equilibrium Selection)
多智能体强化学习
本篇主要介绍多智能体系统的训练范式,MARL符号表示,多智能体独立学习以及多智能体策略梯度算法。
训练和执行范式
在多智能体系统中,一个很普遍的假设是每一个智能体只能观测到局部信息,这个假设是合理的,因为传感器感知能力、通信能力等的影响。如果要训练一个多智能体系统,根据在训练的时候所用信息的不同,可以将多智能体强化学习训练范式分为以下三种,分别是:中心化训练中心化执行(CTCE),分布式训练分布式执行(DTDE)和中心化训练分布式执行(CTDE)。接下来,我们将会分别进行介绍。
CTCE
CTCE即中心化训练中心化执行,也就是在多智能体系统中,利用共享信息进行训练,在执行的时候,利用共享信息输出动作。一个典型的例子就是一个中央控制器,它根据所有智能体的共享信息进行训练,在训练结束之后,根据所有智能体的共享信息输出每一个智能体需要执行的动作。通过CTCE的方式,可以让智能体更好的合作,但是也有很多问题:
- 所有智能体的奖励最后要转换成一个标量值,这种方式无法区分每一个智能体动作的贡献。
- 中心化训练期间,联合动作空间指数增长,不利于训练
- 由于通信的限制,共享信息有困难,一般只假设在模拟环境中可以贡献信息。
DTDE
DTDE即分布式训练分布式执行,即每一个智能体根据自己的局部观测进行训练和执行,这种方式没有动作空间指数增长和通信的问题。但也有自己的问题:
- 每一个智能体将其他智能体视为环境的一部分,导致环境的非平稳性问题。
- 如果进行复杂的合作任务,DTDE可能协作性不强。
CTDE
CTDE即中心化训练,分布式执行,即在训练的时候利用共享信息,在执行的时候利用智能体的局部观测信息,这种方式结合了上面两种范式的优点。利用这种范式的比如actor-critic框架,基于值分解的方法等。
MARL符号表示
我们在前面的文章中已经提过,智能体的价值函数网络参数用
θ
\theta
θ表示,策略网络的参数利用
ϕ
\phi
ϕ表示,后面将会继续沿用这种表示方法。
我们将
π
i
(
.
∣
ϕ
i
)
\pi_i(.|\phi_i)
πi(.∣ϕi)表示为
π
(
.
∣
ϕ
i
)
\pi(.|\phi_i)
π(.∣ϕi),参数
ϕ
i
\phi_i
ϕi不但表示了不同智能体网络参数有可能不同,参数数量也有可能不同(参数数量不同意味着网络结构的不同)。
我们说多智能体系统一个普遍的假设是局部观测,在做决策的时候,利用历史信息是很重要的,因为局部观测的历史信息里包含了当前时刻观测没有包含的信息,我们将每一个智能体的观测信息加上历史观测信息,表示为:
h
i
t
=
(
o
i
0
,
o
i
1
,
.
.
.
o
i
t
)
h_i^t=(o_i^0,o_i^1,...o_i^t)
hit=(oi0,oi1,...oit),将所有智能体的共享信息记为
h
t
=
(
o
0
,
o
1
,
.
.
.
,
o
t
)
h^t=(o^0,o^1,...,o^t)
ht=(o0,o1,...,ot),在中心化训练阶段,如果知道全局状态,我们一般就用
s
t
s^t
st,而不用
h
t
h^t
ht,注意,这里的
s
t
s^t
st不包括历史信息,只包括当前时刻的全局状态信息,根据马尔科夫性,没有必要包含历史信息,但是
h
t
h^t
ht是包含历史信息的。
分布式学习(Independent Learning)
虽然我们前面说过,分布式学习面临环境非平稳性的问题,但这种学习范式却显得非常自然,接下来我们介绍如何使用现有的RL算法,来训练多个智能体。
基于值函数的分布式学习(Independent value-based learning)
在前面的学习中,我们讲过单智能体强化学习方法主要可以分为基于值的方法和基于策略梯度的方法,接下来,我们先来讲解基于值的方法在分布式学习这样的框架下,如何解决多智能体问题。
分布式学习,这里也可以叫做独立学习,顾名思义,每一个智能体独立的进行学习,将其他智能体视为环境的一部分,我们以DQN算法为例,来讲解IDQN算法,在IDQN算法种,每一个智能体有自己的价值网络
Q
(
.
;
θ
i
)
Q(.;\theta_i)
Q(.;θi),单独维护自己的经验缓存池
D
i
D_i
Di,并且仅仅使用自己的局部观测来做出动作,接收奖励,可以说,这里的每一个智能体都是自利的,没有团队目标。那每一个智能体如何更新自己的值函数网络呢?和DQN算法一样:
在每一个step中,所有智能体最小化自己的损失函数
L
(
θ
i
)
L(\theta_i)
L(θi),相当于最小化
L
(
θ
1
)
+
L
(
θ
2
)
+
L
(
θ
3
)
+
.
.
.
+
L
(
θ
n
)
L(\theta_1)+L(\theta_2)+L(\theta_3)+...+L(\theta_n)
L(θ1)+L(θ2)+L(θ3)+...+L(θn),这种方式有没有什么问题呢?
很明显,每一个智能体只根据自己的局部观测去做决策和学习,假设该智能体在训练早期的时候,在观测
o
i
t
o_i^t
oit下采取动作
a
i
t
a_i^t
ait获得了很高的奖励,但是在后面由于其他智能体的策略发生改变,该智能体在相同的观测下,采取同样的动作却获得了很低的奖励,这样的经验也会被智能体储存在经验缓存池中,这就导致了智能体的学习过程并步平稳,甚至不能收敛,这主要是由智能体的局部观测引起的。
后面也有人提出了几种改进方法来缓解这种方法,比如降低经验缓存池的容量,使得过时的数据尽早的被淘汰,或者给经验赋予重要性权值等,这里不一一说明。
下面是IDQN算法的伪代码:
基于策略梯度的分布式学习(Independent policy gradient learning)
和基于值函数的方法类似,基于策略梯度的分布学习同样将其他智能体视为环境的一部分,这里以REINFORCE算法讲解,在分布式REINFORCE中,每一个智能体维护一个策略网络
π
(
.
∣
h
i
t
;
ϕ
i
)
\pi(.|h_i^t;\phi_i)
π(.∣hit;ϕi),根据自己的局部观测及历史做出动作,然后每一个智能体根据自己de 策略梯度更新自己的策略网络参数:
这里的
u
i
t
u_i^t
uit通过蒙特卡洛方法采样计算。
这种更新方式避免了IDQN方法中提到的训练不稳定的问题,在该方法中,智能体每一个回合更新一次策略参数,使用的数据都是智能体根据当前策略采集的最近的数据,当其他智能体的策略更新时,智能体可以立马检测到其他智能体策略的更新,并更新自己的策略,所以训练更加稳定。
下面是分布式REINFORCE伪代码:
这样的学习范式同样适用于A2C和PPO算法,这里以A2C举例,N个智能体通过K个环境进行采样,每一个智能体根据自己的经验对网络进行更行,和A2C算法一样:
每一个智能体的目标是最小化所有环境上的平均损失函数:
L
(
ϕ
)
=
1
K
∑
k
∈
K
L
(
ϕ
i
∣
k
)
L(\phi)=\frac{1}{K}\sum_{k\in K}L(\phi_i|k)
L(ϕ)=K1∑k∈KL(ϕi∣k)
critic网络的更新如下:
多智能体策略梯度算法
再前面我们介绍了单智能体RL算法在分布式学习范式中的应用,将单智能体RL算法直接应用于多智能体系统以及每一个智能体对环境的部分可观测性质,进一步加剧环境的非平稳性问题,通过使用CTDE范式可有缓解多智能体强化学习中的非平稳性问题,这一小节将会集中介绍CTDE范式下的多智能体策略梯度算法,在开始之前,我们对策略梯度定理拓展到多智能体策略梯度定理。
多智能体策略梯度定理
我们首先来回顾一下单智能体策略梯度定理:
∇
ϕ
J
(
ϕ
)
=
∑
s
∈
S
P
r
(
s
∣
π
)
∑
a
∈
A
Q
π
(
s
,
a
)
∇
ϕ
log
π
(
a
∣
s
;
ϕ
)
=
E
π
[
Q
π
(
s
,
a
)
∇
ϕ
log
π
(
a
∣
s
;
ϕ
)
]
\nabla_{\phi}J(\phi)=\sum_{s\in S}Pr(s|\pi)\sum_{a\in A}Q^{\pi}(s,a)\nabla_{\phi}\log \pi(a|s;\phi) =E_{\pi}[Q^{\pi}(s,a) \nabla_{\phi}\log \pi(a|s;\phi)]
∇ϕJ(ϕ)=∑s∈SPr(s∣π)∑a∈AQπ(s,a)∇ϕlogπ(a∣s;ϕ)=Eπ[Qπ(s,a)∇ϕlogπ(a∣s;ϕ)]
为了扩展策略梯度定理到多智能体系统,思考,在多智能体系统中,每一个智能体的预期回报只和该智能体有关吗?当然不是!还依赖于其他智能体的策略,基于这样一种视角,我们可以利用所有智能体的观测信息来估计这里的预期回报,此时多智能体策略梯度定理如下:
现在来分析上面的定理,对于智能体i,actor网络的策略为
π
(
.
∣
h
i
;
ϕ
i
)
\pi(.|h_i;\phi_i)
π(.∣hi;ϕi),
Q
i
π
(
h
^
,
<
a
i
,
a
−
i
>
)
Q_i^{\pi}(\hat h,<a_i,a_{-i}>)
Qiπ(h^,<ai,a−i>)表示此时的预期回报估计依赖于所有智能体的观测和动作信息。
现在我们回过头再分析一下,这里采用所有智能体的观测信息到底能带来什么好处?
我们假设的场景是一个部分可观测的多智能体系统,对于其中某一个智能体,通过策略梯度定理来更新它的策略网络参数,后面一项表示策略的梯度,表示参数往哪个方向移动才能让 π \pi π再状态s下取到动作a的概率变大,而前面一项表示的是智能体在当前策略下,在状态s下采取动作a的价值,如果价值高,则移动的多,价值低,则移动的少,相对来说,是增大了在状态s下采取高价值动作的概率。
但是现在我们并没有一个准确的Q值去估计谁的价值更高,这里的Q值也是通过样本来估计的,在部分可观测的多智能体系统中,如果该智能体只用自己的局部观测的信息来估计它此时的动作价值,想不明白,我们假想一个足球场景,场内某个球员假设是局部观测,他能否评估自己的动作的好与坏?再假设,如果智能体用所有球员的信息,或者全局状态,它能否评估自己的动作的好与坏?
全局信息,它对该状态下的价值评估确实是更加准确的,但是对于部分观测的actor,到底有没有用?观点:对于actor网络加上历史信息确实是有用的,但如果actor网络只利用当前时刻的局部观测是没用的,可能只带来了一种局部观测下的行动偏好,但并不能保证它的优越性。
中心化的评论家(Centralised critics)
通过设定一个中心化的评论家,来指导智能体actor的更新,中心化的评论家带来了什么好处?如果以所有智能体的观测及历史作为条件,确实可以反映此时的状态的价值。智能体可以根据更加准确的价值估计来计算自己的策略梯度。这种方式在评估智能体i的策略好坏的时候,将其他智能体的信息作为额外条件,相应的,由于此时状态空间的增大,价值函数的估计方差增大(因为本来就是在估计),从而导致策略梯度方差增大,导致更新不稳定,但是相应地,由于额外信息提供了更加广阔的状态空间,智能体可以看到更优的解,从而也避免了很容易收敛到局部最优的情况。
在使用中心化的评论家时,历史信息及其重要,如果额外信息包括了其他智能体的历史信息,那么此时的价值估计就会隐式的学习到其他智能体的策略,相应的也会更加准确的评估该策略在该状态下的价值,从而指导智能体向着价值更高的方向更新。如果没有历史信息,就会引入很高的偏差。
在这一节中,主要还是以A2C算法作为例子,所以主要评估的是优势函数,所以值网络估计的是状态价值函数,这里可以认为是为每一个智能体构建了一个价值网络,只不过包含了其他智能体的额外信息。
A2C伪代码如下:
这一段主要还是探讨了中心化的评论家到底有没有用?结论是有用,虽然增大了方差,却也缓解了容易陷入局部最优解的问题,但是也只是经验之谈,没有严格的理论证明,直觉上,确实是评估的更加准确了,但是前提是在部分观测下,使用历史信息作为条件来估计
中心化的动作价值评论家(Centralised action-value critics)
在前面我们说通过中心化的评论家可以学习一个状态价值网络,并且使得训练更加稳定。当然,我们也可以学习一个中心化的动作价值网络,对于智能体i,网络的输入是该智能体的观测历史,中心化的信息以及所有智能体的动作。
那这个动作价值网络的损失函数又该如何定义呢?请看下面:
现在我们来分析一下上面的式子:这里的目标值
y
i
y_i
yi为什么不采用类似DQN那样的最大化操作呢?因为我们现在是利用智能体当前策略采集到的经验来估计这里的Q值,我们的目标是对动作价值的准确估计,而不是让动作价值越高越好,所以这里我们也不能用经验缓存池。
那如何更新actor网络呢?请看下面:
此时智能体i的策略梯度如下:
此时智能体i的critic网络的输入是该智能体的历史观测信息,中心化信息,所有智能体的动作,很明显,通过这种方式设计的critic网络只需要一个就够了,用来评估所有智能体联结动作的价值,但是此时的动作空间很大,评估很困难,那应该怎么设计呢?看下图:
我们现在假设每一个智能体有一个critic网络,该网络的输入是智能体i的历史观测信息、中心化信息、其余智能体的动作,输出是该智能体每一个动作的价值,这种结构的网络可以很好的避免动作组合空间维度过高的问题,他的更新和前面的公式类似。
反事实的动作价值估计(Counterfactual action-value estimation)
思考这样一个问题,在前面我们已经提到,critic可以用来估计状态值函数,我们想想此时的网络输入和输出分别是什么?对于智能体i,其critic网络的输入是该智能体的观测历史,历史中心化信息,网络输出是此时的状态价值函数。我们后面还用critic来估计网络的动作价值函数,我们再来看看此时的网络输入和输出分别是什么,网络的输入是智能体的观测历史,历史中心化信息以及其他智能体的动作,网络的输出是智能体i的每一个动作的预期价值。很明显,训练前者要更加简单,那为什么我们还要去训练一个动作价值函数呢?接下来,我们回答这个问题。
注意:估计出的价值函数,也可以评估该状态下对某个动作的偏好
其中一个好处是可以利用动作价值函数解决信用分配问题,用到的概念是差分奖励的形式,利用了一种反事实的想法:如果采用了默认操作,我会受到哪种奖励?可以用下面的公式来表示这种差分奖励的形式:
d
i
=
R
i
(
s
,
<
a
i
,
a
−
i
>
)
−
R
i
(
s
,
<
a
^
i
,
a
−
i
>
)
d_i = R_i(s,<a_i,a_{-i}>)-R_i(s,<\hat a_i,a_{-i}>)
di=Ri(s,<ai,a−i>)−Ri(s,<a^i,a−i>)
这种差分奖励的形式可以用来比较在其他智能体动作不变的情况下,我如果不采取现在的动作,而是用默认的动作,会有怎样的差异?这种形式反映了当前动作对奖励的一种贡献。
但是这样的差分奖励面临两个问题:
- 默认的动作如何选取?
- 计算奖励需要奖励估计函数?
这里的第一个问题可以使用贵族效用的方式来解决,这里我们不采用默认动作,我们以当前策略下采取的动作得到的奖励的均值来作为后面一项。评估这里的奖励函数可能需要用网络来进行估计。
现在我们来介绍基于这样的想法设计的反事实多智能体策略梯度算法COMA,该策略通过下面的公式计算来计算智能体i在当前策略下采取动作ai的优势:
注意这里的后面一项,这里的
a
−
i
a_{-i}
a−i被固定,其余的形式和多智能体策略梯度定理一样,只不过前面的值换成这里的优势函数。
这里需要对反事实基线和状态价值函数进行比较:其实可以发现,上面的公式和我们前面遇到的SAC中优势的计算公式很相似,不同点在于后面一项中,反事实基线的计算是通过固定其他智能体的动作,当前智能体以当前策略评估自己在其他智能体固定动作下采用的动作的平均价值。前面一项表示了实际采用的动作,那么这样一项就表示了当前智能体在其他智能体此时动作下,采取的实际动作的优势。
现在我们再来看状态价值函数,首先状态价值函数是一个很广的概念,如果应用在多智能体中,可以发现,很难在其他智能体动作固定的情况下,评估该智能体当前动作的偏好。
具有中心化动作价值估计的均衡选择(Equilibrium Selection)
这一节开始之前,我们先来回顾两个概念,纳什均衡和帕累托最优,纳什均衡指的是多个智能体的一种策略稳定状态,在该策略组合下,任意一个智能体改变自己的策略,都不会让自己的收益变高,纳什均衡一般在非合作场景下使用。帕累托最优强调整体效率,算是一种分配,如果想让某个智能体的收益变高,就不得不让其他智能体的收益变低。
本节从一个例子出发进行讲解,请看下图的例子:
在上面的例子中,两个智能体有两个可选动作分别是A和B,这里存在两个纳什均衡状态分别是(A,A)和(B,B),在存在多个纳什均衡的时候,学习主体偏好风险较低的行为而达到收益较低的纳什均衡,比如上图的例子:假设这两个智能体都按照0.5的概率来选择动作,对于智能体1:选择动作A的平均回报是:2,选择动作B的平均回报是2.5,所以在应用策略梯度定理的时候,选择动作B的概率将会增大,从而实现正循环,第二个智能体也同理,所以最后二者收敛到(B,B)这个纳什均衡,但是存在更优的解。
如果在做出动作的时候考虑其他智能体的动作,就会做出最优选择,如图智能体i在更新自己的策略参数的时候,如果这里的偏好通过下式计算,就能收敛到帕累托最优,因为是在无冲突环境中,其他智能体的策略通过下式来得出:
然而,随着智能体数量的增加,上面这一步很难完成,这也是帕累托AC面临的问题。
所以可以看到,采用中心化的动作价值函数可以帮助多智能体系统提升性能,指导多智能体策略更新向着最优的均衡方向。