原始问题
这条讨论最开始不是从 Flow Matching 开始的,而是从一个更基础的问题开始:
Diffusion 为什么可以稳定地不断加噪?为什么随机项是 Δtz,而不是 Δtz?
沿着这个问题继续追下去,知识链会自然变成:
√dt 噪声尺度
↓
Brownian motion / dW_t
↓
SDE
↓
X_t = a_t X_0 + b_t ε
↓
Diffusion 的 Gaussian cloud
↓
直接学习 velocity field
↓
Flow Matching
↓
π₀.₅ action expert
↓
机器人数据采集中的 p(A | o, l)
真正的主线是:从“Diffusion 怎么加噪”走到“机器人 action generator 到底在学习什么”。
随机噪声为什么是 Δt
Forward diffusion 可以写成一个连续随机过程:
dXt=f(Xt,t)dt+g(t)dWt
离散化后是:
Xt+Δt≈Xt+f(Xt,t)Δt+g(t)Δtz,z∼N(0,I)
这里最容易误解的是随机项的尺度。确定性运动按位移相加:
ΔX=vΔt
走 N 步,总位移是 NvΔt=vT。所以 drift 项自然是 O(Δt)。
随机运动不是这样。假设每一步:
ΔXk=gΔtzk,zk∼i.i.d.N(0,1)
因为每一步噪声独立,方差可以相加:
Var(k∑ΔXk)=k∑Var(ΔXk)=Ng2Δt=g2T
即使 Δt→0,N→∞,总随机性仍然保持有限。
确定性变化积累的是 displacement;随机变化积累的是 variance。因此 drift 是 O(dt),noise 是 O(dt)。
Δtz 为什么变成 dWt
Brownian motion (Wiener process) 的增量定义为:
ΔWt=Wt+Δt−Wt
它满足:
ΔWt∼N(0,Δt)
而如果 z∼N(0,1),那么:
Δtz∼N(0,Δt)
所以离散噪声增量可以写成:
ΔWt=Δtz
连续极限里记作 dWt。注意,dWt 不是 W′(t)dt。Brownian motion 的轨迹几乎处处不可微,dWt 应该理解成极短时间内的随机增量,它的尺度是 O(dt)。
从 SDE 到一次性构造 Xt
考虑线性 SDE:
dXt=c(t)Xtdt+g(t)dWt
它的解可以写成:
Xt=atX0+btϵ,ϵ∼N(0,I)
这里 at 控制原始数据保留多少,bt 控制噪声注入多少。直觉上,Xt 原本经历了很多步随机扰动:
X_0 → X_Δt → X_2Δt → ... → X_t
但最终随机项只是很多独立高斯噪声的线性组合。独立 Gaussian 的线性组合仍然是 Gaussian,
因此可以压缩成一个 btϵ。
这直接解释了 Diffusion 训练中的一个关键技巧:
取真实样本 x0
↓
随机采样 t
↓
随机采样 ε
↓
直接构造 xt = at x0 + bt ε
不用真的把 forward diffusion 跑到第 t 步。
固定一个数据点 X0=xdata 时:
Xt=atxdata+btϵ
所以:
pt(xt∣xdata)=N(atxdata,bt2I)
也就是说,一个真实数据点在时间 t 上会变成围绕 atxdata 的 Gaussian cloud。
整个数据分布则是很多 Gaussian cloud 的叠加。随着 at 下降、bt 上升,
数据结构逐渐消失,最终靠近 N(0,I)。
Flow Matching:直接学习概率怎么流动
Diffusion 的反向生成最终也需要知道当前 Xt 应该往哪里移动。于是自然会问:
既然最后需要的是一个速度场,为什么不直接学习 velocity field?
Flow Matching 就是这个入口。它把流程改成:
人为设计一条 probability path
↓
这条 path 的 conditional velocity 可以直接算
↓
用 MSE 监督 velocity network
↓
推理时用 ODE 积分生成
最简单的线性路径可以写成:
xτ=(1−τ)x0+τϵ
其中 x0 是数据,ϵ 是噪声。对 τ 求导:
uτ=dτdxτ=ϵ−x0
训练目标就是:
L=E[∥vθ(xτ,τ)−uτ∥2]
关键点是:模型最终不是记住每一条 noise-data 直线。对于 MSE 回归,最优解满足:
v∗(x,τ)=E[uτ∣xτ=x,τ]
也就是说,大量 conditional paths 在局部提供监督,网络学到的是整个分布在该位置的 marginal velocity field。
Flow Matching 的训练路径是工具;真正要学的是让整个概率分布连续变形的速度场。
落到 π₀.₅:生成对象是 action chunk
在机器人里,生成对象不再是 image,而是一整个 future action chunk:
At=[at,at+1,…,at+H−1]
所以 π₀.₅ Action Expert 学到的是:
从 random action chunk 流向合理 action chunk 的 probability-flow velocity
它不是物理世界里的 joint velocity,也不是单步控制量的速度。它是生成空间里的速度:当前 noisy action chunk 应该如何移动,才能变成符合 observation 和 subtask 的 action chunk。
在这次讨论的 π₀.₅ 语境里,训练时构造:
Aτ=τϵ+(1−τ)A
其中 τ=0 对应真实动作 A,τ=1 对应噪声 ϵ。于是:
dτdAτ=ϵ−A
所以 velocity label 是:
uτ=ϵ−A
训练 action expert:
vθ(Aτ,o,ℓ^,τ)≈ϵ−A
其中 o 是 camera / proprioception,ℓ^ 是 high-level subtask,τ 是 flow generation progress。
推理时方向反过来:从 A1∼N(0,I) 出发,沿 τ:1→0 积分,最后得到要执行的 A0。
数据采集真正定义的是 p(A∣o,ℓ)
到这里,工程问题自然出现:
如果模型学的是 v∗(x,o,ℓ,τ)=E[uτ∣xτ=x,o,ℓ,τ],那么训练数据中的 action distribution 会怎样影响这个速度场?
机器人 demonstration 可以看成:
A∼pdata(A∣o,ℓ)
所以数据采集并不只是“收了多少小时”,而是在设计经验条件动作分布:
data collection≈designing pdata(A∣o,ℓ)
这里有一个重要区分:
- state coverage:不同物体位置、机器人姿态、遮挡、任务阶段、failure / recovery state
- conditional action entropy:同一个状态下,操作员用不同风格、犹豫、停顿、抖动、绕路
前者通常有价值;后者不一定。
Flow Matching 可以表达 multimodality,但这不等于所有行为冲突都是好数据。如果同一状态下“左抓”和“右抓”都安全、有效、值得部署,那么这是结构化多模态,应该保留。相反,如果差异来自 operator 手抖、controller latency、无意义停顿、timestamp misalignment 或 calibration drift,它们只是在提高 H(A∣o,ℓ)。
因此机器人数据采集最重要的原则可以写成:
diverse situations+coherent behavior
或者更直接:
状态覆盖尽量宽,给定状态后的动作结构尽量清晰。
这也是为什么 recovery data 很重要。部署时 policy 不会永远停留在 demonstration 的 nominal trajectory 上。更有价值的数据不是重复完美轨迹,而是:
扰动
↓
异常状态
↓
正确 recovery
↓
成功
它增加的是有意义的 state coverage,而不是无意义的 action variance。
timestamp 和 partial observability 会伪造多模态
Flow Matching 的训练监督本质是:
(ot,At:t+H)
如果 RGB 实际来自 t−150ms,proprioception 来自 t−20ms,
action 却从 t+50ms 开始,那么模型看到的 o 并不真正对应这个 A。
从概率角度看,这会人为变宽:
p(A∣o,ℓ)
也就是说:
timestamp misalignment 会伪造 conditional multimodality
Partial observability 也类似。如果两段轨迹当前 RGB 看起来一样,但真实 task phase 不同,
正确动作就可能不同。此时问题不一定是 demonstration 不一致,也可能是 condition 不足以确定 hidden state。
因此要继续追问:
action ambiguity
↓
到底是数据策略天然多模态?
还是 observation 不完整?
↓
history / state / subtask 是否需要进入 conditioning?
回到原始问题
现在可以把整条链压缩成一个更短的回答:
- Diffusion 中噪声按 dt 缩放,是因为独立随机扰动累积的是方差。
- Δtz 在连续极限中对应 Brownian increment dWt。
- 线性 SDE 的多步高斯扰动可以压缩成 Xt=atX0+btϵ。
- Flow Matching 进一步把问题改写成直接学习 probability path 的 velocity field。
- π₀.₅ action expert 的 velocity 是 action chunk 生成空间里的速度,不是机器人关节速度。
- 机器人数据采集本质上是在塑造 pdata(A∣o,ℓ)。
最终工程结论是:
不要首先问“我要收多少小时数据”,而要问训练集中的 p(A∣observation,task/subtask) 应该长什么样。
横向上,p(o) 要尽量覆盖真实部署状态;纵向上,p(A∣o,ℓ) 中的 variability 要尽量有任务意义。
下一个前置概念
这个回答暴露的下一个关键前置概念是 Continuity Equation。
如果理解了 continuity equation,就能从“概率质量守恒”的角度看清楚:为什么 conditional paths 只是训练工具,而条件速度期望 v∗(xt,t)=E[ut∣xt] 真的可以产生正确的 marginal distribution。