多目标强化学习中的Max-Min准则:博弈论视角下的策略优化

发布时间:2026/10/22 13:49:57
多目标强化学习中的Max-Min准则:博弈论视角下的策略优化
最近在梳理多目标强化学习方向的研究笔记看到一篇挂 2025 年 NIPS神经信息处理系统大会机器学习领域最核心的顶会之一的论文标题三个关键词叠在一起Multi-Objective Reinforcement Learning、Max-Min Criterion、Game-Theoretic Approach。单拎出来每个词都不陌生但把它们串成一条思路——用博弈论来求解多目标强化学习里的 Max-Min 策略这个切入点很值得仔细说说。做强化学习落地久了大多数人都有同感真实场景里几乎不存在单一奖励的温室环境。机器人既要跑得快又要防碰撞数据中心既要省电又要保延迟推荐系统既要点击率又要保多样性。多目标强化学习MORL就是用来处理这类冲突目标的框架而这篇论文回答的是框架里最麻烦的一个问题当多个目标彼此冲突该用什么准则来定义“最优策略”才能既不靠人工拍权重又有坚实的理论可依论文给出的答案一句话可以概括采用 Max-Min 准则把策略评估的标准锚定在最差目标上再用博弈论把这个多目标问题改写成智能体与权重对手之间的零和博弈把策略优化转化为求博弈的纳什均衡。下面把我对这个方向和这篇论文的理解尽量拆开讲包括数学原理、算法落地实现以及我在复现过程中踩过的坑。1. 拆解标题背后的项目意图1.1 多目标强化学习到底在解决什么问题先说基础设定。标准的强化学习问题是一个马尔可夫决策过程MDP状态转移、动作空间、奖励函数都定义清楚后优化目标就是最大化长期累积奖励的期望。奖励只有一个数字策略好就是好不好就是不好排序干净利落。但多目标环境里奖励从一个标量变成向量。每个分量代表一个目标比如一个机器人任务同时要求位移速度最大和接触力最小。这两个目标天然冲突速度越大接触力往往越难控制你很难说哪个策略“绝对更优”。数学上策略 A 的回报向量可能是 (3, 5)策略 B 是 (4, 4)。A 在第二个目标上更强B 在第一个目标上更强两个策略不存在支配关系它们都落在帕累托前沿上——都是某种意义上的最优解。光有向量回报还不够必须有一个“偏好表达”的准则来决定取舍。最常见的做法是人工给每个目标配一个权重再加权求和但权重难调、容易过拟合某个目标而且一旦权重锁定就只能在目标空间的一个固定方向上前进永远找不到远离该方向的其他解。Max-Min 准则代表了另一种极端偏好无论单个目标多优秀策略的价值最终以最差的那个维度为准。1.2 Max-Min 准则最差目标决定天花板Max-Min 准则的数学形式很干净max_π min_i V_i^π这里的 i 遍历 n 个目标。这个式子表达的直观语义是“木桶效应”一个策略能贡献多少回报不取决于它的长板有多长而取决于短板有没有被补齐。安全系统里最薄弱的环节决定事故风险调度系统里等待时间最长的任务决定用户体验这类需求用 Max-Min 表达是浑然天成的。更妙的是这个 min 操作有一个在数学上非常自然的等价形式——它可以改写成带权重的线性加权只不过权重是“对手”选出来的最不利权重min_i V_i^π min_{λ ∈ Δ_n} Σ_i λ_i V_i^π其中 Δ_n 是 n 维单纯形也就是所有权重组合的集合。直觉上如果有一个对手可以自由选择权重来压低你的得分它会怎么做它会把所有权重押在你最差的目标上压到的结果恰好等于该目标值本身。所以“最大化最差目标”和“在权重对抗下取得最高保障回报”是同一枚硬币的两面。这个等价关系就是后面引出场博弈论最自然的入口。1.3 为什么非得用博弈论看到这个标题时我的第一反应是直接套鲁棒优化不就行了吗鲁棒优化早就研究过 max-min 这类问题何必绕一圈用博弈论后来细想才发现关键差异这里不是一次性的静态优化而是“策略优化”和“权重对抗”耦合在一起的动态过程。你把智能体看作一方把权重选择器看作另一方。智能体在策略空间上搜索权重选择器在单纯形上调整。每一轮迭代智能体在当前权重下沿着提升方向更新策略权重选择器则观察智能体当前在哪些目标上表现不好把权重集中过去逼迫智能体补短板。这不就是典型的零和博弈交替寻优吗用博弈论框架的好处有三个。第一纳什均衡给收敛性提供了一个明确的锚点理论上在混合策略下均衡一定存在第二交替优化的求解机制天然适合现有的策略梯度算法不改变底层 RL 的迭代范式第三均衡的“互不后悔”性质内生出了鲁棒性——双方都不能单方面改进这恰好对应多目标博弈里“公平且均衡”的语义。2. 核心数学原理与方案选型2.1 从 MDP 到多目标 MDP奖励向量化带来的本质变化把形式化讲细一点。单目标 MDP 是五元组 (S, A, P, R, γ)策略 π 产生的累积回报是一个标量。多目标 MDP 里奖励函数从一个标量函数 R(s,a) 变成一个向量函数 R(s,a)∈ℝ^n每个维度的物理含义不变只是从一个变成多个。相应地状态价值和动作价值也从标量变成向量。策略 π 的状态价值是V^π(s) (V_1^π(s), V_2^π(s), ..., V_n^π(s))每个 V_i^π(s) 是第 i 个目标上的期望累积回报。向量化之后原来那套策略评估和策略提升的机制需要做两处修改。第一处评估每个目标时需要独立的 critic 来估计 V_i^π。第二处策略提升时原来直接使用标量优势函数现在优势函数也变成了 n 维向量。必须有一个从向量到标量的聚合函数才能计算策略梯度而 Max-Min 准则承担的就是这个聚合角色。也就是说这个准则不只是用来定义“最优策略”的它直接嵌进了策略参数的梯度计算里参与每一轮的更新。2.2 Max-Min 与加权求和的对比选型原因分析为了直观感受选型差异我做了个对比表方法聚合准则权重来源核心优点关键缺点线性加权max Σλ_i V_i人工预设 / 固定采样简单能按偏好定向优化权重主观无法兼顾最差目标Chebyshev 标量化max min_i w_i|V_i - z_i|需参考点 z能逼近不同帕累托点参考点选取影响大超参多Max-Minmax min_i V_i无需人工权重天然公平鲁棒性最强偏保守只覆盖前沿一个子集用生活化的类比来说线性加权像考试的总分制语文差一点可以用数学补回来Max-Min 像复试的单项淘汰线单科不过线直接出局。选哪个本质上取决于业务对“最差分”的容忍度。Max-Min 在论文里之所以是第一选择还有一个实际原因它不需要额外维护一组人工权重或参考向量算法本身自动完成“找到当前短板 → 优化它”的闭环。这种免调参的特性在真实工程里带来的收益往往比理论上的优雅更值钱。2.3 纳什均衡视角下的算法收敛依据为什么说这个问题的解是一个纳什均衡重新定义博弈双方。玩家一是智能体策略是 π玩家二是权重对手策略是 λ。定义效用函数f(π, λ) Σ_i λ_i V_i^π智能体要最大化 f权重对手要最小化 f。如果存在一个策略权重对 (π*, λ*) 满足f(π*, λ*) ≥ f(π, λ*)对所有 π 成立f(π*, λ*) ≤ f(π*, λ)对所有 λ 成立。那么 (π*, λ*) 就是鞍点也即零和博弈的纳什均衡。在有限策略空间或连续且有界的策略空间下冯·诺依曼最大最小定理保证了 max_π min_λ f min_λ max_π f均衡一定存在。这个理论性质带来一个很直接的工程意义算法有了可预期的收敛行为。训练过程里策略和权重交替优化权重对手会把智能体往“短板最高”的方向推。理论上如果两侧优化器都足够精准最终会落在鞍点上不会再出现单方面改善的空间。这不是口头上的稳定而是可以从博弈论里读出来的结构性保证。3. 算法落地实操3.1 总体架构与双层优化流程把上面的数学翻译成代码本质上是一个双层优化bilevel optimization过程。外层是策略优化内层是权重对抗。我复现时采用的流程如下初始化策略网络参数 θn 个 critic 网络 φ₁...φ_n权重向量 λ 初始化为均匀分布。每个训练 epoch 执行用当前策略 π_θ 采样一批轨迹记录每条轨迹的状态、动作以及 n 维奖励向量。对每个目标 i用收集到的数据更新 critic φ_i估计 V_i^π。计算当前策略对各目标的评估值 V₁...V_n。内层更新λ 沿着最小化 Σλ_i V_i 的方向走一步再投影回单纯形。外层更新在当前 λ 下把 Σλ_i A_i 当作标量优势函数用 PPO 或 A2C 更新策略 θ。循环直到策略性能进入平台期。关键点是第 4 步和第 5 步必须保持适当的节奏差。我一开始试过 λ 每步都更新结果策略像喝醉酒一样抖个不停——权重变化太快策略还没学到东西就被新权重带跑了。后来改成策略更新 5 到 10 次权重才更新一次训练才稳定下来。这种“对手慢半拍、策略快半拍”的设计是让双层交替优化能落地的最重要工程技巧。3.2 关键实现细节网络结构、损失函数与更新节奏网络设计上有两个选择。Critic 建议优先使用独立的 n 个网络每个目标一个特征提取层可以共享也可以不共享。共享参数能省不少内存但不同目标对特征的需求可能差别很大安全目标关注的是障碍物距离特征效率目标关注的是速度特征强行共享会互相拉扯。我有一次图省事共享了特征层结果其中一个 critic 的误差反而变大拆开后才恢复正常。如果计算资源紧张可以折中为中间层共享、输出层分离。损失函数方面外层策略更新使用标准的 PPO 损失只是把单目标优势换成当前 λ 加权后的标量优势δ Σ_i λ_i A_i其中 A_i 是第 i 个目标的优势估计。PPO 的 clip 机制照常保留。内层 λ 更新则简单直接做一步投影梯度下降λ ← Proj_Δ(λ - η_λ · g)其中 g 是 Σλ_i V_i 对 λ 的梯度实际就是当前各目标价值 V_i 组成的向量本身Proj_Δ 表示投影回单纯形。初始化 λ 为均匀分布更新后权重的移动方向会自然接近当前最差目标。越靠近均衡λ 的梯度越小权重趋于稳定。3.3 一个可参考的简化训练循环下面是一段能表达核心逻辑的 Python 风格伪代码省略了网络细节重点展示交替更新的骨架# 初始化 policy PolicyNetwork(obs_dim, act_dim) critics [ValueNetwork(obs_dim) for _ in range(n)] lam np.ones(n) / n # 权重向量初始化为均匀 policy_opt Adam(policy.parameters(), lr3e-4) critic_opts [Adam(c.parameters(), lr3e-4) for c in critics] lam_opt Adam([lam], lr1e-3) for epoch in range(total_epochs): buffer collect_trajectories(policy, env, max_steps2048) # 1. 更新每个目标的 critic for i in range(n): v_pred critics[i](states) loss mse_loss(v_pred, returns_i) critic_opts[i].zero_grad() loss.backward() critic_opts[i].step() # 2. 内层对手更新最小化加权目标总和 weighted_sum sum(lam[i] * critics[i](states).detach().mean() for i in range(n)) lam_opt.zero_grad() (-weighted_sum).backward() lam_opt.step() lam project_to_simplex(lam) # 投影回单纯形 # 3. 外层策略更新把加权优势喂给 PPO advantages compute_weighted_advantages(critics, buffer, lam) update_policy_ppo(policy, buffer, advantages)这段伪代码简洁直接但有两点要注意。第一λ 如果是普通的 numpy 数组需要用 torch 的 Parameter 包一层才能接优化器。第二伪代码把 λ 更新放在 critic 更新之后实际工程中你可以把步骤 2 挪到策略更新之后核心思想不变保证 λ 的变化节奏慢于策略的学习节奏。3.4 与主流 MORL 算法的区别如果你已经接触过多目标 RL可能知道现有工作大多分为两类。一类是“定权重然后跑单目标 RL”这就是前面说的线性加权。另一类是“随机采样权重训练一个超网络覆盖多权重空间”。这篇论文的 Max-Min 路线和它们最大的区别在于权重不是预先指定的、也不是随机采样的而是在训练过程中被最差目标动态牵引出来的。这种设计的直接结果是你不用再纠结每个目标的权重该设多少。系统自动找短板自动把优化重心移到短板上。对做落地的工程师来说这省掉了一大块调参的脏活累活。代价是策略在目标空间里的“足迹”偏保守——它倾向于守在公平区域里不主动追求单个目标的最大化。4. 实验设计与避坑指南4.1 多目标基准环境怎么搭先解决一个实际问题没有现成的多目标实验环境怎么办我这里有一个“从单目标改装”的通用套路。选一个经典的单目标任务比如机器人移动控制然后拆出多个奖励分量。把原环境的步进奖励拆成速度分量把耗能和关节冲击计入另外两个分量这样就得到了三个天然冲突的目标速度要大必然更耗能、更颠簸。另一种思路是直接构造一个虚拟调度环境比如目标一是所有任务的平均完成时间目标二是最长完成时间目标三是总资源空置率。这三个目标单位不同、量级不同正好用来检验算法对尺度差异的鲁棒性。强烈建议实验设计里至少包含一个“目标尺度差异很大”的环境。我在自己构造的测试里设计过尺度差 20 倍的目标组线性加权和 Max-Min 在这个环境下表现天差地别算法差异会非常直观地暴露出来。4.2 实验指标怎么读不要只看均值做多目标实验最容易犯的错是报告里只给一个平均累计回报或者只画帕累托前沿的集中趋势。Max-Min 准则下最值得看的指标有两个。第一个是每个目标各自的最终值尤其最差目标的值。随机权重采样策略的平均目标值可能更高但最差目标可能跌到别的策略的一半Max-Min 策略虽然均值不高但最差目标被明显抬高。第二种场景里均值指标完全体现不出 Max-Min 的价值。第二个是解的分布。多目标算法最终应该输出一批帕累托解而不是孤立的一个点。你可以用不同的初始 λ 种子跑若干次把所有解画在二维目标空间散点图上看覆盖了帕累托前沿的多少个区域。Max-Min 天然偏好“公平端”如果希望覆盖更多区域需要主动引入温度系数或者参考点这也是我在实验里保留了 Chebyshev 变体对比的原因。4.3 典型问题与排查速查表我把实验过程中踩过的、以及在交流群里看到同行踩过的坑整理成一张速查表现象可能原因解决办法训练 loss 剧烈震荡策略不收敛各目标奖励尺度差异过大将每个目标奖励做标准化或缩放到同一量级某个目标长期被忽略λ 被其他目标锁死给 λ 更新加熵正则或降低 λ 学习率min 操作放大了目标估计噪声critic 误差大最差目标被高估增大 batch size对 V_i 做平滑解只落在帕累托前沿的公平端max-min 准则本身偏好引入温度参数或扩展为参数化 max-min训练后期 λ 变成稀疏 0/1 向量权重完全退化为单一目标使用 softmax 参数化并加温度正则内层 λ 更新太快导致策略震荡权重变化比策略适应快增加策略内循环次数降低 λ 更新频率这张表基本够支撑新手从“跑通代码”走到“调出稳定结果”了。尤其是奖励标准化这一条几乎成了多目标实验的第一道坎。理论上再严谨的算法如果输入的目标尺度差着两个数量级min 和 max 运算都会被大数量级目标牵着走训练过程会非常痛苦。5. 应用场景与进一步扩展5.1 三个最有代表性的落地场景第一个是机器人移动控制。路径规划同时涉及越障安全、能耗和通行效率。用 Max-Min 准则机器人宁可适当放慢速度也不允许某段路径的能耗或冲击力突破硬底线。这对应真实部署里“安全边界比平均表现更重要”的诉求。第二个是计算资源分配。多个任务共享资源池每个任务都有完成时间约束。最直观的指标往往不是平均性能而是最坏情况下的最长完成时间——谁都希望“最倒霉的任务不要等太久”。Max-Min 准则给出的分配结果本质上是所有任务可接受下限的最大化这正是物业服务里谈 SLA 承诺时最需要的答案。第三个是推荐系统的多目标平衡。点击率、多样性、新颖性三者经常不一致。线性加权操作简单但权重调来调去总有场景不满意Max-Min 强制系统给多样性一个最低保障线之后叠加用户偏好就更容易解释。这三个场景有个共同点底线比平均重要最差分比均值有业务含义。5.2 从 Max-Min 还能延伸出哪些方向我自己对这个方向的理解还在持续更新几个扩展方向值得动手试。一个方向是把 Max-Min 扩展到风险偏好可控的版本。纯 worst-case 在部分场景里过度保守把 min 替换为条件风险价值CVaR可以在最差 β% 目标期望和平均表现之间滑动让模型的风险偏好可控。另一个是从单智能体推广到多智能体。现实中的资源分配、交通调度基本都是分布式系统每个节点基于局部观察做决策。多智能体环境下每个智能体都有自己的 Max-Min 目标还需要考虑其他智能体的目标和协作机制博弈结构会更复杂但这也正是它有趣的地方。还有一个我很看好的方向是离线多目标强化学习。真实业务数据里本身携带多个目标的倾向离线环境又没有在线交互的容错空间Max-Min 这种偏保守的准则反而可能比激进的线性加权更契合离线约束。如果论文后续往这个方向走工程价值会再上一个台阶。从我实际跑这类算法的体会说最容易被忽略的不是技巧本身而是对“准则”的选择。Max-Min 不是万能的它代表的是“保障底线优先”的决策哲学适合底线比峰值更重要的业务场景不适合追求单点极限的竞技型场景。建议你先在二维目标的小环境里把双层优化的收敛行为摸清楚再去扩规模不然一上来就挑战复杂环境出了问题很难定位是优化器的问题还是权重对抗节奏的问题。最后再分享一个实际操作中的小技巧调参时优先看 λ 的动态变化不要一上来就盯策略 loss。λ 的移动轨迹就是算法在不断重定义“当前哪个目标最重要”的过程。如果你看到 λ 长时间停留在一个目标上说明这个目标确实是顽固短板如果 λ 在几个目标之间反复横跳说明策略本身还没学好先去修 critic 的误差不要折腾策略网络。这套判断逻辑比盲目调学习率更接近问题的本质。