Introducing Ballade-1

We post-trained Qwen 3.8 Max on 1,000 verifiable weight-editing tasks and benchmarked its ability to improve Gemma 3 4B through direct weight updates.

Ballade-1 is Qwen 3.8 Max post-trained to edit another model’s weights. Given a target model’s transcripts and its verifier’s feedback, it proposes a direct weight update, and it is rewarded only if the updated target does better on instances it has not seen. Editing Gemma 3 4B on IWIBench, it scores 0.33, up from about 0.01 for Qwen 3.8 Max before post-training. That is more than a 20× improvement from a very low base, and second only to GPT-6.1 Sol.

IWIBench score, editing Gemma 3 4B (higher is better) 0.0 0.1 0.2 0.3 0.4 0.5 GPT-6.1 Sol: 0.4250GPT-6.1 Sol0.43 Ballade-1: 0.330 (mean of 3 seeds; range 0.312–0.348)Ballade-10.33 GPT-6.1 Terra: 0.2928GPT-6.1 Terra0.29 GPT-5.6 Terra: 0.2414GPT-5.6 Terra0.24 GPT-5.6 Sol: 0.2148GPT-5.6 Sol0.21 Nemotron 3 Ultra: 0.0548Nemotron 3 Ultra0.05 DeepSeek V4.1 Flash: 0.0464DeepSeek V4.1 Flash0.05 GLM 5.3: 0.0135GLM 5.30.01 Qwen 3.8 Max (base, before post-training): 0.01Qwen 3.8 Max (base)0.01
IWIBench scores for weight editors applied to Gemma 3 4B. Ballade-1 is Qwen 3.8 Max after post-training on 1,000 verifiable weight-editing tasks; Qwen 3.8 Max (base) is the same model before post-training. Ballade-1 is the mean of three independent training seeds (0.312, 0.330, 0.348); the whisker shows their range. Hover a bar for the exact score.

The rest of this report covers how those 1,000 tasks are built and how each proposed update is scored.

The task

Ballade-1’s environment is a target model plus an ordinary RL environment. Its action is a weight update to the target. One episode:

  1. Freeze a target checkpoint θ (here, Gemma 3 4B) and run it on instances from the experience pool.
  2. Give the updater the target’s transcripts, answers, and verifier feedback.
  3. Sample G candidate updates, all starting from θ.
  4. Apply each update Δθi to an isolated copy of the target.
  5. Evaluate the original and every copy on the same held-out instances, with identical decoding and rollout budgets.
  6. Check for regressions on behavior the target already gets right.
  7. Score each candidate and update the updater with GRPO.

The target is never trained with RL. The environment’s verifier checks task success; the outer reward checks whether the update made success more likely.

What Ballade-1 edits

Ballade-1 does not write out new weights. It writes a small patch: a list of operations over rows of Gemma’s tied token-embedding/output matrix, which a harness applies deterministically to an isolated copy of the target. There is no backpropagation and no optimizer step on the target.

Editable locationGemma’s tied token-embedding/output matrix
OperationsCopy, scale, and interpolate existing token rows
Maximum patch32 modified rows; 256 KiB serialized
Updater outputTensor identifiers, row indices, operation names, coefficients
Target optimizationNone: no backpropagation or optimizer steps
Patch executionDeterministic tensor operations in an isolated target instance

Because the matrix is tied, one row edit changes both how the target reads a token and how likely it is to emit it. The narrow action space is deliberate: every patch is small, inspectable, and reversible.

Where the tasks come from

We convert existing open-source RL environments with programmatic verifiers: unit tests for code, exact-answer checkers for math and extraction, success conditions in simulators. An environment qualifies if its verifier is deterministic, its rollouts are cheap enough to repeat many times per episode, and it has enough instances to split into four disjoint pools. Ballade-1 was trained on 1,000 such tasks.

PoolSeen by the updaterUsed for
ExperienceYesThe transcripts and feedback the updater learns from
Reward evaluationNoBefore-and-after success rates that define the reward
RegressionNoInstances the target already solves, plus unrelated capability checks
Locked benchmarkNever, in any episodeFinal reporting only

