从 DAgger 到 LWD:真机机器人「从模仿到强化」的一条完整脉络
0. 先建立全局:这篇文章在回答一条问题链
读这篇之前先记住一张图。整套方法不是凭空堆出来的,每一步都在补上一步的窟窿:
① VLA 离线预训练已经很强了,为什么部署后还要继续学?
└─ 因为真实世界会撞上训练集没覆盖的长尾失败
② 那用人类纠正数据继续学不就行了? → DAgger / HG-DAgger
└─ 只用了「成功 + 纠正」,失败数据全扔,适应慢
③ 换强化学习,把成功/失败/部分进展全用上
└─ 但离线 RL 会外推到「数据外动作」而崩溃
④ IQL:只在数据内做乐观估计,不查数据外动作
└─ 但它把一堆结果压成一个标量均值,藏住了罕见成功
⑤ DIVL:标量换成一整条价值分布,再取分位数
└─ 价值学好了,怎么注入到 Flow-based VLA 策略里?
⑥ QAM:把 critic 梯度沿去噪流逐步注入,稳定又便宜
└─ 价值 + 策略都有了,怎么在真机集群持续跑?
⑦ LWD:离线预训练 + 在线部署的数据飞轮,16 机 8 任务

1. 起点:为什么部署不该是训练的终点
现在的 VLA(视觉-语言-动作模型,如 π0、π0.5)靠大规模离线数据预训练,能力很广。但离线数据是一个固定分布,真实部署不是:机器人进入越来越多的家庭、商店、工作场所,会撞上新物体、新摆放、新指令、新偏好,以及训练集里几乎没有的罕见失败模式。固定的演示集覆盖不了这些长尾,所以要拿高性能,策略必须能从部署过程里持续变强——适应能力要随着「使用产生的数据」一起扩展。
而最有价值的部署经验,是在集群规模(fleet scale)下收集的。单台机器人只能采到部署分布的一小角;一支队伍横跨多任务、多环境、多物体、多指令,产生的是异构经验:成功、失败、恢复、部分进展、罕见边缘情形、偶发的人类干预。把这些经验通过一个共享策略汇聚起来,就闭合成一个飞轮——部署的机器人在目标分布上产生经验,共享策略从聚合数据里改进,改进后的策略再被部署,去采更广、信息量更高的经验。这个设定就叫 LWD(Learning While Deploying,部署中学习)。
2. DAgger 与 HG-DAgger:模仿学习的「打补丁」
要把飞轮做出来,关键是用什么目标去学部署数据。最朴素的答案是「继续做模仿学习」,其代表就是 DAgger 系列——但它的天花板,恰恰说明了为什么后面非得上强化学习。
先看模仿学习(行为克隆 BC)的硬伤——复合误差。想象你学开车,只看了教练「在正确车道上」的录像。真上路时方向盘偏一点 → 车开到了路肩(一个录像里从没出现过的状态)→ 你不知道怎么修 → 偏得更多 → 失控。根源在于:BC 只在「专家走过的状态」上训练,策略一旦犯小错就漂移到没见过的状态,误差越滚越大。
DAgger(Dataset Aggregation)针对的就是这个漂移:先用当前学生策略去跑,在它实际走到的那些状态上反过来问专家「这里你会怎么做」,把这些新的 (学生走到的状态, 专家动作) 加进数据集再训练,循环往复。核心是不再只在专家轨迹上训练,而是在学生会漂移到的状态上补标签,从而堵住分布偏移。HG-DAgger 进一步做人类门控:不要求专家对每个状态都打标,而是让人类盯着、只在机器人要出事时介入接管,把介入片段和成功的自主片段当训练标签。
但无论怎么改,DAgger 本质仍是监督学习——它把部署当成「动作标签的来源」,于是有三个绕不开的局限:
| 局限 | 说明 |
|---|---|
| 只用一部分经验 | 只能用「专家怎么做对」(成功 + 纠正),失败数据完全用不上 |
| 没有原则化机制用奖励/进展 | 自主试验里的成功、失败、恢复、部分进展、任务奖励都无法系统利用 |
| 纠正数据噪声大 | 不同人、不同时刻的纠正不一致,对更广状态空间的探索有限 |
实验里 HG-DAgger 在长时程任务上提升有限、有时甚至倒退,很可能正是「依赖人类纠正、变异性大、探索面窄」所致。这就把我们推向了强化学习。

