【机器人 / 强化学习】QAM 与 DIVL:评价-执行闭环的完美配合

0 阅读29分钟

【机器人 / 强化学习】QAM 与 DIVL:评价-执行闭环的完美配合

0x00 概要

LWD 的核心主张是"部署时持续改进",而这一主张在算法层面能否落地,取决于两个关键能力:有没有一双火眼金睛,能从好坏参半的部署数据中看清真正的价值方向?有没有一身好功夫,能把价值方向转化为丝滑流畅的动作改进? 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-闭环

DIVL 和 QAM-闭环

这个闭环的每一个环节都有其不可替代性:

  • 没有 DIVL,Q 梯度会乱跳。 价值估计不准,策略改进就没有可靠的方向。整个系统就像没有导航的运动员,不知道往哪里优化。
  • 没有 QAM,V 的分布无法转化为流畅的动作。 再好的价值判断,如果不能稳定注入到生成式策略里,就像教练有眼光却无法纠正运动员的动作。
  • 统一目标消除阶段鸿沟。 两者在离线和在线阶段使用完全相同的损失函数,只是数据来源不同。这避免了离线 Critic 过于保守、在线微调时价值尺度不匹配的致命问题。

1.3 三阶段逻辑链条

整个 LWD 算法(论文 Algorithm 2)的逻辑可以拆解为三个递进阶段:

第一阶段:预训练(BC)

你手里有一堆离线数据 。你训练一个 Flow 模型,损失函数只有最基础的 。训练完后得到 ——它只会"模仿"数据,完全不懂什么是奖励(Reward)。

第二阶段:值函数学习(DIVL)

DIVL 登场了。它的任务是学习 Critic(Q 和 V)。它改进了 IQL 的方式,用分布式的视角去评估每个动作的好坏。DIVL 产出的不是单个分数,而是一个价值分布——这保证了在面对混合质量数据时,价值估计不会被低质量轨迹拖垮。

第三阶段:策略提取(QAM)

QAM 把前两者的成果合二为一。它拿来 (只会模仿的躯壳)和 (懂好坏的大脑)。利用 Adjoint Matching,让最终的策略 在模仿 的基础上,往 认为更好的方向偏转。

0x02 LWD 论文算法

2.1 算法图例

论文给出的 DIVL 和 QAM 配合的算法图例如下:

算法2

算法2

2.2 算法公式

DIVL 对应的算法公式如下:

DIVL-公式

DIVL-公式

QAM 对应的算法公式如下

算法2-公式

算法2-公式

2.3 逐行解释

以下是对这个算法的逐行深度技术解释:


行号技术行深度拆解通俗理解
准备阶段接收 mini-batch 、Critic 网络、分布式价值网络、当前策略及冻结参考策略从录像厅里抓一把带标签的录像
DIVL 阶段
1V-Loss通过最小化交叉熵损失,拟合当前状态的价值概率分布看看最严厉的裁判给的最高分是多少
2Q-Target利用目标 V 函数计算分布式的 TD 目标(提取特定分位数 + 自适应调节)识破潜力:既然有人在这里拿过高分,那这路口的潜力就是满分
3Q-Loss使用 MSE 让 Critic 向 逼近算胜率:别只给平均分,把每一种赢法都算清楚
4Update动量软更新目标 Critic,维持训练平滑修正偏见:让裁判算准这一招到底有几成胜算
QAM 阶段
5-6Time/Noise/Trajectory在流匹配时间轴 上采样,跑出基准轨迹模拟滑行:在动作进行到一半时看看你会滑到哪里
7Endpoint确定动作轨迹终点 确定最终的目标
8Gradient/Adjoint/Loss在终点计算 Critic 梯度 → 设为伴随状态 → 沿流路径反推 → 生成局部回归目标感知引力→神经传导→听话又上进→对齐训练
9Return返回所有新参数升级包做好了

我们接下来具体看看这两个算法,然后再看看如何配合。

0x02 DIVL:分布式价值评价系统

DIVL 解决的核心问题是:在不尝试危险动作的前提下(即纯 off-policy),从好坏参杂的数据中提炼出一张"价值地图"。

2.1 三重角色定位

在 LWD 架构中,DIVL 承担着三重角色,每一层都有其特定的职责。

