Back to all posts
Our work · Few-step generation

Refine, Don't Re-roll

Few-step distillation usually walks through a hand-picked schedule of noise levels. Our paper drops it: the generator simply refines its own image prediction.

Intermediate steps for one shared noise and class. Top row, data-space iteration: the same ostrich is refined from 1 to 4 NFE. Bottom row, flow-renoise: a different ostrich in a different pose and background at every step. At right, the 4-step output of flow-map.
Figure 1. One shared noise and class, shown after each step. Data-space iteration (top) keeps the same ostrich and refines it; flow-renoise (bottom) draws a different ostrich, with a different pose and background, at every step. Flow-map (right) produces only its final 4-step output. Images are from Figure 2 of our paper [1].

Flow-matching image models need tens to hundreds of network evaluations per sample, so we distill them into generators that need only a few, say four. The usual recipe fixes a timestep schedule, for example the noise levels 1.0, 0.75, 0.5 and 0.25, and lets each step move the sample from one level to the next. The schedule is hard to justify, and changing it means training a new generator.

Our paper asks whether it is needed at all. Instead, each step refines the image prediction directly, starting from the same noise, with no schedule.

1. The idea

Left, flow-space iteration: noise z becomes noisy states at t = 1.0, 0.75, 0.5 and 0.25 with question marks between them, labelled "noisy state, denoise, re-noise" and "hand-picked schedule, fixed before training". Right, data-space iteration: the same noise z is fed into every step of one shared generator and every step outputs a full bird image, labelled "no schedule".
Figure 2. Flow-space iteration (left) walks through a hand-picked schedule of noisy states, re-noising the image prediction between steps. Data-space iteration (right) feeds the same noise and the current image estimate into one shared generator at every step, with no schedule. Images are from Figure 1 of our paper [1].

Flow matching [6] connects data \(x_0\) and noise \(x_1\) by the line \(x_t=(1-t)x_0+t x_1\), and a network predicts its velocity \(v=x_1-x_0\). Any velocity prediction gives a clean-image prediction:

\[ \hat x_0 = x_t - t\,v. \] (1)

At \(t=1\) the state is the noise \(z\) itself, so \(\hat x_0=z-v\). Data-space iteration keeps only this prediction as the state and refines it with one shared generator:

\[ \hat x_0^{(0)} = 0,\qquad \hat x_0^{(r+1)} = G_\theta\big(\hat x_0^{(r)},\, z,\, r\big) = z - g_\theta\big(\hat x_0^{(r)}, z, r, t=1\big). \] (2)

The network \(g_\theta\) is the pretrained velocity network with a new input projection for \(\hat x_0^{(r)}\) and an embedding of \(r\), and its flow-time input is fixed to \(t=1\) (for compatibility with the pretrained velocity parameterization).

A hand-drawn notebook page titled "How Data-Space Iteration Works": one shared generator with inputs z, the current guess and the step index r; one step computes the estimate as z minus the network output at t equal to 1; repeating R equals 4 times from an empty start; pseudocode for flow-renoise and data-space rollouts; and training with plain DMD.
Figure 3. Data-space iteration on one page: the generator's inputs, one step, the rollout from an empty start, and training with plain DMD.

2. What the schedule costs

Existing methods pass a noisy image from step to step, so they need a schedule \(1=t_0>t_1>\dots>t_R=0\) of noise levels, fixed before training. They differ in how a step moves from \(t_r\) to \(t_{r+1}\):

No single schedule is best. We reran both baselines with shifted versions of the uniform grid \([1, 0.75, 0.5, 0.25]\) (Table 2c of our paper [1]): for flow-renoise at 4 NFE, a shift of \(\gamma=2\) is best without guidance and \(\gamma=1\) with guidance. Each candidate costs a full training run.

A worked example: what the generator receives

Take a scalar pixel with a good first-step estimate \(\hat x_0=2.0\) and noise \(z=5.0\). Under flow-renoise at \(t=0.75\), the next input is \(0.25\cdot 2.0+0.75\,\varepsilon\), which is \(-0.4\) for \(\varepsilon=-1.2\) and \(1.4\) for \(\varepsilon=+1.2\): the same estimate arrives as different numbers depending on a random draw. Under data-space iteration the input is always \((\hat x_0, z)=(2.0, 5.0)\).

Re-noising also shrinks the carried-over estimate. For an estimate of unit variance its signal-to-noise ratio (SNR) is \(((1-t)/t)^2\):

schedule point \(t\)signal weight \(1-t\)noise weight \(t\)SNR of the old estimate
0.750.250.750.11
0.500.500.501.00
0.250.750.259.00

