首页 > 教程攻略 > ai教程 >从随机动作块到真实闭环:Diffusion 与 Flow 策略的执行账本

从随机动作块到真实闭环:Diffusion 与 Flow 策略的执行账本

来源:互联网 时间:2026-07-30 07:30:08

从随机动作块到真实闭环:Diffusion 与 Flow 策略的执行账本

TL;DR

  • 场景:Diffusion 或 Flow 策略输出平滑动作,这仅仅是完成了候选轨迹的生成。真要实现机器人闭环,还得回答五个独立问题:动作数据合同、数值求解时限、Action Chunk 如何衔接、滚动时域下的新鲜度、约束如何裁决,以及低层怎么跟踪。
  • 结论:不要把“模型→Policy 方框”当成一个黑盒。应该把它展开为五层可观测的执行账本:动作数据合同、生成参数化与求解器、训练/推理分账、Receding Horizon 与低层控制解耦、同步/异步延迟账本,再加上 RTC 这类异步衔接方案。
  • 产出:一份完整的行动清单,包括:动作数据合同 10 字段表、Diffusion/Flow 参数化对比、MSE 平均化的准确边界、同步执行延迟分解、异步 Action Chunking 三类账、6 种块衔接方案、4 种约束与安全选项,以及一张失败定位表。

版本矩阵

维度状态说明
动作数据合同 10 字段✅ 已验证observation_time / action_time / control_mode / frame_id / units / dt·horizon / normalizer_version / valid_mask / embodiment / termination
DDPM 基础✅ 已验证通过逐步加噪与反向去噪学习生成分布;动作策略可预测噪声、A_0、速度或其他目标
Diffusion Policy 核心设计✅ 已验证条件去噪扩散 + Receding Horizon + 视觉条件 + 时间序列扩散 Transformer(CNN+FiLM 与 Transformer-based DDPM 两种实现)
Diffusion Policy 实验结论✅ 已验证4 个机器人操作基准 15 个任务,平均比当时 SOTA +46.9%;论文给出条件但非任意机器人实时性或安全保证
ACT(Action Chunking Transformer)✅ 已验证学习动作序列的生成模型;用于缓解误差累积与非平稳示教问题
π0 架构✅ 已验证在预训练视觉语言模型之上使用 Flow Matching 动作架构;在多种机器人数据上训练
Flow Matching 数学✅ 已验证学习随生成时间 τ 变化的向量场 dA(τ)/dτ = v_θ(A(τ), τ, c);通过数值积分得到数据分布样本
Flow Matching 与通用 ODE 求解器✅ 已验证Flow Matching 原始工作描述为对条件概率路径向量场的回归;可使用通用 ODE 求解器
Flow 不等于“一步就能执行”,Diffusion 不等于“必然很慢”✅ 已验证实际 NFE、蒸馏、求解器阶数、动作维度、条件编码缓存和硬件共同决定延迟
MSE 平均化准确边界✅ 已验证仅在条件分布存在间隔大的多模式(如左绕 / 右绕)时 MSE 才会产生不可执行均值;多峰 ≠ 必须用生成式
Receding Horizon 不等于低层闭环✅ 已验证策略更新较低频;伺服控制器仍需在更高频率计算电流/力矩/速度/位置命令
Real-Time Chunking(RTC)✅ 已验证NeurIPS 2025 工作;针对 Diffusion / Flow Action Chunk Policy 推理时延;执行当前块时并行生成下一块;冻结确定会执行的动作前缀,对其余部分 Inpainting;论文称可在不重新训练策略的情况下应用
普通 Action Chunking 块边界问题✅ 已验证RTC 论文指出普通 Action Chunking 仍可能在块边界出现暂停或分布外突跳
同步执行充分条件✅ 已验证T_e2e,p99 + M < B_exec 替代 T_policy < hΔt(前者更接近实际门槛)
约束与安全四种选项✅ 已验证约束投影 / Guidance / 规划器筛选 / 独立安全门禁;前三种能提高可行性但不能替代最后一种
“Diffusion Policy = 某条固定公式”❌ 不成立网络可预测噪声 / A_0 / 速度参数化;“Diffusion Policy”是一类条件扩散动作生成
“MSE 一定失败 / 生成式一定更优”❌ 不成立模型选择应由条件动作分布、数据覆盖、延迟预算、安全架构决定
“10 条 Seed = 安全”❌ 不成立候选可能都属于同一模式;筛选器若无可靠动力学与约束,只是 10 次暴露风险
“Receding Horizon = 电机控制闭环”❌ 不成立策略负责“到哪里”,控制器负责“每个控制周期怎样稳定到达”
“RTC = 独立安全层”❌ 不成立RTC 处理推理与执行衔接;独立安全层负责约束、拒绝和强制停止
“动作块平均能解决跳变”❌ 不成立可能混合不同观察和意图;必须先定义承诺前缀、版本和衔接语义

