robot-atlas

Manipulation & Learned Policies

Diffusion Policy

Visuomotor control as conditional denoising over action sequences, with receding-horizon execution.

Last reviewed 2026-08-08

Human demonstrations are multimodal: faced with an obstacle, one operator goes left, another goes right, and both are correct. A policy trained with mean-squared error on that data learns the average of the modes, and the average of "left" and "right" is "straight into the obstacle." Diffusion Policy, introduced by Chi et al. in 2023, sidesteps the averaging problem by changing what the policy outputs: not an action, but a conditional denoising process over a whole action sequence Chi 2023. The result was a reported average improvement of 46.9% over the prior state of the art across 15 tasks and 4 benchmarks, and the design became the default action-head recipe for the generalist policies that followed Chi 2023.

Denoising in action space

The policy is a denoising diffusion probabilistic model (DDPM) conditioned on recent observations. Where a regression head computes at=fθ(ot)a_t = f_\theta(o_t), Diffusion Policy models the distribution p(AtOt)p(A_t \mid O_t) over the next TpT_p actions. Inference starts from pure Gaussian noise and iteratively refines it: each step applies the learned denoiser ϵθ\epsilon_\theta, which predicts the noise component of the current sample, and subtracts a fraction of it,

Atk1=α(Atkγϵθ(Ot,Atk,k)+N(0,σ2I))A_t^{k-1} = \alpha \left( A_t^k - \gamma \, \epsilon_\theta(O_t, A_t^k, k) + \mathcal{N}(0, \sigma^2 I) \right)

repeated until the sample lands on a valid action chunk Chi 2023. Training uses the standard noise-prediction MSE loss with a square-cosine schedule; sampling uses DDIM to cut the 100 training steps down to 10 inference steps, about 0.1 seconds per chunk on an RTX 3080 Chi 2023.

2
observations T_o
most recent frames
16
prediction T_p
actions per chunk
8
execution T_a
committed before replan
10
DDIM steps
~0.1 s on an RTX 3080

Because sampling is stochastic, the policy can commit to a mode instead of averaging modes. Run the denoiser on a bimodal demonstration set and each sample lands on one strategy or the other; the distribution of samples reproduces the distribution of demonstrations.

-3-2-10123action space (2 dims of T_p x 14 shown)mode Amode B

step 0 of 10 (pure Gaussian noise) mean distance to mode 1.79

Illustrative model: 60 samples with a fixed seed, transported toward two demonstration modes over 10 steps, the DDIM inference schedule in the published configuration. The real sampler refines a whole action sequence jointly; this view shows 2 of its dimensions. An MSE policy would land between the modes; the diffusion policy commits each sample to one.

Note

The step count is a speed knob, not a quality requirement. Training runs 100 DDPM steps; inference runs 10 DDIM steps with nearly identical results, and the successors below push the count far lower Chi 2023.

Receding-horizon control

Diffusion Policy does not execute the whole chunk it predicts. It commits the first TaT_a of the TpT_p predicted actions (8 of 16 in the standard configuration), then observes the world again and replans, warm-starting from the previous prediction Chi 2023. The tail of each chunk exists to make the committed part coherent; it is revised away before it ever runs.

TaT_a is the same dial as ACT's chunk size, named differently: large TaT_a gives smooth, committed motion but a slow reaction to anything changing mid-chunk; small TaT_a reacts quickly but re-samples often, and each new sample can pick a different mode mid-motion Zhao 2023. The policy issues commands at 10 Hz, so Ta=8T_a = 8 means the robot commits to each plan for 0.8 seconds.

plan 0plan 1plan 2plan 308162432control steps at 10 Hz

T_p = 16, T_a = 8: 1.25 Hz replan rate, 0.8 s committed per plan

Solid segments are executed; outlined tails are revised away by the next inference. Small T_a reacts quickly but re-samples (and can switch modes) often; large T_a is smooth but slow to notice the world changed. At T_a = T_p the policy runs open-loop between inferences.

CNN and transformer variants

The paper ships two denoiser backbones Chi 2023:

Backbone variants

CNN (default)
1D temporal U-Net over the action sequence
CNN conditioning
observations injected via FiLM
transformer
time-series diffusion transformer (DiT)
transformer conditioning
observation embedding via cross-attention
visual encoder
ResNet-18 with GroupNorm, trained end-to-end

The CNN variant is the recommended default: it trains stably and is robust to hyperparameter choices. The transformer variant handles high-frequency action changes better, because the CNN's temporal-convolution inductive bias smooths exactly the fast structure those tasks need, but it is finicky; the paper reports that simply adding depth sometimes made results worse Chi 2023.

The successors: fewer steps, then flow matching

Iterative denoising buys multimodality at the cost of sampling time. Ten network evaluations per chunk is fine on a workstation GPU; it is a problem on a mobile manipulator or a quadrotor. Two successor lines attack the cost differently.

Distillation: fewer steps

Consistency Policy distills a trained Diffusion Policy into a consistency model that produces a chunk in 1 or 3 steps, targeting robots with edge GPUs, and reports robustness to the quality of the teacher (you do not need an extensively tuned one) Prasad 2024. One-Step Diffusion Policy goes further, distilling the chain into a single-step generator that lifts action prediction from 1.5 Hz to 62 Hz on real Franka tasks Wang 2024.

Flow matching: a different formulation

pi0 swapped the DDPM for conditional flow matching on a straight transport path: sample noise ε\varepsilon, form the interpolant

Atτ=τAt+(1τ)ε,u(AtτAt)=AtεA_t^\tau = \tau A_t + (1 - \tau)\varepsilon, \qquad u(A_t^\tau \mid A_t) = A_t - \varepsilon

and train the network to predict the target vector field uu, with the timestep τ\tau drawn from a beta distribution weighted toward the noisy end Black 2024. Sampling integrates the field from τ=0\tau = 0 to τ=1\tau = 1 with forward Euler in 10 steps. There is no noise schedule to tune, and the straight paths tolerate fewer integration steps than a DDPM trajectory.

The honest caveat

Frontier labs did not adopt one-step distillation. Instead of cutting step count, they cut latency: Real-Time Chunking treats the hand-off between consecutive chunks as an inpainting problem on the diffusion or flow trajectory and holds throughput flat out to +200 ms of injected inference delay, with no training-time change Black 2025. Distillation matters most for on-robot edge deployment, not for cloud-served policies.

Limitations

The 2023 design is single-task and single-embodiment, with no language conditioning and no web-scale pretraining; conditioning a diffusion head on language and scaling it up is exactly what Octo, pi0, and their successors later did Black 2024. Reactivity is bounded by TaT_a: whatever happens inside a committed segment, the policy will not respond until the next inference. And the sampling cost, though tamed by DDIM and the successor methods above, never disappears entirely. Later modules in this domain cover how vision-language-action models took the action head and dropped it onto web-pretrained backbones.