【MARL】深入理解多智能体近端策略优化(MAPPO)算法与调参

【MARL】深入理解多智能体近端策略优化(MAPPO)算法与调参
        📢本篇文章是博主强化学习(RL)领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对相关等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅解。文章分类在👉强化学习专栏:

       【强化学习】(47)---《深入理解多智能体近端策略优化(MAPPO)算法与调参》

深入理解多智能体近端策略优化(MAPPO)算法与调参

目录

0 前言

1 MAPPO核心特点

2 On-Policy 和 Off-Policy

2.1. On-Policy 算法

2.2 Off-Policy 算法

对比总结

形象比喻

On-Policy 的小孩

Off-Policy 的小孩

它们的关键区别:

3 MAPPO 是 On-Policy,如何学习历史经验?

4 MAPPO 算法的调参建议

超参数相关

网络结构相关

环境相关

更新频率

[Python] On-Policy 和 Off-Policy 实现

[Notice]  注意事项

5 总结


0 前言

        MAPPO 是一种多智能体强化学习算法,基于单智能体的 PPO (Proximal Policy Optimization) 算法进行了扩展,专门设计用于解决多智能体协作和竞争环境中的决策问题。

如果对于MAPPO算法不了解,可以查看这篇文章(代码):

【MADRL】多智能体近端策略优化(MAPPO)算法

1 MAPPO核心特点

  1. 集中价值网络(Centralized Critic)
    • MAPPO 使用一个 centralized critic,将多个智能体的状态、动作信息整合在一起,用于计算价值函数。
    • 政策(policy)仍然是每个智能体独立的(decentralized),适合分布式执行。
  2. 分布式执行与集中式学习
    • 在训练时,所有智能体共享全局信息,进行集中式学习。
    • 在执行时,每个智能体仅依赖自己的局部观察,保持分布式决策的能力。
  3. 对 PPO 的优化
    • PPO 的核心是通过 clip range 限制策略更新的幅度,确保训练稳定。MAPPO 在多智能体环境中保留了这一优点。
    • 针对多智能体场景,对网络结构、数据处理等进行了调整,优化了 PPO 在该场景下的性能。

2 On-PolicyOff-Policy

        要想更好的理解MAPPO算法的原理机制,得先从On-PolicyOff-Policy 两种算法类型出发。在强化学习中,on-policyoff-policy 算法根据策略更新时是否依赖当前策略的经验来区分。

以下是两类算法的定义和常见算法列表:


2.1. On-Policy 算法

定义

  • On-policy 算法依赖于当前策略生成的经验进行更新。
  • 每次策略更新需要使用最新的采样数据,不能直接利用历史经验。
  • 强调策略与数据分布的一致性。
常见的 On-Policy 算法
  1. Policy Gradient (PG)
    • 基本策略梯度方法。
  2. Trust Region Policy Optimization (TRPO)
    • 提高策略更新的稳定性,限制更新幅度。
  3. Proximal Policy Optimization (PPO)
    • TRPO 的改进版本,具有更简单的实现。
    • 两种变体:clip-PPO 和 adaptive KL-PPO。
  4. Actor-Critic 系列
    • A2C (Advantage Actor-Critic):同步更新的 Actor-Critic。
    • A3C (Asynchronous Advantage Actor-Critic):异步更新版本。
  5. MAPPO (Multi-Agent PPO)
    • 专为多智能体场景设计的 PPO 变种。
优点
  • 理论收敛性强。
  • 更新稳定,适合复杂策略。
缺点
  • 样本利用率低(每条数据通常只用一次)。
  • 对环境交互的需求较高。

2.2 Off-Policy 算法

定义

  • Off-policy 算法利用历史经验进行策略更新,数据采样可以来自不同策略。
  • 借助经验回放(replay buffer)提高样本利用率。
常见的 Off-Policy 算法
  1. Q-Learning 系列
    • DQN (Deep Q-Network):结合神经网络的 Q-learning。
    • Double DQN:解决 DQN 过估计问题。
    • Dueling DQN:分离状态价值和动作优势。
  2. Deterministic Policy Gradient (DPG)
    • 专为连续动作空间设计。
  3. Deep Deterministic Policy Gradient (DDPG)
    • DPG 的深度强化学习版本,结合 replay buffer 和目标网络。
  4. Twin Delayed Deep Deterministic Policy Gradient (TD3)
    • DDPG 的改进版,缓解过估计问题。
  5. Soft Actor-Critic (SAC)
    • 基于最大熵的策略,适用于连续动作空间。
  6. Q-Learning with Function Approximation
    • Fitted QNeural Fitted Q 等。
