协同智能体强化学习中的MADDPG方法详解
论文原文:Multi-Agent Actor-Critic for Mixed Cooperative-Competitive Environments
论文翻译:MADDPG翻译
阅读本文需要强化学习基础,可以参考我前面的文章:多智能体强化学习入门
关于MADDPG强化学习算法的基础DDPG的可以查看我的文章:强化学习实践教学
对于MADDPG推荐的博客有:探秘多智能体强化学习-MADDPG算法原理及简单实现,里面包含代码实现。
github代码(基于Tensorflow):https://github.com/princewen/tensorflow_practice/tree/master/RL/Basic-MADDPG-Demo
MADDPG算法是单智能体算法DDPG在多智能体环境下的改进。其中最核心的差别就是,每个Agent的Critic部分都能够获取所有Agent的动作信息,进行中心化训练和非中心化执行。即在训练的时候,引入可以观察全局的critic来指导actor训练,而测试的时候只使用有局部观测的actor采取行动。off-line采用中心化训练,on-line采用非中心化执行,on-line与off-line的共同点就是actor,即只需要利用观测到的局部信息。
下面以两个智能体的情况为例:
r
1
(
s
,
a
1
)
=
E
a
2
∈
A
,
s
′
∈
S
[
r
1
(
s
′
)
p
(
s
′
∣
s
,
a
1
,
a
2
)
π
2
(
a
2
∣
s
)
]
r_1(s,a_1) = E_{a_2 \in A,s' \in S}[r_1(s')p(s'|s,a_1,a_2) \pi_2(a_2| s)]
r1(s,a1)=Ea2∈A,s′∈S[r1(s′)p(s′∣s,a1,a2)π2(a2∣s)]
p 1 ( s ′ ∣ s , a 1 ) = ∑ a 2 ∈ A p ( s ′ ∣ s , a 1 , a 2 ) π 2 ( a 2 ∣ s ) p_1(s' |s ,a_1) = \sum_{a_2 \in A} p(s' |s,a_1,a_2) \pi_2 (a_2| s) p1(s′∣s,a1)=a2∈A∑p(s′∣s,a1,a2)π2(a2∣s)
根据论文描述,算法在以下约束条件下运行:(1)学习的策略只能在执行时只能使用本地信息(即它们自己的观察结果),(2)我们无需知道环境的可微分动力学模型(3)我们对智能体之间的通信方法不做任何结构上的假设(即,我们不假设一个可区分的通信渠道)。 一旦满足上述要求,那么将产生一个通用的多智能体学习算法,不仅可以应用于具有明确通信渠道的合作博弈,还可以应用竞争性博弈和只涉及主体之间物理交互的博弈。
论文中三个改进是:
- 集中式训练,分布式执行:训练时采用集中式学习训练critic与actor,使用时actor只用知道局部信息就能运行。critic需要其他智能体的策略信息,本文给了一种估计其他智能体策略的方法,能够只用知道其他智能体的观测与动作。
- 改进了经验回放记录的数据。为了能够适用于动态环境,每一条信息由 ( x , x ′ , a q , . . . , a n , r 1 , . . . , r n ) (x,x',a_q,...,a_n,r_1,...,r_n) (x,x′,aq,...,an,r1,...,rn) 组成, x = ( o 1 , . . . , o n ) x = (o_1,...,o_n) x=(o1,...,on) 表示每个智能体的观测。
- 利用策略集合效果优化(policy ensemble):对每个智能体学习多个策略,改进时利用所有策略的整体效果进行优化。以提高算法的稳定性以及鲁棒性。
代码
def actor_network(name):
with tf.variable_scope(name) as scope:
x = state_input
x = tf.layers.dense(x, 64)
if self.layer_norm:
x = tc.layers.layer_norm(x, center=True, scale=True)
x = tf.nn.relu(x)
x = tf.layers.dense(x, 64)
if self.layer_norm:
x = tc.layers.layer_norm(x, center=True, scale=True)
x = tf.nn.relu(x)
x = tf.layers.dense(x, self.nb_actions,
kernel_initializer=tf.random_uniform_initializer(minval=-3e-3, maxval=3e-3))
x = tf.nn.tanh(x)
return x
def critic_network(name, action_input, reuse=False):
with tf.variable_scope(name) as scope:
if reuse:
scope.reuse_variables()
x = state_input
x = tf.layers.dense(x, 64)
if self.layer_norm:
x = tc.layers.layer_norm(x, center=True, scale=True)
x = tf.nn.relu(x)
x = tf.concat([x, action_input], axis=-1)
x = tf.layers.dense(x, 64)
if self.layer_norm:
x = tc.layers.layer_norm(x, center=True, scale=True)
x = tf.nn.relu(x)
x = tf.layers.dense(x, 1, kernel_initializer=tf.random_uniform_initializer(minval=-3e-3, maxval=3e-3))
return x
上面是模型部分的代码,actor部分相对于DDPG没有变化,Critic部分只需要加入其它智能体的动作作为输入即可。
# 最大化Q值
self.actor_loss = -tf.reduce_mean(
critic_network(name + '_critic', action_input=tf.concat([self.action_output, other_action_input], axis=1),
reuse=True))
self.actor_train = self.actor_optimizer.minimize(self.actor_loss)
self.target_Q = tf.placeholder(shape=[None, 1], dtype=tf.float32)
self.critic_loss = tf.reduce_mean(tf.square(self.target_Q - self.critic_output))
self.critic_train = self.critic_optimizer.minimize(self.critic_loss)
在Loss计算上可以看到依旧遵循DDPG的方法。Critic的估计值尽量靠近预测值,actor尽量使得Critic的估计值越大越好。
agent1_memory.add(np.vstack([o_n[0], o_n[1], o_n[2]]),
np.vstack([agent1_action[0], agent2_action[0], agent3_action[0]]),
r_n[0], np.vstack([o_n_next[0], o_n_next[1], o_n_next[2]]), False)
agent2_memory.add(np.vstack([o_n[1], o_n[2], o_n[0]]),
np.vstack([agent2_action[0], agent3_action[0], agent1_action[0]]),
r_n[1], np.vstack([o_n_next[1], o_n_next[2], o_n_next[0]]), False)
agent3_memory.add(np.vstack([o_n[2], o_n[0], o_n[1]]),
np.vstack([agent3_action[0], agent1_action[0], agent2_action[0]]),
r_n[2], np.vstack([o_n_next[2], o_n_next[0], o_n_next[1]]), False)
在经验池储存上,MADDPG不但要储存自身的可观察的状态信息,还要储存的是其它智能体的可观测状态信息。同时储存自身和他人的动作信息。以及每个智能体的下一个状态。
上一篇: 理解协同竞争环境的多智能体Actor-Critic方法:基于NeurlPS 2017的MADDPG论文解析
下一篇: multi-agent actor-critic for mixed cooperative-competitive environments github
推荐阅读
-
【摩尔线程+Colossal-AI强强联手】MusaBert登上CLUE榜单TOP10:技术细节揭秘 - 技术实力:摩尔线程凭借"软硬兼备"的技术底蕴,让MusaBert得以从底层优化到顶层。其内置多功能GPU配备AI加速和并行计算模块,提供了全面的AI与科学计算支持,为AI推理和低资源条件下的大模型训练等场景带来了高效、经济且环保的算力。 - 算法层面亮点:依托Colossal-AI AI大模型开发系统,MusaBert在训练过程中展现出了卓越的并行性能与易用性,特别在预处理阶段对DataLoader进行了优化,适应低资源环境高效处理海量数据。同时,通过精细的建模优化、领域内数据增强以及Adan优化器等手段,挖掘和展示了预训练语言模型出色的语义理解潜力。基于MusaBert,摩尔线程自主研发的MusaSim通过对比学习方法微调,结合百万对标注数据,MusaSim在多个任务如语义相似度、意图识别和情绪分析中均表现出色。 - 数据资源丰富:MusaBert除了自家高质量语义相似数据外,还融合了悟道开源200GB数据、CLUE社区80GB数据,以及浪潮公司提供的1TB高质量数据,保证模型即便在较小规模下仍具备良好性能。 当前,MusaBert已成功应用于摩尔线程的智能客服与数字人项目,并广泛服务于语义相似度、情绪识别、阅读理解与声韵识别等领域。为了降低大模型开发和应用难度,MusaBert及其相关高质量模型代码已在Colossal-AI仓库开源,可快速训练优质中文BERT模型。同时,通过摩尔线程与潞晨科技的深度合作,仅需一张多功能GPU单卡便能高效训练MusaBert或更大规模的GPT2模型,显著降低预训练成本,进一步推动双方在低资源大模型训练领域的共享目标。 MusaBert荣登CLUE榜单TOP10,象征着摩尔线程与潞晨科技联合研发团队在中文预训练研究领域的领先地位。展望未来,双方将携手探索更大规模的自然语言模型研究,充分运用上游数据资源,产出更为强大的模型并开源。持续强化在摩尔线程多功能GPU上的大模型训练能力,特别是在消费级显卡等低资源环境下,致力于降低使用大模型训练的门槛与成本,推动人工智能更加普惠。而潞晨科技作为重要合作伙伴,将继续发挥关键作用。
-
详解多智能体强化学习算法系列(三期):QMIX、MADDPG与MAPPO的深度解析
-
实用讲解:多智能体强化学习算法进阶(下)—— MADDPG、QMIX、MAPPO详解
-
实用讲解:多智能体强化学习算法进阶(下)—— MADDPG、QMIX、MAPPO详解
-
【一】最新多智能体强化学习方法【总结】本人:多智能体强化学习算法【一】【MAPPO、MADDPG、QMIX】
-
详解多智能体强化学习算法系列(三期):QMIX、MADDPG与MAPPO的深度解析
-
深度强化学习中的多 agent 技巧 - MADDPG算法详解与TensorFlow实现
-
协同智能体强化学习中的MADDPG方法详解
-
理解协同竞争环境的多智能体Actor-Critic方法:基于NeurlPS 2017的MADDPG论文解析
-
协同智能体强化学习中的MADDPG方法详解