3. 转向强化学习:为什么 RL 能「吃下失败数据」
真机部署产生的数据高度异构:正样本、负样本、成功、失败、人工介入混在一起。模仿学习原理上很难用负样本(你总不能让模型去模仿一次失败);而强化学习通过学一个价值函数(value function),能把正负、不同来源的数据统一利用起来——失败数据反而关键,它告诉价值函数「哪些动作通向坏结果」。
价值函数有两个,后面 IQL/DIVL 一直在用,用「东坡肘子」打比方就清楚了: V ( s ) V(s) V(s) 只看状态,相当于「这道菜整体好不好」,给个平均分(比如 0.6); Q ( s , a ) Q(s, a) Q(s,a) 看状态 + 具体动作,相当于「谁来做这道菜」——四川厨子做可能 1.0,广东厨子做可能 0.2,而 V ( s ) V(s) V(s) 大致是各种 Q ( s , a ) Q(s,a) Q(s,a) 的某种平均。RL 通过 TD backup(时序差分回溯),把最后的成功/失败信号一层层往前传、回到前面的 ( s , a ) (s, a) (s,a) 上打分——这正是模仿学习做不到的「信用分配」。
但离线 RL 有个臭名昭著的坑:标准 Q-learning 要算 max a Q ( s , a ) \max_{a} Q(s,a) maxaQ(s,a),这个 max 极易选到数据集里根本没出现过的动作,而这些「数据外动作」的 Q Q Q 值是神经网络瞎外推出来的(系统性高估),于是训练崩溃。RL 想吃下异构数据,就必须先解决「价值学习在异构 off-policy、稀疏奖励、罕见高回报下还能稳」这件事——IQL 就是来堵这个坑的。
标准 Q-learning(比如 DQN)采用的是 自举 (Bootstrapping) 机制,即用明天的预估值来更新今天的预估值。它的目标函数(Bellman 方程).
Q ( s , a ) ← r + γ max a ′ Q ( s ′ , a ′ ) Q(s, a) \leftarrow r + \gamma \max_{a'} Q(s', a') Q(s,a)←r+γa′maxQ(s′,a′)
假设你正在训练一个自动驾驶 AI,但你给它的训练数据集(Dataset)非常有限,里面只有老司机在普通公路上开车的视频。因为神经网络(Q 网络)本质上是一个拟合器,它对没见过的输入进行预测时,叫做外推 (Extrapolation)。 外推的结果是完全随机的:有些未见动作的 Q Q Q 值会被估得很低,但总有那么几个动作,会被神经网络盲目地估出极高的分数(比如 +10000 分)。此时, max a ′ \max_{a'} maxa′ 就像一个盲目乐观的赌徒,它在下一步的所有动作中扫视,瞬间就捕捉到了那个被瞎编出来的超高分(拉手刹+踩油门),然后大喊:“我就要选这个动作,它的期望收益最大!”此时, max a ′ \max_{a'} maxa′ 就像一个盲目乐观的赌徒,它在下一步的所有动作中扫视,瞬间就捕捉到了那个被瞎编出来的超高分(拉手刹+踩油门),然后大喊:“我就要选这个动作,它的期望收益最大!”
如果这只是一个普通的错误,倒还不至于让训练彻底崩溃。致命的是,这个高估的错误会像病毒一样顺着时间线往回传染。我们来看看训练是怎么一步步坍塌的:瞎外推:在状态 s 3 s_3 s3,动作 a b a d a_{bad} abad(数据外动作)被神经网络偶然外推出了一个极高的值: Q ( s 3 , a b a d ) = 100 Q(s_3, a_{bad}) = 100 Q(s3,abad)=100。最大化选择:当计算 s 2 s_2 s2 的目标值时,公式要求计算 max a ′ Q ( s 3 , a ′ ) \max_{a'} Q(s_3, a') maxa′Q(s3,a′)。算法毫不犹豫地选择了 a b a d a_{bad} abad 的值(100)。污染上一步: s 2 s_2 s2 对应的某个正常动作的值被更新为: Q ( s 2 , a n o r m a l ) = r + γ × 100 Q(s_2, a_{normal}) = r + \gamma \times 100 Q(s2,anormal)=r+γ×100。污染上上一步:当计算 s 1 s_1 s1 的目标值时, max \max max 操作又把 s 2 s_2 s2 那个被污染的超高值给捞了出来。

4. IQL:只在「数据内」做乐观估计
IQL(Implicit Q-Learning)的核心 trick 是:绝不显式对动作取 max,因此绝不查询数据外的动作。 它用一个叫 expectile(期望分位)回归的非对称损失,把价值 V ( s ) V(s) V(s) 拟合到「数据集动作价值的一个偏高分位」:
L V ( ψ ) = E D [ ρ τ , 2 ( Q ϕ ˉ ( s , a ) − V ψ ( s ) ) ] , ρ τ , 2 ( u ) = ∣ τ − I ( u < 0 ) ∣ ⋅ u 2 \mathcal{L}_V(\psi) = \mathbb{E}_{\mathcal{D}}\left[ \rho_{\tau,2}\big( Q_{\bar\phi}(s,a) - V_\psi(s) \big) \right], \qquad \rho_{\tau,2}(u) = \left|\tau - \mathbb{I}(u<0)\right| \cdot u^2 LV(ψ)=ED[ρτ,2(Qϕˉ(s,a)−Vψ(s))],ρτ,2(u)=∣τ−I(u<0)∣⋅u2
当 τ > 0.5 \tau > 0.5 τ>0.5 时,低估被罚得重、高估被罚得轻,于是 V V V 被往上拉、偏向「高分的数据内动作」,给出一个隐式的提升目标,却不需要那个会跑到数据外的 max a Q \max_{a} Q maxaQ 回溯。critic 再用基于 V V V 的 TD 目标训练 y = r + γ H V ψ ( s t + H ) y = \mathbf{r} + \gamma^H V_\psi(s_{t+H}) y=r+γHVψ(st+H),损失 L Q = E D [ ( Q ϕ ( s , a ) − y ) 2 ] \mathcal{L}_Q = \mathbb{E}_{\mathcal{D}}\big[(Q_\phi(s,a) - y)^2\big] LQ=ED[(Qϕ(s,a)−y)2]。
这套机制的代价,用一个例子就能看穿。设定:某状态 s s s 下,数据集采过的动作里,80% 只值 0.3,20% 能稳定拿到 0.95。
| 统计量 | 数值 | 怎么来的 |
|---|---|---|
| 均值(标准 DQN/SAC 估这个) | 0.43 | 0.8 × 0.3 + 0.2 × 0.95 0.8\times0.3 + 0.2\times0.95 0.8×0.3+0.2×0.95 |
| IQL expectile, τ = 0.7 \tau=0.7 τ=0.7 | ≈ 0.54 | 偏高的加权平均,仍被 80% 的 0.3 拖着 |
| IQL expectile, τ = 0.9 \tau=0.9 τ=0.9 | ≈ 0.75 | 更乐观,但还是没拔到 0.95 |
τ = 0.9 \tau=0.9 τ=0.9 的 0.75 可手算验证:解 0.1 × 0.8 × ( e − 0.3 ) = 0.9 × 0.2 × ( 0.95 − e ) 0.1\times0.8\times(e-0.3) = 0.9\times0.2\times(0.95-e) 0.1×0.8×(e−0.3)=0.9×0.2×(0.95−e) 得 e = 0.75 e=0.75 e=0.75。关键观察是——IQL 的 expectile 始终是「一个被低分拖着的偏心平均」。哪怕 τ \tau τ 调到 0.9 也只到 0.75,因为它还在跟那 80% 的 0.3 做加权拔河,于是藏住了那 20% 的 0.95(罕见但可复现的高回报)。在单台、同质数据上这无所谓;在 fleet 的多峰、重尾数据上,这就是把宝贵的成功模态抹平了。
![]() |
![]() |
| 标量 critic:均值压到 0.43 | IQL expectile:偏高但被 0.3 拖着 |
5. DIVL:把「标量分数」换成「一整条价值分布」
DIVL(Distributional Implicit Value Learning)保留了 IQL「非对称、只在数据内乐观」的原则,但做了一个关键替换:IQL 输出一个标量分数,DIVL 输出一整条概率分布,再从分布上「划线取人」。 这在 fleet 场景下不是锦上添花,而是必需——集群数据异步、跨场景、奖励稀疏,同一个 (s,a) 的回报往往多峰、重尾;标量 critic 会把它压成均值、抹掉成功模态,而分布式 critic 能保留这些高回报模态。
具体做法是让价值模型表示「在状态 s s s 下、按数据集动作分布采样时, Q Q Q 值落在各处的概率」 p ψ ( v ∣ s ) = P ( v = Q ϕ ( s , a ) ∣ a ∼ D ( ⋅ ∣ s ) ) p_\psi(v \mid s) = P\big( v = Q_\phi(s,a) \mid a \sim \mathcal{D}(\cdot \mid s) \big) pψ(v∣s)=P(v=Qϕ(s,a)∣a∼D(⋅∣s)),实现上用 C51 式类别离散化(把价值区间 [ − 0.1 , 1.1 ] [-0.1, 1.1] [−0.1,1.1] 切成 201 个原子,输出每个原子的概率),训练用交叉熵 / 负对数似然去拟合 EMA 目标 critic 的标量值:
L V ( ψ ) = E D [ − log p ψ ( Q ϕ ˉ ( s , a ) ∣ s ) ] \mathcal{L}_V(\psi) = \mathbb{E}_{\mathcal{D}}\big[ -\log p_\psi( Q_{\bar\phi}(s,a) \mid s ) \big] LV(ψ)=ED[−logpψ(Qϕˉ(s,a)∣s)]
然后 bootstrap 统计量取这条分布的 τ \tau τ-分位数,再形成 TD 目标和 critic 损失:
Q u a n t τ ( V ψ ( s ) ) ≜ inf { v : F ψ ( v ∣ s ) ≥ τ } ( F ψ 是累积分布 CDF ) \mathrm{Quant}_\tau\big( V_\psi(s) \big) \triangleq \inf\{ v : F_\psi(v \mid s) \geq \tau \} \quad (F_\psi \text{ 是累积分布 CDF}) Quantτ(Vψ(s))≜inf{v:Fψ(v∣s)≥τ}(Fψ 是累积分布 CDF)
y Q = r + γ H ⋅ Q u a n t τ ( V ψ ( s t + H ) ) , L Q ( ϕ ) = E D [ ( Q ϕ ( s , a ) − y Q ) 2 ] y_Q = \mathbf{r} + \gamma^H \cdot \mathrm{Quant}_\tau\big( V_\psi(s_{t+H}) \big), \qquad \mathcal{L}_Q(\phi) = \mathbb{E}_{\mathcal{D}}\big[ ( Q_\phi(s,a) - y_Q )^2 \big] yQ=r+γH⋅Quantτ(Vψ(st+H)),LQ(ϕ)=ED[(Qϕ(s,a)−yQ)2]
「 τ \tau τ-分位数」就像考试划线: τ = 0.9 \tau=0.9 τ=0.9 = 「90% 的人在这条线以下,取第 90 百分位那个」。回到同一个例子(80% 在 0.3、20% 在 0.95),CDF 是 F ( 0.3 ) = 0.8 F(0.3)=0.8 F(0.3)=0.8、 F ( 0.95 ) = 1.0 F(0.95)=1.0 F(0.95)=1.0。DIVL 取 τ = 0.9 \tau=0.9 τ=0.9: inf { v : F ( v ) ≥ 0.9 } \inf\{ v : F(v) \geq 0.9 \} inf{v:F(v)≥0.9},因为 0.3 处累积才 0.8( < 0.9 < 0.9 <0.9),分位数直接落到 0.95。同样 τ = 0.9 \tau=0.9 τ=0.9,IQL expectile 还在 0.75 被拖着,DIVL quantile 直接命中 0.95。一句话:IQL 是「算一个偏心的平均分」,DIVL 是「画一张成绩分布表、从表上划线取人」。
![]() |
![]() |
![]() |
| 学到的价值分布(双峰) | 同 τ=0.9:IQL 0.75 vs DIVL 0.95 | 在分布上「划线取人」 |
DIVL 还多了一招 IQL 做不到的——用分布的熵自适应调 τ \tau τ。混合任务里不是每个状态都该一样乐观,于是用归一化熵 H ( s ) \mathcal{H}(s) H(s) 当不确定性信号,按 τ ( s ) = c l i p ( τ base − α H ( s ) , τ min , τ max ) \tau(s) = \mathrm{clip}\big( \tau_{\text{base}} - \alpha\,\mathcal{H}(s),\ \tau_{\min},\ \tau_{\max} \big) τ(s)=clip(τbase−αH(s), τmin, τmax) 调整:分布弥散(熵高、把握不大)就把 τ \tau τ 调小、目标更保守减少高估;分布集中(熵低、把握大)就保持大 τ \tau τ、允许更乐观。训练实测从离线到在线熵持续下降(价值越来越自信), τ \tau τ 相应被调大(离线 τ base = 0.6 \tau_{\text{base}}=0.6 τbase=0.6、在线 τ base = 0.9 \tau_{\text{base}}=0.9 τbase=0.9)。

最后,论文用命题 1 把 IQL 和 DIVL 钉死成「同一回事的两种实现」:对同一族非对称损失 ρ τ , p ( u ) = ∣ τ − I ( u < 0 ) ∣ ⋅ ∣ u ∣ p \rho_{\tau,p}(u)=|\tau-\mathbb{I}(u<0)|\cdot|u|^{p} ρτ,p(u)=∣τ−I(u<0)∣⋅∣u∣p,直接做标量回归 与 先拟合分布再提取对应非对称统计量,理想条件下得到的最优标量值相同——其中 p = 2 p=2 p=2 是 IQL 的 expectile, p = 1 p=1 p=1 是 DIVL 的 quantile。所以 DIVL 不是另起炉灶,而是 IQL 的「分布式 + 分位数」原则化推广,额外解锁了「直接取分位数」和「用熵调 τ \tau τ」两件事:
| 维度 | IQL | DIVL |
|---|---|---|
| critic 输出 | 标量 V ( s ) V(s) V(s) | 分布 p ψ ( v ∣ s ) p_\psi(v\mid s) pψ(v∣s) + 标量 Q Q Q |
| value 拟合 | 偏高 expectile(非对称 MSE) | 整条分布(交叉熵 / C51) |
| bootstrap 统计量 | 标量 expectile | 分布的 τ \tau τ-分位数 |
| 不确定性利用 | 无 | 有(用熵自适应调 τ \tau τ) |
| 适用场景 | 离线 RL、避免 OOD | 异构 fleet 数据、稀疏奖励、长短任务混合 |

6. QAM:把 critic 梯度安全地注入 Flow-based VLA
价值学好了,接下来是策略提取:把价值的提升变成策略动作的改进。这里有个 VLA 特有的难题——现代 VLA(π0/π0.5)用 Flow Matching 生成动作,要从高斯噪声出发、沿一个向量场积分(多步去噪 ODE)才得到最终动作块。想用 critic 的动作梯度 ∇ a Q ( s , a ) \nabla_a Q(s,a) ∇aQ(s,a) 去改进策略,朴素做法是把梯度沿整条多步去噪 ODE 反向传播,但这又贵又数值不稳定(要 backprop 穿过整个 ODE solver)。
QAM(Q-learning with Adjoint Matching)借用控制理论里的 adjoint state(伴随状态),把轨迹级的策略优化重写成沿参考流的逐步局部回归:
改进目标: π ∗ ( a ∣ s ) ∝ π β ( a ∣ s ) ⋅ exp ( Q ϕ ( s , a ) / λ ) ( 贴近行为策略,又往高 Q 偏 ) \text{改进目标:}\quad \pi^*(a\mid s) \propto \pi_\beta(a\mid s) \cdot \exp\big( Q_\phi(s,a)/\lambda \big) \quad (\text{贴近行为策略,又往高 } Q \text{ 偏}) 改进目标:π∗(a∣s)∝πβ(a∣s)⋅exp(Qϕ(s,a)/λ)(贴近行为策略,又往高 Q 偏)
终端伴随状态: g ~ 1 = − ∇ a [ Q ϕ ( s , a 1 ) / λ ] ( 由 critic 动作梯度初始化 ) \text{终端伴随状态:}\quad \tilde{g}_1 = -\nabla_a \big[ Q_\phi(s, a^1)/\lambda \big] \quad (\text{由 critic 动作梯度初始化}) 终端伴随状态:g~1=−∇a[Qϕ(s,a1)/λ](由 critic 动作梯度初始化)
局部回归损失: L Q A M ( θ ) = E [ ∫ 0 1 ∥ 2 f δ ( s , a w , w ) σ w + σ w g ~ w ∥ 2 2 d w ] , f δ = f θ − f β \text{局部回归损失:}\quad \mathcal{L}_{\mathrm{QAM}}(\theta) = \mathbb{E}\left[ \int_0^1 \left\| \frac{2 f_\delta(s, a^w, w)}{\sigma_w} + \sigma_w \tilde{g}_w \right\|_2^2 \mathrm{d}w \right], \quad f_\delta = f_\theta - f_\beta 局部回归损失:LQAM(θ)=E[∫01
σw2fδ(s,aw,w)+σwg~w
22dw],fδ=fθ−fβ
直觉就是一个流水线比喻:直接 backprop = 从终点拉一根长线、端到端穿过整条流水线,又贵又容易断;QAM = 沿流水线给每一站派一个工头,每一站只对当前的向量场做局部回归,不用整条线协同优化。 计算量从「过整条 ODE」降到「沿轨迹采若干点」,稳定性和效率都上来了。操作上固定 f β f_\beta fβ(离线 RL 前用行为克隆初始化的参考流)、全程只优化 f θ f_\theta fθ:每个 batch 采噪声、用 f β f_\beta fβ 跑参考轨迹、在终点算 ∇ a Q \nabla_a Q ∇aQ、解伴随动力学、把 f θ f_\theta fθ 回归到局部目标。

7. LWD 全链路:两阶段 + 数据飞轮
把 DIVL(价值学习)+ QAM(策略提取)装进真机集群系统,就是 LWD。网络结构上它把价值和策略分成两个模块:左边一个 Gemma3–SigLIP 的 VLM backbone 接两个头,输出分布式价值 V ψ V_\psi Vψ 和 critic Q ϕ Q_\phi Qϕ(critic 用 clipped double-Q 取最小值抑制高估);右边是 π0.5 的 Flow VLA(PaliGemma backbone + Gemma-300M action expert),用 QAM 损失优化。只有策略 checkpoint 异步下发给机器人,价值/critic 留在中心 learner。
阶段 1 是离线预训练。 离线缓冲区 B_off 含三类数据,全部转成同一种块级转移格式、用终止时的成功/失败标签赋稀疏二元奖励:
…详情请参照古月居
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐








所有评论(0)