MADDPG算法

news/2024/12/23 0:28:30/文章来源:https://www.cnblogs.com/usersname/p/18622832

MADDPG算法

论文名称:《Multi-Agent Actor-Critic for Mixed Cooperative-Competitive Environments》

一、基本问题

MADDPG是一篇经典的多智能体强化学习算法。在MADDPG以前,多智能体强化学习算法主要为独立学习技术。

  • 独立学习技术

    独立学习技术就是在环境中对于每一个智能体单独的使用单智能体强化学习的算法。比如独立学习的典型算法IQL算法(Independent Q Learning)就是在多智能体环境下单独的使用Q Learning算法。

  • 独立学习技术的优缺点

    使用独立学习技术,可以有效解决环境复杂的问题。在多智能体强化学习中,智能体的动作空间一般是所有智能体动作的联合空间。如果智能体的数量巨大,这个联合空间也是十分巨大的。这对于模型来说是一个巨大的负担。如果使用独立学习技术,就不存在这个负担,因为独立学习直接假设其他智能体也是环境的一部分。

    所以独立学习也有非常明显的缺点,就是直接假设其他智能体也是环境的一部分。在多智能体环境下,特别是需要智能体之间进行合作或者博弈等场景下,智能体之间往往需要有一定的交流,面对这样的场景,独立学习需要针对场景做出特殊的优化。并且智能体的动作可能会导致环境的不稳定,最终导致整个模型无法收敛。所以独立学习技术局限性较大。

MADDPG算法就是为了克服独立学习的以上缺点而提出一种通用性强的算法。

二、基础知识

2.1 DDPG算法

DDPG算法,以AC框架为基础,借鉴DQN算法的思想,主要是为了解决高维连续动作空间的问题而提出。相较与传统的AC框架使用策略梯度更新Actor网络。即:

\[J(\theta) = -log(\pi(a_t,s_t)) Advantage \space Function \tag{1} \]

式(1)中,Advantage Function 表示优势函数。在传统AC中,Advantage Function 直接取 \(Q(s_t,a_t)\)。在A2C算法中发现在Advantage Function 中加入Baseline可以提高模型效果。并且通常情况下我们取 Baseline 为 \(V(s_{t+1}) = \mathbb{E}_{a\sim \pi}[R_{t+1} + \gamma Q(s_{t+1},a_{t+1})]\)。也就是公式(1)的最终形式:

\[J(\theta) = -log(\pi(s_t|a_t))[Q(s_t,a_t) - (R_{t+1} + \gamma Q(s_{t+1},a_{t+1}))] \tag{2} \]

而在DDPG算法中,使用了确定性策略梯度。确定性策略梯度的目标是最大化动作对应Q值。也就是:

\[\begin{equation} \begin{aligned} J(\theta) &= -Q(s_t, \mu_{\theta}(s_t)) \\ \\ \nabla J(\theta) &= - \nabla Q(s_t,\mu(s_t))\nabla\mu_{\theta}(s_t) \end{aligned} \end{equation} \tag{3} \]

公式(3)中 \(\mu\) 表示策略网络。总体来说DDPG算法可以使用下面的流程图来表示:
img

2.2 多智能体训练范式

2.2.1 CTDE 范式

CTDE(centralized training and decentralized execution)中文名叫做集中式训练,分布式执行。该方式,通过一个全局的Critic网络评估每一个智能体动作或者状态的价值。CTDE范式的示意图如下:
img
使用CTDE范式的典型代表有VDN算法、QMIX算法。总体来说,CTDE范式可以有效的解决智能体懒惰的问题(在其他智能体动作较好的时候,如果有一个智能体动作较差,环境整体的奖励还是较大,久而久之,智能体就会开始摸鱼)。但是CTDE范式的智能体观察依旧是局部的,智能体不能有效利用其他智能体的信息进行决策。

2.2.2 DTDE 范式

DTDE(decentralized training and centralized execution)中文名叫分散式训练,集中式执行。该范式在所有智能体动作之后,将全局的信息送往每一个Critic网络。DTDE范式的示意图如下:

img