优点
  • 样本利用率高(数据可多次利用)。
  • 更适合数据采样成本高的任务(如真实机器人交互)。
缺点
  • 更新的稳定性较差(需要经验回放和目标网络)。
  • 训练复杂度较高。

对比总结

特性On-PolicyOff-Policy
样本利用率低(一次性使用)高(可重复利用)
缓冲区无长期缓冲区使用 replay buffer
策略一致性必须与当前策略一致可利用任意策略生成的数据
学习效率依赖高频环境交互适合数据采样成本高的场景
收敛性理论收敛性强收敛性依赖数据分布
应用场景实时决策、多智能体复杂连续动作、高成本环境

形象比喻

        on-policy有点像个调皮的小孩子,被打了/奖励了,当场就长记性的那种。而off-policy这种小孩子,被打了/奖励了,它还得回味下,这是一次偶然的惩罚还是这样做就是不好的,他还会去调皮的捣蛋,直到被打怕了(学习到了)。

 On-Policy 的小孩

  • “被打了/奖励了,当场就长记性”
    贴合 on-policy 的特点:
    • on-policy 是即时性学习,完全依赖于当前策略的反馈进行调整。
    • 它专注于当前的策略表现,而不会回头复盘过去的错误或奖励。
    • 优点:即时调整,学习过程直接且明确。
    • 缺点:缺乏对历史的反思和利用,样本效率低。

Off-Policy 的小孩

  • “回味一下,这是一场偶然的惩罚还是这样做就是不好的”
    • 描述了 off-policy 的核心机制:利用经验回放。off-policy 会保存大量的历史经验,在反复回顾和分析中找到优化策略的方法。
    • 这种行为类似一个喜欢“钻牛角尖”的小孩,经过无数次试验才明白真正的规律。
  • “调皮地捣蛋,直到被打怕了”
    • off-policy 算法在学习时确实会反复尝试甚至冒险探索(如 DQN 的 ϵϵ-greedy 策略),不断调整对环境的理解。
    • 它的学习过程可能显得缓慢,但通过深入分析历史数据,它最终会学得更全面和稳定。

它们的关键区别:

  • 即时性 vs 历史性:on-policy 专注于当前,而 off-policy 反思过去。
  • 效率 vs 深度:on-policy 快速适应环境,而 off-policy 更深刻地理解长期规律。

3 MAPPO 是 On-Policy,如何学习历史经验?

        有了上面的基础,MAPPO 是 on-policy。它的缓冲区(buffer)在每次新的 episode 开始时会被清空,而不像 off-policy 算法那样长期保留数据。这主要体现在以下几点:

为什么会清空缓冲区?

        On-Policy 的约束
        On-policy 算法(如 PPO 和 MAPPO)的策略更新只能依赖最新策略采样的数据,历史数据与当前策略分布不一致,因此被舍弃。这确保了策略更新的稳定性。

如何应对这个问题?

尽管无法直接使用历史经验,仍然可以通过以下方法弥补:

  1. 加大采样量(buffer size)
    增加单次采样的 episode_lengthbatch_size,让模型在每次采样时接触更多样本。
  2. 使用 advantage 标准化
    通过标准化 GAE 或 Q 值来减小不同 episode 数据间的方差,从而稳定更新。
  3. 调整训练步数
    MAPPO 的一个优势是,它通常以 centralized critic 方式加速策略学习。通过适当增加训练步数,可以弥补无法利用历史经验的缺陷。
  4. 环境重置机制
    对于训练环境,确保多样性,例如引入 domain randomization 或多种初始化状态,间接增加训练数据的广度。

4 MAPPO 算法的调参建议

        MAPPO 的核心参数调节分为以下几类:

超参数相关
  • 学习率(learning rate)
    适当调低学习率可以提高稳定性,尤其在多智能体环境中噪声较大的情况下。通常建议从 1e−4或 5e−4开始测试。
  • 折扣因子(gamma)
    γγ 控制长期回报的权重,推荐从 0.95 或 0.99开始,根据任务的时间跨度调整。
  • GAE λ(lambda for Generalized Advantage Estimation)
    通常设置为 0.95 左右,平衡偏差与方差的影响。
  • clip range(裁剪范围)
    PPO 的核心超参数,通常设置为 0.1 到 0.3 之间,越小代表对策略更新的限制越强。
网络结构相关
  • 隐藏层大小(hidden size)
    可以调试网络的层数和每层的单元数。典型设置为两层,每层 64 到 256 个单元,视环境复杂度而定。
  • 共享网络与独立网络
    MAPPO 支持共享网络(centralized critic)或独立网络(decentralized critic)。如果任务需要高效协作,建议使用共享网络。
