Why On-Policy Distillation Works Even When the Teacher Is Wrong Half the Time

A close reading of Does On-Policy Distillation Really Distill? From Noisy Teacher to Self-Improvement by Yi Ding and Ruqi Zhang.

On-policy distillation is supposed to be the well-behaved option. You let the student generate its own trajectories, you have a bigger teacher score every token, and instead of one sparse reward at the end of a rollout you get dense supervision everywhere. That is the pitch, and it is a good pitch.

Ding and Zhang measured how good that dense supervision actually is. On student-sampled trajectories, the sign of the teacher's token-level advantage disagrees with ground-truth correctness 30.6% of the time for a 4B teacher, 34.7% for a 30B-A3B teacher, and 50.6% for a 235B-A22B teacher. The biggest teacher is at coin-flip agreement with the truth.

Then they checked whether it mattered. Train on only the noisy trajectories, train on only the clean ones, or train normally, and the student converges to comparable performance in a comparable number of gradient steps.

That is the interesting part. Not that the supervision is noisy, but that the student is indifferent to it. If the signal can be half wrong and produce the same result, the signal is not what is doing the work.

What the advantage actually is

Start with the objective, because the whole result falls out of it. On-policy distillation minimises the reverse KL between student and teacher over trajectories the student sampled itself. Written as a policy gradient, each token carries an advantage:

Ai=logโกฯ€t(yiโˆฃx,y<i)ฯ€s(yiโˆฃx,y<i)

Look at what that quantity is. It is positive when the teacher assigns more probability mass to the sampled token than the student did, and negative when it assigns less. It is a measure of disagreement in confidence. There is nothing in it that knows whether the trajectory ended in a correct answer.

Most of the time that is a reasonable proxy. A stronger model probably does put more mass on better continuations. But the proxy breaks in a specific and predictable place.

What the on-policy distillation advantage actually measures Two token positions compared. Where the student is unsure the teacher-student log ratio is informative. At the answer token the student has committed, so the ratio is pinned negative whatever the teacher believes. The OPD advantage measures disagreement in confidence, not correctness Ai = log( ฯ€t(yi) / ฯ€s(yi) ) positive when the teacher likes the sampled token more than the student did Mid-trajectory: the student is unsure student ฯ€s 0.35 teacher ฯ€t 0.55 sampled alt alt Ai = log(0.55/0.35) = +0.45 informative Answer token: the student has committed student ฯ€s 0.97 teacher ฯ€t 0.60 boxed answer alt log(0.60/0.97) = -0.48 pinned Once ฯ€s is close to 1 the ratio ฯ€t / ฯ€s cannot rise far above 1, so the advantage at the answer position is negative whether the answer is right or wrong. Measured on the 235B-A22B teacher: 97.8% of correct answers and 96.6% of incorrect answers get a negative advantage. Bar values are illustrative. The two percentages are from arXiv:2608.31046 Section 2.2.
Figure 1. The same quantity behaves differently depending on how confident the student already is. Bar values are illustrative; the two percentages are measured in Section 2.2 of the paper. Figure mine.

Consider the token inside \boxed{}. By the time the student emits it, it has already done the reasoning and committed to an answer, so ฯ€s for that token is close to 1. The ratio ฯ€t/ฯ€s is then bounded above by roughly 1/ฯ€s, which is barely above 1. Whatever the teacher believes about the answer, the log ratio at a position where the student is already certain is pinned near zero or below it.

The paper measures exactly this for the 235B-A22B teacher: 97.8% of \boxed{} answer tokens get a negative advantage when the answer is correct, and 96.6% get one when it is wrong.

The teacher is a below-chance judge of its student's answers

Those two numbers are worth pushing on, and this next bit is my arithmetic rather than the paper's.

Treat the sign of the advantage on the answer token as a prediction: positive means "this trajectory is correct". Sensitivity is 2.2%. Specificity is 96.6%. Balanced accuracy is (2.2+96.6)/2=49.4%, which is a shade under a coin flip.

Worse, the sign points the wrong way. A positive signal appears on 3.4% of incorrect trajectories and only 2.2% of correct ones. At the single position in the entire rollout that carries the answer, a vote of confidence from the teacher is very slightly evidence that the answer is wrong.