摘要

Diffusion 或 Flow 策略输出平滑动作,只完成候选轨迹生成。真实闭环还需要动作数据合同、数值求解时限、Action Chunk 衔接、滚动时域新鲜度、约束裁决和低层跟踪。本文把这些环节拆成可观测执行账本。

关键词

Diffusion Policy、Flow Matching、Action Chunk、Receding Horizon、RTC

目录

  • 核心结论
  • 第一层:先定义动作数据合同
  • 第二层:Diffusion 与 Flow 生成的是什么
  • 条件编码也需要时间语义
  • MSE 平均化的准确边界
  • 第三层:训练与推理流程必须分账
  • 第四层:Receding Horizon 不是低层闭环
  • 第五层:同步与异步延迟账本
  • 动作块衔接不是简单平均
  • 约束与安全:四种选项不能混称
  • 明确标注的执行伪代码
  • 失败定位表
  • 结语
  • FAQ

核心结论

Diffusion 或 Flow 策略输出一段平滑动作,这只能说明生成模型在训练分布附近产生了一条连续序列。但真实机器人要让它动起来,还得回答五个彼此独立的问题:这段序列的单位、坐标系和时间戳对不对?生成参数化与数值求解器能不能按时完成?新旧 Action Chunk 之间是否连续,并且是基于足够新的观察?动作是否满足机器人与环境约束?低层控制器能否稳定跟踪?动作块建模、生成模型、采样/积分器、滚动时域执行和低层控制,这五个环节不能简单压成一个“Policy”方框。

[H-P01] Diffusion Policy 把视觉运动策略表示为条件去噪扩散过程,并将 Receding Horizon、视觉条件和时间序列网络作为关键设计。[H-P02] π0 则在预训练视觉语言模型之上使用 Flow Matching 动作架构,并在多种机器人数据上训练。两者都能建模动作分布,但论文中的任务结果只说明各自实验设置,不构成任意机器人上的实时性或安全保证。

第一层:先定义动作数据合同

设一个动作块为:

[A_t = [a_t, a_{t+1}, ..., a_{t+H-1}] ∈ ℝ^{H×D}]

其中 (H) 是预测步数,(D) 是单步动作维度。这个矩阵本身没有执行语义。(a) 可能是关节位置、关节增量、速度、力矩、末端位姿、夹爪开度或混合控制量;相同数字在不同合同中可能产生完全不同的物理行为。

训练与推理数据至少要固定以下字段:

字段必须说明的内容缺失后的典型后果
observation_time图像、状态和语言条件各自采样时间模型基于旧画面生成新动作
action_time示教动作实际生效时间,而非日志写入时间学到错误的感知—动作相位
control_modeposition/delta-position/velocity/torque 等数值可用但物理语义错误
frame_idbase、world、camera、tool 等坐标系方向或旋转轴错置
unitsm、mm、rad、degree、N、N·m尺度灾难
dthorizon单步周期、块长度、允许抖动推理块与执行调度不匹配
normalizer_version每维缩放、裁剪和反归一化版本离线正常、上线幅值异常
valid_maskPadding、缺测、终止后的无效动作模型把补零当真实策略
embodiment机器人、关节顺序、工具、限位版本跨机体动作映射错误
termination成功、失败、人工中止、急停无法学习何时结束或退出

机器人动作数据最危险的问题,往往不是模型结构,而是“看似相同的张量,实际来自不同时间、坐标系或控制模式”。上线前,应该对每批数据做单位、维度、时间单调性、关节顺序、限位和归一化可逆性检查,并保存转换版本;不能只靠训练 Loss 来发现合同错误。

