多智能体强化学习实战:深入解析actor-critic结构原理与实现

1次阅读
没有评论

共计 1519 个字符,预计需要花费 4 分钟才能阅读完成。

image.webp

背景痛点

多智能体强化学习(MARL)在自动驾驶协同、游戏 AI、无人机编队等场景有广泛应用。但在实际应用中,智能体之间独立学习(Independent Q-learning)会导致策略不协调问题,比如:

  • 信用分配难题 :难以区分个体动作对全局奖励的贡献
  • 环境非平稳性 :单个智能体的策略变化会导致其他智能体的环境动态变化
  • 策略振荡 :智能体之间可能出现策略相互干扰,无法收敛

技术对比

方法 收敛性 通信开销 信用分配
Independent Q-learning 差(易振荡) 无法处理
MADDPG 较好 高(全连接) 部分处理
本文 Actor-Critic 低(masked) 显式处理

核心实现

集中式 Critic

全局状态价值函数:
$$V^\pi(s) = \mathbb{E}_{a\sim\pi}[Q^\pi(s,a)]$$

其中多头 Critic 实现采用 mask 机制处理变长智能体输入:

class MultiHeadCritic(nn.Module):
    def __init__(self, state_dim, action_dim, num_agents):
        super().__init__()
        self.attention = nn.MultiheadAttention(embed_dim=state_dim, num_heads=4)
        # NOTE: 使用 mask 屏蔽无效智能体
        self.mask = torch.ones(num_agents, num_agents) - torch.eye(num_agents)

    def forward(self, global_state, actions):
        attn_out, _ = self.attention(global_state, global_state, global_state, 
                                   attn_mask=self.mask)
        return attn_out.mean(dim=1)  # 全局价值估计 

Actor 网络设计

多智能体强化学习实战:深入解析 actor-critic 结构原理与实现

  • 输入:局部观测 $o_i$
  • 输出:动作概率分布 $\pi_\theta(a_i|o_i)$

关键超参数建议:

  • GAE 参数 $\lambda$:0.8-0.95
  • 策略熵系数:0.01-0.1
  • 学习率比例(actor:critic):1:2

代码实现

Gumbel-Softmax 采样

def gumbel_softmax(logits, tau=1.0, hard=False):
    gumbels = -torch.empty_like(logits).exponential_().log()
    y = logits + gumbels
    return F.softmax(y / tau, dim=-1)

分布式经验回放

class SharedReplayBuffer:
    def __init__(self, capacity):
        self.buffer = deque(maxlen=capacity)
        self.lock = mp.Lock()  # 多进程安全

    def add(self, transition):
        with self.lock:
            self.buffer.append(transition)

避坑指南

  1. 梯度消失 :在 Critic 网络每层后添加 LayerNorm

    self.net = nn.Sequential(nn.Linear(in_dim, 128),
        nn.LayerNorm(128),  # 关键!nn.ReLU())

  2. 参数同步 :采用延迟更新策略(每 K 步同步目标网络)

  3. 奖励塑形

  4. 避免奖励幅度差异过大
  5. 团队奖励与个体奖励比例建议 7:3

实验验证

捕食者 - 猎物环境训练曲线:

最终策略可视化显示:
– 捕食者形成包围策略
– 猎物学会分散逃跑

延伸思考

  1. 如何将方法扩展到智能体能力异构的场景?
  2. 在通信受限环境下如何优化 mask 机制?
  3. 是否可以通过元学习提升策略迁移能力?
正文完
 0
评论(没有评论)