第一,作为 Critic Head()。 核心任务是评估动作的 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 网络
  • 它给 QAM 提供的是两个关键要素: 函数本身,以及由它在特定动作点产生的梯度

DIVL 负责画出一张完整的"地形图"(Q 值的高低起伏),而 QAM 是在这个地形图上跑的"越野车"。越野车不需要知道整个地形图的全貌,它只需要知道脚下这块地是往哪边倾斜的(梯度),就能找到最高峰。

这种分工的精妙之处在于:DIVL 专注于"看得准",保留完整的分布信息;QAM 专注于"跑得稳",只需要局部的梯度指导。两者的输出互补,避免了 QAM 过度依赖 DIVL 的内部细节,又能让 QAM 得到足够精确的导航信号。

2.3 分布式价值学习机制

为什么需要分布而不是标量?

传统价值函数追求"分数最高",DIVL 追求的是"分布最合理"。这个转变背后的逻辑很简单:在 fleet 部署数据中,同一个状态下往往有多种不同的动作结果。如果只取平均值,会丢失罕见但可复现的高回报模态。

想象一个场景:在某个状态下,数据集中不同动作的表现差异很大:

  • 动作 A:Q = 50,成功率 80%
  • 动作 B:Q = 40,成功率 60%
  • 动作 C:Q = 10,成功率 30%

传统方法只学习"选动作 A",丢失了信息。DIVL 让 学习完整的分布——在状态 下,模型倾向于选择动作 A 或 B,但也会保留探索 C 的可能性。

V 与 Q 的分工

在架构图中,V 和 Q 共享一个 VLM 骨干网络,但各自承担不同的角色:

  • Q 网络(Critic) :对状态-动作对 打分,预测其折扣累计回报。核心功能是给 QAM 提供梯度 。它是"动作评估员"——负责评价"具体某个动作"的好坏并提供改进方向。
  • V 网络(Distributional Value Model) :这是 DIVL 的本体。它不是预测一个标量值,而是建模数据集中 Q 值的分布。即给定状态 ,V 学习的是"数据集中所有动作对应的 Q 值会呈现怎样的分布形态"。核心功能是提取"高光"基准(Expectile Regression),它是计算"优势值"的底数,是"全局裁判"。

自适应 :训练时根据 分布的熵动态调整 ——如果 分布弥散(高熵),说明当前状态不确定, 自动降低以保守;分布集中(低熵)则 升高以乐观。

另外,DIVL 还要接 QAM,我们也接着看。

动作优化(QAM) :Actor(VLA 大模型)并不直接感知 V,而是利用 Q 在生成动作终点处的梯度 ,通过**伴随匹配(Adjoint Matching)**将其转化为沿着参考流各时间步的局部回归目标,从而稳定地优化动作生成过程——避免了直接经整个去噪过程反向传播带来的不稳定和高昂计算代价。

训练过程

DIVL 的训练是一个统计学习过程:从数据集中收集 ,通过神经网络学习这些数据之间的关系,让网络学会"在什么状态下,什么样的分布形状代表高成功率"。

深入看 DIVL 的训练过程,实际有四个角色在协同互动:V 网络(分布价值模型)、当前 Q 网络(Critic)、目标 Q 网络(,EMA 更新)、以及流策略 (Actor)。

根据论文 Algorithm 2,每步训练包含两大块(此处把 QAM 也纳入进来):

块一:分布隐式价值学习(DIVL)下图红色圈

具体分为以下几步:

① 更新 V(拟合 Q 值分布):

  • 输入:来自回放的
  • 用目标网络 评估 ,得到一个标量值
  • 损失函数:,这是一个交叉熵损失
  • V 的目标是让自己在状态 处输出的分布,最大似然地匹配"目标 Critic 对这个动作给出的分数"。V 不是在蒸馏一个数值,而是在学习**"在当前数据集里,这些动作对应的 Q 值是如何分布的"**

② 计算自适应 (不确定性感知):

  • 输入:下一状态 处的 分布
  • 计算分布的归一化熵
  • 自适应公式:
  • 结果:分布越弥散(高熵), 越低——保守;分布越集中, 越高——乐观

③ 计算 TD 目标 (看向未来):

  • 输入: 分布和自适应 、当前步奖励
  • 计算:
  • 分布中取出 -分位数,作为未来价值的估计。因为 V 的分布是从数据集学到的,这个目标天然不会走出分布—— 分位数保证了乐观程度受控
  • 离线阶段使用 -步 目标来加速稀疏奖励传播: 用于长程任务)