第二层:Diffusion 与 Flow 生成的是什么

Diffusion 动作块

在一种常见 DDPM 参数化中,对真实动作块 (A_0) 加噪:

[A_k = √ᾱ_k A_0 + √(1-ᾱ_k) ε, ε ~ N(0, I)]

网络在条件 (c) 下预测噪声:

[L = E[||ε - ε_θ(A_k, k, c)||^2]]

[H-P05] DDPM 建立了通过逐步加噪与反向去噪学习生成分布的基本形式。动作策略可以预测噪声,也可以采用 (A_0)、速度参数化或其他目标;“Diffusion Policy”不是某一条固定公式。

推理时从噪声动作块开始,经若干反向步骤得到候选 (Â_0)。网络结构负责估计去噪方向,调度器和求解器负责把这些方向离散成采样轨迹。步数、时间网格、随机项、Guidance 和数值精度都会改变延迟与输出;不能把“模型前向一次”当作完整策略耗时。

Flow Matching 动作块

Flow Matching 学习随生成时间 (τ) 变化的向量场:

[dA(τ)/dτ = v_θ(A(τ), τ, c)]

从基分布出发,通过数值积分得到数据分布中的动作块。[H-P06] Flow Matching 的原始工作把它描述为对条件概率路径向量场的回归,并可使用通用 ODE 求解器。[H-P02] π0 报告使用建立在 VLM 上的 Flow Matching 架构生成机器人动作。

Flow 不等于“一步就能执行”,Diffusion 也不等于“必然很慢”。实际 NFE、蒸馏、求解器阶数、动作维度、条件编码缓存和硬件共同决定延迟。工程文档应分别记录模型参数化、积分器、步数与端到端时间。

条件编码也需要时间语义

动作生成网络的条件通常包括相机特征、语言指令、本体状态、上一动作和任务阶段。条件可以通过拼接、FiLM、交叉注意力或独立 Token 注入;这些结构差异本身不保证模型真的使用了每个条件。验收时应分别屏蔽视觉、语言和本体状态,交换时间顺序,并比较动作分布变化。若去掉关节速度后输出几乎不变,模型可能无法处理动态起点;若交换两帧图像仍得到相同动作,它可能只依赖静态外观。

条件缓存也要进入延迟账本。语言编码可在指令不变时复用,视觉与本体状态却通常必须随控制轮次更新。为了缩短延迟而复用旧视觉特征,会把计算优化转化为状态陈旧问题。系统应记录每个条件的采样时间、编码完成时间和被策略消费的时间,使用“最大条件年龄”而不是单一观察时间评价新鲜度。

MSE 平均化的准确边界

常见说法是“回归会把两种动作平均成危险动作,所以必须用 Diffusion”。准确说法应更窄。

在平方损失下,确定性回归器倾向于条件均值。当条件分布存在间隔很大的多个动作模式,例如障碍物可从左或右绕行,均值可能落在障碍物中间;这是多峰分布下的风险。若任务在给定观察下近似单峰、动作模式经过高层决策消歧,或回归目标本来就是连续控制最优值,MSE 并不会必然失败。反过来,生成模型虽能表达多峰,也可能模式坍缩、产生低概率危险样本或耗时过长。

模型选择应由条件动作分布、数据覆盖、延迟预算和安全架构决定,而不是由“生成式一定优于回归式”的口号决定。

第三层:训练与推理流程必须分账

训练流程至少包含:按真实时间切片 Observation 与 Action Chunk;转换到统一坐标和控制模式;应用固定版本归一化;生成有效 Mask;随机采样扩散或 Flow 时间;计算只覆盖有效动作的损失;按机体、任务、速度和接触阶段分桶评估。

推理流程则是:同步传感器与机器人状态;构造带时间戳条件;生成动作块;反归一化与动作适配;执行约束检查;写入动作缓冲;由低层控制器按自身周期跟踪。训练网络从未直接接触的任何变换,都必须进入部署合同和回放测试。

