Dissecting AI
From the paper: LLM-to-Flow Distillation: Teaching Natural Language Goals to Scientific Generators

Distilling Categorical Judgments into Generator Updates

Numerical scores from a language-model judge can be poorly calibrated, so the generator learns from positive–negative preferences elicited on its own current samples and distilled through an online, reference-regularized DPO update.

Read the paper ↗
The short version

What it is

  • Categorical feedback A language-model judge marks current samples as positive, negative, or abstained under a temporary goal. Abstention leaves uncertain cases out instead of pretending they have a clear label.
  • Online preference update Positive samples are preferred to negative ones, and the generator is updated from those comparisons. After updating, it samples again so judgments concern its current outputs.
  • Moving reference Each update stays anchored to the generator that produced the current batch, rather than to a fixed older model.

Why it matters

This turns qualitative expert judgments into a learning signal without requiring calibrated numerical scores. It also keeps each preference update tied to the generator’s current behavior, while preserving uncertainty through abstention.

Before the machinery, the basic idea is simple: ask a language model to judge designs against a current scientific sub-goal, then use its clear positive-versus-negative distinctions to nudge the generator. If it cannot tell, let it abstain. The point is to learn from judgments without pretending they are precise measurements.

  1. Calibration: A raw score can look numerical without being comparable across candidates. A label only needs to say which side of the current criterion a candidate falls on. The canonical example is a batch of generated scientific designs: a judge can mark some as positive, some negative, and leave ambiguous ones alone. That does not make the judgments infallible; it avoids treating an uncertain score as a calibrated quantity.

  2. Useful comparisons: A preference update needs a better and worse example, not a full ranking. From the same batch, every clear positive can be preferred to every clear negative. Abstained examples do not become weak positives or negatives; they are simply absent from the comparisons. This is like asking which pages in a notebook are worth carrying forward, while leaving unreadable pages undecided—the analogy breaks because candidates may be compared through a shared criterion, not by a single natural ordering.

  3. Changing samples: The generator should not keep learning from judgments about a region it has already moved away from. It samples a batch, receives preferences, updates, then samples again. The current generator is also the reference for that update: a local anchor, somewhat like regularizing a change against the model you started this step with, not against a permanently frozen original.

So what does the update actually do? DPO turns positive-over-negative comparisons into a training objective, with the current generator as reference. In the flow setting, terminal log-densities are intractable, so the objective is optimized through a denoising-loss surrogate. Put plainly, the update changes the generator toward preferred samples while the reference discourages an unconstrained jump.

There is also a useful way to think about the target: if the preferences are consistent with a Bradley–Terry model, they can be interpreted as arising from an implicit utility. The update then resembles moving toward a distribution that favors higher utility while remaining KL-regularized around the current generator. The utility is an interpretation, not a score the judge actually supplies. And this is a population-level picture: finite samples, model limits, and finite training can all make the actual update differ.

The question left open is whether a locally sensible preference update reliably advances the generator toward the final scientific goal. By itself, it only describes one step under one temporary criterion; how those criteria are chosen is a separate part of the method.

Read the deep dive

Why People Wanted It

A scientific generator needs to move toward a goal, but a language-model judge may be better at saying which of two designs fits a current criterion than at assigning a well-calibrated numerical score. The real question was not how to turn every judgment into a number. It was how to extract useful direction from coarse judgments while declining to train on cases the judge cannot resolve—and to keep those judgments relevant as the generator changes.

The Core Move

Ask the judge to label a batch of the generator’s current samples positive, negative, or abstained under a temporary sub-goal; turn positive–negative comparisons into DPO preferences, using the current generator as the reference.

For a positive candidate x+x^+ and negative candidate x−x^-, the preference is x+≻x−x^+ \succ x^-. Abstained candidates supply no comparison.

Why Ordinal Labels Avoid a Calibration Trap

Here is the part that gets more technical than the intuition: the label is not a hidden score, and the update does not need one. Under the accepted current sub-goal, the judge assigns each sampled candidate a label in {+,−,∅}\{+, -, \varnothing\}. The positive and negative sets are PtP_t and NtN_t; the induced comparison set is Dt=Pt×NtD_t=P_t\times N_t. Thus every positive is preferred to every negative in that batch, while abstained candidates are left out.

