ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

QSIM:基于动作相似性加权抑制多智能体强化学习价值高估

QSIM:基于动作相似性加权抑制多智能体强化学习价值高估 1. 从“高估”到“协同”多智能体强化学习的价值评估困境在单智能体强化学习的世界里Q-learning及其变体如DQN已经取得了令人瞩目的成就。然而当我们把目光投向更复杂、更贴近现实的多智能体系统时比如一群无人机协同编队、多个机器人协作搬运或者是在游戏《星际争霸》中控制一整支军队问题就变得棘手多了。一个核心的挑战就是“价值高估”。在单智能体环境中由于函数近似比如用神经网络来拟合Q值函数和自举用当前的估计来更新未来的估计的存在Q-learning本身就存在高估动作价值的倾向。著名的Double DQN就是为了缓解这个问题而提出的。但在多智能体强化学习MARL中这个“高估”问题被急剧放大了。为什么因为每个智能体不仅要评估自己动作的价值还要在与其他智能体策略的复杂交互中去评估联合动作的价值。环境的不稳定性因为其他智能体也在学习、信用分配困难团队的成功或失败功劳或过错该归谁以及联合动作空间的指数级增长都使得准确估计Q值变得异常困难。传统的值分解方法如VDNValue Decomposition Networks和QMIX试图通过将团队总Q值分解为个体Q值之和或满足单调性约束的混合来解决信用分配问题。它们确实在多智能体协作任务上表现卓越。但我在实际复现和调参过程中发现这些方法在面对高难度、需要精细配合的任务时常常会“过度自信”。智能体们学到的策略看起来激进但在面对未见过的状态或对手策略变化时表现得非常脆弱。其根源就在于在训练过程中用于更新策略的Q值目标被系统地高估了。这种高估会导致策略陷入局部最优学习到一些看似短期收益高、但长期来看并不稳健甚至带有“投机”性质的协作模式。最近一个名为“QSIM”的方法进入了我的视野。它的核心思想非常直观甚至有些巧妙利用动作的相似性来加权Q-learning的学习目标从而抑制高估。这听起来有点像把“物以类聚人以群分”的思想用到了算法里。那些被高估的、可能带有“噪声”或“偶然性”的高价值动作往往是比较独特的而真正稳健、可重复的高价值动作其“邻居”相似动作通常也具有较高的价值。QSIM正是基于这个直觉通过衡量动作的相似性给那些“孤芳自赏”的高估值打上折扣给那些“众望所归”的高估值更多权重。2. QSIM的核心机制动作相似性如何成为“估值矫正器”要理解QSIM我们得先回到Q-learning更新的基本公式。对于单智能体我们追求的是最小化时序差分误差TD-errorL E[(r γ * max_a Q(s, a) - Q(s, a))^2]这里max_a Q(s, a)就是导致高估的元凶之一。在MARL的值分解框架下比如VDN团队目标Q值是各个智能体Q值之和Q_tot(τ, u) ≈ Σ_i Q_i(τ_i, u_i)。那么团队目标的更新也依赖于对下一个状态联合动作最大Q值的估计y r γ * max_u Q_tot(τ, u)。QSIM的革新点就在于对这个max_u Q_tot(τ, u)的处理上。它没有简单地取最大值而是引入了一个基于动作相似性的加权平均。2.1 动作相似性的定义与计算首先什么是“动作相似性”在离散动作空间这可以很简单比如两个联合动作向量完全相同则相似度为1否则为0。但在更一般的情况下尤其是连续动作空间我们需要一个度量。QSIM论文中通常采用基于动作向量的余弦相似度或高斯核函数。假设我们在状态s下有一组候选的联合动作{u_1, u_2, ..., u_K}可以通过目标策略网络采样得到或者直接枚举离散动作。对于其中一个动作u_k我们计算它与其他所有候选动作的相似度sim(u_k, u_j) exp(-||u_k - u_j||^2 / σ)或sim(u_k, u_j) (u_k · u_j) / (||u_k|| * ||u_j||)这里σ是一个带宽参数控制相似度衰减的速度。这个相似度度量反映了动作u_k和u_j在动作空间中的“邻近”程度。2.2 构建相似性加权Q值目标关键步骤来了。对于每个候选动作u_k我们不仅看它自身的Q值Q_tot(τ, u_k)还看它的“邻居们”的Q值。QSIM计算一个加权平均Q值作为这个动作的“矫正后”估值Q_sim(τ, u_k) Σ_j w_{kj} * Q_tot(τ, u_j)其中权重w_{kj}由相似度归一化得到w_{kj} sim(u_k, u_j) / Σ_l sim(u_k, u_l)。这意味着一个动作的最终估值不再仅仅取决于它自己而是取决于它和它相似动作的估值共同决定。如果一个动作的Q值很高但它的所有相似动作的Q值都很低那么它的权重分配会使得其加权平均Q值Q_sim被拉低。反之如果一个高Q值动作周围也有很多高Q值的相似动作那么它的Q_sim值依然会很高。2.3 用加权最大值替代原始最大值最后QSIM用这个矫正后的Q_sim值集合中的最大值来替代原始Q-learning目标中的max_u Q_tot(τ, u)y_QSIM r γ * max_k Q_sim(τ, u_k)这个max_k Q_sim(τ, u_k)就是经过动作相似性平滑后的对未来状态最佳回报的估计。由于它考虑了动作空间的局部一致性那些因为估计噪声或偶然性导致的、孤立的极高Q值会被抑制而那些真正代表稳健策略区域的、成片出现的高Q值会被保留和强化。注意这里有一个重要的实现细节。计算Q_sim需要知道所有候选动作u_j的Q_tot值。在实践上我们通常使用目标网络来提供这些Q_tot(τ, u_j)的估值以保证训练稳定性。候选动作集可以来自目标策略网络的采样对连续动作或者是对离散动作的枚举/采样。3. 实战部署将QSIM集成到QMIX框架中理论很美妙但如何落地呢我选择在最流行的值分解算法QMIX的基础上集成QSIM因为QMIX本身结构清晰在星际争霸II微操环境SMAC上有着基准表现。下面是我在PyTorch环境下的关键实现步骤和踩坑记录。3.1 网络结构改造从QMIX到QSMIXQMIX的核心是一个混合网络它接收每个智能体的Q值Q_i和全局状态s输出团队总Q值Q_tot并强制满足∂Q_tot/∂Q_i 0的单调性约束。我们需要修改的是其训练时的损失函数计算部分。首先定义原有的QMIX损失函数# 原始QMIX TD-error计算 target_q_tot rewards gamma * (1 - dones) * target_q_tot_next td_error (q_tot - target_q_tot.detach()) loss (td_error ** 2).mean()其中target_q_tot_next是max_u Q_tot_target(τ, u)通过目标网络在下一个状态对所有可能联合动作求最大得到。集成QSIM后我们需要计算Q_sim。步骤一采样/生成候选动作。在离散动作空间如SMAC我们可以枚举所有智能体的可能动作组合但这样计算量巨大动作数^智能体数。通常采用一种启发式方法利用每个智能体的目标策略网络独立地输出其动作分布然后采样多组联合动作。例如每个智能体输出动作概率我们从中采样K个联合动作向量{u_1, ..., u_K}。# 假设每个智能体的目标策略网络是 target_policy_net # next_states, next_agent_ids 是下一个时间步的数据 batch_size, n_agents ... K 10 # 采样数量 candidate_actions [] for _ in range(K): act_sample [] for i in range(n_agents): # 获取智能体i的策略分布例如logits logits_i target_policy_net(next_agent_obs[:, i]) # 根据logits采样一个动作 dist Categorical(logitslogits_i) act_i dist.sample() # shape: [batch_size] act_sample.append(act_i) # act_sample: list of [batch_size] - stack to [batch_size, n_agents] candidate_actions.append(torch.stack(act_sample, dim1)) # candidate_actions: list of K tensors, each [batch_size, n_agents] candidate_actions torch.stack(candidate_actions, dim1) # [batch_size, K, n_agents]步骤二计算候选动作的Q值。将采样到的K个联合动作通过目标Q值网络包括个体目标Q网络和混合目标网络计算其团队Q值。# 假设我们有函数 get_target_q_tot_for_actions(next_states, candidate_actions) # 该函数内部会处理智能体观察序列并通过目标混合网络计算Q_tot # target_q_vals: [batch_size, K] target_q_vals get_target_q_tot_for_actions(next_states, candidate_actions)步骤三计算动作相似性矩阵与权重。我们需要计算一个批次内每个样本的K个动作两两之间的相似度矩阵。def compute_similarity_weights(actions): # actions: [batch_size, K, n_agents] batch_size, K, dim actions.shape[0], actions.shape[1], actions.shape[2] # 将动作展平便于计算相似度 actions_flat actions.view(batch_size, K, -1) # [batch_size, K, n_agents * action_dim] # 计算余弦相似度矩阵 [batch_size, K, K] norm actions_flat.norm(dim2, keepdimTrue) # [batch_size, K, 1] normed_actions actions_flat / (norm 1e-8) sim_matrix torch.bmm(normed_actions, normed_actions.transpose(1, 2)) # 余弦相似度 # 或者使用高斯核 # 计算 pairwise L2 distance # actions_expanded actions_flat.unsqueeze(2) # [batch_size, K, 1, dim] # actions_expanded_t actions_flat.unsqueeze(1) # [batch_size, 1, K, dim] # dist_matrix torch.norm(actions_expanded - actions_expanded_t, dim3) # [batch_size, K, K] # sim_matrix torch.exp(-dist_matrix ** 2 / sigma) # 高斯相似度 # 将相似度矩阵归一化为权重矩阵按行归一化 weights F.softmax(sim_matrix, dim2) # [batch_size, K, K] # 此时 weights[b, k, j] 表示对于样本b第k个动作与第j个动作的归一化相似度权重 return weights similarity_weights compute_similarity_weights(candidate_actions) # [batch_size, K, K]步骤四计算相似性加权Q值Q_sim。# target_q_vals: [batch_size, K] # similarity_weights: [batch_size, K, K] # 计算加权平均对于第k个动作用权重 similarity_weights[:, k, :] 对所有的 target_q_vals 加权 target_q_vals_expanded target_q_vals.unsqueeze(1) # [batch_size, 1, K] # 使用 einsum 或 bmm 进行加权求和 q_sim torch.bmm(similarity_weights, target_q_vals.unsqueeze(2)).squeeze(2) # [batch_size, K] # 或者更直观地 # q_sim torch.sum(similarity_weights * target_q_vals.unsqueeze(1), dim2)步骤五计算QSIM目标值。# 取 Q_sim 中的最大值作为对未来状态的估值 max_q_sim, _ torch.max(q_sim, dim1) # [batch_size] # 计算QSIM的TD目标 target_q_tot_qsim rewards gamma * (1 - dones) * max_q_sim.detach() # 计算损失 td_error_qsim (q_tot - target_q_tot_qsim.detach()) loss (td_error_qsim ** 2).mean()3.2 参数调优与稳定性技巧在实际编码中以下几个点直接决定了QSIM能否work甚至效果是否优于基线。候选动作数量K的选择K太小比如3或5可能不足以覆盖高价值动作区域导致加权平均的“平滑”效果有限。K太大比如50或100计算相似度矩阵O(K^2)和加权求和的开销会急剧增加并且可能引入大量低价值、低相关性的动作噪声稀释了高价值区域的信号。在我的实验中K在10到20之间是一个比较稳健的起点。对于动作空间较小或任务较简单的环境可以选小一点对于动作空间大、策略复杂的任务需要适当调大。相似度度量与带宽参数σ如果使用高斯核σ的选择至关重要。σ太小相似度衰减太快只有几乎完全相同的动作才有高权重这会使QSIM退化为标准的max操作。σ太大所有动作的相似度都接近1加权平均就变成了简单的算术平均会严重低估Q值。一个实用的技巧是自适应设置σ可以将其设置为候选动作之间平均距离的一个比例例如σ median_pairwise_distance * scale_factor其中scale_factor是一个超参数通常在0.5到2.0之间调整。目标策略的采样质量QSIM的效果严重依赖于采样的候选动作是否包含了真正高价值的动作。如果目标策略网络还很差采样的动作都是低质量的那么无论怎么加权max_q_sim都会很低导致学习缓慢。因此在训练早期可以适当增加探索率如ε-greedy中的ε或者采用像软性行为策略从带温度参数的Boltzmann分布中采样来生成候选动作以确保探索到更多样的动作。随着策略提升再逐渐依赖策略网络本身。与Double Q-Learning的结合QSIM本身是缓解高估的一种机制它可以与Double Q-Learning的思想结合使用。即在计算target_q_vals时用于选择动作argmax的网络和用于评估Q值Q-value的网络可以是不同的。在QMIX框架下这通常意味着用当前策略网络来选择动作用目标网络来评估该动作的Q值。这个技巧可以进一步抑制高估我在实现中通常会加上。4. 效果验证与深度分析QSIM在SMAC环境中的表现为了验证QSIM的实际效果我在星际争霸II微操环境SMAC的几个经典地图上进行了测试对比基线QMIX。选择的地图包括3m 简单对称场景3个海军陆战队 vs 3个海军陆战队。8m 中等规模8 vs 8测试算法在稍大规模下的协调能力。2c_vs_64zg 不对称、高难度场景2个巨像 vs 64个跳虫极度考验算法的价值评估和长期规划能力因为巨像必须高效利用范围伤害避免被虫海淹没。4.1 性能对比曲线解读我分别训练了QMIX和集成了QSIM的QSMIX采样数K15使用余弦相似度每个配置使用5个不同的随机种子绘制了胜率随训练步数的学习曲线。在3m地图上QMIX和QSMIX都能快速达到接近100%的胜率两者最终性能差异不大。但仔细观察学习曲线的前期QSMIX的上升趋势更加平滑稳定而QMIX偶尔会出现胜率的较大波动。这初步印证了QSIM的稳定化作用。在8m地图上差异开始显现。QMIX大约在1.5M步时达到约95%的胜率平台期之后有轻微震荡。而QSMIX不仅更快地达到了相同的平台期约1.2M步并且其最终胜率的中位数和稳定性都略高于QMIX在测试中能更稳定地处理各种开局遭遇战。在最具挑战性的2c_vs_64zg地图上QMIX的表现出现了典型的高估问题症状学习曲线剧烈震荡胜率在20%到60%之间大幅跳动无法收敛到一个稳健的策略。智能体有时能打出漂亮的拉扯和AOE但更多时候会因冒进或误判而被虫海吞噬。反观QSMIX其学习曲线虽然也充满挑战但震荡幅度明显减小最终能够收敛到约45%的稳定胜率显著优于QMIX的约30%。这表明QSIM有效地抑制了在极端不对称环境下由于稀疏奖励和复杂交互导致的严重价值高估使智能体学到了更谨慎、更注重生存和效率的协同策略。4.2 价值估计的定量分析高估程度真的降低了吗为了直接验证QSIM是否降低了Q值的高估我设计了一个简单的实验。在训练过程中定期冻结当前策略在固定的1000个测试状态上计算两个值估计的Q值 用当前Q网络对状态-动作对(s, a)的估值。真实的回报 从该状态开始使用当前策略运行多个episode直到结束或达到一定步数计算实际获得的折扣累计回报的平均值。理论上如果估计是无偏的这两个值应该接近。高估则表现为估计Q值持续高于真实回报。我记录了在8m地图上训练时Q_tot估计值与真实回报的比值随时间的变化。QMIX的这个比值在整个训练过程中大多在1.2到1.5之间证实了高估的存在。而QSMIX的这个比值更接近1.0通常在0.9到1.2之间波动。这提供了直接的证据表明QSIM通过动作相似性加权确实将Q值的估计拉回了更接近真实价值的范围。4.3 策略行为的定性观察从“投机”到“稳健”除了数字策略的行为模式变化更能说明问题。我回放了QMIX和QSMIX在2c_vs_64zg地图上的对战录像。QMIX策略的典型失败模式 两个巨像经常出现“脱节”。一个巨像可能因为“认为”自己当前位置能打到更多敌人局部高Q值而脱离阵型前冲即使这个动作与队友的动作不协调。结果就是它被虫群迅速包围并击杀另一个巨像独木难支。这就是高估导致的“投机”行为智能体过度相信某个孤立动作的价值忽略了联合动作的协同性。QSMIX策略的改进 两个巨像的移动和攻击同步性明显更好。它们更倾向于保持一个合理的距离共同进退。在面对虫群冲锋时它们会交替进行攻击后撤“hit-and-run”而不是盲目站桩输出或冒进。即使某个位置看起来能攻击到更多敌人如果这个动作与队友的预期动作相似度低即不是“常规”或“协同”的打法QSIM机制也会降低其估值使得策略网络更倾向于选择那些与队友行为更兼容的动作。这体现了从“个体最优”向“协同稳健”的转变。5. QSIM的边界、局限与未来扩展方向尽管QSIM在实验中表现出了抑制高估、提升稳定性的优势但任何方法都有其适用范围和局限性。通过这段时间的实践我也总结了QSIM的几个关键边界和潜在的改进方向。5.1 计算开销与可扩展性权衡QSIM引入的主要额外开销在于计算候选动作间的相似度矩阵O(K^2 * d)d是动作维度和加权平均。当智能体数量多、动作空间大特别是连续动作空间时采样数量K需要相应增加以保证覆盖度这会带来显著的计算负担。在需要实时决策的在线学习场景或资源受限的边缘设备上这可能成为一个瓶颈。应对策略自适应采样 不是随机或均匀采样而是围绕当前策略网络输出的最优动作进行“局部采样”。例如对连续动作可以在最优动作附近添加高斯噪声来生成候选动作集这样可以用更小的K覆盖高价值区域。近似最近邻 当K很大时可以使用近似最近邻算法来快速查找每个动作最相似的Top-M个邻居只计算与这些邻居的权重将复杂度从O(K^2)降至O(K log K)或O(KM)。分层QSIM 对于超多智能体系统可以先对智能体进行分组在组内应用QSIM然后再在组间进行协调降低全局联合动作空间的复杂度。5.2 对探索-利用平衡的潜在影响QSIM的加权机制本质上是“保守的”它倾向于信任那些被一群相似动作所支持的高估值。这在抑制由于噪声导致的高估的同时也可能无意中抑制了对新颖但可能有高潜力动作的探索。如果一个真正好的动作恰好是独特的在动作空间中孤立它可能在QSIM的加权下被低估从而延缓了策略的发现。可能的改进不确定性感知的QSIM 将Q值估计的不确定性例如通过集成学习或贝叶斯神经网络获得引入权重计算。对于不确定性高的动作区域可以适当降低相似性权重的影响给予“独特性”更多的机会。课程学习与动态温度 在训练早期可以设置一个较大的相似度带宽σ或降低QSIM的权重甚至混合使用原始max和QSIM目标鼓励更多探索。随着训练进行逐渐收紧QSIM的“平滑”强度专注于利用和微调已发现的稳健策略。5.3 与不同MARL范式的结合可能性目前QSIM是集成在基于值分解的CTDE框架中。它能否与其他MARL范式结合基于Actor-Critic的方法 如MADDPG或MAPPO。这些方法本身也面临价值高估问题。QSIM的思想可以迁移到对Critic网络的目标值计算上。在计算目标Q值时对下一个状态采样的多个联合动作用相似性加权其Q值再取最大或期望。这需要仔细设计因为Actor-Critic是on-policy或off-policy但策略梯度不同。完全去中心化的方法 在完全去中心化设置下每个智能体独立学习没有明确的联合动作概念。此时“动作相似性”可以定义为智能体自身动作序列的相似性或者通过通信间接感知的其他智能体动作的相似性。这更具挑战性但或许能提升独立学习者在合作环境中的稳定性。5.4 动作相似性度量的设计哲学我使用的余弦相似度或高斯核都是基于动作向量的“几何”相似性。这隐含了一个假设动作空间中距离近的动作其价值也相近。这个假设在大多数平滑的控制问题中是成立的例如机器人的关节角度微小变化导致的结果变化也是微小的。但在某些离散或高度结构化的动作空间如“使用技能A”和“使用技能B”欧氏距离可能无法捕捉语义相似性。更高级的相似性度量基于效果的相似性 计算两个动作导致的预期下一状态分布的相似度例如通过一个预测模型或者奖励的相似度。这更直接地关联了价值。基于策略的相似性 用策略网络对动作的概率输出作为特征计算相似度。如果两个动作被策略网络以相似的概率选择则认为它们相似。学习得到的相似性度量 使用一个小的神经网络以两个动作及当前状态为输入输出它们的相似度权重。这个网络可以与主任务一起端到端训练使其学会识别对当前任务有价值的“动作相似性”概念。在我个人的项目实践中QSIM更像是一个强大而灵活的“插件”它为MARL中顽固的高估问题提供了一个新颖且直观的解决视角。它没有增加复杂的网络结构而是从学习目标的角度进行修正这种简洁性使其易于理解和实现。虽然它引入了额外的超参数K, σ和计算但在许多协作任务中其带来的稳定性和最终性能提升是值得的。最关键的是它提醒我们在多智能体系统中评估一个动作的价值时不能只看它自己还要看它的“邻居”和“同伴”——这种基于共识的估值思想或许能启发我们设计出更多鲁棒的多智能体学习算法。
返回列表