随机 Seed 只产生不同数值候选,不自动构成有意义的策略多样性。候选可能都属于同一模式,也可能差异来自采样噪声而非真实任务歧义。需要测模式覆盖、任务等价类、候选间距离、成功率、危险率和排名稳定性。更不能因为“采样十条再选一条”就声称安全:筛选器若没有可靠动力学与约束,十条只是十次暴露风险。

第四层:Receding Horizon 不是低层闭环

Action Chunking 常预测 (H) 步,但每轮只执行前 (h) 步,然后用新观察重新规划。这样可以减少单步策略调用,又避免整块开环执行。ACT 学习动作序列的生成模型,用于缓解误差累积与非平稳示教问题;Diffusion Policy 也把 Receding Horizon 作为关键组成。[H-P03][H-P01]

但滚动重规划不等于电机控制闭环。策略通常在较低频率上更新动作参考;伺服控制器仍需在更高频率根据编码器、力传感器和动态状态计算电流、力矩、速度或位置命令。策略可以生成“到哪里”,控制器负责“每个控制周期怎样稳定到达”。

执行前缀 (h) 的大小是系统参数:过大时观察更新慢、错误持续久;过小时策略调用频繁、容易耗尽延迟预算。它应依据任务动态、接触风险、控制频率、推理延迟分布和动作块质量共同确定,不能从论文示例直接复制。

第五层:同步与异步延迟账本

同步策略

同步执行通常是:停止或保持当前参考,采集观察,等待策略完成,再下发新动作。端到端延迟应拆为:

[T_{e2e} = T_{sense} + T_{sync} + T_{pre} + T_{condition} + T_{sample} + T_{adapt} + T_{safety} + T_{transport}]

还要记录调度抖动、GPU 排队、首次编译和网络尾延迟。对于“当前块继续执行、下一块必须在缓冲耗尽前到达”的具体设计,一个充分而非通用的条件是:

[T_{e2e,p99} + M < B_{exec}]

其中 (B_{exec}) 是已安全排队动作的剩余执行时间,(M) 是时钟、抖动和切换裕度。原初稿中的 (T_{policy} < hΔt) 只在特定前缀缓冲定义下近似成立;若系统会暂停、保持最后命令、预测未来状态、并行计算或允许降频,门槛都不同。

异步 Action Chunking

[H-P04] Real-Time Chunking(RTC)针对 Diffusion/Flow Action Chunk Policy 的推理时延,在执行当前块时并行生成下一块;它冻结确定会执行的动作前缀,并对其余部分做 Inpainting,且论文称该方法可在不重新训练策略的情况下应用。论文同时指出,普通 Action Chunking 仍可能在块边界出现暂停或分布外的突跳。

异步执行消除了“等模型算完才动”的停顿,却增加三类账:下一块使用的观察已经多旧;当前块中哪些动作不可再改;模型完成时机器人真实状态与预测起点差多少。RTC 是一种处理这些矛盾的方法,不是唯一方法,也不能替代独立安全层。

动作块衔接不是简单平均

新旧块的接缝可以采用多种工程方案:

  1. 硬切换:仅在位置、速度、加速度和接触模式差异均低于阈值时使用;
  2. 重叠融合:对重叠区加权,但接触动作或绕障模式不能盲目平均,左绕与右绕的均值可能不可行;
  3. 状态条件化:下一块显式以当前关节、末端速度、夹爪和接触状态为起点;
  4. Warm Start/Inpainting:保留将执行前缀,只生成可修改后缀;
  5. 末端约束:要求块首尾满足连续性、速度或动力学边界;
  6. 低层限幅:控制器施加速度、加速度、Jerk 和力矩变化限制,但它不能修复高层错误路线。

评价不能只看动作曲线是否光滑。还要测接缝位置/速度/加速度跳变、接触模式切换、跟踪误差、块边界失败率、缓冲欠载次数和观察年龄。

约束与安全:四种选项不能混称

约束投影把生成动作映射回关节限位、速度范围或简单凸集合;投影后的轨迹可能离数据分布很远,也未必避碰。

Guidance 在采样或积分时加入目标与代价梯度;它依赖可微、尺度正确且足够可信的代价。

规划器筛选生成多个候选后用碰撞、动力学或任务代价排序;质量受候选覆盖和评估模型限制。