The teacher's answer-token signal read as a correctness classifier For the 235B-A22B teacher, 97.8 percent of correct trajectories and 96.6 percent of incorrect trajectories get a negative advantage on the boxed answer token. Read as a classifier this gives balanced accuracy of 49.4 percent, and a positive signal is slightly more common on incorrect answers. Sign of the teacher advantage on the boxed answer token, 235B-A22B teacher Share of trajectories receiving a NEGATIVE advantage at the answer position correct answers 97.8% negative 2.2% positive incorrect answers 96.6% negative 3.4% positive 0% 100% Source: arXiv:2608.31046, Section 2.2. Bars are to scale. OUR CALCULATION Read the sign as a prediction of correctness Rate of a POSITIVE signal, by actual outcome (axis 0 to 5%) 0% 1% 2% 3% 4% 5% correct 2.2% incorrect 3.4% Balanced accuracy 49.4% (2.2 + 96.6) / 2 Chance is 50.0%, and the sign points the wrong way.
Figure 2. Top bars are the paper's measurement. The lower panel is my derivation from those two percentages. Figure mine.

This also explains why the noise rate climbs with teacher size, which otherwise looks backwards. The teacher is scoring trajectories that are off-policy for it, because the student wrote them. A more capable teacher has a sharper and more idiosyncratic distribution, so its disagreement with the student's sampled tokens goes up, not down. Capability and agreement are different properties, and this objective only ever reads the second one.

Most tokens carry nothing at all

The other half of the diagnosis is about coverage rather than correctness. During on-policy distillation, 29.2% of tokens have exactly zero advantage and 51.7% have an advantage smaller than 1e-4 in magnitude. Half the supervision is numerically absent.

The paper also shows the converse: training only on the tokens where the student is most confident yields limited improvement, because those are precisely the tokens where the log ratio has no room to say anything. See Figure 3 in the paper, which is worth opening.

So the picture is a signal that is missing on half the tokens, is uninformative wherever the student is confident, and disagrees with the truth up to half the time where it does fire. And yet the training works.

Delete the teacher and see what is left

This is the experiment that turns an observation into a claim about mechanism. Replace the entire teacher-derived advantage with a single fixed negative number, applied to low-probability tokens, and the student improves about as much as it does under real on-policy distillation. Their Figure 4 is the load-bearing evidence.

A constant. No teacher forward pass, no distribution to compare against, no supervision of any kind. The only information left in the update is which of the student's own tokens were improbable, and that turns out to be most of what on-policy distillation was buying.

From there the method almost writes itself. OPSA, On-Policy Self-Adaptation, takes the lowest 20% of tokens by log probability and assigns each a negative advantage scaled by the entropy at that position:

ri=2(Hiโˆ’Hmin)Hmaxโˆ’Hminโˆ’1 Adyn=Afixโˆ’14ฮดri

With Afix=โˆ’3/4 and ฮด=1 this reduces to

Adyn=โˆ’12โˆ’Hiโˆ’Hmin2(Hmaxโˆ’Hmin)

which runs from โˆ’1/2 at the lowest-entropy positions to โˆ’1 at the highest. Every advantage is negative. The method never tells the model what it should have said. It only pushes down tail tokens, and it pushes hardest where the model was least sure.

One small thing that made the design click for me: โˆ’3/4 is exactly the midpoint of the [โˆ’1,โˆ’1/2] range. The fixed-advantage ablation from the previous section is the entropy-averaged version of the adaptive rule, which is why it worked as well as it did.

Training uses DAPO-17k questions only, with no answers and no labels. There is no teacher, no verifiable reward and no reference answer anywhere in the loop.

The number in the abstract, and the number that calibrates it

The headline is that OPSA takes Qwen3-1.7B from 13.44 to 48.85 Avg@32 on AIME24, a gain of 35.41 points, and beats on-policy distillation by 16.77. Both are accurate against their Table 3, and worth pairing with a third: measured against GRPO, the strongest trained baseline in that table at 33.96, the margin is 14.89.