This construction makes a substantive assumption: the batch labels define coherent regions on opposite sides of the current criterion. It does not claim to recover calibrated utility values. The supplied procedure also describes two independently executed judgment passes with permuted order; only samples with stable positive or stable negative labels enter the preference sets. Unstable and abstained cases are not forced into training comparisons.

Why the Reference Moves with the Generator

Now the version for readers who want more of the machinery: at round tt, DPO uses pθtp_{\theta_t} both as the sampled generator and as the reference distribution. The preference update minimizes the round-specific DPO objective, yielding new parameters θt+1\theta_{t+1}. The reference therefore anchors each step to the current generator, rather than to a fixed model from an earlier stage.

This is online preference distillation: resampling after an update means the next judgments are elicited on the generator’s changed sample region. In the flow setting, terminal log-densities are intractable, so optimization uses a denoising-loss surrogate. That is an implementation route for the update, not a claim that the surrogate makes the exact finite-sample objective disappear.

Why the Update Has a KL-Regularized Target

Here is the deeper interpretation, which depends on an explicit modeling assumption: suppose the induced preferences follow a Bradley–Terry model for a latent utility fgt(x)f_{g_t}(x). For reference pθtp_{\theta_t} and DPO temperature parameter β\beta, the corresponding population target has the form

pt∗(x)∝pθt(x)exp⁡ ⁣(fgt(x)β).p_t^*(x) \propto p_{\theta_t}(x)\exp\!\left(\frac{f_{g_t}(x)}{\beta}\right).

In words, the target reweights the current generator toward higher implicit utility, with the reference resisting movement too far from its current distribution. The utility is implicit: the procedure observes ordinal preferences and neither queries nor directly fits fgtf_{g_t}. This is a population-level interpretation, not a promise that finite data, limited model capacity, finite optimization, and the denoising surrogate land exactly on that target. It also relies on comparison paths connecting the relevant support and on a finite normalizing constant. What can a single locally regularized update guarantee about the full route to the final goal? Nothing by itself; curriculum progress is a separate question.

Minimal Causal Code

This pseudocode makes the data flow visible; dpo_loss stands for the preference objective, and the flow implementation may use its denoising-loss surrogate.

for round_id in rounds:
    samples = generator.sample(batch_size)
    labels = judge(current_subgoal, samples)  # positive, negative, abstain

    positives = [x for x, y in zip(samples, labels) if y == "positive"]
    negatives = [x for x, y in zip(samples, labels) if y == "negative"]
    pairs = [(pos, neg) for pos in positives for neg in negatives]

    reference = generator.snapshot()
    loss = dpo_loss(generator, reference, pairs)
    loss.backward()
    optimizer.step()
    optimizer.zero_grad()

The code omits the described repeated judgment pass and stable-label filtering to keep the core state update visible; in an implementation that uses those passes, construct the sets from stable labels before pairing.

What You Gain, and What You Lose

You gain a supervision channel that uses categorical judgments rather than relying on calibrated raw scores, and one pass over a batch can produce positive–negative comparisons instead of requiring exhaustive pairwise duels. Abstention preserves ambiguity instead of turning it into a forced label. The moving reference regularizes each update to the generator that produced the current samples.

You lose information that a trustworthy graded score might contain: these labels express ordinal distinctions, not calibrated magnitudes. Preferences are only as reliable as the judgments and current criterion, and ambiguous or unstable samples contribute no pair. The implicit-target account is conditional on its preference-model and support assumptions; the finite update can miss that target, and a sequence of such steps does not by itself establish that the generator reaches the final goal.

Quiz
Under one current sub-goal, the judge labels one sample positive, one negative, and one abstained. Which samples contribute to the induced preference set?
Only the positive sample is used, because negative labels are not informative.
The positive and negative samples form a preferred pair; the abstained sample contributes no comparison.
All three samples are ranked by assigning the abstained sample a middle score.
The abstained sample is treated as negative so the update has a complete pair.
Core Takeaway

Let the judge say which samples it can distinguish, then let the current generator—not a stale reference—anchor the preference update.