使用DTDE范式的典型代表就是MADDPG算法。总体来说,DTDE相对于CTDE不需要维护中心化的Critic,更加简单方便,但是相对来说智能体的观察也更加局部,容易陷入局部最优,并且依旧存在维度爆炸的问题。

三、MADDPG算法

MADDPG算法使用的DTDE范式。在每一个智能体上运行DDPG算法。但是相较于传统的DDPG算法,MADDPG算法做出了一定的修改。

  1. 由于使用了DTDE范式,所以对于每一个Criric都需要输入其他Actor的动作。但是实际上,在多智能体环境下,我们不能假设我们知道其他智能体的动作。所以对于每一个Agent,都需要对其他智能体维护一个Target Policy,来预测其他智能体的在当前状态下的动作,注意这里Target Policy的输入是其他智能体的在该智能体状态下的观察值。该策略使用在线的方式更新,更新的损失函数为:

    \[J(\phi_i^j) = -\mathbb{E}_{o_j,a_j}\left[\log \hat{\mu}_i^j(a_j|o_j) + \alpha H(\hat{\mu}_i^j)\right] \tag{4} \]

    在公式(4)中, \(\hat{\mu}_i^j\) 表示第 \(i\) 个智能体对 \(j\) 个智能体维护的目标策略网络。 \(o_j\) 表示该网络的观察值, \(a_j\) 表示第 \(j\) 个智能体的实际动作。 \(H(\hat{\mu}_i^j)\) 表示熵,目的是防止网络过拟合,超参数 \(\alpha\) 用来控制熵的大小。总的来说,公式(4)的目标是使得目标网络输出的动作概率分布尽可能的逼近真实的动作。

  2. 接1,虽然公式(4)中加入了熵在一定程度上防止目标策略网络过拟合。但是这种方式也不总是非常有效。特别是在博弈环境中,目标策略网络特别容易拟合对手的策略。论文中认为,这种拟合是脆弱的,因为一旦对手修改了策略,那么目标策略网络将完全失效。为了应对这种情况,作者提出每一个智能体维护一个目标策略网络的集合。该集合中有 \(k\) 组策略网络。每次训练随机选取一组进行梯度下降。在论文的实验中表明,使用这种方式训练的智能体具有更加强大的泛化性。

  3. DDPG算法的提出是为了解决高维连续动作空间的问题。但是MADDPG的实验部分却将DDPG算法应用在离散动作空间下。但是如果直接使用Soft Max函数输出每一个动作的概率,就需要进行采样才能确定动作,进一步传递给 \(Q\)网络计算 \(Q\)值。但是采样操作是不可导的,也就是我们无法计算公式(3)。所以在论文中,作者提到使用 gumbel-softmax可以解决这个问题。

    • gumbel-softmax

      gumbel-softmax 的核心是重参数技巧。简单来说,gumbel-softmax的原理可以概括为,在某个分布中不断选择概率最大的值的概率也对应着一个分布,这个分布就是gumbel分布。gumbel-softmax就通过gumbel分布将 Actor输出的概率分布采样动作(选取概率最大的动作)转化为了gumbel 分布,而gumbel分布是连续可导的。而gumbel分布的计算利用了重参数技巧。

  • 为什么MADDPG算法基于确定性策略梯度而不是策略梯度?

    在论文中,论文中特意探讨了为什么不使用策略梯度。原因在于策略梯度估计的 \(Q\) 有一定的误差(TD3论文中详细讨论了这一部分)。在多智能体环境下,该误差会成指数级增长(详细见卢论文中的证明)。所以最终选择了确定性策略梯度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/857013.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ble广播和连接

蓝牙BLE设备的状态:从机处于待机,广播,连接状态中的一种,主机处于待机,扫描,连接状态的一种。 在BLE通讯中,数据收发都是通过连接事件触发的。连接事件的发生始终位于一个频率,这个频率由连接参数决定。连接参数是主机决定的,从机可以向主机发起连接参数请求,但是最终…

ble基础