Here is the comparison I could not stop thinking about, and it is one the paper prints the ingredients for without drawing. Qwen3-1.7B ships with a thinking mode. Averaged across AIME24, AIME25 and HMMT25:

Qwen3-1.7B settingAvg@32Pass@32
base9.6231.11
base + OPSA35.8365.56
Thinking mode35.2471.11
Thinking mode + OPSA40.7172.22

35.83 against 35.24. Per benchmark the agreement is just as close: 48.85 against 46.56 on AIME24, 35.31 against 36.25 on AIME25, 23.33 against 22.92 on HMMT25.

OPSA on the base model against the same model's own thinking mode Grouped bars for Qwen3-1.7B on AIME24, AIME25 and HMMT25. On Avg@32 the base model plus OPSA lands almost exactly on the model's built-in thinking mode. On Pass@32 thinking mode is still ahead. Qwen3-1.7B: label-free OPSA training against the model's built-in thinking mode Qwen3-1.7B + OPSA Thinking mode Thinking mode + OPSA Avg@32 (percent) 0 20 40 60 AIME24 AIME25 HMMT25 Pass@32 (percent) 0 25 50 75 100 AIME24 AIME25 HMMT25 Averaged over the three benchmarks, base + OPSA scores 35.83 Avg@32 and thinking mode scores 35.24. A gap of 0.59 points. On Pass@32 they separate: 65.56 against 71.11. Applied on top of thinking mode, OPSA adds 5.47 Avg@32 and 1.11 Pass@32. Data: Table 3, arXiv:2608.31046, Ding and Zhang. Both rows are the paper's; placing them side by side is ours. Axes start at zero.
Figure 3. Both rows are the paper's. Putting them next to each other is mine. Axes start at zero.

A label-free training run, with no teacher and no rewards, lands a non-thinking model approximately where the same model's own thinking mode already was. Read one way that is deflationary. Read the other way it is the most interesting thing in the paper, because it says the capability was already in the weights and the entire job of training was changing which tokens get sampled.

The Pass@32 column is where the two stop agreeing: 65.56 against 71.11. And applied on top of thinking mode, OPSA adds only 5.47 Avg@32 and 1.11 Pass@32. The authors say the same thing plainly in their limitations, that OPSA "primarily operates by redistributing the policy's existing probability mass" and may not expand the exploration frontier. I would only add that this framing deserves to sit next to the headline rather than in an appendix.

The saving is memory, not step time

Their overhead table gives OPSA a 46.3s step against 61.2s for on-policy distillation and 186.2s for GRPO. A 24% cut over OPD is nice but it undersells the change.

My estimate, not theirs: on-policy distillation with the 235B-A22B teacher has to keep that teacher resident and run a forward pass through it every step. At BF16 that is about 235ร—109ร—2bytes=470GB of weights before activations or KV cache, so roughly six 80 GB accelerators doing nothing but being the teacher. OPSA needs zero of them.

If you post-train on a small cluster, that is not a speedup, it is the difference between an experiment you can run and one you cannot.

Is it just longer outputs?

This was my first objection. OPSA generates 23,205 tokens per AIME24 problem against 4,457 for the base model and 15,286 for on-policy distillation, and inference time goes from 1.78s to 6.58s. Longer chains score better on competition maths, so some of the gain could be bought rather than learned.

They ran the control. Forcing GRPO and OPD out to comparable lengths by injecting "wait" makes both slightly worse, not better: GRPO drops from 33.96 to 32.81 at 23,261 tokens, OPD from 32.08 to 31.67 at 23,472 tokens, against OPSA's 48.85 at 23,205. Length alone does not buy the result.

My one reservation, and it is a reservation about the control rather than the finding: injecting "wait" forces length onto a model that was never trained to use it, which is not the same experiment as training a baseline to produce longer trajectories. It rules out the cheapest explanation, not every version of it.

What to take away

The paper: arXiv:2608.31046, Yi Ding and Ruqi Zhang, Does On-Policy Distillation Really Distill? From Noisy Teacher to Self-Improvement, 31 August 2026.
Questions? @Asg_Wolverine