So re-noising can make already-good content hard to keep. This is a calculation about the generator's input, not evidence that trained generators behave this way; the evidence is in Section 5.

3. Training

We train with distribution matching distillation (DMD) [2][3], replacing only the rollout by (2). DMD matches the distribution of generator outputs to the teacher's using two flow models: a frozen real model (the teacher, SiT-XL/2 [7]) and a fake model trained on the generator's own samples. The generator, a DiT-XL/2 network [8], is pushed towards where the teacher would denoise its output and away from where the fake model would. Multi-step training also needs self-rollout: to train step \(r\), run the first \(r\) steps without gradients, then take step \(r\) with gradients, so the generator trains on its own intermediate states.

The DMD loss and training code

Noise a generator output \(\hat x\) at a random level \(\tau\), \(\hat x_\tau=(1-\tau)\hat x+\tau\varepsilon\) with \(\varepsilon\sim\mathcal N(0,I)\), and compare the two models there. With weighting \(w(\tau)\) and stop-gradient \(\mathrm{sg}\), the generator loss is

\[ \mathcal L_{\text{dmd}} = \mathbb E\Big[\, w(\tau)\; \mathrm{sg}\big[v_{\text{real}}(\hat x_\tau,\tau) - v_{\text{fake}}(\hat x_\tau,\tau)\big]^{\top}\hat x \Big]. \] (4)

By (1) at level \(\tau\), \(v_{\text{real}} - v_{\text{fake}} = -\tfrac{1}{\tau}(\hat x_0^{\text{real}} - \hat x_0^{\text{fake}})\), which is the direction stated above. The fake model is trained alternately by regressing \(v_{\text{fake}}(\hat x_\tau,\tau)\) onto \(\varepsilon-\hat x\). The code is adapted from Algorithm 1 in the appendix of our paper [1]; z, x are latent batches of shape (B, 4, 32, 32), and r is the sampled step index.

def rollout_data_space(gen, z, c, r, track_grad):
    x_hat = torch.zeros_like(z)
    for i in range(r + 1):
        with torch.set_grad_enabled(track_grad and i == r):   # gradients only at step r
            x_hat = z - gen(x_hat, z, c, i)                   # eq. (3)
    return x_hat

def dmd_step(gen, v_real, v_fake, data, r, rollout_fn, gen_step=True):
    x, c = data
    z, eps = torch.randn_like(x), torch.randn_like(x)
    tau = torch.distributions.Beta(2.5, 1.0).sample((x.shape[0],)).to(x.device)
    tau4 = tau[:, None, None, None]
    x_hat = rollout_fn(gen, z, c, r, track_grad=gen_step)
    x_tau = (1 - tau4) * x_hat + tau4 * eps                   # noise the prediction
    if not gen_step:                                          # fake-model update
        return F.mse_loss(v_fake(x_tau, tau, c, r), eps - x_hat)
    with torch.no_grad():                                     # fixed direction, no gradient
        direction = v_real(x_tau, tau, c) - v_fake(x_tau, tau, c, r)
    return (x_hat * direction).mean()                         # eq. (4) with w(tau)=1

In a generator step, gradients flow only through x_hat from the last of the \(r+1\) generator calls, and the direction \(v_{\text{real}}-v_{\text{fake}}\) carries none. The flow-renoise baseline uses the same dmd_step and differs only in the rollout loop: at each schedule point \(t\) it re-noises \(\hat x\) and calls the generator with \(t\) instead of \(r\). Other hyperparameters are in the appendix of our paper.

4. Results

We compare all samplers on class-conditional ImageNet 256×256 with the same teacher and DMD recipe, so only the iteration differs. FID (Fréchet Inception Distance) is lower for better samples. Baselines use the uniform schedule, and "oracle" is the best of three schedules for flow-map.

Line chart of FID against network evaluations (1 to 4) without guidance: data-space iteration goes 3.85, 2.68, 2.47, 2.46; flow-renoise goes 4.45, 3.22, 2.67, 2.75. Flow-map at 4 NFE is 2.55, or 2.48 with the best of three schedules. A side table lists 4-step FID with and without guidance.
Figure 4. FID against NFE on ImageNet 256×256 without guidance; the table on the right lists the 4-step FIDs with and without guidance. Numbers are from Table 3 of our paper [1]; lower is better.
Full FID tables

Without classifier-free guidance

Method1 NFE2 NFE3 NFE4 NFE
Flow matching teacher (250 NFE)8.26
DMD, flow-renoise4.453.222.672.75
Phased DMD, flow-map–––2.55 (oracle 2.48)
Data-space DMD3.852.682.472.46

