Multi-Agent Actor-Critic for Mixed Cooperative-Competitive Environments 读书笔记

1. 介绍

       本文主要是将深度强化学习应用于多智能的控制。作者提出了一种演员评论方法的改进方法,该方法考虑了其他代理人的行动策略。此外,他们引入了一种培训方案,该方案综合考虑每个代理策略,以产生更强大的多代理策略,并能够成功地学习需要复杂的多智能体协调的政策

2. 核心

这篇文章我阅读了源码,它的网络架构如图1所示

 

图1  MADDPG

        从图中可以看出主要包含了Q和P网络,这两个网络是共同同时训练的。看到这里可能会有一个疑问,就是Q网络和P网络在训练时分别扮演的角色是什么,这个问题先按下不表。首先介绍一下网络,state_i或者action_i是智能体i的状态和动作,可以看出是所有的智能体的动作执行网络都是同一个,最终的训练结果也是为了得到这一段模型,即P网络中的前一部分全连接层。P网络的后一部分是类似于critic的作用,不同的是它使用了所有的智能体信息;Q网络是整体地训练。那么按理来说P network就已完成了整个actor-critic的工作了,为什么还需要Q network呢?

       为了解决这个问题,我们首先看一下MADDPG的算法描述

       通过观察我们发现,红色方框[1]对应的Q网络的更新,也就是整体的状态和动作的更新,而方框[2]对应的是每一个actor的更新学习。似乎两者的联系仍然不太清楚。

       最终,我在源码中的P netword底下找到了这样一句,reuse=True

q = q_func(q_input, 1, scope="q_func", reuse=True, num_units=num_units)[:,0]

       可以看到其实P_network第二部分的全连接参数和Q_netword是一致的,所以在训练时,第二部分全连接参数实际上是更新了两次,而actor的参数更新了一次。这样P_network和Q_network就关联了起来。P_network同传统a-c结构不同的是,它并没有将actor和critic分开来训练,而是将a-c视为一个网络训练,a-c的训练目标是最大化Q值

q = q_func(q_input, 1, scope="q_func", reuse=True, num_units=num_units)[:,0]
pg_loss = -tf.reduce_mean(q)    # 负号==>最大化Q
loss = pg_loss + p_reg * 1e-3

       注意到q值直接写成了loss形式,而且加了负号,所以P_network训练的目的是最大化Q值。

3. 算法工作方式(自己理解)

       至此,整个MADDPG的结构算是梳理清楚了,基本上和论文提供的伪代码一致。那么为什么MADDPG对于多智能体控制问题会行之有效呢?它能成功的原因是什么?下面谈谈我的浅见。

       首先是Q_network的更新,如果系统的整体动作达到优化,那么系统给的奖励也会更多,所以Q_network的输出也会更大。那么如果采用一般的a-c结构,很显然怎么选择actor的输入和critic的输入是一个问题。如果输入总体状态states,然后输出是智能体的所有动作,也就是DDPG的工作方式,很明显存在怎样去协调的问题,而且很难收敛(直观上),当然作者的实验结果也表明如此。所以只能独辟蹊径,将整体的评价网络分开,也就是创造一个Q_network。Q_network的作用就是评价整体的动作执行好坏。actor的网络的输入只有一个智能体的state_i,最后评价这个动作其实利用的是Q_network(因为它和P_network参数共享了),这里采用了直接增大Q值的优化,而且,很明显Q值肯定不会无限增大的。

      所以这篇文章的本质依然没有脱离a-c的思想,不过是针对多智能体场景对算法的结构进行了优化。

4. 文章中的证明

      文章中有提到随着智能体数量的增加,估计的策略梯度与正确的策略梯度就会越来越偏。下面的式子,其实证明不难,而且我觉得证明有很多地方是牵强附会。虽然,“假设”太牵强,即:本来两个智能体执行动作获得奖励的概率为0.5*0.5,那么三个就是0.5*0.5*0.5,这个强假设导致了梯度偏移随指数增加。但是其内在的逻辑性是成立的,智能体越多熵越大,越难收敛。

猜你喜欢

转载自blog.csdn.net/monotonomo/article/details/83340991