---
title: Streaming-Flow-Policy
link: https://arxiv.org/abs/2505.21851
doi: arXiv:2505.21851
status: "已阅读"
doc_type: paper
tags: [实时VLA, 实时动作生成, Learning dynamical systems, Flow Matching, Streaming Policy]
date: 20260622
---

# Streaming Flow Policy: Simplifying diffusion/flow-matching policies by treating action trajectories as flow trajectories (CoRL 2025)

[Paper](https://arxiv.org/pdf/2505.21851)

---

## Motivation
扩散/流匹配策略进行动作生成的成本高。

## Contribution
将 Flow Matching 在轨迹空间内的匹配，转为物理时间轴内的时序动作的匹配，减少了大量的初始化+循环去噪/积分的过程，同时支持了流式动作。

### Flow Matching
拟合的是：噪声轨迹 $\to$ 动作轨迹（在虚拟去噪时间步内）

过程：$Observation \to Initialize\ Noise \to \text{Loop}(N\text{ steps}) \to Action\ Chunk$

### Streaming Flow
拟合的是：当前状态 $\to$ 下一帧状态变化（在物理时间轴内），或者说 当前动作 $\to$ 下一帧动作

过程：$Observation + Previous\ Action（实时更新） \to 1\text{-Step\ Vector\ Field\ ODE} \to Next\ Action$

## Limitation
![alt text](asserts/Streaming-Flow-Policy/figure-01.png)

Flow Policy 的匹配过程是在高维的轨迹空间中进行的，匹配的过程中整个 chunk 的 action 是协同调整的，优化的是 $P(a_1, a_2, ..., a_t)$ 的联合分布，能捕捉到动作间的相关性以及全局约束等。

而 Streaming Flow Policy 是时序的、流式的，轨迹是基于时间步 t 的，顺着时间轴增量更新每一个 action ，优化的是 $P(a_t)$ 的边缘分布，因此只能确保当前 $a_t$ 落在真实数据分布中。（但是这也能算一种优势，因为只学习边缘约束使得自由性更高，泛化能力更强，天生适配组合动作）

---

## Architecture

### Input

- 观察历史记录 ($h$, Observation History)：机器人当前的传感器数据、图像或过去几个步长的状态。
- 流时间 ($t \in [0, 1]$, Flow Time)：当前采样在流匹配过程中的时间步。
- 当前动作状态 ($a \in A$, Action)：当前动作空间中的某个具体动作值。

### Output

- 动作空间中的速度场向量 ($v_\theta(a, t | h)$)：预测当前动作在当前时间步和观察条件下的变化速率（即动作空间的切空间 $TA$ 中的速度），用于通过积分来逐步生成下一个动作。

### 图例

![alt text](asserts/Streaming-Flow-Policy/figure-02.png)

上图对比了两种不同的空间下的流匹配过程。

图 a 为动作轨迹空间内的过程。空间中的点为动作，空间中的流代表随机动作向高价值动作的去噪过程，除了终点为可用动作，中间均为无效的带噪 Chunk 。

图 b 为动作状态空间内的过程。空间中的点为动作，空间中的流代表一串时序动作，整条轨迹均为可用预测，流终点为任务完成时的动作。

![alt text](asserts/Streaming-Flow-Policy/figure-03.png)

上图为对动作状态空间的探索示例。

图 a 为标准流，有 2 条流。

图 b 为条件流的拟合（采样单条流）。

图 c 为多条件流的拟合（采样所有流）。

图 d 为从中采样出的策略。

### 推导
给定一条动作轨迹 $\xi$ ，需要构造一个稳定的条件流，使其紧贴 $\xi$ 行进。构造一个速度场 $v_\xi(a,t)$ 和一个初始分布 $p_\xi^0(a)$ ，（这里的 $a$ 代表的是在动作空间的位置，而不是动作增量，实际动作指令对应的是 $\Delta a$ ），使得其诱导的边缘分布 $p_\xi(a|t)$ 能形成围绕 $\xi$ 的细高斯管（对于所有 $t\in [0,1]$ ， $p_\xi(a|t)$ 都是一个以 $\xi(t)$ 为中心的窄高斯分布）。

$$
v_\xi(a,t) = \dot\xi(t) - k(a-\xi(t)) \\
p_\xi^0(a) = \mathcal N(a|\xi(0),\sigma_0^2)
$$

也就是以 $\xi_0$ 的窄高斯分布 $p_\xi^0(a)$ 为初始点，沿着轨迹方向移动。 $\dot\xi(t)$ 为轨迹速度，与 $v_\xi(a,t)$ 的误差通过稳定项 $k$ 修正（相比设定超参数 $k=0$ ，也就是直接拟合，有稳定项具有更优策略）。

根据以上构造推导出每个时间步的边缘分布：

$$
p_\xi(a|t) = \mathcal N(a|\xi(t),\sigma_0^2 e^{-2kt})
$$

因此以上构造过程下任意时间步 $t \in [0,1]$ 下的状态分布都是以轨迹 $\xi(t)$ 为中心的高斯分布，且标准差 $\sigma_t=\sigma_0 e^{-kt}$ 随 $t$ 增大以速率 $k$ 指数递减。

### Loss
$\xi$ 的条件流对应的数据分布就是整个细高斯管，从其中取出 $N$ 个样本的训练集 $D={(h_i,\xi_i)}\sim p_D(h,\xi)$ 进行拟合，所有条件流拟合的期望对应的就是专家轨迹 $\xi$ ，因此：

$$
\hat{\mathcal L}_{CFM}=\frac{1}{N} \sum_{i=1}^{n} \mathbb E_{t\sim U[0,1]} \mathbb E_{a\sim p_{\xi_i}(a|t)} \|v_\theta(a,t|h_i)-v_{\xi_i}(a,t)\|_2^2
$$

也就是用 MSE loss 拟合 $v_\xi$ 。

---

## Experiments
![alt text](asserts/Streaming-Flow-Policy/figure-04.png)

在大部分任务中（Push-T、RoboMimic）都呈现与 DDPM 100 steps、 DDIM 10 steps、 Flow matching policy、Streaming Diffusion Policy 相当的性能，同时速度显著更快（在 RoboMinic 上看起来仅提高到 1.06 倍？）。

---

## My Takeways

### 优势

`离散 Token 方法` 会有较大时延（一个动作需要串行输出多个参数）、有精度损失（离散的动作和连续的机器人控制参数之间的损失）。
`Flow Policy` 会有计算效率（有很多富余预测）、不连续（Chunk之间的动作不平滑，以及通过加权平均进行动作平滑并不是很好）、实时性的不足。
Streaming-Flow-Policy 把这些缺点都补足了。

而且边缘分布看起来也是优点。
推理能力和泛化能力强大的 llm 从单步上看也是边缘分布的，直觉上边缘分布更适合推理（一步一步预测），相对的图像生成，细节多，需要同时协调所有特征确保各种细节是一致的，才更适合联合分布。

和单步去噪不同， Streaming-Flow-Policy 是可以通过时序预测隐式学会动力学演化的。

### 不想要边缘分布的话？
llm 虽然单步是边缘分布，但通过完整的历史用边缘分布拟合联合分布。但是 VLA 的历史太短了，拟合联合分布的误差太大了，想办法将 Streaming Flow Policy 的历史窗口 $h$ 变长也许更好？同时为单个任务设计一个能匹配联合分布的 loss 。

### 平滑度需要提升嘛？
Chunk 生成作为联合分布，单个 Chunk 内应该是很平滑的； Streaming Policy 优化边缘分布在有更多的组合的同时，是不是会由于组合原因导致动作不平滑呢（上一个动作取自 $\xi_1$ 而下一个动作取自 $\xi_2$ ），是不是可以加一个 Path Integral 或者 Consistency Regularzation 约束相邻步之间的动作导数弥补平滑度？

$$
Chunking: P(a_{t+1},a_{t+2},...,a_{t+\Delta_{t_c}}|a_t,o_t) \\
SFP: P(a_{t+1}|a_t,o_t) \\
$$
$$
终点引导: 通过\mathcal{L}_{a_\xi}=MSE(\hat{a}_\xi,a_\xi)优化P(a_\xi|o_t),通过a_\xi引导P(a_{t+1}|a_t,o_t,a_\xi) \\
路径惯性: P(a_{t+1}|a_t,o_t,a_{t-1})
$$

![alt text](asserts/Streaming-Flow-Policy/figure-05.png)

### 可以用到视频生成领域嘛？
当前视频生成通过也有类似的问题：

纯自回归的效果和效率不行；

而扩散模型每生成一帧都要重复一次完整的去噪；

这个优势可以在视频生成上体现？每一帧为一个状态，视频就是状态变换轨迹，对这个轨迹进行流匹配可行嘛？这样可以解决自回归的低效（每帧完整的一次去噪/积分），或者直接将噪声扩散为视频（图片块）导致的窗口问题（每次扩散只能生成固定长度如 10s 的短时视频）。

暂时没有看到这样的研究，但是视频相比起动作空间维度高太多了，单步预测想经得起这么多信息可能有难度，如果有办法根据相邻帧差异信息极小的这一点，应该能做？

如果能用到视频生成领域，那同样可以作为一种 World Model 嘛？

### 疑惑
从纯噪声开始采样得到动作轨迹可以通过 Optimal Transport 进行最优化传输，中间过程全部丢弃。但进行基于状态的流匹配用上了中间过程，它能用上 Optimal Transport 嘛？如果用了 Optimal Transport ，中间的直线轨迹代表的动作是最优的嘛？毕竟 Optimal Transport 设计成最短的直线是在中间轨迹不会发挥作用而只有终点有用的场景下，用上的中间轨迹会不会效果不行？

貌似没有用上 Optimal Transport ，中间轨迹匹配的是实际状态，这样虽然是曲折而不是最短的，但是能一直沿着流匹配下去而不是每次生成一个块。使用 Flow Matching 主要是因为对轨迹的建模需要。

### 关于 action expert 的输入

![alt text](asserts/Streaming-Flow-Policy/figure-07.png)

$$ img + I + p \to c $$
vlm 将图像 $img$ 、指令 $I$ 、机器实体参数 $p$ 混合成了上下文嵌入 $c$ 。

$$ x_t + c \to x_{t+1} $$
action expert 输入为上下文嵌入 $c$ 以及先前动作状态 $x_t$ ，其中先前动作状态 $x_t$ 对应时序动作流中的某一点（也是上一次预测得到的动作状态），得到新的动作状态 $x_{t+1}$ 。

# JointSFP