With classifier-free guidance

Method1 NFE2 NFE3 NFE4 NFE
Flow matching teacher (250 × 2 NFE)2.06
DMD, flow-renoise4.022.892.512.61
Phased DMD, flow-map–––2.86 (oracle 2.37)
Data-space DMD3.312.472.332.29

5. What the steps look like

FID scores only the final image, so Figure 1 at the top shows the output of every step. Data-space iteration keeps the composition from the first step and sharpens details afterwards; flow-renoise changes pose, background and viewpoint between steps. The evidence that structure persists is qualitative. Measured as mean pixel-space L2 change between consecutive steps, data-space iteration changes about 28% less in the first transition but about 20% more in the last, so "changes less everywhere" is not what the numbers say.

6. Limits and related ideas

Related ideas
  • Self-conditioning feeds previous predictions into a model to improve its velocity field, but generation still integrates that field along an ODE. In our method the data prediction itself is the iterated state.
  • Fixed-point and deep equilibrium models [9] apply one function repeatedly. Our generator is conditioned on \(r\), so its update can differ across steps, and we apply the DMD objective at every step without requiring convergence.
  • Looped transformers reuse shared blocks to increase effective depth. Recent work trains one end to end with a distribution-matching objective and backpropagates through the whole unrolled loop, which is costly. We backpropagate through only the last step of the rollout, which makes data-space iteration a drop-in change to existing DMD pipelines.

If the generator is trained on its own rollouts, nothing requires those rollouts to pass through noisy states. Dropping the schedule removes one hyperparameter and, in our controlled setting, matches or beats the tuned baselines. Text-to-image models and streaming video generation, where self-rollout is already central, remain to be tested.

References

  1. [1]
    Few-Step Generation via Data-Space Iteration Shanchuan Lin, Yansong Peng, Fu-Yun Wang, and Haoqi Fan. arXiv:2610.12102, 2026.
  2. [2]
    One-step Diffusion with Distribution Matching Distillation Tianwei Yin, Michaël Gharbi, Richard Zhang, Eli Shechtman, Fredo Durand, William T. Freeman, and Taesung Park. CVPR 2024.
  3. [3]
    Improved Distribution Matching Distillation for Fast Image Synthesis Tianwei Yin, Michaël Gharbi, Taesung Park, Richard Zhang, Eli Shechtman, Fredo Durand, and William T. Freeman. NeurIPS 2024.
  4. [4]
    Phased DMD: Few-step Distribution Matching Distillation via Score Matching within Subintervals Xiangyu Fan, Zesong Qiu, Zhuguanyu Wu, Fanzhou Wang, Zhiqian Lin, Tianxiang Ren, Dahua Lin, Ruihao Gong, and Lei Yang. CVPR 2026.
  5. [5]
    Distributional Distillation II: What the Methods Actually Estimate Fu-Yun Wang. Blog post, 2026. Derives what DMD and Phased DMD estimate and why a clean-sample target would be biased at an intermediate phase.
  6. [6]
    Flow Matching for Generative Modeling Yaron Lipman, Ricky T. Q. Chen, Heli Ben-Hamu, Maximilian Nickel, and Matt Le. ICLR 2023.
  7. [7]
    SiT: Exploring Flow and Diffusion-based Generative Models with Scalable Interpolant Transformers Nanye Ma, Mark Goldstein, Michael S. Albergo, Nicholas M. Boffi, Eric Vanden-Eijnden, and Saining Xie. ECCV 2024.
  8. [8]
    Scalable Diffusion Models with Transformers William Peebles and Saining Xie. ICCV 2023.
  9. [9]
    Deep Equilibrium Models Shaojie Bai, J. Zico Kolter, and Vladlen Koltun. NeurIPS 2019.
  10. [10]
    Phased Consistency Models Fu-Yun Wang, Zhaoyang Huang, Alexander William Bergman, Dazhong Shen, Peng Gao, Michael Lingelbach, Keqiang Sun, Weikang Bian, Guanglu Song, Yu Liu, Xiaogang Wang, and Hongsheng Li. NeurIPS 2024.

Citation

If you find this work useful, please cite our paper (arXiv:2610.12102):

@article{lin2026fewstep,
  title   = {Few-Step Generation via Data-Space Iteration},
  author  = {Lin, Shanchuan and Peng, Yansong and Wang, Fu-Yun and Fan, Haoqi},
  journal = {arXiv preprint arXiv:2610.12102},
  year    = {2026}
}