独立安全门禁在策略之外拥有否决权,检查状态新鲜度、关节与工作区、碰撞、力/力矩、速度、网络与看门狗,并可触发 Hold、撤退或急停。前三种能提高可行性,但都不能自动替代最后一种,因为生成模型、投影器和规划器可能共享同一错误假设。

明确标注的执行伪代码

以下仅是架构伪代码,未针对任何机器人验证:

while system_state == RUNNING:
    obs = synchronized_snapshot()
    if stale(obs) or invalid(obs):
        enter_hold("state_invalid")
        continue
    proposal = policy.generate_chunk(obs, deadline)
    action = action_adapter.denormalize_and_map(proposal)
    verdict = safety_gate.check(action, obs, robot_limits)
    if not verdict.accepted:
        enter_hold(verdict.reason)
        continue
    prefix = stitch_with_active_buffer(action, current_state)
    executor.enqueue(prefix)
    feedback = monitor.read()
    if deadline_miss(feedback) or no_progress(feedback):
        enter_recovery(feedback.reason)

真实实现还需要线程安全、时钟同步、队列上限、取消语义、控制器接口和硬件急停,不应把这段伪代码直接部署。

失败定位表

现象优先检查不应先做的事
动作方向整体相反坐标系、关节顺序、Delta 定义增加采样步数
每个块内部平滑但边界突跳观察年龄、起点状态、缓存与 Stitch只调低层滤波
推理偶发停顿p99 分阶段延迟、GPU 排队、缓冲余量只看平均 FPS
多 Seed 都撞同一障碍数据模式覆盖、条件是否区分、筛选器继续增加 Seed 数
离线回放正常、真机幅值过大归一化版本、单位、控制模式、时钟重新训练全部模型
安全投影后轨迹抖动投影不连续、约束冲突、距训练分布过远假定“合法即自然”
接触后持续用力力反馈、终止条件、块长度、低层力控只依赖视觉策略
长延迟时还能动但任务失败异步状态陈旧、冻结前缀过长、预测起点漂移把“无停顿”当实时成功

结语

Diffusion 与 Flow 为机器人策略提供了表达多峰动作分布和长动作块的工具,但它们只解决“如何生成候选动作”的一部分。动作是否可执行,取决于数据合同;是否按时,取决于求解器和尾延迟;是否连续,取决于滚动执行与块衔接;是否安全,取决于独立约束与监控;是否稳定,最终还取决于低层控制。

正确的工程路径不是看到平滑轨迹就宣布闭环完成,而是建立完整账本:动作张量的物理语义、训练与推理转换、采样 NFE、同步或异步调度、缓冲余量、观察年龄、接缝指标、安全否决和控制跟踪。只有这些合同同时成立,随机动作块才真正变成机器人可以按时、安全、连续执行的动作。

FAQ

Flow Matching 就没有去噪步骤吗?

它通常通过学习向量场并数值积分生成样本;仍可能有多步求解,但不应机械套用 Diffusion 的参数化描述。

Action Chunk 直接平均能解决跳变吗?

可能暂时变平滑,却会混合不同观察和意图;必须先定义承诺前缀、版本和衔接语义。

RTC 能替代 Safety Gate 吗?

不能。RTC 处理推理与执行衔接,独立安全层负责约束、拒绝和强制停止。

错误速查卡

