fig:longrun: rebuild from job84 route2 + job97 fixed vanilla (no collapse)

Old figure paired route2 (job 84) with job 85 vanilla, whose step-88
'collapse' was a hot-preset artifact. Job 97 re-ran vanilla-200 gentle and
stays coherent. New pairing: route2 holds deploy hack at 0; vanilla rises to
~0.32 (onset ~step 40); route2 solve ends higher (0.61 vs 0.47). Caption now
flags the remaining optimizer mismatch (route2 hot / vanilla gentle, both
beta=0) and TODOs the matched beta=1e-5 regen (jobs 100/101).

Co-Authored-By: Claudypoo <288921227+claudypoo@users.noreply.github.com>
This commit is contained in:
wassname
2026-06-05 02:18:34 +00:00
co-authored by Claudypoo
parent ea0293083c
commit 0645ae2dd2
2 changed files with 428 additions and 369 deletions
+27 -28
View File
@@ -373,39 +373,38 @@ enough to route one as it forms.
\subsection{Long-run convergence}
The 60-step gap persists to convergence: at 200 steps route's deploy hack stays
at zero while vanilla acquires the hack and then collapses
(Figure~\ref{fig:longrun}). \TODO{prose -- author. FIXME: the "collapses" framing
is preset-induced (job 85 hot preset); job 97 shows vanilla stays coherent and
keeps hacking under a sane preset. Rewrite to "vanilla rises, route2 stays at 0"
once the matched beta=1e-5 figure (jobs 100/101) lands -- see figure provenance.}
pinned at zero while vanilla acquires the hack and rises to ${\sim}0.32$
(Figure~\ref{fig:longrun}), with route's solve rate ending higher
(${\sim}0.61$ vs ${\sim}0.47$). \TODO{prose -- author.}
% --- Figure: 200-step -------------------------------------------------------
% Provenance: route2 = pueue job 84 (out/runs/20260602T080804_..._route2_converge200_s41);
% vanilla = job 85 (out/runs/20260602T163201_..._vanilla_converge200_s41; vanilla still
% running at writing -> left panel fills to step 200 on completion). Data source committed
% at out/figs/dyn_longrun_200.csv; regen: uv run python scripts/plot_dynamics.py <both logs>.
% FIXME (2026-06-04, #184/#187): the vanilla "collapse around step 88" below is a
% PRESET artifact, not a property of vanilla GRPO. Job 85 used the hot preset
% (lr=3e-3, adam beta1=0.5, beta=0). Job 97 re-ran vanilla-200 at a gentle preset
% (lr=1e-3, adam 0.9/0.99, beta=0) and it stayed coherent: lp_s in [-0.47,-0.29]
% through step 200, deploy hack 0.375 (run_tests 0.875, file_marker 0.53), no
% collapse. Also job 84 (route2) and job 85 (vanilla) use mismatched optimizers,
% so this overlay is apples-to-oranges. Regenerate this figure from the matched
% beta=1e-5 pair (jobs 100/101, _none200_kl5 / _route2200_kl5) when they land, and
% drop the "collapses" claim -- the honest contrast is route2 holds deploy hack ~0
% while vanilla RISES (not collapses) under a sane preset.
% Provenance: route2 = pueue job 84 (out/runs/20260602T080804_..._route2_converge200_s41,
% deploy hack 0.000 solve 0.609); vanilla = job 97 (out/runs/20260603T104901_..._vanilla200_gentle_s41,
% deploy hack 0.375 solve 0.484, coherent through step 200 -- no collapse). Data source
% committed at out/figs/dyn_longrun_200.csv; regen: uv run python scripts/plot_dynamics.py
% logs/20260602T080804_..._route2_converge200_s41.log logs/20260603T104901_..._vanilla200_gentle_s41.log
% --out out/figs/dyn_longrun_200.png
% CAVEAT (2026-06-05, #184): optimizer mismatch. route2 (job 84) ran the FastConfig
% default hot preset (lr=3e-3, adam beta1=0.5, beta2=0.9); vanilla (job 97) ran a
% gentle preset (lr=1e-3, adam 0.9/0.99). Both beta=0 (no KL). This cuts in our
% favour -- route2 holds hack at 0 even under the more aggressive optimizer that
% drives vanilla up -- but it is not yet apples-to-apples. TODO: regenerate from
% the matched beta=1e-5 pair (jobs 100/101, _none200_kl5 / _route2200_kl5) when
% they land; expect the same qualitative result. This replaces the earlier job-85
% hot-preset vanilla, whose step-88 "collapse" was a preset artifact (job 97 stays
% coherent: lp_s in [-0.47,-0.29] through step 200), not a property of vanilla GRPO.
\begin{figure}[t]
\centering
\includegraphics[width=0.95\linewidth]{../../out/figs/dyn_longrun_200.png}
\caption{Deploy hack (red) and solve (green) over 200 GRPO steps for the same
two arms, seed 41 (deploy evaluation $n{=}64$, $T{=}0.7$, EMA-5). route (right)
holds deploy hack at $0$ for all 200 steps while solve climbs to ${\sim}0.61$
and plateaus. vanilla (left) acquires the hack (${\sim}0.55$ by step~80), then
collapses around step~88: student log-prob craters, reward falls to $0$, and the
pre-clip gradient norm spikes ${\sim}75\times$ with no KL anchor, dragging hack
and solve down together. That late descent is degeneration, not hack
suppression, so the valid comparison window is steps 0--85; within it vanilla
acquires the hack and route never does.}
\caption{Deploy hack (red) and solve (green) over 200 GRPO steps, seed 41
(deploy evaluation $n{=}64$, $T{=}0.7$, EMA-5). route (right) holds deploy hack
at $0$ for all 200 steps while solve climbs to ${\sim}0.61$ and plateaus.
vanilla (left) acquires the hack from onset near step~40 and rises to
${\sim}0.32$ by step~200, with solve plateauing lower (${\sim}0.47$). Neither
arm degenerates. Optimizer settings differ between arms (route2 ran the
aggressive default preset, vanilla a gentler one; see source comment), so this
is a directional rather than matched comparison; the matched-optimizer
regeneration is pending.}
\label{fig:longrun}
\end{figure}