共计 1519 个字符,预计需要花费 4 分钟才能阅读完成。
背景痛点
多智能体强化学习(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 网络设计

- 输入:局部观测 $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)
避坑指南
-
梯度消失 :在 Critic 网络每层后添加 LayerNorm
self.net = nn.Sequential(nn.Linear(in_dim, 128), nn.LayerNorm(128), # 关键!nn.ReLU()) -
参数同步 :采用延迟更新策略(每 K 步同步目标网络)
-
奖励塑形 :
- 避免奖励幅度差异过大
- 团队奖励与个体奖励比例建议 7:3
实验验证
捕食者 - 猎物环境训练曲线:
最终策略可视化显示:
– 捕食者形成包围策略
– 猎物学会分散逃跑
延伸思考
- 如何将方法扩展到智能体能力异构的场景?
- 在通信受限环境下如何优化 mask 机制?
- 是否可以通过元学习提升策略迁移能力?
正文完
发表至: 人工智能
近一天内