环境相关
  • batch size
    批量大小对训练效率有很大影响,推荐设置为每次采样 2048 到 4096 个 time steps,或者按环境规模调整。
  • episode length
    对于 MAPPO,episode_length 确实非常关键,因为它决定了每次采样的数据量。可以根据环境复杂度和任务长度动态调整,通常从 200 到 1000 步之间。
更新频率
  • policy update iterations
    每次采样后,建议进行 4 到 10 次梯度更新(epochs),以保证策略能够充分利用每批数据。

[Python] On-Policy  Off-Policy 实现

Proximal Policy Optimization (PPO) 为例:

        🔥若是下面代码复现困难或者有问题,欢迎评论区留言;需要以整个项目形式的代码,请在评论区留下您的邮箱📌,以便于及时分享给您(私信难以及时回复)。
"""《on-Policy》 时间:2024.11 作者:不去幼儿园 """ Initialize policy network πθ with parameters θ Initialize value network Vϕ with parameters ϕ for iteration = 1, 2, ..., N do # Collect trajectories (states, actions, rewards) using current policy πθ trajectories = [] for episode = 1, ..., M do state = environment.reset() episode_trajectory = [] for t = 1, ..., T do action = πθ(state) # Sample action from current policy next_state, reward, done = environment.step(action) episode_trajectory.append((state, action, reward)) if done: break state = next_state trajectories.append(episode_trajectory) # Compute advantages using GAE or Monte Carlo returns advantages, returns = compute_advantages(trajectories, Vϕ) # Update policy πθ using clipped surrogate objective for _ in range(policy_update_epochs): policy_loss = compute_policy_loss(πθ, advantages) θ = θ - α_policy * ∇(policy_loss) # Update value network Vϕ for _ in range(value_update_epochs): value_loss = compute_value_loss(Vϕ, returns) ϕ = ϕ - α_value * ∇(value_loss) 

Deep Q-Learning (DQN) 为例: 

"""《off-Policy》 时间:2024.11 作者:不去幼儿园 """ Initialize Q-network Qθ with parameters θ Initialize target network Qθ' with parameters θ' = θ Initialize replay buffer D for iteration = 1, 2, ..., N do state = environment.reset() for t = 1, ..., T do # ε-greedy policy for exploration if random() < ε: action = random_action() else: action = argmax(Qθ(state)) next_state, reward, done = environment.step(action) # Store transition in replay buffer D.append((state, action, reward, next_state, done)) # Sample minibatch from replay buffer minibatch = random_sample(D, batch_size) # Compute target values target_values = [] for (s, a, r, s_, done) in minibatch: if done: target = r else: target = r + γ * max(Qθ'(s')) target_values.append(target) # Update Q-network Qθ loss = compute_loss(Qθ, minibatch, target_values) θ = θ - α * ∇(loss) # Update state if done: break state = next_state # Periodically update target network if iteration % target_update_freq == 0: θ' = θ 

[Notice]  注意事项

on-policy 关键点:

  • 数据从环境实时采样,不存储历史数据。
  • 更新策略和价值网络时仅使用当前采样的数据。
  • 每次策略更新后,之前的数据会被丢弃。

off-policy 关键点:

  • 使用 replay buffer 保存历史数据,重复利用经验。
  • 策略与目标网络更新分离,数据可以来自不同的策略。
  • 数据利用率高,但需要经验回放和目标网络来稳定训练。
        由于博文主要为了介绍相关算法的原理和应用的方法,缺乏对于实际效果的关注,算法可能在上述环境中的效果不佳或者无法运行,一是算法不适配上述环境,二是算法未调参和优化,三是没有呈现完整的代码,四是等等。上述代码用于了解和学习算法足够了,但若是想直接将上面代码应用于实际项目中,还需要进行修改。

5 总结

        MAPPO 是一个高效、稳定且适应性强的多智能体强化学习算法,通过结合 PPO 的稳定性和多智能体环境的需求,为协作与竞争场景提供了强有力的解决方案。


     博客都是给自己看的笔记,如有误导深表抱歉。文章若有不当和不正确之处,还望理解与指出。由于部分文字、图片等来源于互联网,无法核实真实出处,如涉及相关争议,请联系博主删除。如有错误、疑问和侵权,欢迎评论留言联系作者,或者添加VX:Rainbook_2,联系作者。✨

Read more

深挖 DeepSeek 隐藏玩法·智能炼金术2.0版本