④ 更新 Q(收敛到 TD 目标):

  • 损失函数:,这是一个 MSE 回归任务
  • 的预测不断逼近上述 TD 目标
  • 随后通过 EMA 更新目标网络:

块二:基于 QAM 的策略提取

⑤ 更新 Actor(QAM 策略提取)

  • 采样高斯噪声 ,通过参考流 滚动生成完整轨迹
  • 取轨迹终点 ,计算 Critic 梯度 作为伴随状态 的终值条件
  • 沿参考流求解伴随动力学,得到各中间步的局部回归目标
  • 的向量场去拟合这些目标:

整个流程的精髓:DIVL 用分布式的 V 替代了标量 V,保留了数据中的多模态回报信息;QAM 用伴随匹配替代了直接反向传播,让 Critic 的梯度能稳定地优化流式生成策略。二者结合,使得 LWD 可以在异质的 fleet 数据中进行稳定的离线到在线强化学习。

DIVL训练

DIVL训练

0x03 QAM:伴随匹配策略执行系统

如果说 DIVL 解决的是"怎么看"的问题,QAM 解决的就是"怎么改"的问题——它把 DIVL 训练好的 Critic 梯度,转化为 flow-based VLA 策略可以稳定吸收的局部回归目标。

3.1 核心突破

Adjoint Matching:控制理论与大模型的跨界碰撞

QAM 的核心突破在于引入了经典控制理论中的伴随灵敏度方法(Adjoint Sensitivity Method)

传统的生成式模型(如 Diffusion 或 Flow Matching)在生成动作时涉及多步迭代推理。如果要用强化学习去优化它,就需要通过整个迭代链条进行反向传播(BPTT),这在数学上会导致严重的梯度消失或爆炸,显存开销更是天文数字。

伴随法的精妙之处在于:QAM 不需要展开整个生成链条。它利用伴随方程,直接在常微分方程(ODE)的层面计算出——"如果我希望最后生成的动作 的 Q 值更高,现在的向量场 应该往哪个方向偏移?"——这将极其复杂的全局求导简化为了局部的数学映射。

梯度引力场

QAM 将强化学习的优化过程具象化为一种物理上的"引力"。

