文章目录
- 多智能体强化学习---基于值分解的方法
-
- [IGM属性(Individual-Global-Max property)](#IGM属性(Individual-Global-Max property))
- [线性值分解(Linear Value Decomposition)](#线性值分解(Linear Value Decomposition))
- [单调值分解(Monotonic Value Decomposition)](#单调值分解(Monotonic Value Decomposition))
- [改进单调值分解(Beyond Monotonic Value Decomposition)](#改进单调值分解(Beyond Monotonic Value Decomposition))
多智能体强化学习---基于值分解的方法
在这节开始之前,我们先来回顾一下我们对多智能体系统的设定,我们假设每一个智能体是局部观测的,每一个智能体在执行的时候需要根据自己的局部观测来做出决策,这种设定我们可以将其形式化为部分可观测马尔可夫博弈(POSG),在这一节中,我们将我们的场景设定为common-reward,即每一个智能体共享奖励。
我们现在要考虑一个问题,每一个智能体都需要根据局部观测做出自己的决策,如果我们只训练一个集中式的动作价值函数,而不训练单独的策略网络,能不能让智能体独立的决策呢?绝大多数情况下是不可以的,用为一个集中式的动作价值函数,需要集中式的信息,单个智能体在分布式执行的时候没有集中式的信息。那除了单独策略网络之外,就没有其他办法了吗?有!就是通过值分解的形式,在训练的时候,通过值分解的形式将集中式的价值函数进行分解,从而让每一个智能体在分布式执行的时候都有一个效用函数,根据该效用函数来做出决策。这就是基于值分解的方法。
当然,除了可以分布式执行的好处之外,值分解的方法还可以帮助智能体进行更快速的学习,我们从贝尔曼最优方程出发:
我们在训练集中式价值函数的时候,根据贝尔曼最优方程,需要找出使得集中式动作价值最大的联合动作,这在联合动作空间很大的时候,其实是很困难的,也就是说,我们通过动态规划去进行提升的时候,很困难,因为找不到最大值。但是如果我们通过值分解的形式来表示集中式的价值函数,那再找最大值的时候,只需要根据每一个智能体的效用函数贪婪的选择每一个智能体的动作就行了,最后的联结动作就是联合最优动作,这个通过IGM原则来保证。
说完了动态规划中提升的问题,我们再来考虑一下评估的问题,我们需要准确的评估集中式的价值函数,那就要保证我们分解的值函数的形式要能够拟合真实的中心价值函数,如果不能准确拟合,那再提升的时候就会存在偏差。
除此之外,通过值分解的方法带来的另一个好处是可以理解每一个智能体对共享奖励的贡献。
IGM属性(Individual-Global-Max property)
这个属性保证了如果每个智能体都采取了使其个体效用最大化的行动,那么这些行动的组合将是全局最优的行动,即最大化整个系统的集中式动作价值函数。个体效用函数和中心化效用函数的最大值如下定义:
IGM属性形式化定义如下:
IGM属性也保证了我们刚开始提到的几个好处:分散执行、训练时的目标价值函数的计算以及对每一个智能体对共享奖励的贡献的估计。这是因为如果一个智能体的动作导致了共享奖励的增大,那么对应的该智能体对应的效用函数也应对应增大,从而可以解决信用分配问题。
最后需要注意的是,有些环境可能并不存在满足IGM属性的分解,尤其是在局部观测的情况下,单个智能体由于缺乏重要信息只靠效用函数无法区分动作的价值。
线性值分解(Linear Value Decomposition)
现在我们来讲解第一种值分解的方法,我们现在的目标是在满足IGM属性的原则上,将中心化价值函数 Q ( h , z , a ; θ ) Q(h,z,a;\theta) Q(h,z,a;θ)进行分解。我们可以假设共享奖励 r t = r ˉ t 1 + r ˉ t 2 + . . . + r ˉ t n r_t =\bar r_t^1+\bar r_t^2+...+\bar r_t^n rt=rˉt1+rˉt2+...+rˉtn,注意这里的 r ˉ t i \bar r_t^i rˉti表示的是每一个智能体对共享奖励的效用,也可以理解为每一个智能体对共享奖励的贡献,而不是实际的从环境中得到的奖励 。
接下来,我们可以通过下面的变换,将中心化的值函数分解为每一个智能体的效用函数之和:
这样的分解满足IGM属性,证明略(反证法证明)。
上述分解就是值分解网络(VDN)算法,我们通过一个共享的经验缓存池来存储经验,然后通过采集到的经验来更新下面的参数,使得损失函数最小:
注意,这里的每一个智能体的效用函数是通过联合优化的形式更新的。
完整的VDN伪代码如下:
单调值分解(Monotonic Value Decomposition)
通过VDN进行简单的线性分解是自然的,但是在许多情况下,智能体的贡献通过一个非线性关系来表示,比如,一个智能体的行为可以增强或削弱另一个智能体的行为,或者多个智能体的某种特定的组合可能会产生超出单个效用之和的协同效应,我们需要采用非线性模型来更加准确的表示每个智能体的贡献,这里最典型的算法是QMIX。
QMIX算法通过确保集中式价值函数对每一个智能体的效用函数的单调增 ,来保证IGM属性的成立,很明显,通过这种方式,提高了效用函数对中心价值函数的表达能力,这里的单调性如下:
直观上,意味着单个智能体的效用增加也会导致中心化价值函数的增加。
QMIX定义了一个混合网络函数来组合这些效用函数,从而用来估计中心化的动作价值函数,如下:
这里的单调性是IGM属性的充分条件,而非必要条件,证明略(反证法)
实际上,只有当混合网络中的参数为正值的时候,才满足单调性条件,这里采用另外一个超参数网络来估计混合网络的参数。超参数网络的参数通过联合优化进行更新。
接下来,我们来看QMIX算法的损失函数定义:
在VDN中的线性分解也保持单调性,但是只能表示线性情况,所以可以说VDN是QMIX的子集。
接下来,我们给出QMIX的伪代码:
QMIX算法在很多环境下都战胜了VDN算法,在QMIX算法的原实现中,采用了一下几个细节来提高性能,效用函数网络和参数共享,并且再额外输入一个热编码的方式来区分每一个智能体的效用函数,智能体的效用网络被建模为循环神经网络,使得智能体可以利用额外的时间信息,以及额外的动作历史信息可以更好的理解之前的动作带来的影响,在每一个回合之后,利用该回合的数据更新所有网络的参数。
改进单调值分解(Beyond Monotonic Value Decomposition)
在一些环境中,依然存在QMIX分解表示不了的中心化价值函数,所以需要对上述的单调性条件进一步放宽,放宽后的条件如图所示:
由三部分组成,单个效用函数的线性组合,未分解和无限制的中心化价值函数,一个效用函数 V ( h , z ; θ v V(h,z;\theta^v V(h,z;θv,这里的中心化价值函数的作用是监督效用函数,使其满足上述条件,然而在部分可观测环境中,单个的效用函数由于缺乏信息不能准确的表示中心化价值函数,为了纠正二者之间的差别,利用效用函数 V V V来进行纠正,基于上述讨论,QTRAN算法被提出。
下面是QTRAN的损失函数:
QTRAN算法的特点是它直接优化集中式行动-价值函数,用于优化用于行动选择的个体效用函数。这与之前讨论的价值分解算法不同,它不是通过优化全局状态价值函数来间接影响个体效用函数,而是直接对集中式行动-价值函数进行优化。