Rewarding on instances the updater has seen would pay it to memorize answers into the weights. Scoring on unseen instances pays only for changing how the target solves the task. The locked benchmark never feeds the reward, so the scores we report are not ones we optimized.

Beyond the pool split:

  • Training episodes exclude benchmark prompts, answers, parameter seeds, and reference editing traces.
  • A separate set of 200 development tasks selects configurations and checkpoints.
  • The final benchmark is run only after those choices are frozen.

The updater’s reward

Let JE(θ) be the target’s expected verified reward in environment E, estimated on the reward-evaluation pool. The base reward for update Δθi is:

Rupdater,i = JE(θ + Δθi) − JE(θ) − λ · Regressioni − μ · Costi

Both success rates come from the same instances with the same rollout budget, so their sampling noise is correlated and largely cancels in the difference. Regression is lost behavior on the regression pool; cost is the compute to produce and evaluate the edit.

A raw difference asks the same absolute gain of a weak target and a strong one: 50% → 60% pays ten times more than 95% → 96%. As targets improve, the raw signal shrinks toward zero.

Improvement as errors removed

So we measure the fraction of remaining errors an update removes, with pb and pa the success rates before and after:

g = (pa − pb) / (1 − pb)

50% → 60%, 80% → 84%, and 95% → 96% each remove 20% of the remaining errors, and score the same.

Absolute gain required to remove 20% of remaining errors 0 pp 4 pp 8 pp 12 pp 40% 50% 60% 70% 80% 90% 100% Success rate before the update (pb) Required gain, percentage points From 50%, an update must gain 10 pp 50% → 60%: +10 pp From 80%, an update must gain 4 pp 80% → 84%: +4 pp From 95%, an update must gain 1 pp 95% → 96%: +1 pp
Absolute gain needed to remove 20% of remaining errors, by starting success rate. Illustrative, not measured.

The logarithmic reward

For training we use the log of the error ratio:

Rgain = log( (1 − pb) / (1 − pa) ) = −log(1 − g)

It is zero for no change, positive for improvement, and negative for degradation. Unlike g, it adds across updates: halving the remaining errors twice earns log 4, the same as removing 75% in one step, so splitting or bundling edits earns nothing extra.

Requiring an update to remove at least a fraction q of remaining errors becomes a threshold on the reward:

Rgain ≥ −log(1 − q)  ⇔  pa − pb ≥ q · (1 − pb)

For q = 20% that is Rgain ≥ 0.223. The bar depends on the target’s measured performance, not on how many attempts have failed.

Success rate if every accepted update exactly meets the threshold 40% 60% 80% 100% 0 1 2 3 4 5 6 7 8 Accepted updates Target success rate After 0 accepted updates: 50.0% 50% After 1 accepted updates: 60.0% 60% After 2 accepted updates: 68.0% 68% After 3 accepted updates: 74.4% 74.4% After 4 accepted updates: 79.5% After 5 accepted updates: 83.6% After 6 accepted updates: 86.9% After 7 accepted updates: 89.5% After 8 accepted updates: 91.6% 91.6%
Updates that each remove exactly 20% of remaining errors, starting from 50%. Each step is smaller in absolute terms and identical in reward. Illustrative, not a learning curve.

Training reward vs. promotion

Training uses a continuous, clipped signal:

Rupdater = clip(Rgain, −M, M) − λ · regression − μ · normalized cost

Promotion is a separate gate. An update is promoted only if:

  • it clears the threshold q, with a confidence interval rather than a point estimate;
  • retention on the regression pool stays above a fixed floor;
  • override and safety checks pass;
  • it stays within its compute budget.

An update that removes 15% of errors fails a 20% gate but still beats one that removes 5%, and the training reward reflects that. Zeroing sub-threshold updates would throw away most of the signal early in training.

Turning a task into an editing task

Every training task starts life as an ordinary RL task. Take a coding benchmark: the policy is asked to solve the problem, and its reward is the score from the unit tests.