深挖 DeepSeek 隐藏玩法·智能炼金术2.0版本

前引:屏幕前的你还在AI智能搜索框这样搜索吗?“这道题怎么写”“苹果为什么红”“怎么不被发现翘课” ,。看到此篇文章的小伙伴们!请准备好你的思维魔杖,开启【霍格沃茨模式】,看我如何更新秘密的【知识炼金术】,我们一起来解锁更加刺激的剧情!友情提醒:《《《前方高能》》》 目录 在哪使用DeepSeek 如何对提需求  隐藏玩法总结 几个高阶提示词 职场打工人 自媒体创作 电商实战 程序员开挂 非适用场地 “服务器繁忙”如何解决 (1)硅基流动平台 (2)Chatbox + API集成方案 (3)各大云平台 搭建个人知识库 前置准备 下载安装AnythingLLM 选择DeepSeek作为AI提供商 创作工作区 导入文档 编辑  编辑 小编寄语 ——————————————————————————————————————————— 在哪使用DeepSeek 我们解锁剧情前,肯定要知道在哪用DeepSeek!咯,为了照顾一些萌新朋友,它的下载方式我放在下面了,拿走不谢!  (1)

By Ne0inhk
【AI大模型】DeepSeek + 通义万相高效制作AI视频实战详解

【AI大模型】DeepSeek + 通义万相高效制作AI视频实战详解

目录 一、前言 二、AI视频概述 2.1 什么是AI视频 2.2 AI视频核心特点 2.3 AI视频应用场景 三、通义万相介绍 3.1 通义万相概述 3.1.1 什么是通义万相 3.2 通义万相核心特点 3.3 通义万相技术特点 3.4 通义万相应用场景 四、DeepSeek + 通义万相制作AI视频流程 4.1 DeepSeek + 通义万相制作视频优势 4.1.1 DeepSeek 优势 4.1.2 通义万相视频生成优势 4.2

By Ne0inhk
【DeepSeek微调实践】DeepSeek-R1大模型基于MS-Swift框架部署/推理/微调实践大全

【DeepSeek微调实践】DeepSeek-R1大模型基于MS-Swift框架部署/推理/微调实践大全

系列篇章💥 No.文章01【DeepSeek应用实践】DeepSeek接入Word、WPS方法详解:无需代码,轻松实现智能办公助手功能02【DeepSeek应用实践】通义灵码 + DeepSeek:AI 编程助手的实战指南03【DeepSeek应用实践】Cline集成DeepSeek:开源AI编程助手,终端与Web开发的超强助力04【DeepSeek开发入门】DeepSeek API 开发初体验05【DeepSeek开发入门】DeepSeek API高级开发指南(推理与多轮对话机器人实践)06【DeepSeek开发入门】Function Calling 函数功能应用实战指南07【DeepSeek部署实战】DeepSeek-R1-Distill-Qwen-7B:本地部署与API服务快速上手08【DeepSeek部署实战】DeepSeek-R1-Distill-Qwen-7B:Web聊天机器人部署指南09【DeepSeek部署实战】DeepSeek-R1-Distill-Qwen-7B:基于vLLM 搭建高性能推理服务器10【DeepSeek部署实战】基于Ollama快速部署Dee

By Ne0inhk

DeepSeek各版本说明与优缺点分析_deepseek各版本区别

DeepSeek各版本说明与优缺点分析 DeepSeek是最近人工智能领域备受瞩目的一个语言模型系列,其在不同版本的发布过程中,逐步加强了对多种任务的处理能力。本文将详细介绍DeepSeek的各版本,从版本的发布时间、特点、优势以及不足之处,为广大AI技术爱好者和开发者提供一份参考指南。 1. DeepSeek-V1:起步与编码强劲 DeepSeek-V1是DeepSeek的起步版本,这里不过多赘述,主要分析它的优缺点。 发布时间: 2024年1月 特点: DeepSeek-V1是DeepSeek系列的首个版本,预训练于2TB的标记数据,主打自然语言处理和编码任务。它支持多种编程语言,具有强大的编码能力,适合程序开发人员和技术研究人员使用。 优势: * 强大编码能力:支持多种编程语言,能够理解和生成代码,适合开发者进行自动化代码生成与调试。 * 高上下文窗口:支持高达128K标记的上下文窗口,能够处理较为复杂的文本理解和生成任务。 缺点: * 多模态能力有限:该版本主要集中在文本处理上,缺少对图像、语音等多模态任务的支持。 * 推理能力较弱:尽管在自然语言

By Ne0inhk