Q1:Diffusion Policy 能在真机上实时跑吗?
能,但需要加速。真机任务用 DDIM 把推理步数从 100 减到 16,单次推理约 0.1 秒(RTX 3080)。📎 100+ Hz 高频控制仍需进一步蒸馏(如 Consistency Policy)。
论文:Chi, Xu, Feng, Cousineau, Du, Burchfiel, Tedrake, Song. Diffusion Policy: Visuomotor Policy Learning via Action Diffusion. RSS 2023, Columbia University / Toyota Research Institute / MIT. arXiv:2303.04137. 🌐
让机器人动作像画家作画:先模糊打底,再一层层修到精准。扩散模型之于机器人动作,就像画家之于画作。从一团噪点开始,一层层把动作细节修出来。
要解决的问题:教机器手臂照着人录的演示学动作。
老办法:神经网络看到画面就输出一个动作。可同一个画面常有多种正确动作。比如杯子可以左手拿,也可以右手拿。模型会把它们平均,得到一个谁也不像的动作。
新办法:把动作生成当作"逐步修图"。从一团噪声出发,每步去掉一点噪声,修出一段连贯动作。一次产出未来十几步,而不是只看眼前一步。
方法核心·逐步去噪:网络学的不是"看图直接出动作"。它学的是"给我一团带噪声的动作,该抹掉哪部分噪声"。每抹一步,动作就清晰一分。每一步抹噪声都要看着当前画面决定抹多少。重复几十步,从一团噪声修出一段干净动作。关键是这段动作是"采样"出来的。同一画面、换个初始噪声,能修出不同的正确动作,所以不会被平均掉。执行时只跑前面几步就重新去噪,等于边做边看、不断修正。网络有两种骨架可选。一种把动作段当成一维信号(像音频)用卷积处理,稳、好调,是新任务首选。另一种把动作段切成一串 token 用注意力处理。它上限更高但更挑剔,小数据易过拟合。去噪要一步步迭代,所以单次出动作比"看一眼就出动作"的方法慢。这是它做高频控制时的代价。
为什么有用:因为"修图式"生成天然支持多解。同一团噪声可以修出不同动作,不会被平均掉。一次产一段还缩短了决策链,让机器人不容易"一步错步步错"。
类比:扩散之于动作生成,就像修复古画之于重画。不直接画,从模糊到清晰,一笔笔修出细节。
核心机制·条件去噪:策略不再回归单步动作,而是学一个生成模型,对一整段动作去噪。📎 训练时把演示动作加噪声。让网络学如何把噪声还原回去。还原以摄像头画面为条件。每去一步噪都看一眼画面,决定下一笔往哪修。
两种骨架:论文给两种去噪网络。📎
关键设计·动作分段:一次去噪出 16 步(prediction horizon),只执行前 8 步(execution horizon)就重新去噪。📎 这叫 receding horizon(滑动预测)。16/8 是 Robomimic 一组任务(Lift/Can/Square/Transport/ToolHang)的常用配置,不是所有任务的统一默认:Block Push 用 $T_p=12/T_a=1$,真机 Push-T 用 $T_a=6$。$T_a$ 太小(1 步)会抖,太大反应慢,8 是消融出来的甜点。📎 还顺带吸收几步控制延迟。
关键设计·双输入:低维状态(关节角、夹爪)直接拼进网络,比纯视觉稳。每个动作维度做 z-score 归一化,不归一化会崩。📎 视觉编码器用 ResNet-18。把全局平均池化换成 spatial softmax pooling。BatchNorm 换 GroupNorm,配 EMA。
常见误区(先抛一个,完整版见末尾):很多人以为"加 diffusion 是为了精度"。其实冲着多模态去的——朴素模仿学习用 MSE 回归在多解任务上必然把动作平均成无效解。📎 diffusion 的真正作用是让模型敢输出"任一种正确动作"。
前向/反向过程:训练时把演示动作 $a^*$ 按 $a_k=\sqrt{\bar\alpha_k}\,a^*+\sqrt{1-\bar\alpha_k}\,\epsilon$ 加噪($\epsilon\sim\mathcal{N}(0,I)$ 是高斯噪声,$k$ 是离散噪声步编号,$\bar\alpha_k$ 是噪声调度累积系数)。📎 训练目标就是标准 DDPM 的噪声预测损失
$$\mathcal{L}=\mathbb{E}_{k,\epsilon}\Big[\big\|\epsilon-\epsilon_\theta(a_k,k,o_t)\big\|^2\Big]$$
其中 $\epsilon_\theta$ 是去噪网络,$o_t$ 是观测。视觉特征由 ResNet-18 编码后,以 FiLM(feature-wise linear modulation)方式在去噪网络每个 resblock 注入;diffusion step $k$ 用 sinusoidal embedding。
推理加速(DDIM):训练用 $K=100$ 步去噪;真机用 DDIM 把推理步数减到 16,性能几乎不掉。📎 仿真任务保持训练/推理一致(iDDPM 100 步)。单次推理约 0.1 秒(RTX 3080)。
Horizon 三件套(论文 §2.2 原话定义):📎
这把有效决策 horizon 从 $T$ 压到 $T/T_a$,直接缓解协变量偏移的 $O(\epsilon T^2)$ bound(Ross et al. 2011 的经典结论)。📎
两种 backbone 的差异根源:论文推测一维 CNN 在 velocity 控制下表现差,可能因为 CNN 对低频信号有偏好(spectral bias,Tancik et al. 2020),而 velocity 是高频/突变动作。📎 这是"可能因"的猜测(论文用 likely),不是定论——position 控制下 CNN 反而更稳。Transformer 在 velocity 任务上更有优势,但论文里它更主要的动机是减少过拟合、捕捉更长 horizon。CNN 增大参数量几乎总能涨点(受限于显存);Transformer 增大层数有时反而掉点。
实验:Push-T、Robomimic(Lift/Can/Square/Transport)、真机 Franka(Push-T/Pour/Spread/MugFlip)全面碾压 LSTM+MSE BC 和 IBC 基线。📎 真机 Push-T 成功率从基线的约 20% 拉到 95%。
网络超参(Tab.7 = CNN 骨架,Tab.8 = Transformer 骨架,两表分开核):📎
局限:
图谱定位:Diffusion Policy 是 T05 线索的核心起点——把模仿学习从"单步回归"升级到"多模态动作分布 + action chunking"。📎 这一框架定义了后续所有操作模仿学习论文的设计空间。
与同期 ACT/ALOHA 的平行收敛:两个独立团队前后脚给出"双重创新"——多模态生成 + chunking。DP arXiv 首发 2023-03,ACT 首发 2023-04,前后约 7 周;二者都被 RSS 2023 收录,是真正意义上的同期独立工作。🌐 一个走 diffusion,一个走 CVAE,证明这是当时唯一正确的方向。后续 IL 工作几乎都基于这两条路。
后续演进:
每个后继都改 DP 的某一维:3D / 加速 / scale / 被吸收。
Open problems:
"Diffusion Policy 是为了精度" —— 错。朴素 BC 用 MSE 在多解任务上必然把动作平均成无效解,diffusion 是冲着多模态去的。📎
让模型敢输出"任一种正确动作",而不是追求更准的单一动作。
"diffusion 步数越多越好" —— 错。论文真机用 DDIM 把推理减到 16 步,性能几乎不掉而延迟大幅下降。📎
训练用 100 步保证表达力,推理减步靠 DDIM 加速。
"执行 horizon 越小越敏捷" —— 错。$T_a=1$ 反应快但预测抖动;$T_a$ 接近 $T_p$ 反应慢、性能掉。📎
$T_a=8$ 是消融出来的甜点,不是越激进越好。
"chunk 越长越稳" —— 错。chunk 太长失去 closed-loop 修正能力,等价于开环执行。📎
chunk + receding horizon 的组合才是关键,不是单方面追求长 chunk。
"Transformer 版一定比 CNN 版强" —— 错。论文实测 CNN 更稳,是新任务首选;Transformer 上限高但敏感、对小数据更易过拟合。📎
数据规模和多模态强度决定选哪个。
朴素模仿学习用 MSE 回归,在"杯子可左手也可右手拿"的任务上为什么会失败?用"修图"类比说 diffusion 是怎么解决的。
💡 参考答案
Diffusion Policy 一次产出一段十几步的动作,但执行时只跑前面一部分就重新去噪。为什么不一口气执行完整段?只跑一部分再重去噪的好处是什么?
💡 参考答案
去噪网络学的不是"看图直接出动作"。它学的是什么?为什么"从噪声采样"能让它输出多种不同动作、而不被平均掉?
💡 参考答案
论文给卷积和注意力两种骨架。用大白话说:它们分别把"动作段"当成什么来处理?哪种更稳、哪种上限更高但更挑剔?
💡 参考答案
去噪要一步步迭代才能修出干净动作。这让 Diffusion Policy 在"要很快做决定"的高频控制任务(比如打乒乓球)上会遇到什么麻烦?
💡 参考答案
能,但需要加速。真机任务用 DDIM 把推理步数从 100 减到 16,单次推理约 0.1 秒(RTX 3080)。📎 100+ Hz 高频控制仍需进一步蒸馏(如 Consistency Policy)。
官方 real-stanford/diffusion_policy 是工业级,为可复现的真机实验设计。[未确认] 想快速上手推荐 HuggingFace LeRobot 的实现,几十行 config 就能跑 PushT。
必须。每个动作维度做 per-dimension z-score 归一化。diffusion 对输入 scale 敏感,不归一化会崩。📎
取决于数据量。小数据 freeze 更稳,大数据解冻一起训能涨点。📎 论文用 ResNet-18 + spatial softmax pooling + GroupNorm + EMA。
精细双臂、自由度高、数据中等首选 ACT(更快、更稳)。多模态极强、推理频率要求不高选 DP。[未确认] 经验上 LeRobot 默认推荐 ACT 上手。