症状根因定位修复
动作方向整体相反坐标系 / 关节顺序 / Delta 定义错置;动作数据合同第一层缺失核对 frame_id / control_mode / embodiment 字段;检查归一化是否对齐轴冻结动作数据合同 10 字段;上线前做单位、维度、时间单调性、关节顺序、限位、归一化可逆性检查
离线正常、真机幅值过大归一化版本 / 单位 / 控制模式 / 时钟错位检查 normalizer_versionaction_time;对比离线和在线的每维缩放归一化固定为版本化工件;切换版本必须重测;保存转换版本链
每个块内部平滑但边界突跳观察年龄过大;新块起点未基于当前状态;缓存与 Stitch 不一致检查 stale(obs) / 最大条件年龄 / 块衔接策略显式定义承诺前缀 + 版本 + 衔接语义;用状态条件化或 Warm Start
推理偶发停顿p99 分阶段延迟 / GPU 排队 / 缓冲余量不足拆分 T_e2e = T_sense + T_sync + T_pre + T_condition + T_sample + T_adapt + T_safety + T_transport用 T_e2e,p99 + M < B_exec 替代 T_policy < hΔt;按数据面调优
多 Seed 都撞同一障碍数据模式覆盖不足 / 条件未区分 / 筛选器单一检查数据多模态覆盖、候选间距离、模式覆盖指标增加模式覆盖、任务等价类、候选间距离、成功率、危险率、排名稳定性测试
安全投影后轨迹抖动投影不连续 / 约束冲突 / 距训练分布过远检查投影后分布与训练集分布的 KL / 距离约束投影 + Guidance + 规划器筛选组合;不要假定“合法即自然”
接触后持续用力力反馈缺失 / 终止条件不当 / 块长度过大 / 低层力控未启用检查 termination 字段与低层力控接口启用低层力控;合理设置块长度与终止条件;不要只依赖视觉策略
长延迟时无停顿但任务失败异步 Action Chunking 状态陈旧 / 冻结前缀过长 / 预测起点漂移记录观察年龄、冻结前缀、模型完成时真实状态用 RTC 等异步方案但不要替代独立安全层;监控最大条件年龄
“Diffusion Policy”被当某条固定公式动作策略可预测噪声 / A_0 / 速度参数化文档中是否只描述了 DDPM 噪声预测工程文档分别记录模型参数化 / 积分器 / 步数 / 端到端时间
误把“生成式 = 一定优于回归式”多峰 ≠ 必须用生成式;MSE 边界被误读条件动作分布是单峰还是多峰;数据是否覆盖多模式按条件动作分布、数据覆盖、延迟预算、安全架构决定;不要凭口号选型
误把“10 条 Seed = 安全”候选可能都属于同一模式测模式覆盖、任务等价类、候选间距离、危险率筛选器若无可靠动力学与约束,10 条只是 10 次暴露风险
误把 Receding Horizon 当电机控制闭环策略负责“到哪里”,控制器负责“每个控制周期怎样稳定到达”策略频率 vs 控制器频率;编码器 / 力传感反馈是否进入控制器短前缀重规划 + 高频反馈各自关闭不同环路;显式划分两环责任
误把 RTC 当 Safety GateRTC 处理推理与执行衔接;独立安全层负责约束、拒绝、强制停止系统是否把 RTC 之外的安全检查独立布置保留独立安全门禁;RTC 不替代 Safety Gate
块衔接直接平均接触 / 绕障模式被平均后可能不可行检查接缝位置 / 速度 / 加速度跳变、接触模式切换显式选择 6 种衔接方案之一(硬切换 / 重叠融合 / 状态条件化 / Warm Start / 末端约束 / 低层限幅)
伪代码被直接部署标注的“未针对任何机器人验证”被忽略真实实现是否补齐线程安全、时钟同步、队列上限、取消语义、控制器接口、硬件急停补齐生产化要素;不能直接部署工程示例伪代码
论文示例 hΔt 被原样复制同步执行充分条件被简化任务动态 / 接触风险 / 控制频率 / 推理延迟分布 / 动作块质量是否独立评估重新评估 h 大小;用 T_e2e,p99 + M < B_exec 校准
valid_mask 缺失导致模型学错Padding / 缺测 / 终止后的无效动作被当成真实策略检查有效 Mask 是否在训练时正确应用加入 valid_mask 字段;损失只覆盖有效动作
embodiment 字段漂移跨机体动作映射错误;关节顺序、工具、限位版本未冻结检查 embodiment 字段是否随数据集更新Embodiment 作为版本化工件;切换 embodiment 必重训 / 重测
Flow Matching 误套用 Diffusion 公式训练目标和数值路径不能混写文档是否清晰描述向量场 + 数值积分路径Flow Matching = 向量场 + 数值积分;Diffusion = 噪声 + 去噪;分别记账
同步执行时仍出现块边界突跳Action Chunking 块边界分布外 + 推理未按时普通 Action Chunking 在块边界可能暂停 / 分布外突跳用 RTC 异步衔接;监控缓冲余量与观察年龄;保留独立安全层