【机器人 / 强化学习】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,Q 梯度会乱跳。 价值估计不准,策略改进就没有可靠的方向。整个系统就像没有导航的运动员,不知道往哪里优化。
没有 QAM,V 的分布无法转化为流畅的动作。 再好的价值判断,如果不能稳定注入到生成式策略里,就像教练有眼光却无法纠正运动员的动作。
统一目标消除阶段鸿沟。 两者在离线和在线阶段使用完全相同的损失函数,只是数据来源不同。这避免了离线 Critic 过于保守、在线微调时价值尺度不匹配的致命问题。
1.3 三阶段逻辑链条
整个 LWD 算法(论文 Algorithm 2)的逻辑可以拆解为三个递进阶段:
第一阶段:预训练(BC)
你手里有一堆离线数据
(
s
,
a
)
。你训练一个 Flow 模型,损失函数只有最基础的
∥
v
θ
−
(
x
1
−
x
0
)
∥
2
。训练完后得到
f
β
——它只会"模仿"数据,完全不懂什么是奖励(Reward)。
第二阶段:值函数学习(DIVL)
DIVL 登场了。它的任务是学习 Critic(Q 和 V)。它改进了 IQL 的方式,用分布式的视角去评估每个动作的好坏。DIVL 产出的不是单个分数,而是一个价值分布——这保证了在面对混合质量数据时,价值估计不会被低质量轨迹拖垮。
第三阶段:策略提取(QAM)
QAM 把前两者的成果合二为一。它拿来
f
β
(只会模仿的躯壳)和
Q
φ
(懂好坏的大脑)。利用 Adjoint Matching,让最终的策略
f
θ
在模仿
f
β
的基础上,往
Q
φ
认为更好的方向偏转。
0x02 LWD 论文算法
2.1 算法图例
论文给出的 DIVL 和 QAM 配合的算法图例如下:
算法2
2.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 向
y
Q
逼近 算胜率:别只给平均分,把每一种赢法都算清楚
4 Update 动量软更新目标 Critic,维持训练平滑 修正偏见:让裁判算准这一招到底有几成胜算
QAM 阶段
5-6 Time/Noise/Trajectory 在流匹配时间轴
w
上采样,跑出基准轨迹 模拟滑行:在动作进行到一半时看看你会滑到哪里
7 Endpoint 确定动作轨迹终点
a
1
t
a
t
确定最终的目标
8 Gradient/Adjoint/Loss 在终点计算 Critic 梯度 → 设为伴随状态 → 沿流路径反推 → 生成局部回归目标 感知引力→神经传导→听话又上进→对齐训练
9 Return 返回所有新参数 升级包做好了
我们接下来具体看看这两个算法,然后再看看如何配合。
0x02 DIVL:分布式价值评价系统
DIVL 解决的核心问题是:在不尝试危险动作的前提下(即纯 off-policy),从好坏参杂的数据中提炼出一张"价值地图"。
2.1 三重角色定位
在 LWD 架构中,DIVL 承担着三重角色,每一层都有其特定的职责。
第一,作为 Critic Head(
Q
φ
)。 核心任务是评估动作的 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
)
函数本身,以及由它在特定动作点产生的梯度
∇
a
Q
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 让
V
ψ
(
s
)
学习完整的分布——在状态
s
下,模型倾向于选择动作 A 或 B,但也会保留探索 C 的可能性。
V 与 Q 的分工
在架构图中,V 和 Q 共享一个 VLM 骨干网络,但各自承担不同的角色:
Q 网络(Critic):对状态-动作对
(
s
t
,
a
t
)
打分,预测其折扣累计回报。核心功能是给 QAM 提供梯度
∇
a
Q
。它是"动作评估员"——负责评价"具体某个动作"的好坏并提供改进方向。
V 网络(Distributional Value Model):这是 DIVL 的本体。它不是预测一个标量值,而是建模数据集中 Q 值的分布:
p
ψ
(
v
∣
s
t
)
P
(
v
Q
ϕ
(
s
t
,
a
t
)
∣
a
t
∼
D
(
⋅
∣
s
t
)
)
。即给定状态
s
t
,V 学习的是"数据集中所有动作对应的 Q 值会呈现怎样的分布形态"。核心功能是提取"高光"基准(Expectile Regression),它是计算"优势值"的底数,是"全局裁判"。
自适应
τ
:训练时根据
V
(
s
′
)
分布的熵动态调整
τ
——如果
V
(
s
′
)
分布弥散(高熵),说明当前状态不确定,
τ
自动降低以保守;分布集中(低熵)则
τ
升高以乐观。
另外,DIVL 还要接 QAM,我们也接着看。
动作优化(QAM):Actor(VLA 大模型)并不直接感知 V,而是利用 Q 在生成动作终点处的梯度
∇
a
Q
ϕ
(
s
,
a
)
,通过伴随匹配(Adjoint Matching)将其转化为沿着参考流各时间步的局部回归目标,从而稳定地优化动作生成过程——避免了直接经整个去噪过程反向传播带来的不稳定和高昂计算代价。
训练过程
DIVL 的训练是一个统计学习过程:从数据集中收集
(
s
,
a
)
,通过神经网络学习这些数据之间的关系,让网络学会"在什么状态下,什么样的分布形状代表高成功率"。
深入看 DIVL 的训练过程,实际有四个角色在协同互动:V 网络(分布价值模型)、当前 Q 网络(Critic)、目标 Q 网络(
¯
Q
,EMA 更新)、以及流策略
π
θ
(Actor)。
根据论文 Algorithm 2,每步训练包含两大块(此处把 QAM 也纳入进来):
块一:分布隐式价值学习(DIVL)(下图红色圈)
具体分为以下几步:
① 更新 V(拟合 Q 值分布):
输入:来自回放的
(
s
t
,
a
t
)
用目标网络
¯
Q
评估
Q
¯
ϕ
(
s
t
,
a
t
)
,得到一个标量值
损失函数:
L
V
(
ψ
)
−
log
p
ψ
(
Q
¯
ϕ
(
s
t
,
a
t
)
∣
s
t
)
,这是一个交叉熵损失
V 的目标是让自己在状态
s
t
处输出的分布,最大似然地匹配"目标 Critic 对这个动作给出的分数"。V 不是在蒸馏一个数值,而是在学习"在当前数据集里,这些动作对应的 Q 值是如何分布的"
② 计算自适应
τ
(不确定性感知):
输入:下一状态
s
t
+
H
处的
V
分布
计算分布的归一化熵
H
(
s
t
+
H
)
自适应公式:
τ
(
s
t
+
H
)
clip
(
τ
base
−
α
H
(
s
t
+
H
)
,
τ
min
,
τ
max
)
结果:分布越弥散(高熵),
τ
越低——保守;分布越集中,
τ
越高——乐观
③ 计算 TD 目标
y
Q
(看向未来):
输入:
V
(
s
t
+
H
)
分布和自适应
τ
、当前步奖励
r
t
计算:
y
Q
r
t
+
γ
H
⋅
Quant
τ
(
V
ψ
(
s
t
+
H
)
)
从
V
分布中取出
τ
-分位数,作为未来价值的估计。因为 V 的分布是从数据集学到的,这个目标天然不会走出分布——
τ
分位数保证了乐观程度受控
离线阶段使用
n
-步 目标来加速稀疏奖励传播:
y
Q
∑
n
−
1
i
0
γ
i
H
r
t
+
i
H
+
γ
n
H
Quant
τ
(
V
ψ
(
s
t
+
n
H
)
)
(
n
10
用于长程任务)
④ 更新 Q(收敛到 TD 目标):
损失函数:
L
Q
(
ϕ
)
(
Q
ϕ
(
s
t
,
a
t
)
−
y
Q
)
2
,这是一个 MSE 回归任务
让
Q
的预测不断逼近上述 TD 目标
随后通过 EMA 更新目标网络:
¯
ϕ
←
ρ
¯
ϕ
+
(
1
−
ρ
)
ϕ
块二:基于 QAM 的策略提取
⑤ 更新 Actor(QAM 策略提取):
采样高斯噪声
a
0
t
,通过参考流
π
β
滚动生成完整轨迹
{
a
w
t
}
w
∈
[
0
,
1
]
取轨迹终点
a
1
t
,计算 Critic 梯度
−
∇
a
[
Q
ϕ
(
s
,
a
1
t
)
/
λ
]
作为伴随状态
g
1
的终值条件
沿参考流求解伴随动力学,得到各中间步的局部回归目标
让
π
θ
的向量场去拟合这些目标:
L
QAM
(
θ
)
E
[
∫
1
0
∥
∥
2
f
δ
σ
w
+
σ
w
g
w
∥
∥
2
2
d
w
]
整个流程的精髓: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 函数梯度(
∇
a
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 有显著区别:
维度 通用 QAM LWD 论文中的 QAM
基础逻辑 简单的速度向量加法 加权的评分匹配(Score Matching)
目标速度
v
base
+
η
⋅
∇
a
Q
涉及
(
2
f
δ
)
/
(
σ
w
)
和
σ
w
⋅
~
g
w
的加权合成
噪声权重 常数或忽略
σ
w
√
2
(
1
−
w
)
w
(Eq. 9)
参考策略 仅是
x
1
−
x
0
(直接指向终点) 明确使用参考策略
f
β
的残差学习
温度参数 常数
η
明确为
1
/
λ
且
λ
2
时间权重 无(所有时间
w
地位平等)
σ
w
动态权重(不同时间权重不同)
核心差异在于伴随状态
~
g
w
和噪声系数
σ
w
的设计。
3.3 公式深度拆解
Eq. (9):核心损失函数
QAM 的核心损失函数定义如下:
L
QAM
(
θ
)
E
[
∫
1
0
∥
∥
∥
2
f
δ
(
s
,
a
w
,
w
)
σ
w
+
σ
w
~
g
w
∥
∥
∥
2
d
w
]
其中:
f
δ
f
θ
−
f
β
:当前速度与参考速度之差
σ
w
√
2
(
1
−
w
)
w
:噪声权重项
~
g
w
:沿流路径传播的伴随状态
Eq. (10):伴随状态终点条件
~
g
1
−
∇
a
[
Q
φ
(
s
,
a
1
)
λ
]
其中
λ
2
是温度参数。注意符号是负号,但它在 Loss 里面会被抵消。
逐行拆解
步骤 操作 技术含义
Step 6 Roll out reference trajectory 通过
π
β
生成参考轨迹
{
a
w
t
}
w
∈
[
0
,
1
]
。对于线性路径,它就是
a
w
t
(
1
−
w
)
a
0
t
+
w
⋅
a
1
t
Step 7 Set endpoint
a
1
t
a
t
明确将数据集中的真实动作
a
t
设为轨迹的终点,这是计算梯度的基准点
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_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(-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
关键设计点:
线性插值构造
a
w
:通过公式直接算出,不需要跑 ODE 积分
梯度计算:使用 torch.autograd.grad 计算 Q 对动作的导数
伴随状态简化:由于参考路径是线性的,
g
w
g
1
(在非线性流中需要通过伴随 ODE 反推各步
g
w
)
Loss 计算:预测速度与目标速度的 MSE
3.4 Reference Policy 与 BC
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)