在 Flow Matching 架构下,机器人动作是从噪声开始演化的。QAM 并不强迫机器人跳过演化过程,而是向这个演化过程注入了来自 DIVL 的 Q 函数梯度()。这个梯度就像一股无形的引力场,时刻拉动着动作流向更高分(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 有显著区别:

维度通用 QAMLWD 论文中的 QAM
基础逻辑简单的速度向量加法加权的评分匹配(Score Matching)
目标速度涉及 的加权合成
噪声权重常数或忽略(Eq. 9)
参考策略仅是 (直接指向终点)明确使用参考策略 的残差学习
温度参数常数 明确为
时间权重无(所有时间 地位平等) 动态权重(不同时间权重不同)

核心差异在于伴随状态 和噪声系数 的设计。

3.3 公式深度拆解

Eq. (9):核心损失函数

QAM 的核心损失函数定义如下:

其中:

  • :当前速度与参考速度之差
  • :噪声权重项
  • :沿流路径传播的伴随状态
Eq. (10):伴随状态终点条件

其中 是温度参数。注意符号是负号,但它在 Loss 里面会被抵消。

逐行拆解
步骤操作技术含义
Step 6Roll out reference trajectory通过 生成参考轨迹 。对于线性路径,它就是
Step 7Set endpoint 明确将数据集中的真实动作 设为轨迹的终点,这是计算梯度的基准点
Step 8Compute gradient & Adjoint Map在终点计算 Critic 梯度,作为伴随状态的终值条件,沿 ODE 路径反推各步目标
Eq. (9)Policy Loss让当前策略 的向量场去拟合参考速度 + Q 梯度修正后的目标速度
保护机制

在 LWD 中,由于分母有 ,当靠近终点()时,,分母变小要求 必须强制趋近于 0。这保证了无论 Q 怎么指引,最终生成的动作绝对不会偏离合法的动作空间太远。

3.3 代码实现

我们来看核心的 QAM 更新逻辑如何用代码实现(非 QAM 作者版本):

def lwd_qam_update(v_net, v_beta, q_net, s, a_1, lambda_temp=2.0):
    # 1. 采样时间 w 和噪声 a_0
    w = torch.rand(s.shape[0], device=s.device)
    a_0 = torch.randn_like(a_1)

    # 2. 构造参考轨迹 (Step 6)
    w_exp = w.view(-11)
    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

关键设计点:

  1. 线性插值构造 :通过公式直接算出,不需要跑 ODE 积分
  2. 梯度计算:使用 torch.autograd.grad 计算 Q 对动作的导数
  3. 伴随状态简化:由于参考路径是线性的,(在非线性流中需要通过伴随 ODE 反推各步
  4. Loss 计算:预测速度与目标速度的 MSE

3.4 Reference Policy 与 BC

从何而来?

(及其速度场 )是 LWD 中的参考策略(Reference Policy)。它的职责是告诉模型"数据集里的专家/人类通常是怎么做的"。在代码实现中,它是一个预先训练好的、只做行为克隆(BC)的 Flow Matching 模型。

在 Offline RL 中,如果我们只依赖数据集中的样本,机器人一旦尝试一个数据集中完全没出现过的动作(Out-of-Distribution, OOD),Q 网络就可能给它乱估分。通常由于神经网络的特性,这种乱估分往往是异常高的。如果只听从 Q 的指引,机器人就会疯狂尝试这些危险的 OOD 动作,导致在真实环境中崩溃。这就是为什么我们需要 (Behavior Prior)来充当"紧箍咒"。

BC 被"内化"到了训练循环中

在 LWD 中,BC 被深度嵌入在训练循环的每一时刻。看 Eq. (9) 中的 项:

  • 就是 BC 的化身,代表一个专门通过行为克隆训练好的、只模仿数据集动作的模型
  • 每次执行 QAM Update 时,都会计算当前策略 与参考流 之间的差距
  • 这强制让 不要偏离数据集太远,本质上是在进行在线的 KL 散度正则化
训练时机

离线预训练阶段:先用收集好的历史数据跑普通的 Flow Matching Loss(没有 Q 梯度),产生一个纯粹的 BC 模型

持续训练阶段 通常被冻结,作为一个"永恒的导师",提醒正在学习的 ——"别忘了我们老祖宗(数据集)是怎么干的"。只有 (当前策略)在利用 Q 梯度和对齐 的双重压力下更新。

LWD vs qam.py 在 BC 处理上的异同
维度qam.py(作者源码)LWD(论文实现)
BC 的实体actor_slow(Reference Flow)
训练时机同时训练(通过 flow_loss)通常先预训练,再作为 Frozen Prior 使用
作用方式作为总速度的一部分(v_s + v_f)作为 Loss 函数里的减项(

3.5 的深入理解

是整个 QAM 的灵魂参数。我们用一条长廊来理解它的物理直觉:

  • 在起点(): 接近 0
  • 在终点(): 也接近 0
  • 在中间(): 达到最大值

回到 Loss 公式:

非常小时,为了不让 Loss 爆炸, 必须强制趋近于 0。这意味着在起点和终点,模型必须极其精准地"模仿"参考策略。而当 在中间变得很大时, 这一项的影响力会变大,说明在导航的中间阶段可以拥有更多的自由度去根据 Q 梯度的指引进行漂移

总结 的三个作用:

  1. 端点锚定:确保轨迹的起点和终点稳定,不会因为 Q 的梯度而产生剧烈震荡
  2. 噪声调度:模仿扩散模型中的扩散核(Diffusion Kernel),使 QAM 在数学上等价于在最大化 Q 的同时最小化与参考策略之间的 KL 散度
  3. 数值稳定性:平衡"模仿速度"和"优化速度"的量级,防止在不同时刻梯度爆炸

3.6 vs QAM作者实现

在论文中, 我们说有 V, Q, π 三个逻辑实体, 但在QAM作者的代码 qam.py 中, 你看到的是 critic_loss 和 actor_loss。它们的对应关系如下:

  1. 核心对应关系
论文实体 (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), 所以它其实是在实现
    • 关于 V 的隐式处理: 在作者的 critic_loss 里, 他通过采样 next_actions 来计算 next_qs, 这是一种类似 SAC 的显式更新。

0x04 协同机制:价值到行动的闭环

前面两篇文章分别介绍了 DIVL 和 QAM 各自的设计。但 LWD 真正的力量在于它们的配合——这种配合不是简单的"先后顺序",而是一个"四人舞"式的多角色协同过程。

4.1 四人舞:完整的训练步

深入看一轮完整的训练步,实际有四个角色在协同互动:V 网络(分布价值模型)、当前 Q 网络(Critic)、目标 Q 网络(,EMA 更新)、以及当前策略 (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 函数的梯度,通过"导航"而非"瞬移"的方式,将噪声雕刻成高质量的动作
  • 在其中起到了平衡"模仿"与"优化"的动态权重作用

如果我们把 DIVL 和 QAM 的交互写成对话,它是这样的:

  • QAM 问 DIVL:"裁判,我现在在状态 ,我的动作走到了位置 。如果我往这个方向再迈一小步,我的前途会变亮还是变暗?",即QAM 问 Q:"请给我动作 这里的梯度 。"

  • DIVL(Critic Head)回答

    1. "根据我学到的经验,在这个点,Q 值的梯度是这样的:。你沿着这个方向走,动作价值提升最快。"
    2. 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 函数

  • (分布值函数)包含了很多信息。DIVL 根据当前的"乐观度" ,从这个分布中提取出一个具体的数值:
  • 然后训练 Critic 网络 去逼近这个数值
  • 结果:我们得到了一个神经网络 ,输入 ,输出一个实数

第二步:利用自动求导提取梯度

既然 是一个神经网络,它在数学上就是一个关于动作 的连续函数:

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_{t+H}) = clip(τ_base - α·H(s_{t+H}), τ_min, τ_max)
  → 分布越不确定(高熵) → τ 越低 → 越保守

TD 目标 (分位数 bootstrap):
  y_Q = r_t + γ^H · Quant_τ(V_ψ(s_{t+H}))
  → 从 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 的分布是抽象的统计信息,经过分位数提取变成具体的数值 ,再通过 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) 损失。
  • 物理意义: V_ψ(s) 学习的是: "在这个状态下, 数据集中的动作 Q 值通常分布在哪些格子里?"
计算 TD 目标 y_Q (Eq. 19)

这是"选择概率分布高的区域执行"的数学体现。

  • 在普通的 Q-learning 中, 我们用 max_{a'} Q(s', a')。

  • 在 DIVL 中, 我们从 V_ψ(s') 这个分布中取一个分位数 (Quantile)。

  • 公式的核心: Quantile_{τ}(V_ψ(s'))

    • 如果 τ=0.9 (乐观), 我们取分布中前 10% 的高分位置。
    • 如果 τ=0.1 (悲观), 我们取最后 10% 的低分位置。
  • 论文提到 τ 不是固定的, 而是根据分布的熵 (Entropy) 来定的: τ(s) = clip(τ_{base} - α H(s), ...)。

    • 熵大 代表分布很散 (机器人很懵, 不知道哪里好)。
    • 熵小 代表分布很集中 (机器人很自信)。
更新 Q_φ (Eq. 15)

这依然是一个回归任务 (MSE Loss)。

  • 逼近上面算出来的这个带有"乐观色彩"的 y_Q。

0x05 总结

DIVL 和 QAM 的配合是 LWD 算法层面的灵魂。我们把它们的关系做一个最终的梳理:

维度DIVLQAM
角色评价系统(大脑)执行系统(肌肉)
核心任务更新 更新
解决的问题从异质数据中稳健评估价值把价值信号注入生成式策略
输出稳健的 Critic + 梯度改进后的 Flow 策略
关键机制分布学习 + 自适应分位数伴随匹配 + 噪声调度
与对方的接口提供 吸收并应用
离在线统一性相同损失函数,不同数据来源相同损失函数,不同数据来源

一句话总结:DIVL 给出"往哪个方向走更有前途"的导航信号,QAM 把导航信号转化为每一步的"踩油门力度",两者配合让机器人在真实部署中持续进化。

TransFormer-封面

TransFormer-封面

0xFF 参考

SERL——针对真机高效采样的RL系统:基于图像观测和RLPD算法等,开启少量演示下的RL精密插拔之路(含插入基准FMB的详解)

边部署边学习:面向通用机器人策略的机群-级强化学习

论文解读:Learning while Deploying (LWD)—— 面向通用机器人策略的集群级强化学习框架

本文使用 markdown.com.cn 排版