一、蓝牙基础 蓝牙标准profile bluez linux tools 一文读懂BLE 1.1 蓝牙分类 蓝牙分为经典蓝牙(BT-Bluetooth)和低功耗蓝牙(BLE-Bluetooth Low Energy)。这两套原理和实现都不一样,也无法实现互通。 Basic Rate(BR)/EDR/AMP 最初的蓝牙技术,包括可选的EDR(Enhanced Da…

爬取小说案例-BeautifulSoup教学篇

@目录前言导航BeautifulSoupBeautifulSoup介绍BeautifulSoup的使用1. 导入库2. 实例化对象3. 提取数据成果共勉博客 前言 当我们进行爬取各种资源,拿到源码进行解析数据的时候,会用到各种解析方式,本文介绍的爬取小说的一个案例,使用比较受欢迎的python第三方库BeautifuSou…

vue基础指令示例

1、vue基础示例<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>基础指令</title><script src="../vu/js/vue.js"></script><style>.box1{width: 150px;height: 1…

楚慧杯Misc—复现

gza_CrackerCrack_me 追踪tcp流量找到字典保存字典,上流量一把梭base64解密特殊流量2 一把梭出个www.zip打开,是个RSA <?php $cmd = @$_POST[ant]; $pk = <<<EOF -----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCfhiyoPdM6svJZ+QlYywklwVcx…

INFINI Labs 产品更新 | Console/Gateway/Agent 等产品开源发布首个版本

INFINI Labs 产品又更新啦~,包括 Easysearch v1.9.0、Gateway、Console、Agent、Loadgen v1.27.0。本次各产品更新了很多亮点功能,如 Easysearch 优化了多版本兼容配置;Console/Gateway/Agent/Loadgen 及 Framework 开源后,发布首个重大更新版本,支持过期元数据删除,指标…

JVM简介—1.Java内存区域

大纲 1.运行时数据区的介绍 2.运行时数据区各区域的作用 3.各个版本内存区域的变化 4.直接内存的使用和作用 5.站在线程的角度看Java内存区域 6.深入分析堆和栈的区别 7.方法的出入栈和栈上分配、逃逸分析及TLAB 8.虚拟机中的对象创建步骤 9.对象的内存布局 10.对象的访问定位 …

鸿蒙登录页面好看的样式设计-HarmonyOS应用开发实战与ArkTS代码解析【HarmonyOS 5.0(Next)】

鸿蒙登录页面好看的样式设计-HarmonyOS应用开发实战与ArkTS代码解析 万物智联,打造无缝智能生态 在科技不断迭代更新的今天,每一次技术的飞跃都是对未来的深刻探索。华为,这个始终站在科技前沿的企业,再次以HarmonyOS 5.0(Next)这一操作系统的新篇章,向我们展示了科技如…

EVM介绍及字节码简单逆向

什么是EVM 以太坊是一个分布式的状态机,其中的状态不仅包含所有的账户和余额,还有EVM和EVM状态(可以被预先定义的规则所改变的东西); EVM是以太坊中的虚拟机,可以允许不被信任的代码执行;它是一个基于栈的虚拟机,有一个短暂的内存和一个永久存储的状态;PC:类似计算机中的…

HarmonyOS 5.0 (Next)应用开发实战:使用ArkTS构建开箱即用的登录页面【HarmonyOS 5.0(Next)】

HarmonyOS 5.0 (Next)应用开发实战:使用ArkTS构建开箱即用的登录页面【HarmonyOS 5.0(Next)】 一、HarmonyOS 5.0美学与科技的完美融合 在科技飞速发展的今天,每一个细微的创新都可能引领一场变革。华为,作为科技领域的领航者,再次以HarmonyOS 5.0(Next)这一里程碑式…

fellyfin 开启硬件加速 Ubuntu 安装硬件驱动

需要 root 权限。在主机系统上安装该intel-gpu-tools包,用于在 Linux 上调试英特尔显卡驱动程序。不同发行版的名称不同。在 Debian 和 Ubuntu 上:sudo apt update && sudo apt install -y intel-gpu-tools在 Jellyfin 网络客户端中播放视频,并通过设置较低的分辨率…