【机器人 / 强化学习】QAM 与 DIVL:评价-执行闭环的完美配合
能把价值方向转化为丝滑流畅的动作改进 DIVL 和 QAM 就是为这两个问题而生的。如果用更形象的方式来理解DIVL 是大脑QAM 是肌肉。DIVL 负责评价环节它的核心任务是更新 Q_φ 和 V_ψ 参数产出越来越准确的裁判。DIVL 在教机器人怎么看账本、识潜力——让它变成一个非常有眼光、但不冒险的投资者。这个裁判能够从异质数据中识别出哪些动作有潜力哪些是死路。QAM 负责执行环节它的核心任务是更新 π_θ即论文中的 Policy产出越来越厉害的运动员。QAM 在教机器人怎么顺着潜力、滑出优美曲线——让它变成一个不仅聪明而且身体动作极其协调的运动员。这个运动员能够根据裁判的指导生成流畅且持续改进的动作序列。0x01 为什么需要两个算法1.1 先想清楚要解决什么问题我们已经在系统架构层面理解了 LWD它是一个 Actor-Learner 异步架构 SOP 类分布式底座 HIL 人类干预反馈。但如果我们把系统层和算法层混在一起谈很容易陷入系统很大、什么都能做的模糊认知。所以我们需要把问题聚焦到算法层面给定一个混合了成功、失败、人类干预、部分恢复轨迹的海量 replay buffer我们如何让 VLA 策略持续变强要回答这个问题必须拆解出两个子问题子问题一如何从异质数据中给出稳健的价值评价 传统 RL 的方法在这类数据上往往会出问题——离线数据被 OOD 动作过估计搞崩online 数据又因为 reward 稀疏而无法高效传播。我们需要一个能从好坏参半的数据中提取出可靠信号的评价系统。子问题二如何把评价信号稳定地注入生成式策略 即使我们有了完美的价值函数我们的策略也不是一个简单的 MLP——它是一个基于 Flow Matching 的生成式 VLA 模型。直接通过整个生成链路做反向传播BPTT会导致梯度爆炸/消失显存更是天文数字。DIVL 和 QAM 分别解决上述两个问题而且它们的结合不是简单的先 A 后 B的流水线而是价值-策略的闭环耦合。1.2 闭环总览DIVL 和 QAM-闭环这个闭环的每一个环节都有其不可替代性没有 DIVLQ 梯度会乱跳。 价值估计不准策略改进就没有可靠的方向。整个系统就像没有导航的运动员不知道往哪里优化。没有 QAMV 的分布无法转化为流畅的动作。 再好的价值判断如果不能稳定注入到生成式策略里就像教练有眼光却无法纠正运动员的动作。统一目标消除阶段鸿沟。 两者在离线和在线阶段使用完全相同的损失函数只是数据来源不同。这避免了离线 Critic 过于保守、在线微调时价值尺度不匹配的致命问题。1.3 三阶段逻辑链条整个 LWD 算法论文 Algorithm 2的逻辑可以拆解为三个递进阶段第一阶段预训练BC你手里有一堆离线数据(s,a)。你训练一个 Flow 模型损失函数只有最基础的∥vθ−(x1−x0)∥2。训练完后得到fβ——它只会模仿数据完全不懂什么是奖励Reward。第二阶段值函数学习DIVLDIVL 登场了。它的任务是学习 CriticQ 和 V。它改进了 IQL 的方式用分布式的视角去评估每个动作的好坏。DIVL 产出的不是单个分数而是一个价值分布——这保证了在面对混合质量数据时价值估计不会被低质量轨迹拖垮。第三阶段策略提取QAMQAM 把前两者的成果合二为一。它拿来fβ只会模仿的躯壳和Qφ懂好坏的大脑。利用 Adjoint Matching让最终的策略fθ在模仿fβ的基础上往Qφ认为更好的方向偏转。0x02 LWD 论文算法2.1 算法图例论文给出的 DIVL 和 QAM 配合的算法图例如下算法22.2 算法公式DIVL 对应的算法公式如下DIVL-公式QAM 对应的算法公式如下算法2-公式2.3 逐行解释以下是对这个算法的逐行深度技术解释行号 技术行 深度拆解 通俗理解准备阶段 接收 mini-batch(s,a,r,s′)、Critic 网络、分布式价值网络、当前策略及冻结参考策略 从录像厅里抓一把带标签的录像DIVL 阶段1 V-Loss 通过最小化交叉熵损失拟合当前状态的价值概率分布 看看最严厉的裁判给的最高分是多少2 Q-Target 利用目标 V 函数计算分布式的 TD 目标提取特定分位数 自适应调节 识破潜力既然有人在这里拿过高分那这路口的潜力就是满分3 Q-Loss 使用 MSE 让 Critic 向yQ逼近 算胜率别只给平均分把每一种赢法都算清楚4 Update 动量软更新目标 Critic维持训练平滑 修正偏见让裁判算准这一招到底有几成胜算QAM 阶段5-6 Time/Noise/Trajectory 在流匹配时间轴w上采样跑出基准轨迹 模拟滑行在动作进行到一半时看看你会滑到哪里7 Endpoint 确定动作轨迹终点a1tat确定最终的目标8 Gradient/Adjoint/Loss 在终点计算 Critic 梯度 → 设为伴随状态 → 沿流路径反推 → 生成局部回归目标 感知引力→神经传导→听话又上进→对齐训练9 Return 返回所有新参数 升级包做好了我们接下来具体看看这两个算法然后再看看如何配合。0x02 DIVL分布式价值评价系统DIVL 解决的核心问题是在不尝试危险动作的前提下即纯 off-policy从好坏参杂的数据中提炼出一张价值地图。2.1 三重角色定位在 LWD 架构中DIVL 承担着三重角色每一层都有其特定的职责。第一作为 Critic HeadQφ。 核心任务是评估动作的 Q 值为 QAM 的 Adjoint Matching 提供稳定的梯度信号。没有这个稳定的评估QAM 就不知道该往哪个方向优化。第二与 QAM 的紧密耦合。 这种耦合是双向的QAM 利用 DIVL 的价值分布进行导航而 DIVL 的训练也依赖于 QAM 的 Q 网络状态。两者形成了评价-执行的完整闭环——DIVL 画地形图QAM 在上面跑。第三作为参考策略的锚点。 DIVL 的 Value Head 在训练后会被冻结作为 Reference Policyπβ给策略网络提供稳定的行为基准。即使 QAM 学习得比较激进这个基准也能确保策略不会完全偏离安全范围。这就像给越野车设定了一个围栏防止它跑出安全区。2.2 输出结构内部产物 vs 对外成品内部产物用于训练DIVL 输出一个概率分布101 个格子的概率。这个分布最大的贡献是计算出带乐观滤镜的 Q 目标值让 Q 网络学得极其稳健。这是 DIVL 内部训练机制的核心用来对抗 OOD 过估计和稀疏奖励。对外成品最终形态它产出一个经过充分锻炼、能够准确判断好坏的 Critic 网络Qφ(s,a)它给 QAM 提供的是两个关键要素Qφ(s,a)函数本身以及由它在特定动作点产生的梯度∇aQDIVL 负责画出一张完整的地形图Q 值的高低起伏而 QAM 是在这个地形图上跑的越野车。越野车不需要知道整个地形图的全貌它只需要知道脚下这块地是往哪边倾斜的梯度就能找到最高峰。这种分工的精妙之处在于DIVL 专注于看得准保留完整的分布信息QAM 专注于跑得稳只需要局部的梯度指导。两者的输出互补避免了 QAM 过度依赖 DIVL 的内部细节又能让 QAM 得到足够精确的导航信号。2.3 分布式价值学习机制为什么需要分布而不是标量传统价值函数追求分数最高DIVL 追求的是分布最合理。这个转变背后的逻辑很简单在 fleet 部署数据中同一个状态下往往有多种不同的动作结果。如果只取平均值会丢失罕见但可复现的高回报模态。想象一个场景在某个状态下数据集中不同动作的表现差异很大动作 AQ 50成功率 80%动作 BQ 40成功率 60%动作 CQ 10成功率 30%传统方法只学习选动作 A丢失了信息。DIVL 让Vψ(s)学习完整的分布——在状态s下模型倾向于选择动作 A 或 B但也会保留探索 C 的可能性。V 与 Q 的分工在架构图中V 和 Q 共享一个 VLM 骨干网络但各自承担不同的角色Q 网络Critic对状态-动作对(st,at)打分预测其折扣累计回报。核心功能是给 QAM 提供梯度∇aQ。它是动作评估员——负责评价具体某个动作的好坏并提供改进方向。V 网络Distributional Value Model这是 DIVL 的本体。它不是预测一个标量值而是建模数据集中 Q 值的分布pψ(v∣st)P(vQϕ(st,at)∣at∼D(⋅∣st))。即给定状态stV 学习的是数据集中所有动作对应的 Q 值会呈现怎样的分布形态。核心功能是提取高光基准Expectile Regression它是计算优势值的底数是全局裁判。自适应τ训练时根据V(s′)分布的熵动态调整τ——如果V(s′)分布弥散高熵说明当前状态不确定τ自动降低以保守分布集中低熵则τ升高以乐观。另外DIVL 还要接 QAM我们也接着看。动作优化QAMActorVLA 大模型并不直接感知 V而是利用 Q 在生成动作终点处的梯度∇aQϕ(s,a)通过伴随匹配Adjoint Matching将其转化为沿着参考流各时间步的局部回归目标从而稳定地优化动作生成过程——避免了直接经整个去噪过程反向传播带来的不稳定和高昂计算代价。训练过程DIVL 的训练是一个统计学习过程从数据集中收集(s,a)通过神经网络学习这些数据之间的关系让网络学会在什么状态下什么样的分布形状代表高成功率。深入看 DIVL 的训练过程实际有四个角色在协同互动V 网络分布价值模型、当前 Q 网络Critic、目标 Q 网络¯QEMA 更新、以及流策略πθActor。根据论文 Algorithm 2每步训练包含两大块此处把 QAM 也纳入进来块一分布隐式价值学习DIVL下图红色圈具体分为以下几步① 更新 V拟合 Q 值分布输入来自回放的(st,at)用目标网络¯Q评估Q¯ϕ(st,at)得到一个标量值损失函数LV(ψ)−logpψ(Q¯ϕ(st,at)∣st)这是一个交叉熵损失V 的目标是让自己在状态st处输出的分布最大似然地匹配目标 Critic 对这个动作给出的分数。V 不是在蒸馏一个数值而是在学习在当前数据集里这些动作对应的 Q 值是如何分布的② 计算自适应τ不确定性感知输入下一状态stH处的V分布计算分布的归一化熵H(stH)自适应公式τ(stH)clip(τbase−αH(stH),τmin,τmax)结果分布越弥散高熵τ越低——保守分布越集中τ越高——乐观③ 计算 TD 目标yQ看向未来输入V(stH)分布和自适应τ、当前步奖励rt计算yQrtγH⋅Quantτ(Vψ(stH))从V分布中取出τ-分位数作为未来价值的估计。因为 V 的分布是从数据集学到的这个目标天然不会走出分布——τ分位数保证了乐观程度受控离线阶段使用n-步 目标来加速稀疏奖励传播yQ∑n−1i0γiHrtiHγnHQuantτ(Vψ(stnH))n10用于长程任务④ 更新 Q收敛到 TD 目标损失函数LQ(ϕ)(Qϕ(st,at)−yQ)2这是一个 MSE 回归任务让Q的预测不断逼近上述 TD 目标随后通过 EMA 更新目标网络¯ϕ←ρ¯ϕ(1−ρ)ϕ块二基于 QAM 的策略提取⑤ 更新 ActorQAM 策略提取采样高斯噪声a0t通过参考流πβ滚动生成完整轨迹{awt}w∈[0,1]取轨迹终点a1t计算 Critic 梯度−∇a[Qϕ(s,a1t)/λ]作为伴随状态g1的终值条件沿参考流求解伴随动力学得到各中间步的局部回归目标让πθ的向量场去拟合这些目标LQAM(θ)E[∫10∥∥2fδσwσwgw∥∥22dw]整个流程的精髓DIVL 用分布式的 V 替代了标量 V保留了数据中的多模态回报信息QAM 用伴随匹配替代了直接反向传播让 Critic 的梯度能稳定地优化流式生成策略。二者结合使得 LWD 可以在异质的 fleet 数据中进行稳定的离线到在线强化学习。DIVL训练0x03 QAM伴随匹配策略执行系统如果说 DIVL 解决的是怎么看的问题QAM 解决的就是怎么改的问题——它把 DIVL 训练好的 Critic 梯度转化为 flow-based VLA 策略可以稳定吸收的局部回归目标。3.1 核心突破Adjoint Matching控制理论与大模型的跨界碰撞QAM 的核心突破在于引入了经典控制理论中的伴随灵敏度方法Adjoint Sensitivity Method。传统的生成式模型如 Diffusion 或 Flow Matching在生成动作时涉及多步迭代推理。如果要用强化学习去优化它就需要通过整个迭代链条进行反向传播BPTT这在数学上会导致严重的梯度消失或爆炸显存开销更是天文数字。伴随法的精妙之处在于QAM 不需要展开整个生成链条。它利用伴随方程直接在常微分方程ODE的层面计算出——“如果我希望最后生成的动作a的 Q 值更高现在的向量场v应该往哪个方向偏移”——这将极其复杂的全局求导简化为了局部的数学映射。梯度引力场QAM 将强化学习的优化过程具象化为一种物理上的引力。在 Flow Matching 架构下机器人动作是从噪声开始演化的。QAM 并不强迫机器人跳过演化过程而是向这个演化过程注入了来自 DIVL 的 Q 函数梯度∇aQ。这个梯度就像一股无形的引力场时刻拉动着动作流向更高分Q 值更高的区域偏移。结果是机器人输出的动作不再是机械地模仿人类录像而是顺着引力走。即使在完全陌生的环境下只要 Q 函数识别出了正确的方向QAM 就能引导机器人划出一条丝滑的、通往成功的运动轨迹。数值稳定性在 5B 甚至 10B 规模的 VLA 模型上跑强化学习稳定性高于一切。QAM 的损失函数设计非常精妙它是时间局部性Time-locality的——你可以在动作生成的任何一个时间采样进行训练而不需要跑完整生成过程。它将不稳定的 RL 策略梯度问题转化为了一个极度稳定的向量回归问题。这使得大模型能够像处理文本生成一样高效、稳定地吸收学习的反馈而不会出现权重崩溃。动作连贯性长程任务3-5 分钟最怕的是误差随时间累积。由于 QAM 在每一帧推理时都在接收 Q 函数梯度的微调它具备了天然的自恢复Self-recovery能力。例如在搬运重物的 2 分钟过程中如果手滑了一下Q 函数会立刻感知到价值下降QAM 随即产生一个反向的拉力引导手爪重新抓紧。因为动作是沿着连续的向量场流出来的QAM 生成的动作流在时间维度上具有极高的二阶平滑度。这保证了机器人在长达数分钟的高强度工作中电机始终处于平顺状态不会产生任何突兀的抖动。3.2 与通用 QAM 的对比LWD 论文中的 QAM 实现与通用 QAM 有显著区别维度 通用 QAM LWD 论文中的 QAM基础逻辑 简单的速度向量加法 加权的评分匹配Score Matching目标速度vbaseη⋅∇aQ涉及(2fδ)/(σw)和σw⋅~gw的加权合成噪声权重 常数或忽略σw√2(1−w)wEq. 9参考策略 仅是x1−x0直接指向终点 明确使用参考策略fβ的残差学习温度参数 常数η明确为1/λ且λ2时间权重 无所有时间w地位平等σw动态权重不同时间权重不同核心差异在于伴随状态~gw和噪声系数σw的设计。3.3 公式深度拆解Eq. (9)核心损失函数QAM 的核心损失函数定义如下LQAM(θ)E[∫10∥∥∥2fδ(s,aw,w)σwσw~gw∥∥∥2dw]其中fδfθ−fβ当前速度与参考速度之差σw√2(1−w)w噪声权重项~gw沿流路径传播的伴随状态Eq. (10)伴随状态终点条件~g1−∇a[Qφ(s,a1)λ]其中λ2是温度参数。注意符号是负号但它在 Loss 里面会被抵消。逐行拆解步骤 操作 技术含义Step 6 Roll out reference trajectory 通过πβ生成参考轨迹{awt}w∈[0,1]。对于线性路径它就是awt(1−w)a0tw⋅a1tStep 7 Set endpointa1tat明确将数据集中的真实动作at设为轨迹的终点这是计算梯度的基准点Step 8 Compute gradient Adjoint Map 在终点计算 Critic 梯度作为伴随状态的终值条件沿 ODE 路径反推各步目标Eq. (9) Policy Loss 让当前策略fθ的向量场去拟合参考速度 Q 梯度修正后的目标速度保护机制在 LWD 中由于分母有σw当靠近终点w→1时σw→0分母变小要求fδ必须强制趋近于 0。这保证了无论 Q 怎么指引最终生成的动作绝对不会偏离合法的动作空间太远。3.3 代码实现我们来看核心的 QAM 更新逻辑如何用代码实现非 QAM 作者版本def lwd_qam_update(v_net, v_beta, q_net, s, a_1, lambda_temp2.0):# 1. 采样时间 w 和噪声 a_0w torch.rand(s.shape[0], devices.device)a_0 torch.randn_like(a_1)# 2. 构造参考轨迹 (Step 6) w_exp w.view(-1, 1) a_w (1 - w_exp) * a_0 w_exp * a_1 # 3. 计算噪声权重 sigma_w sqrt(2 * (1-w) * w) sigma_w torch.sqrt(2 * (1 - w_exp) * w_exp 1e-6) # 4. Eq. (10): 计算终点伴随状态 g_1 a_1.requires_grad_(True) q_val q_net(s, a_1) g_1 -torch.autograd.grad(q_val.sum() / lambda_temp, a_1)[0] # 5. 简化: 线性路径下 g_w g_1 g_w g_1 # 6. 计算速度差 f_delta f_theta - f_beta v_theta v_net(s, a_w, w) v_beta_val v_beta(s, a_w, w) f_delta v_theta - v_beta_val # 7. Eq. (9): 损失函数 loss torch.mean(((2 * f_delta / sigma_w) (sigma_w * g_w))**2) return loss关键设计点线性插值构造aw通过公式直接算出不需要跑 ODE 积分梯度计算使用 torch.autograd.grad 计算 Q 对动作的导数伴随状态简化由于参考路径是线性的gwg1在非线性流中需要通过伴随 ODE 反推各步gwLoss 计算预测速度与目标速度的 MSE3.4 Reference Policy 与 BCπβ从何而来πβ及其速度场fβ是 LWD 中的参考策略Reference Policy。它的职责是告诉模型数据集里的专家/人类通常是怎么做的。在代码实现中它是一个预先训练好的、只做行为克隆BC的 Flow Matching 模型。在 Offline RL 中如果我们只依赖数据集中的样本机器人一旦尝试一个数据集中完全没出现过的动作Out-of-Distribution, OODQ 网络就可能给它乱估分。通常由于神经网络的特性这种乱估分往往是异常高的。如果只听从 Q 的指引机器人就会疯狂尝试这些危险的 OOD 动作导致在真实环境中崩溃。这就是为什么我们需要πβBehavior Prior来充当紧箍咒。BC 被内化到了训练循环中在 LWD 中BC 被深度嵌入在训练循环的每一时刻。看 Eq. (9) 中的fβ项LQAM(θ)E⎡⎢⎢⎢⎣∥∥∥∥∥fθ−fβBC 项…∥∥∥∥∥2⎤⎥⎥⎥⎦fβ就是 BC 的化身代表一个专门通过行为克隆训练好的、只模仿数据集动作的模型每次执行 QAM Update 时都会计算当前策略fθ与参考流fβ之间的差距这强制让πθ不要偏离数据集太远本质上是在进行在线的 KL 散度正则化训练时机离线预训练阶段先用收集好的历史数据跑普通的 Flow Matching Loss没有 Q 梯度产生一个纯粹的 BC 模型fβ。持续训练阶段fβ通常被冻结作为一个永恒的导师提醒正在学习的fθ——“别忘了我们老祖宗数据集是怎么干的”。只有fθ当前策略在利用 Q 梯度和对齐fβ的双重压力下更新。LWD vs qam.py 在 BC 处理上的异同维度 qam.py作者源码 LWD论文实现BC 的实体 actor_slowfβReference Flow训练时机 同时训练通过 flow_loss 通常先预训练再作为 Frozen Prior 使用作用方式 作为总速度的一部分v_s v_f 作为 Loss 函数里的减项fθ−fβ3.5σw的深入理解σw√2(1−w)w是整个 QAM 的灵魂参数。我们用一条长廊来理解它的物理直觉在起点w≈0σw接近 0在终点w≈1σw也接近 0在中间w0.5σw达到最大值回到 Loss 公式loss((2⋅fδ/σw)(σw⋅gw))2当σw非常小时为了不让 Loss 爆炸fδ必须强制趋近于 0。这意味着在起点和终点模型必须极其精准地模仿参考策略。而当σw在中间变得很大时σw⋅gw这一项的影响力会变大说明在导航的中间阶段可以拥有更多的自由度去根据 Q 梯度的指引进行漂移。总结σw的三个作用端点锚定确保轨迹的起点和终点稳定不会因为 Q 的梯度而产生剧烈震荡噪声调度模仿扩散模型中的扩散核Diffusion Kernel使 QAM 在数学上等价于在最大化 Q 的同时最小化与参考策略之间的 KL 散度数值稳定性平衡模仿速度和优化速度的量级防止在不同时刻梯度爆炸3.6 vs QAM作者实现在论文中, 我们说有 V, Q, π 三个逻辑实体, 但在QAM作者的代码 qam.py 中, 你看到的是 critic_loss 和 actor_loss。它们的对应关系如下核心对应关系论文实体 (Algorithm 2) 代码函数 (qam.py) 实际意义DIVL (V 和 Q) critic_loss 训练裁判系统。它负责把 V 和 Q 练好, 让它们能准确评估好坏。QAM (π) actor_loss 训练动作系统。它负责利用裁判给出的梯度, 学会怎么生成动作。为什么 qam.py 里看起来没写 V这是一个非常有意思的代码设计差异:在我们的实现中: 我们严格按照 DIVL 论文, 显式定义了 V_ψ (分布) 和 Q_φ (标量)。在QAM 作者的 qam.py 中作者使用的是一种更通用的写法。他的 critic_loss 实际上是 Critic Ensemble (多头 Q 网络)。如果你去看他 create 方法里的 Value 类, 虽然名字叫 Value, 但它输入的是 (obs, actions), 所以它其实是在实现Q(s,a)。关于 V 的隐式处理: 在作者的 critic_loss 里, 他通过采样 next_actions 来计算 next_qs, 这是一种类似 SAC 的显式更新。0x04 协同机制价值到行动的闭环前面两篇文章分别介绍了 DIVL 和 QAM 各自的设计。但 LWD 真正的力量在于它们的配合——这种配合不是简单的先后顺序而是一个四人舞式的多角色协同过程。4.1 四人舞完整的训练步深入看一轮完整的训练步实际有四个角色在协同互动V 网络分布价值模型、当前 Q 网络Critic、目标 Q 网络¯QEMA 更新、以及当前策略πθActor。一轮完整的训练步 从 replay buffer 采样数据→ DIVL 更新 V_ψ (分布拟合)→ DIVL 计算自适应 τ 和 TD 目标 y_Q→ DIVL 更新 Q_φ (收敛到 y_Q)→ EMA 更新目标 Q 网络→ QAM 通过 π_β 生成参考轨迹→ QAM 在终点计算 ∇_a Q→ QAM 通过伴随匹配生成局部回归目标→ QAM 更新 π_θ 的向量场→ 新策略异步下发4.2 协同对话DIVL 和 QAM 交互如下DIVL 通过分布式评估为 Q 函数提供了一个考虑不确定性的、极其稳定的地形图QAM 利用 Q 函数的梯度通过导航而非瞬移的方式将噪声雕刻成高质量的动作σw在其中起到了平衡模仿与优化的动态权重作用如果我们把 DIVL 和 QAM 的交互写成对话它是这样的QAM 问 DIVL“裁判我现在在状态s我的动作走到了位置at。如果我往这个方向再迈一小步我的前途会变亮还是变暗”即QAM 问 Q“请给我动作a这里的梯度∇aQ。”DIVLCritic Head回答“根据我学到的经验在这个点Q 值的梯度是这样的∇aQ。你沿着这个方向走动作价值提升最快。”Q 因为向 V 学习了乐观的未来它的梯度会指向那些真正能通往高分的动作方向。QAM 拿到梯度把它填进 Adjoint Matching 的公式里调整自己的速度场。4.3 梯度传递链梯度的传递是连接 DIVL 和 QAM 的关键纽带。梯度的计算逻辑如下DIVL 给 QAM 提供了梯度。DIVL 提供了一个稳定的、考虑了不确定性的训练目标, 使得 Q 函数不会因为离线数据的噪声而产生乱七八糟的形状。梯度的产生通过对 Critic 网络执行 torch.autograd.grad, 计算 Q 值对输入 a 的导数。最终形态这是一个与动作 a 维度相同的向量, 指向 Q 值增加最快的方向。而 QAM 利用这个梯度最终生成了 Action。整个过程分为三步第一步DIVL 产出目标值训练 Q 函数Vψ分布值函数包含了很多信息。DIVL 根据当前的乐观度τ从这个分布中提取出一个具体的数值yQuantileτ(Vψ(s′))然后训练 Critic 网络Qφ(s,a)去逼近这个数值结果我们得到了一个神经网络Qφ输入(s,a)输出一个实数第二步利用自动求导提取梯度既然Qφ是一个神经网络它在数学上就是一个关于动作a的连续函数a_t.requires_grad_(True)q_val critic_q_net(s, a_t) # 问 Q 网络: 在这个点值多少?grad_a_q torch.autograd.grad(q_val.sum(), a_t)[0] # 核心: 计算 q_val 对 a_t 的导数第三步梯度体现了 DIVL 的意志你可能会问既然是算 Q 的梯度那和 DIVL 的分布有什么关系关系就在于训练过程因为 Q 是看着 V 的分布特别是分布的高分右端学出来的所以 Q 函数的地形图会被塑造成指向 V 分布中那些高分动作的方向。V 告诉 Q 哪里是高山Q 顺着这个指示画出了山的形状最后 QAM 看着 Q 画的形状往山上爬。4.4 核心公式全景我们整理一下完整的公式链条看清每一步之间的因果关系V 网络更新 (交叉熵):ℒ_V(ψ) -log p_ψ(Q_φ̄(s_t, a_t) | s_t)→ V 学习数据集中 Q 值的分布自适应 τ (不确定性感知):τ(s_{tH}) clip(τ_base - α·H(s_{tH}), τ_min, τ_max)→ 分布越不确定(高熵) → τ 越低 → 越保守TD 目标 (分位数 bootstrap):y_Q r_t γ^H · Quant_τ(V_ψ(s_{tH}))→ 从 V 分布取 τ-分位数作为未来价值估计Q 网络更新 (MSE):ℒ_Q(φ) (Q_φ(s_t, a_t) - y_Q)²→ Q 收敛到带乐观偏置的 TD 目标QAM 伴随匹配 (策略提取):ℒ_QAM(θ) E[∫₀¹ || (2f_δ/σ_w) (σ_w·g̃_w) ||² dw]→ f_θ 在模仿 f_β 的基础上, 往 ∇_a Q 的方向偏转这条链条中最精妙的设计在于每一步的输出都是下一步的输入且每一步的输出都比上一步更接近可执行的动作。V 的分布是抽象的统计信息经过分位数提取变成具体的数值yQ再通过 Q 训练变成连续可导的函数Qφ最后通过伴随匹配变成向量场中每一步的局部目标——信息在每一步都在被提纯和转化最终落地为机器人流畅的动作。链条中的重点如下π_β (Reference Policy)π_β 不是 DIVL 的输出, 而是系统的输入和先验知识。 它通常是一个预先用行为克隆 (BC) 训练好的模型。它代表了旧的、安全的、但可能平庸的行为。在 Algorithm 2 的第 1 行, 你会看到 policy π_θ with reference policy π_β。它在干什么? 在整个训练过程中, 它像是一个锚点, 防止 π_θ 因为追求高分而变得过于疯狂 (即我们之前讨论的 KL 散度约束)。深度解析: DIVL 给 QAM 到底是什么?我们看 Algorithm 2 的第 11 行Update θ by minimizing Eq. (9) with \tilde{g}1 set from action gradient ∇{a}Q_φ(s, a₁) …。这一行就是交接棒!DIVL 先算: 它在第 3-5 行完成了 Q_φ 的更新。这时候, Q_φ 是热气腾腾、最新的裁判。QAM 后接: 到了第 11 行, QAM 并没有调用 DIVL 的 V 分布, 它只向 Q_φ 要了一个东西——动作梯度 ∇_a Q。QAM 执行: 它拿着这个梯度, 利用 Adjoint Matching, 把原来的 π_β 往更好的方向推一步。总结: 谁产出了谁?DIVL 产出了: 经过修正的 Q_φ (裁判的眼光)。QAM 产出了: 经过修正的 π_θ (运动员的动作)。π_β: 始终在那里, 作为不准跑偏的参考标准。更新 V_ψ (Eq. 12)这可以理解为 “分类任务”。目标: 我们让分布网络 V_ψ(s) 去预测数据集里动作的 Q 值。Loss: 这是一个交叉熵 (Cross-Entropy) 损失。