We keep the task and the tests, and change who acts and what is rewarded. Ballade-1 is not asked to solve the coding problem. It is asked to patch the target model so that the target solves it. The unit tests still run, but on the target, before and after the patch, and the reward is how much the patch improved the target’s score.

Original taskAs a Ballade-1 task
Who actsThe policy modelBallade-1
ActionWrite a solutionWrite a weight patch for the target
VerifierUnit tests on the solutionThe same unit tests, run on the target before and after the patch
RewardTest scoreImprovement in the target’s test score on held-out problems (Rupdater above)

Math, extraction, and simulator tasks convert the same way: the verifier stays, and it now grades the patched target instead of an answer.

For each task, Ballade-1 proposes G = 8 patches from the same target checkpoint and the same trajectories. Each patch gets its improvement score, and GRPO trains Ballade-1 toward the patches that improved the target more than the others in its group:

Ai = ( Ri − mean(R1..G) ) / std(R1..G)

Because all eight patches start from the same target and are graded on the same problems, how hard the task is and how good the target already was cancel out. What is left is which patch helped most.

Training setup

We first fine-tune the updater on 2,000 successful edit traces derived from the training tasks, so that GRPO starts from candidates that differ. The updater is trained with a rank-32 LoRA throughout; the target is only ever patched.

Training tasks1,000 (plus 200 separate development tasks)
SFT bootstrap2,000 successful edit traces
Updater trainingRank-32 LoRA, SFT then GRPO
GRPOG = 8; 8 tasks per step; 500 steps; learning rate 10⁻⁵; KL coefficient 0.01
Per candidateUp to 4,096 generated tokens; up to 16 exploratory target queries; 32 hidden reward queries; 64 regression controls
Rewardλ = 2.0, μ = 0.05, M = 2.0
Seeds3 independent training runs

That is 500 × 8 × 8 = 32,000 candidate edits per seed, each scored on held-out queries.

Mean log-gain reward during GRPO 0.00 0.10 0.20 0.30 0 100 200 300 400 500 GRPO step (after SFT) Mean Rgain Step 0: mean log-gain reward 0.06, control retention 99.7% Step 100: mean log-gain reward 0.12, control retention 99.5% Step 200: mean log-gain reward 0.19, control retention 99.4% Step 300: mean log-gain reward 0.23, control retention 99.3% Step 400: mean log-gain reward 0.25, control retention 99.2% Step 500: mean log-gain reward 0.27, control retention 99.2% 0.06 0.27
Mean log-gain reward on training tasks, averaged over seeds. Retention on originally correct controls moved from 99.7% to 99.2% over the same 500 steps. Hover a point for both values.

A worked example

One held-out task, before and after a single Ballade-1 patch:

BeforeAfter
Correct on 40 held-out queries8/4028/40
Success rate20%70%
Originally correct controls retained—256/256
g = (0.70 − 0.20) / (1 − 0.20) = 0.625    Rgain = log(0.80 / 0.30) ≈ 0.981

The patch removed 62.5% of the target’s remaining errors on unseen queries, well past a 20% gate (Rgain ≥ 0.223), and lost nothing on the controls, so the regression penalty is zero.

Limitations

  • Noise near the ceiling. As pa approaches 1, a one-instance difference swings the log ratio. We clip the training reward and gate promotion on confidence intervals.
  • Evaluation size. Small pools cannot tell a 20% error reduction from noise, so pool sizes are set per environment.
  • Flat groups. If every candidate scores the same, every advantage is zero. Easier tasks and demonstration edits bootstrap the updater until candidates start to differ.

Which reward to train on

We trained the updater on each candidate reward under identical budgets and compared IWIBench scores:

Training rewardIWIBench
Raw success-rate difference0.300
Fraction of remaining errors removed, g0.325
Log error ratio (Ballade-1)0.330

Normalizing by remaining errors accounts for most of the gain over the raw difference; the log form adds a little more.

Discuss Ballade-1